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