diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /js/src/tests/ecma_5/strict/8.7.2.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
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); |