diff options
Diffstat (limited to 'js/src/tests/non262/strict/shell.js')
-rw-r--r-- | js/src/tests/non262/strict/shell.js | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/js/src/tests/non262/strict/shell.js b/js/src/tests/non262/strict/shell.js new file mode 100644 index 0000000000..9d8c8695ee --- /dev/null +++ b/js/src/tests/non262/strict/shell.js @@ -0,0 +1,65 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +(function(global) { + + /* + * Return true if both of these return true: + * - LENIENT_PRED applied to CODE + * - STRICT_PRED applied to CODE with a use strict directive added to the front + * + * Run STRICT_PRED first, for testing code that affects the global environment + * in loose mode, but fails in strict mode. + */ + global.testLenientAndStrict = function testLenientAndStrict(code, lenient_pred, strict_pred) { + return (strict_pred("'use strict'; " + code) && + lenient_pred(code)); + } + + /* + * parsesSuccessfully(CODE) returns true if CODE parses as function + * code without an error. + */ + global.parsesSuccessfully = function parsesSuccessfully(code) { + try { + Function(code); + return true; + } catch (exception) { + return false; + } + }; + + /* + * parseRaisesException(EXCEPTION)(CODE) returns true if parsing CODE + * as function code raises EXCEPTION. + */ + global.parseRaisesException = function parseRaisesException(exception) { + return function (code) { + try { + Function(code); + return false; + } catch (actual) { + return exception.prototype.isPrototypeOf(actual); + } + }; + }; + + /* + * returns(VALUE)(CODE) returns true if evaluating CODE (as eval code) + * completes normally (rather than throwing an exception), yielding a value + * strictly equal to VALUE. + */ + global.returns = function returns(value) { + return function(code) { + try { + return eval(code) === value; + } catch (exception) { + return false; + } + } + } + +})(this); |