diff --git a/js/src/tests/test262/ch13/13.2/13.2-29-s.js b/js/src/tests/test262/ch13/13.2/13.2-29-s.js --- a/js/src/tests/test262/ch13/13.2/13.2-29-s.js +++ b/js/src/tests/test262/ch13/13.2/13.2-29-s.js @@ -8,12 +8,12 @@ * @description StrictMode - property named 'caller' of function objects is not configurable * @onlyStrict */ function testcase() { function foo() {"use strict";} - return ! Object.getOwnPropertyDescriptor(foo, - "caller").configurable; + return Object.getOwnPropertyDescriptor(foo, + "caller") === undefined; } -runTestCase(testcase); \ No newline at end of file +runTestCase(testcase); diff --git a/js/src/tests/test262/ch13/13.2/13.2-30-s.js b/js/src/tests/test262/ch13/13.2/13.2-30-s.js --- a/js/src/tests/test262/ch13/13.2/13.2-30-s.js +++ b/js/src/tests/test262/ch13/13.2/13.2-30-s.js @@ -7,12 +7,12 @@ * @path ch13/13.2/13.2-30-s.js * @description StrictMode - property named 'caller' of function objects is not configurable * @onlyStrict */ function testcase() { - return ! Object.getOwnPropertyDescriptor(Function("'use strict';"), - "caller").configurable; + return Object.getOwnPropertyDescriptor(Function("'use strict';"), + "caller") === undefined; } -runTestCase(testcase); \ No newline at end of file +runTestCase(testcase); diff --git a/js/src/tests/test262/ch13/13.2/13.2-31-s.js b/js/src/tests/test262/ch13/13.2/13.2-31-s.js --- a/js/src/tests/test262/ch13/13.2/13.2-31-s.js +++ b/js/src/tests/test262/ch13/13.2/13.2-31-s.js @@ -7,12 +7,12 @@ * @path ch13/13.2/13.2-31-s.js * @description StrictMode - property named 'caller' of function objects is not configurable * @onlyStrict */ function testcase() { - return ! Object.getOwnPropertyDescriptor(new Function("'use strict';"), - "caller").configurable; + return Object.getOwnPropertyDescriptor(new Function("'use strict';"), + "caller") === undefined; } -runTestCase(testcase); \ No newline at end of file +runTestCase(testcase); diff --git a/js/src/tests/test262/ch13/13.2/13.2-32-s.js b/js/src/tests/test262/ch13/13.2/13.2-32-s.js --- a/js/src/tests/test262/ch13/13.2/13.2-32-s.js +++ b/js/src/tests/test262/ch13/13.2/13.2-32-s.js @@ -8,12 +8,12 @@ * @description StrictMode - property named 'caller' of function objects is not configurable * @onlyStrict */ function testcase() { var funcExpr = function () { "use strict";}; - return ! Object.getOwnPropertyDescriptor(funcExpr, - "caller").configurable; + return Object.getOwnPropertyDescriptor(funcExpr, + "caller") === undefined; } -runTestCase(testcase); \ No newline at end of file +runTestCase(testcase); diff --git a/js/src/tests/test262/ch13/13.2/13.2-33-s.js b/js/src/tests/test262/ch13/13.2/13.2-33-s.js --- a/js/src/tests/test262/ch13/13.2/13.2-33-s.js +++ b/js/src/tests/test262/ch13/13.2/13.2-33-s.js @@ -8,12 +8,12 @@ * @description StrictMode - property named 'arguments' of function objects is not configurable * @onlyStrict */ function testcase() { function foo() {"use strict";} - return ! Object.getOwnPropertyDescriptor(foo, - "arguments").configurable; + return Object.getOwnPropertyDescriptor(foo, + "arguments") === undefined; } -runTestCase(testcase); \ No newline at end of file +runTestCase(testcase); diff --git a/js/src/tests/test262/ch13/13.2/13.2-34-s.js b/js/src/tests/test262/ch13/13.2/13.2-34-s.js --- a/js/src/tests/test262/ch13/13.2/13.2-34-s.js +++ b/js/src/tests/test262/ch13/13.2/13.2-34-s.js @@ -7,12 +7,12 @@ * @path ch13/13.2/13.2-34-s.js * @description StrictMode - property named 'arguments' of function objects is not configurable * @onlyStrict */ function testcase() { - return ! Object.getOwnPropertyDescriptor(Function("'use strict';"), - "arguments").configurable; + return Object.getOwnPropertyDescriptor(Function("'use strict';"), + "arguments") === undefined; } -runTestCase(testcase); \ No newline at end of file +runTestCase(testcase); diff --git a/js/src/tests/test262/ch13/13.2/13.2-35-s.js b/js/src/tests/test262/ch13/13.2/13.2-35-s.js --- a/js/src/tests/test262/ch13/13.2/13.2-35-s.js +++ b/js/src/tests/test262/ch13/13.2/13.2-35-s.js @@ -7,12 +7,12 @@ * @path ch13/13.2/13.2-35-s.js * @description StrictMode - property named 'arguments' of function objects is not configurable * @onlyStrict */ function testcase() { - return ! Object.getOwnPropertyDescriptor(new Function("'use strict';"), - "arguments").configurable; + return Object.getOwnPropertyDescriptor(new Function("'use strict';"), + "arguments") === undefined; } -runTestCase(testcase); \ No newline at end of file +runTestCase(testcase); diff --git a/js/src/tests/test262/ch13/13.2/13.2-36-s.js b/js/src/tests/test262/ch13/13.2/13.2-36-s.js --- a/js/src/tests/test262/ch13/13.2/13.2-36-s.js +++ b/js/src/tests/test262/ch13/13.2/13.2-36-s.js @@ -8,12 +8,12 @@ * @description StrictMode - property named 'arguments' of function objects is not configurable * @onlyStrict */ function testcase() { var funcExpr = function () { "use strict";}; - return ! Object.getOwnPropertyDescriptor(funcExpr, - "arguments").configurable; + return Object.getOwnPropertyDescriptor(funcExpr, + "arguments") === undefined; } -runTestCase(testcase); \ No newline at end of file +runTestCase(testcase); diff --git a/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js b/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js --- a/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js +++ b/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js @@ -1,49 +1,61 @@ // Copyright 2011 Google Inc. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /** * @path ch13/13.2/S13.2.3_A1.js - * @description check that all poisoning use the [[ThrowTypeError]] + * @description check that strict mode functions/arguments have + * [[ThrowTypeError]]-like behavior * function object. * @onlyStrict */ "use strict"; -var poison = Object.getOwnPropertyDescriptor(function() {}, 'caller').get; +var poison = Object.getOwnPropertyDescriptor(Function.prototype, 'caller').get; if (typeof poison !== 'function') { $ERROR("#1: A strict function's .caller should be poisoned with a function"); } var threw = null; try { - poison(); + poison.call(function() {}); } catch (err) { threw = err; } if (!threw || !(threw instanceof TypeError)) { $ERROR("#2: Poisoned property should throw TypeError"); } +function checkNotPresent(obj, name) { + var desc = Object.getOwnPropertyDescriptor(obj, name); + if (desc !== undefined) { + $ERROR("#3: " + name + " should not appear as a descriptor"); + } +} + +var argumentsPoison = + Object.getOwnPropertyDescriptor(function() { return arguments; }(), + "callee").get; + function checkPoison(obj, name) { var desc = Object.getOwnPropertyDescriptor(obj, name); if (desc.enumerable) { $ERROR("#3: Poisoned " + name + " should not be enumerable"); } if (desc.configurable) { $ERROR("#4: Poisoned " + name + " should not be configurable"); } - if (poison !== desc.get) { + if (argumentsPoison !== desc.get) { $ERROR("#5: " + name + "'s getter not poisoned with same poison"); } - if (poison !== desc.set) { + if (argumentsPoison !== desc.set) { $ERROR("#6: " + name + "'s setter not poisoned with same poison"); } } -checkPoison(function() {}, 'caller'); -checkPoison(function() {}, 'arguments'); +checkNotPresent(function() {}, 'caller'); +checkNotPresent(function() {}, 'arguments'); checkPoison((function() { return arguments; })(), 'caller'); checkPoison((function() { return arguments; })(), 'callee'); -checkPoison((function() {}).bind(null), 'caller'); -checkPoison((function() {}).bind(null), 'arguments'); +checkNotPresent((function() {}).bind(null), 'caller'); +checkNotPresent((function() {}).bind(null), 'arguments');