| Index: mozilla-tests/shell.js
|
| ===================================================================
|
| --- mozilla-tests/shell.js (revision 43940)
|
| +++ mozilla-tests/shell.js (working copy)
|
| @@ -75,7 +75,7 @@
|
| /*
|
| * constant strings
|
| */
|
| -var GLOBAL = "[object global]";
|
| +var GLOBAL = this + '';
|
| var PASSED = " PASSED! ";
|
| var FAILED = " FAILED! ";
|
|
|
| @@ -274,6 +274,23 @@
|
| }
|
|
|
| /*
|
| + * assertEq(actual, expected)
|
| + * Throw if the two arguments are not ===
|
| + * see https://bugzilla.mozilla.org/show_bug.cgi?id=480199
|
| + */
|
| +if (typeof assertEq == 'undefined')
|
| +{
|
| + var assertEq =
|
| + function (actual, expected)
|
| + {
|
| + if (actual !== expected)
|
| + {
|
| + throw new TypeError('Assertion failed: got "' + actual + '", expected "' + expected);
|
| + }
|
| + };
|
| +}
|
| +
|
| +/*
|
| * Compare expected result to actual result, if they differ (in value and/or
|
| * type) report a failure. If description is provided, include it in the
|
| * failure report.
|
| @@ -676,13 +693,21 @@
|
|
|
| function optionsReset() {
|
|
|
| - optionsClear();
|
| + try
|
| + {
|
| + optionsClear();
|
|
|
| - // turn on initial settings
|
| - for (optionName in options.initvalues)
|
| + // turn on initial settings
|
| + for (optionName in options.initvalues)
|
| + {
|
| + options(optionName);
|
| + }
|
| + }
|
| + catch(ex)
|
| {
|
| - options(optionName);
|
| + print('optionsReset: caught ' + ex);
|
| }
|
| +
|
| }
|
|
|
| if (typeof options == 'function')
|
| @@ -693,48 +718,30 @@
|
|
|
| function getTestCaseResult(expected, actual)
|
| {
|
| - var expected_t = typeof expected;
|
| - var actual_t = typeof actual;
|
| - var passed = true;
|
| -
|
| - // because ( NaN == NaN ) always returns false, need to do
|
| - // a special compare to see if we got the right result.
|
| - if ( actual != actual )
|
| - {
|
| - if ( actual_t == "object" )
|
| - {
|
| - actual = "NaN object";
|
| - }
|
| - else
|
| - {
|
| - actual = "NaN number";
|
| - }
|
| - }
|
| - if ( expected != expected )
|
| - {
|
| - if ( expected_t == "object" )
|
| - {
|
| - expected = "NaN object";
|
| - }
|
| - else
|
| - {
|
| - expected = "NaN number";
|
| - }
|
| - }
|
| + if (typeof expected != typeof actual)
|
| + return false;
|
| + if (typeof expected != 'number')
|
| + // Note that many tests depend on the use of '==' here, not '==='.
|
| + return actual == expected;
|
|
|
| - if (expected_t != actual_t)
|
| - {
|
| - passed = false;
|
| - }
|
| - else if (expected != actual)
|
| - {
|
| - if (expected_t != 'number' || (Math.abs(actual - expected) > 1E-10))
|
| - {
|
| - passed = false;
|
| - }
|
| - }
|
| -
|
| - return passed;
|
| + // Distinguish NaN from other values. Using x != x comparisons here
|
| + // works even if tests redefine isNaN.
|
| + if (actual != actual)
|
| + return expected != expected;
|
| + if (expected != expected)
|
| + return false;
|
| +
|
| + // Tolerate a certain degree of error.
|
| + if (actual != expected)
|
| + return Math.abs(actual - expected) <= 1E-10;
|
| +
|
| + // Here would be a good place to distinguish 0 and -0, if we wanted
|
| + // to. However, doing so would introduce a number of failures in
|
| + // areas where they don't seem important. For example, the WeekDay
|
| + // function in ECMA-262 returns -0 for Sundays before the epoch, but
|
| + // the Date functions in SpiderMonkey specified in terms of WeekDay
|
| + // often don't. This seems unimportant.
|
| + return true;
|
| }
|
|
|
| if (typeof dump == 'undefined')
|
| @@ -851,6 +858,18 @@
|
|
|
| }
|
|
|
| +function jit(on)
|
| +{
|
| + if (on && !options().match(/jit/))
|
| + {
|
| + options('jit');
|
| + }
|
| + else if (!on && options().match(/jit/))
|
| + {
|
| + options('jit');
|
| + }
|
| +}
|
| +
|
| /*
|
| * Some tests need to know if we are in Rhino as opposed to SpiderMonkey
|
| */
|
|
|