18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#!/usr/bin/perl
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# The contents of this file are subject to the Netscape Public
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# License Version 1.1 (the "License"); you may not use this file
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# except in compliance with the License. You may obtain a copy of
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# the License at http://www.mozilla.org/NPL/
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Software distributed under the License is distributed on an "AS
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# implied. See the License for the specific language governing
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# rights and limitations under the License.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# The Original Code is JavaScript Core Tests.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# The Initial Developer of the Original Code is Netscape
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Communications Corporation.  Portions created by Netscape are
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Copyright (C) 1997-1999 Netscape Communications Corporation. All
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Rights Reserved.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Alternatively, the contents of this file may be used under the
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# terms of the GNU Public License (the "GPL"), in which case the
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# provisions of the GPL are applicable instead of those above.
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# If you wish to allow use of your version of this file only
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# under the terms of the GPL and not to allow others to use your
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# version of this file under the NPL, indicate your decision by
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# deleting the provisions above and replace them with the notice
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# and other provisions required by the GPL.  If you do not delete
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# the provisions above, a recipient may use your version of this
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# file under either the NPL or the GPL.
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Contributers:
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#  Robert Ginda
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Creates the meat of a test suite manager page, requites menuhead.html and menufoot.html
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# to create the complete page.  The test suite manager lets you choose a subset of tests
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# to run under the runtests2.pl script.
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectlocal $lxr_url = "http://lxr.mozilla.org/mozilla/source/js/tests/";
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectlocal $suite_path = $ARGV[0] || "./";
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectlocal $uid = 0;          # radio button unique ID
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectlocal $html = "";        # html output
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectlocal $javascript = "";  # script output
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project&main;
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprint (&scriptTag($javascript) . "\n");
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprint ($html);
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub main {
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    local $i, @suite_list;
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!($suite_path =~ /\/$/)) {
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	$suite_path = $suite_path . "/";
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    @suite_list = sort(&get_subdirs ($suite_path));
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $javascript .= "suites = new Object();\n";
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "<h3>Test Suites:</h3>\n";
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "<center>\n";
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "  <input type='button' value='Select All' " .
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      "onclick='selectAll();'> ";
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "  <input type='button' value='Select None' " .
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      "onclick='selectNone();'> ";
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    # suite menu
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "<table border='1'>\n";
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    foreach $suite (@suite_list) {
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	local @readme_text = ("No description available.");
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	if (open (README, $suite_path . $suite . "/README")) {
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	    @readme_text = <README>;
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	    close (README);
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	}
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	$html .= "<tr><td><a href='\#SUITE_$suite'>$suite</a></td>" .
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	  "<td>@readme_text</td>";
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	$html .= "<td><input type='button' value='Select All' " .
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	  "onclick='selectAll(\"$suite\");'> ";
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	$html .= "<input type='button' value='Select None' " .
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	  "onclick='selectNone(\"$suite\");'></td>";
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	$html .= "<td><input readonly name='SUMMARY_$suite'></td>";
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	$html .= "</tr>";
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "</table>\n";
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "<td><input readonly name='TOTAL'></td>";
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "</center>";
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "<dl>\n";
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    foreach $i (0 .. $#suite_list) {
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	local $prev_href = ($i > 0) ? "\#SUITE_" . $suite_list[$i - 1] : "";
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	local $next_href = ($i < $#suite_list) ? "\#SUITE_" . $suite_list[$i + 1] : "";
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	&process_suite ($suite_path, $suite_list[$i], $prev_href, $next_href);
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "</dl>\n";
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Append detail from a 'suite' directory (eg: ecma, ecma_2, js1_1, etc.), calling
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# process_test_dir for subordinate categories.
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub process_suite {
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    local ($suite_path, $suite, $prev_href, $next_href) = @_;
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    local $i, @test_dir_list;
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    # suite js object
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $javascript .= "suites[\"$suite\"] = {testDirs: {}};\n";
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    @test_dir_list = sort(&get_subdirs ($test_home . $suite));
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    # suite header
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "  <a name='SUITE_$suite'></a><hr><dt><big><big><b>$suite " .
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      "(" . ($#test_dir_list + 1) . " Sub-Categories)</b></big></big><br>\n";
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "  <input type='button' value='Select All' " .
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      "onclick='selectAll(\"$suite\");'>\n";
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "  <input type='button' value='Select None' " .
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      "onclick='selectNone(\"$suite\");'> " .
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	"[ <a href='\#top_of_page'>Top of page</a> ";
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if ($prev_href) {
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	$html .= " | <a href='$prev_href'>Previous Suite</a> ";
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if ($next_href) {
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	$html .= " | <a href='$next_href'>Next Suite</a> ";
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "]\n";
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "  <dd>\n  <dl>\n";
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    foreach $i (0 .. $#test_dir_list) {
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	local $prev_href = ($i > 0) ? "\#TESTDIR_" . $suite . $test_dir_list[$i - 1] :
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	  "";
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	local $next_href = ($i < $#test_dir_list) ?
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	  "\#TESTDIR_" . $suite . $test_dir_list[$i + 1] : "";
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	&process_test_dir ($suite_path . $suite . "/", $test_dir_list[$i], $suite,
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project			   $prev_href, $next_href);
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "  </dl>\n";
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Append detail from a test directory, calling process_test for subordinate js files
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub process_test_dir {
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    local ($test_dir_path, $test_dir, $suite, $prev_href, $next_href) = @_;
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    @test_list = sort(&get_js_files ($test_dir_path . $test_dir));
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $javascript .= "suites[\"$suite\"].testDirs[\"$test_dir\"] = {tests: {}};\n";
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "    <a name='TESTDIR_$suite$test_dir'></a>\n";
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "    <dt><big><b>$test_dir (" . ($#test_list + 1) .
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      " tests)</b></big><br>\n";
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "      <input type='button' value='Select All' " .
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      "onclick='selectAll(\"$suite\", \"$test_dir\");'>\n";
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "      <input type='button' value='Select None' " .
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      "onclick='selectNone(\"$suite\", \"$test_dir\");'> ";
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "[ <a href='\#SUITE_$suite'>Top of $suite Suite</a> ";
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if ($prev_href) {
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	$html .= "| <a href='$prev_href'>Previous Category</a> ";
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if ($next_href) {
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	$html .= " | <a href='$next_href'>Next Category</a> ";
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "]<br>\n";
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "    </dt>\n";
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "    <dl>\n";
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    foreach $test (@test_list) {
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	&process_test ($test_dir_path . $test_dir, $test);
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "    </dl>\n";
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Append detail from a single JavaScript file.
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub process_test {
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    local ($test_dir_path, $test) = @_;
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    local $title = "";
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $uid++;
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    open (TESTCASE, $test_dir_path . "/" . $test) ||
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      die ("Error opening " . $test_dir_path . "/" . $test);
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    while (<TESTCASE>) {
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	if (/.*TITLE\s+\=\s+\"(.*)\"/) {
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	    $title = $1;
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	    break;
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	}
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    close (TESTCASE);
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $javascript .= "suites[\"$suite\"].testDirs[\"$test_dir\"].tests" .
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      "[\"$test\"] = \"radio$uid\"\n";
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $html .= "      <input type='radio' value='$test' name='radio$uid' ".
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      "onclick='return onRadioClick(\"radio$uid\");'>" .
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	"<a href='$lxr_url$suite/$test_dir/$test' target='other_window'>" .
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	  "$test</a> $title<br>\n";
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub scriptTag {
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return ("<script langugage='JavaScript'>@_</script>");
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# given a directory, return an array of all subdirectories
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub get_subdirs {
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    local ($dir)  = @_;
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    local @subdirs;
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!($dir =~ /\/$/)) {
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project	$dir = $dir . "/";
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    opendir (DIR, $dir) || die ("couldn't open directory $dir: $!");
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    local @testdir_contents = readdir(DIR);
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    closedir(DIR);
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    foreach (@testdir_contents) {
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if ((-d ($dir . $_)) && ($_ ne 'CVS') && ($_ ne '.') && ($_ ne '..')) {
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            @subdirs[$#subdirs + 1] = $_;
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return @subdirs;
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# given a directory, return an array of all the js files that are in it.
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub get_js_files {
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    local ($test_subdir) = @_;
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    local @js_file_array;
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    opendir ( TEST_SUBDIR, $test_subdir) || die ("couldn't open directory " .
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project						 "$test_subdir: $!");
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    @subdir_files = readdir( TEST_SUBDIR );
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    closedir( TEST_SUBDIR );
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    foreach ( @subdir_files ) {
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if ( $_ =~ /\.js$/ ) {
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            $js_file_array[$#js_file_array+1] = $_;
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return @js_file_array;
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
262