initial import
[vuplus_webkit] / Source / JavaScriptCore / tests / mozilla / mklistpage.pl
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
39 local $lxr_url = "http://lxr.mozilla.org/mozilla/source/js/tests/";
40 local $suite_path = $ARGV[0] || "./";
41 local $uid = 0;          # radio button unique ID
42 local $html = "";        # html output
43 local $javascript = "";  # script output
44
45 &main;
46
47 print (&scriptTag($javascript) . "\n");
48 print ($html);
49
50 sub 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 #
104 sub 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 #
147 sub 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 #
184 sub 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
210 sub scriptTag {
211
212     return ("<script langugage='JavaScript'>@_</script>");
213
214 }
215
216 #
217 # given a directory, return an array of all subdirectories
218 #
219 sub 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 #
243 sub 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