<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <html> <head> <title>jsDriver.pl</title> </head> <body bgcolor="white"> <h1 align="right">jsDriver.pl</h1> <dl> <dt><b>NAME</b></dt> <dd> <b>jsDriver.pl</b> - execute JavaScript programs in various shells in batch or single mode, reporting on failures encountered. <br> <br> <dt><b>SYNOPSIS</b></dt> <dd> <table> <tr> <td align="right" valign="top"> <code> <b>jsDriver.pl</b> </code> </td> <td> <code> [-hkt] [-b BUGURL] [-c CLASSPATH] [-f OUTFILE] [-j JAVAPATH] [-l TESTLIST ...] [-L NEGLIST ...] [-p TESTPATH] [-s SHELLPATH] [-u LXRURL] [--help] [--confail] [--trace] [--classpath=CLASSPATH] [--file=OUTFILE] [--javapath=JAVAPATH] [--list=TESTLIST] [--neglist=TESTLIST] [--testpath=TESTPATH] [--shellpath=SHELLPATH] [--lxrurl=LXRURL] {-e ENGINETYPE | --engine=ENGINETYPE} </code> </td> </tr> </table> <br> <br> <dt><b>DESCRIPTION</b></dt> <dd> <b>jsDriver.pl</b> is normally used to run a series of tests against one of the JavaScript shells. These tests are expected to be laid out in a directory structure exactly three levels deep. The first level is considered the <b>root</b> of the tests, subdirectories under the <b>root</b> represent <b>Test Suites</b> and generally mark broad categories such as <i>ECMA Level 1</i> or <i>Live Connect 3</i>. Under the <b>Test Suites</b> are the <b>Test Categories</b>, which divide the <b>Test Suite</b> into smaller categories, such as <i>Execution Contexts</i> or <i>Lexical Rules</i>. Testcases are located under the <B>Test Categories</b> as normal JavaScript (*.js) files. <p> If a file named <b>shell.js</b> exists in either the <b>Test Suite</b> or the <b>Test Category</b> directory, it is loaded into the shell before the testcase. If <b>shell.js</b> exists in both directories, the version in the <b>Test Suite</b> directory is loaded <i>first</i>, giving the version associated with the <b>Test Category</b> the ability to override functions previously declared. You can use this to create functions and variables common to an entire suite or category. <p> Testcases can report failures back to <b>jsDriver.pl</b> in one of two ways. The most common is to write a line of text containing the word <code>FAILED!</code> to <b>STDOUT</b> or <b>STDERR</b>. When the engine encounters a matching line, the test is marked as failed, and any line containing <code>FAILED!</code> is displayed in the failure report. The second way a test case can report failure is to return an unexpected exit code. By default, <b>jsDriver.pl</b> expects all test cases to return exit code 0, although a test can output a line containing <code>EXPECT EXIT <i>n</i></code> where <i>n</i> is the exit code the driver should expect to see. Testcases can return a nonzero exit code by calling the shell function <code>quit(<i>n</i>)</code> where <code><i>n</i></code> is the code to exit with. The various JavaScript shells report non-zero exit codes under the following conditions: <center> <table border="1"> <tr> <th>Reason</th> <th>Exit Code</th> </tr> <tr> <td> Engine initialization failure. </td> <td> 1 </td> </tr> <tr> <td> Invalid argument on command line. </td> <td> 2 </td> </tr> <tr> <td> Runtime error (uncaught exception) encountered. </td> <td> 3 </td> </tr> <tr> <td> File argument specified on command line not found. </td> <td> 4 </td> </tr> <tr> <td> Reserved for future use. </td> <td> 5-9 </td> </tr> </table> </center> <br> <br> <dt><b>OPTIONS</b></dt> <dd> <dl> <dt><b>-b URL, --bugurl=URL</b></dt> <dd> Bugzilla URL. When a testcase writes a line in the format <code>BUGNUMBER <i>n</i></code> to <b>STDOUT</b> or <b>STDERR</b>, <b>jsDriver.pl</b> interprets <code><i>n</i></code> as a bugnumber in the <a href="http://bugzilla.mozilla.org">BugZilla</a> bug tracking system. In the event that a testcase which has specified a bugnumber fails, a hyperlink to the BugZilla database will be included in the output by prefixing the bugnumber with the URL specified here. By default, URL is assumed to be "http://bugzilla.mozilla.org/show_bug.cgi?id=". <br> <br> <a name="classpath"></a> <dt><b>-c PATH, --classpath=PATH</b></dt> <dd> Classpath to pass the the Java Virtual Machine. When running tests against the <b>Rhino</b> engine, PATH will be passed in as the value to an argument named "-classpath". If your particular JVM does not support this option, it is recommended you specify your class path via an environment setting. Refer to your JVM documentation for more details about CLASSPATH. <br> <br> <dt><b>-e TYPE ..., --engine=TYPE ...</b></dt> <dd> Required. Type of engine(s) to run the tests against. TYPE can be one or more of the following values: <center> <table border="1"> <tr> <th>TYPE</th> <th>Engine</th> </tr> <tr> <td>lcopt</td> <td>LiveConnect, optimized</td> </tr> <tr> <td>lcdebug</td> <td>LiveConnect, debug</td> </tr> <tr> <td>rhino</td> <td>Rhino compiled mode</td> </tr> <tr> <td>rhinoi</td> <td>Rhino interpreted mode</td> </tr> <tr> <td>rhinoms</td> <td>Rhino compiled mode for the Microsoft VM (jview)</td> </tr> <tr> <td>rhinomsi</td> <td>Rhino interpreted mode for the Microsoft VM (jview)</td> </tr> <tr> <td>smopt</td> <td>Spider-Monkey, optimized</td> </tr> <tr> <td>smdebug</td> <td>Spider-Monkey, debug</td> </tr> <tr> <td>xpcshell</td> <td>XPConnect shell</td> </tr> </table> </center> <br> <br> <dt><b>-f FILE, --file=FILE</b></dt> <dd> Generate html output to the HTML file named by FILE. By default, a filename will be generated using a combination of the engine type and a date/time stamp, in the format: <code>results-<i><engine-type></i>-<i><date-stamp></i>.html</code> <br> <br> <dt><b>-h, --help</b></dt> <dd> Prints usage information. <br> <br> <dt><b>-j PATH, --javapath=PATH</b></dt> <dd> Set the location of the Java Virtual Machine to use when running tests against the <b>Rhino</b> engine. This can be used to test against multiple JVMs on the same system. <br> <br> <dt><b>-k, --confail</b></dt> <dd> Log failures to the console. This will show any failures, as they occur, on <b>STDERR</b> in addition to creating the HTML results file. This can be useful for times when it may be counter-productive to load an HTML version of the results each time a test is re-run. <br> <br> <dt><b>-l FILE ..., --list=FILE ...</b></dt> <dd> Specify a list of tests to execute. FILE can be a plain text file containing a list of testcases to execute, a subdirectory in which to <a href="http://www.instantweb.com/~foldoc/foldoc.cgi?query=grovel">grovel</a> for tests, or a single testcase to execute. Any number of FILE specifiers may follow this option. The driver uses the fact that a valid testcase should be a file ending in .js to make the distinction between a file containing a list of tests and an actual testcase. <br> <br> <dt><b>-L FILE ..., --neglist=FILE ...</b></dt> <dd> Specify a list of tests to skip. FILE has the same meaning as in the <b>-l</b> option. This option is evaluated after <b>all</b> <b>-l</b> and <b>--list</b> options, allowing a user to subtract a single testcase, a directory of testcases, or a collection of unrelated testcases from the execution list. <br> <br> <dt><b>-p PATH, --testpath=PATH</b></dt> <dd> Directory holding the "Test Suite" subdirectories. By default this is ./ <br> <br> <dt><b>-s PATH, --shellpath=PATH</b></dt> <dd> Directory holding the JavaScript shell. This can be used to override the automatic shell location <b>jsDriver.pl</b> performs based on you OS and engine type. For Non <b>Rhino</b> engines, this includes the name of the executable as well as the path. In <b>Rhino</b>, this path will be appended to your <a href="#classpath">CLASSPATH</a>. For the <b>SpiderMonkey</b> shells, this value defaults to ../src/<Platform-and-buildtype-specific-directory>/[js|jsshell], for the <b>LiveConnect</b> shells, ../src/liveconnect/src/<Platform-and-buildtype-specific-directory>/lschell and for the <b>xpcshell</b> the default is the value of your <code>MOZILLA_FIVE_HOME</code> environment variable. There is no default (as it is usually not needed) for the <b>Rhino</b> shell. <br> <br> <dt><b>-t, --trace</b></dt> <dd> Trace execution of <b>jsDriver.pl</b>. This option is primarily used for debugging of the script itself, but if you are interested in seeing the actual command being run, or generally like gobs of useless information, you may find it entertaining. <br> <br> <dt><b>-u URL, --lxrurl=URL</b></dt> <dd> Failures listed in the HTML results will be hyperlinked to the lxr source available online by prefixing the test path and name with this URL. By default, URL is http://lxr.mozilla.org/mozilla/source/js/tests/ <br> <br> </dl> <dt><b>SEE ALSO</b></dt> <dd> <a href="http://lxr.mozilla.org/mozilla/source/js/tests/jsDriver.pl">jsDriver.pl</a>, <a href="http://lxr.mozilla.org/mozilla/source/js/tests/mklistpage.pl">mklistpage.pl</a>, <a href="http://www.mozilla.org/js/">http://www.mozilla.org/js/</a>, <a href="http://www.mozilla.org/js/tests/library.html">http://www.mozilla.org/js/tests/library.html</a> <br> <br> <dt><b>REQUIREMENTS</b></dt> <dd> <b>jsDriver.pl</b> requires the <a href="http://search.cpan.org/search?module=Getopt::Mixed">Getopt::Mixed</a> perl package, available from <a href="http://www.cpan.org">cpan.org</a>. <br> <br> <dt><b>EXAMPLES</b></dt> <dd> <code>perl jsDriver.pl -e smdebug -L lc*</code><br> Executes all tests EXCEPT the liveconnect tests against the SpiderMonkey debug shell, writing the results to the default result file. (NOTE: Unix shells take care of wildcard expansion, turning <code>lc*</code> into <code>lc2 lc3</code>. Under a DOS shell, you must explicitly list the directories.) <p> <code>perl jsDriver.pl -e rhino -L rhino-n.tests</code><br> Executes all tests EXCEPT those listed in the <code>rhino-n.tests</code> file. <p> <code>perl -I/home/rginda/perl/lib/ jsDriver.pl -e lcopt -l lc2 lc3 -f lcresults.html -k</code><br> Executes ONLY the tests under the <code>lc2</code> and <code>lc3</code> directories against the LiveConnect shell. Results will be written to the file <code>lcresults.html</code> <b>AND</b> the console. The <code>-I</code> option tells perl to look for modules in the <code>/home/rginda/perl/lib</code> directory (in addition to the usual places), useful if you do not have root access to install new modules on the system. </dl> <hr> Author: Robert Ginda<br> Currently maintained by <i><a href="mailto:pschwartau@netscape.com">Phil Schwartau</a> </i><br> <!-- Created: Thu Dec 2 19:08:05 PST 1999 --> </body> </html>