]> git.saurik.com Git - apple/javascriptcore.git/blame - tests/mozilla/mklistpage.pl
JavaScriptCore-521.tar.gz
[apple/javascriptcore.git] / tests / mozilla / mklistpage.pl
CommitLineData
b37bf2e1
A
1#!/usr/bin/perl
2#
3# The contents of this file are subject to the Netscape Public
4# License Version 1.1 (the "License"); you may not use this file
5# except in compliance with the License. You may obtain a copy of
6# the License at http://www.mozilla.org/NPL/
7#
8# Software distributed under the License is distributed on an "AS
9# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
10# implied. See the License for the specific language governing
11# rights and limitations under the License.
12#
13# The Original Code is JavaScript Core Tests.
14#
15# The Initial Developer of the Original Code is Netscape
16# Communications Corporation. Portions created by Netscape are
17# Copyright (C) 1997-1999 Netscape Communications Corporation. All
18# Rights Reserved.
19#
20# Alternatively, the contents of this file may be used under the
21# terms of the GNU Public License (the "GPL"), in which case the
22# provisions of the GPL are applicable instead of those above.
23# If you wish to allow use of your version of this file only
24# under the terms of the GPL and not to allow others to use your
25# version of this file under the NPL, indicate your decision by
26# deleting the provisions above and replace them with the notice
27# and other provisions required by the GPL. If you do not delete
28# the provisions above, a recipient may use your version of this
29# file under either the NPL or the GPL.
30#
31# Contributers:
32# Robert Ginda
33#
34# Creates the meat of a test suite manager page, requites menuhead.html and menufoot.html
35# to create the complete page. The test suite manager lets you choose a subset of tests
36# to run under the runtests2.pl script.
37#
38
39local $lxr_url = "http://lxr.mozilla.org/mozilla/source/js/tests/";
40local $suite_path = $ARGV[0] || "./";
41local $uid = 0; # radio button unique ID
42local $html = ""; # html output
43local $javascript = ""; # script output
44
45&main;
46
47print (&scriptTag($javascript) . "\n");
48print ($html);
49
50sub main {
51 local $i, @suite_list;
52
53 if (!($suite_path =~ /\/$/)) {
54 $suite_path = $suite_path . "/";
55 }
56
57 @suite_list = sort(&get_subdirs ($suite_path));
58
59 $javascript .= "suites = new Object();\n";
60
61 $html .= "<h3>Test Suites:</h3>\n";
62 $html .= "<center>\n";
63 $html .= " <input type='button' value='Select All' " .
64 "onclick='selectAll();'> ";
65 $html .= " <input type='button' value='Select None' " .
66 "onclick='selectNone();'> ";
67
68 # suite menu
69 $html .= "<table border='1'>\n";
70 foreach $suite (@suite_list) {
71 local @readme_text = ("No description available.");
72 if (open (README, $suite_path . $suite . "/README")) {
73 @readme_text = <README>;
74 close (README);
75 }
76 $html .= "<tr><td><a href='\#SUITE_$suite'>$suite</a></td>" .
77 "<td>@readme_text</td>";
78 $html .= "<td><input type='button' value='Select All' " .
79 "onclick='selectAll(\"$suite\");'> ";
80 $html .= "<input type='button' value='Select None' " .
81 "onclick='selectNone(\"$suite\");'></td>";
82 $html .= "<td><input readonly name='SUMMARY_$suite'></td>";
83 $html .= "</tr>";
84 }
85 $html .= "</table>\n";
86 $html .= "<td><input readonly name='TOTAL'></td>";
87 $html .= "</center>";
88 $html .= "<dl>\n";
89
90 foreach $i (0 .. $#suite_list) {
91 local $prev_href = ($i > 0) ? "\#SUITE_" . $suite_list[$i - 1] : "";
92 local $next_href = ($i < $#suite_list) ? "\#SUITE_" . $suite_list[$i + 1] : "";
93 &process_suite ($suite_path, $suite_list[$i], $prev_href, $next_href);
94 }
95
96 $html .= "</dl>\n";
97
98}
99
100#
101# Append detail from a 'suite' directory (eg: ecma, ecma_2, js1_1, etc.), calling
102# process_test_dir for subordinate categories.
103#
104sub process_suite {
105 local ($suite_path, $suite, $prev_href, $next_href) = @_;
106 local $i, @test_dir_list;
107
108 # suite js object
109 $javascript .= "suites[\"$suite\"] = {testDirs: {}};\n";
110
111 @test_dir_list = sort(&get_subdirs ($test_home . $suite));
112
113 # suite header
114 $html .= " <a name='SUITE_$suite'></a><hr><dt><big><big><b>$suite " .
115 "(" . ($#test_dir_list + 1) . " Sub-Categories)</b></big></big><br>\n";
116 $html .= " <input type='button' value='Select All' " .
117 "onclick='selectAll(\"$suite\");'>\n";
118 $html .= " <input type='button' value='Select None' " .
119 "onclick='selectNone(\"$suite\");'> " .
120 "[ <a href='\#top_of_page'>Top of page</a> ";
121 if ($prev_href) {
122 $html .= " | <a href='$prev_href'>Previous Suite</a> ";
123 }
124 if ($next_href) {
125 $html .= " | <a href='$next_href'>Next Suite</a> ";
126 }
127 $html .= "]\n";
128
129 $html .= " <dd>\n <dl>\n";
130
131 foreach $i (0 .. $#test_dir_list) {
132 local $prev_href = ($i > 0) ? "\#TESTDIR_" . $suite . $test_dir_list[$i - 1] :
133 "";
134 local $next_href = ($i < $#test_dir_list) ?
135 "\#TESTDIR_" . $suite . $test_dir_list[$i + 1] : "";
136 &process_test_dir ($suite_path . $suite . "/", $test_dir_list[$i], $suite,
137 $prev_href, $next_href);
138 }
139
140 $html .= " </dl>\n";
141
142}
143
144#
145# Append detail from a test directory, calling process_test for subordinate js files
146#
147sub process_test_dir {
148 local ($test_dir_path, $test_dir, $suite, $prev_href, $next_href) = @_;
149
150 @test_list = sort(&get_js_files ($test_dir_path . $test_dir));
151
152 $javascript .= "suites[\"$suite\"].testDirs[\"$test_dir\"] = {tests: {}};\n";
153
154 $html .= " <a name='TESTDIR_$suite$test_dir'></a>\n";
155 $html .= " <dt><big><b>$test_dir (" . ($#test_list + 1) .
156 " tests)</b></big><br>\n";
157 $html .= " <input type='button' value='Select All' " .
158 "onclick='selectAll(\"$suite\", \"$test_dir\");'>\n";
159 $html .= " <input type='button' value='Select None' " .
160 "onclick='selectNone(\"$suite\", \"$test_dir\");'> ";
161 $html .= "[ <a href='\#SUITE_$suite'>Top of $suite Suite</a> ";
162 if ($prev_href) {
163 $html .= "| <a href='$prev_href'>Previous Category</a> ";
164 }
165 if ($next_href) {
166 $html .= " | <a href='$next_href'>Next Category</a> ";
167 }
168 $html .= "]<br>\n";
169 $html .= " </dt>\n";
170
171 $html .= " <dl>\n";
172
173 foreach $test (@test_list) {
174 &process_test ($test_dir_path . $test_dir, $test);
175 }
176
177 $html .= " </dl>\n";
178}
179
180
181#
182# Append detail from a single JavaScript file.
183#
184sub process_test {
185 local ($test_dir_path, $test) = @_;
186 local $title = "";
187
188 $uid++;
189
190 open (TESTCASE, $test_dir_path . "/" . $test) ||
191 die ("Error opening " . $test_dir_path . "/" . $test);
192
193 while (<TESTCASE>) {
194 if (/.*TITLE\s+\=\s+\"(.*)\"/) {
195 $title = $1;
196 break;
197 }
198 }
199 close (TESTCASE);
200
201 $javascript .= "suites[\"$suite\"].testDirs[\"$test_dir\"].tests" .
202 "[\"$test\"] = \"radio$uid\"\n";
203 $html .= " <input type='radio' value='$test' name='radio$uid' ".
204 "onclick='return onRadioClick(\"radio$uid\");'>" .
205 "<a href='$lxr_url$suite/$test_dir/$test' target='other_window'>" .
206 "$test</a> $title<br>\n";
207
208}
209
210sub scriptTag {
211
212 return ("<script langugage='JavaScript'>@_</script>");
213
214}
215
216#
217# given a directory, return an array of all subdirectories
218#
219sub get_subdirs {
220 local ($dir) = @_;
221 local @subdirs;
222
223 if (!($dir =~ /\/$/)) {
224 $dir = $dir . "/";
225 }
226
227 opendir (DIR, $dir) || die ("couldn't open directory $dir: $!");
228 local @testdir_contents = readdir(DIR);
229 closedir(DIR);
230
231 foreach (@testdir_contents) {
232 if ((-d ($dir . $_)) && ($_ ne 'CVS') && ($_ ne '.') && ($_ ne '..')) {
233 @subdirs[$#subdirs + 1] = $_;
234 }
235 }
236
237 return @subdirs;
238}
239
240#
241# given a directory, return an array of all the js files that are in it.
242#
243sub get_js_files {
244 local ($test_subdir) = @_;
245 local @js_file_array;
246
247 opendir ( TEST_SUBDIR, $test_subdir) || die ("couldn't open directory " .
248 "$test_subdir: $!");
249 @subdir_files = readdir( TEST_SUBDIR );
250 closedir( TEST_SUBDIR );
251
252 foreach ( @subdir_files ) {
253 if ( $_ =~ /\.js$/ ) {
254 $js_file_array[$#js_file_array+1] = $_;
255 }
256 }
257
258 return @js_file_array;
259}
260
261