| 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'); |
| |