18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#!/ns/tools/bin/perl5
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# mkhtml.pl cruises through your $MOZ_SRC/mozilla/js/tests/ subdirectories,
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# and for any .js file it finds, creates an HTML file that includes:
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# $MOZ_SRC/mozilla/js/tests/$suite/shell.js, $
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# MOZ_SRC/mozilla/js/tests/$suite/browser.js,
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# and the test.js file.
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project$moz_src = $ENV{"MOZ_SRC"} ||
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    die ("You need to set your MOZ_SRC environment variable.\n");
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project$test_home = $moz_src ."/js/tests/";
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectopendir (TEST_HOME, $test_home);
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@__suites = readdir (TEST_HOME);
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclosedir TEST_HOME;
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectforeach (@__suites ) {
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if ( -d $_ && $_ !~ /\./ && $_ !~ 'CVS' ) {
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $suites[$#suites+1] = $_;
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectif ( ! $ARGV[0]  ) {
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    die ( "Specify a directory: ". join(" ", @suites) ."\n" );
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project$js_test_dir = $moz_src .  "/js/tests/" . $ARGV[0] ."/";
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprint "Generating html files for the tests in $js_test_dir\n";
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project$shell_js = $js_test_dir . "shell.js";
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project$browser_js = $js_test_dir . "browser.js";
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# cd to the test directory
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectchdir $js_test_dir ||
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    die "Couldn't chdir to js_test_dir, which is $js_test_dir\n";
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprint ( "js_test_dir is $js_test_dir\n" );
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# read the test directory
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectopendir ( JS_TEST_DIR, $js_test_dir );
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#    || die "Couldn't open js_test_dir, which is $js_test_dir\n";
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@js_test_dir_items = readdir( JS_TEST_DIR );
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   || die "Couldn't read js_test_dir, which is $js_test_dir\n";
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclosedir( JS_TEST_DIR );
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprint ("The js_test_dir_items are: " . join( ",", @js_test_dir_items ) . "\n");
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# figure out which of the items are directories
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectforeach $js_test_subdir ( @js_test_dir_items ) {
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if ( -d $js_test_subdir ) {
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $js_test_subdir = $js_test_dir ."/" . $js_test_subdir;
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        chdir $js_test_subdir
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            || die "Couldn't chdir to js_test_subdir $js_test_subdir\n";
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        print "Just chdir'd to $js_test_subdir \n";
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        opendir( JS_TEST_SUBDIR, $js_test_subdir );
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @subdir_tests = readdir( JS_TEST_SUBDIR );
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        closedir( JS_TEST_SUBDIR );
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        foreach ( @subdir_tests ) {
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            $js_test = $_;
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if ( $_ =~ /\.js$/ ) {
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                s/\.js$/\.html/;
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                print $_ ."\n";
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                open( HTML_TEST, "> $_")
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    || die "Can't open html file $test_html\n";
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                print HTML_TEST
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    '<script src=./../shell.js></script>';
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                print HTML_TEST
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    '<script src=./../browser.js></script>';
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                print HTML_TEST
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    '<script src=./' . $js_test. '></script>';
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                close HTML_TEST;
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            }
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    chdir $js_test_dir;
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
85