summaryrefslogtreecommitdiffstats
path: root/JavaScriptCore/tests/mozilla/mklistpage.pl
diff options
context:
space:
mode:
Diffstat (limited to 'JavaScriptCore/tests/mozilla/mklistpage.pl')
-rw-r--r--JavaScriptCore/tests/mozilla/mklistpage.pl261
1 files changed, 261 insertions, 0 deletions
diff --git a/JavaScriptCore/tests/mozilla/mklistpage.pl b/JavaScriptCore/tests/mozilla/mklistpage.pl
new file mode 100644
index 0000000..9479abf
--- /dev/null
+++ b/JavaScriptCore/tests/mozilla/mklistpage.pl
@@ -0,0 +1,261 @@
+#!/usr/bin/perl
+#
+# The contents of this file are subject to the Netscape Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/NPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is JavaScript Core Tests.
+#
+# The Initial Developer of the Original Code is Netscape
+# Communications Corporation. Portions created by Netscape are
+# Copyright (C) 1997-1999 Netscape Communications Corporation. All
+# Rights Reserved.
+#
+# Alternatively, the contents of this file may be used under the
+# terms of the GNU Public License (the "GPL"), in which case the
+# provisions of the GPL are applicable instead of those above.
+# If you wish to allow use of your version of this file only
+# under the terms of the GPL and not to allow others to use your
+# version of this file under the NPL, indicate your decision by
+# deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL. If you do not delete
+# the provisions above, a recipient may use your version of this
+# file under either the NPL or the GPL.
+#
+# Contributers:
+# Robert Ginda
+#
+# Creates the meat of a test suite manager page, requites menuhead.html and menufoot.html
+# to create the complete page. The test suite manager lets you choose a subset of tests
+# to run under the runtests2.pl script.
+#
+
+local $lxr_url = "http://lxr.mozilla.org/mozilla/source/js/tests/";
+local $suite_path = $ARGV[0] || "./";
+local $uid = 0; # radio button unique ID
+local $html = ""; # html output
+local $javascript = ""; # script output
+
+&main;
+
+print (&scriptTag($javascript) . "\n");
+print ($html);
+
+sub main {
+ local $i, @suite_list;
+
+ if (!($suite_path =~ /\/$/)) {
+ $suite_path = $suite_path . "/";
+ }
+
+ @suite_list = sort(&get_subdirs ($suite_path));
+
+ $javascript .= "suites = new Object();\n";
+
+ $html .= "<h3>Test Suites:</h3>\n";
+ $html .= "<center>\n";
+ $html .= " <input type='button' value='Select All' " .
+ "onclick='selectAll();'> ";
+ $html .= " <input type='button' value='Select None' " .
+ "onclick='selectNone();'> ";
+
+ # suite menu
+ $html .= "<table border='1'>\n";
+ foreach $suite (@suite_list) {
+ local @readme_text = ("No description available.");
+ if (open (README, $suite_path . $suite . "/README")) {
+ @readme_text = <README>;
+ close (README);
+ }
+ $html .= "<tr><td><a href='\#SUITE_$suite'>$suite</a></td>" .
+ "<td>@readme_text</td>";
+ $html .= "<td><input type='button' value='Select All' " .
+ "onclick='selectAll(\"$suite\");'> ";
+ $html .= "<input type='button' value='Select None' " .
+ "onclick='selectNone(\"$suite\");'></td>";
+ $html .= "<td><input readonly name='SUMMARY_$suite'></td>";
+ $html .= "</tr>";
+ }
+ $html .= "</table>\n";
+ $html .= "<td><input readonly name='TOTAL'></td>";
+ $html .= "</center>";
+ $html .= "<dl>\n";
+
+ foreach $i (0 .. $#suite_list) {
+ local $prev_href = ($i > 0) ? "\#SUITE_" . $suite_list[$i - 1] : "";
+ local $next_href = ($i < $#suite_list) ? "\#SUITE_" . $suite_list[$i + 1] : "";
+ &process_suite ($suite_path, $suite_list[$i], $prev_href, $next_href);
+ }
+
+ $html .= "</dl>\n";
+
+}
+
+#
+# Append detail from a 'suite' directory (eg: ecma, ecma_2, js1_1, etc.), calling
+# process_test_dir for subordinate categories.
+#
+sub process_suite {
+ local ($suite_path, $suite, $prev_href, $next_href) = @_;
+ local $i, @test_dir_list;
+
+ # suite js object
+ $javascript .= "suites[\"$suite\"] = {testDirs: {}};\n";
+
+ @test_dir_list = sort(&get_subdirs ($test_home . $suite));
+
+ # suite header
+ $html .= " <a name='SUITE_$suite'></a><hr><dt><big><big><b>$suite " .
+ "(" . ($#test_dir_list + 1) . " Sub-Categories)</b></big></big><br>\n";
+ $html .= " <input type='button' value='Select All' " .
+ "onclick='selectAll(\"$suite\");'>\n";
+ $html .= " <input type='button' value='Select None' " .
+ "onclick='selectNone(\"$suite\");'> " .
+ "[ <a href='\#top_of_page'>Top of page</a> ";
+ if ($prev_href) {
+ $html .= " | <a href='$prev_href'>Previous Suite</a> ";
+ }
+ if ($next_href) {
+ $html .= " | <a href='$next_href'>Next Suite</a> ";
+ }
+ $html .= "]\n";
+
+ $html .= " <dd>\n <dl>\n";
+
+ foreach $i (0 .. $#test_dir_list) {
+ local $prev_href = ($i > 0) ? "\#TESTDIR_" . $suite . $test_dir_list[$i - 1] :
+ "";
+ local $next_href = ($i < $#test_dir_list) ?
+ "\#TESTDIR_" . $suite . $test_dir_list[$i + 1] : "";
+ &process_test_dir ($suite_path . $suite . "/", $test_dir_list[$i], $suite,
+ $prev_href, $next_href);
+ }
+
+ $html .= " </dl>\n";
+
+}
+
+#
+# Append detail from a test directory, calling process_test for subordinate js files
+#
+sub process_test_dir {
+ local ($test_dir_path, $test_dir, $suite, $prev_href, $next_href) = @_;
+
+ @test_list = sort(&get_js_files ($test_dir_path . $test_dir));
+
+ $javascript .= "suites[\"$suite\"].testDirs[\"$test_dir\"] = {tests: {}};\n";
+
+ $html .= " <a name='TESTDIR_$suite$test_dir'></a>\n";
+ $html .= " <dt><big><b>$test_dir (" . ($#test_list + 1) .
+ " tests)</b></big><br>\n";
+ $html .= " <input type='button' value='Select All' " .
+ "onclick='selectAll(\"$suite\", \"$test_dir\");'>\n";
+ $html .= " <input type='button' value='Select None' " .
+ "onclick='selectNone(\"$suite\", \"$test_dir\");'> ";
+ $html .= "[ <a href='\#SUITE_$suite'>Top of $suite Suite</a> ";
+ if ($prev_href) {
+ $html .= "| <a href='$prev_href'>Previous Category</a> ";
+ }
+ if ($next_href) {
+ $html .= " | <a href='$next_href'>Next Category</a> ";
+ }
+ $html .= "]<br>\n";
+ $html .= " </dt>\n";
+
+ $html .= " <dl>\n";
+
+ foreach $test (@test_list) {
+ &process_test ($test_dir_path . $test_dir, $test);
+ }
+
+ $html .= " </dl>\n";
+}
+
+
+#
+# Append detail from a single JavaScript file.
+#
+sub process_test {
+ local ($test_dir_path, $test) = @_;
+ local $title = "";
+
+ $uid++;
+
+ open (TESTCASE, $test_dir_path . "/" . $test) ||
+ die ("Error opening " . $test_dir_path . "/" . $test);
+
+ while (<TESTCASE>) {
+ if (/.*TITLE\s+\=\s+\"(.*)\"/) {
+ $title = $1;
+ break;
+ }
+ }
+ close (TESTCASE);
+
+ $javascript .= "suites[\"$suite\"].testDirs[\"$test_dir\"].tests" .
+ "[\"$test\"] = \"radio$uid\"\n";
+ $html .= " <input type='radio' value='$test' name='radio$uid' ".
+ "onclick='return onRadioClick(\"radio$uid\");'>" .
+ "<a href='$lxr_url$suite/$test_dir/$test' target='other_window'>" .
+ "$test</a> $title<br>\n";
+
+}
+
+sub scriptTag {
+
+ return ("<script langugage='JavaScript'>@_</script>");
+
+}
+
+#
+# given a directory, return an array of all subdirectories
+#
+sub get_subdirs {
+ local ($dir) = @_;
+ local @subdirs;
+
+ if (!($dir =~ /\/$/)) {
+ $dir = $dir . "/";
+ }
+
+ opendir (DIR, $dir) || die ("couldn't open directory $dir: $!");
+ local @testdir_contents = readdir(DIR);
+ closedir(DIR);
+
+ foreach (@testdir_contents) {
+ if ((-d ($dir . $_)) && ($_ ne 'CVS') && ($_ ne '.') && ($_ ne '..')) {
+ @subdirs[$#subdirs + 1] = $_;
+ }
+ }
+
+ return @subdirs;
+}
+
+#
+# given a directory, return an array of all the js files that are in it.
+#
+sub get_js_files {
+ local ($test_subdir) = @_;
+ local @js_file_array;
+
+ opendir ( TEST_SUBDIR, $test_subdir) || die ("couldn't open directory " .
+ "$test_subdir: $!");
+ @subdir_files = readdir( TEST_SUBDIR );
+ closedir( TEST_SUBDIR );
+
+ foreach ( @subdir_files ) {
+ if ( $_ =~ /\.js$/ ) {
+ $js_file_array[$#js_file_array+1] = $_;
+ }
+ }
+
+ return @js_file_array;
+}
+
+