diff options
Diffstat (limited to 'js/src/tests/ecma_5/strict/8.7.2.js')
-rw-r--r-- | js/src/tests/ecma_5/strict/8.7.2.js | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/js/src/tests/ecma_5/strict/8.7.2.js b/js/src/tests/ecma_5/strict/8.7.2.js new file mode 100644 index 000000000..76b474cd7 --- /dev/null +++ b/js/src/tests/ecma_5/strict/8.7.2.js @@ -0,0 +1,56 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* + * These tests depend on the fact that testLenientAndStrict tries the + * strict case first; otherwise, the non-strict evaluation creates the + * variable. Ugh. Ideally, we would use evalcx, but that's not + * available in the browser. + */ + +/* Assigning to an undeclared variable should fail in strict mode. */ +assertEq(testLenientAndStrict('undeclared=1', + completesNormally, + raisesException(ReferenceError)), + true); + +/* + * Assigning to a var-declared variable should be okay in strict and + * lenient modes. + */ +assertEq(testLenientAndStrict('var var_declared; var_declared=1', + completesNormally, + completesNormally), + true); + +/* + * We mustn't report errors until the code is actually run; the variable + * could be created in the mean time. + */ +assertEq(testLenientAndStrict('undeclared_at_compiletime=1', + parsesSuccessfully, + parsesSuccessfully), + true); + +function obj() { + var o = { x: 1, y: 1 }; + Object.defineProperty(o, 'x', { writable: false }); + return o; +} + +/* Put EXPR in a strict mode code context with 'with' bindings in scope. */ +function in_strict_with(expr) { + return "with(obj()) { (function () { 'use strict'; " + expr + " })(); }"; +} + +assertEq(raisesException(TypeError)(in_strict_with('x = 2; y = 2;')), true); +assertEq(raisesException(TypeError)(in_strict_with('x++;')), true); +assertEq(raisesException(TypeError)(in_strict_with('++x;')), true); +assertEq(raisesException(TypeError)(in_strict_with('x--;')), true); +assertEq(raisesException(TypeError)(in_strict_with('--x;')), true); + +reportCompare(true, true); |