From 0ceb428ec93cda5c63f470c0f9d5552441bbc32d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bargull?= <andre.bargull@gmail.com> Date: Mon, 8 Sep 2014 21:23:39 +0200 Subject: [PATCH] Add test coverage for identifier resolution in dynamic scopes Identifier resolution in dynamic scope context is missing test coverage, resolves https://bugs.ecmascript.org/show_bug.cgi?id=1751 . --- .../expressions/assignment/S11.13.1_A5_T1.js | 30 +++++++++++++++ .../expressions/assignment/S11.13.1_A5_T2.js | 27 ++++++++++++++ .../expressions/assignment/S11.13.1_A5_T3.js | 29 +++++++++++++++ .../expressions/assignment/S11.13.1_A5_T4.js | 27 ++++++++++++++ .../expressions/assignment/S11.13.1_A5_T5.js | 29 +++++++++++++++ .../expressions/assignment/S11.13.1_A6_T1.js | 28 ++++++++++++++ .../expressions/assignment/S11.13.1_A6_T2.js | 28 ++++++++++++++ .../expressions/assignment/S11.13.1_A6_T3.js | 29 +++++++++++++++ .../compound-assignment/S11.13.2_A5.10_T1.js | 36 ++++++++++++++++++ .../compound-assignment/S11.13.2_A5.10_T2.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.10_T3.js | 37 +++++++++++++++++++ .../compound-assignment/S11.13.2_A5.10_T4.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.10_T5.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.11_T1.js | 36 ++++++++++++++++++ .../compound-assignment/S11.13.2_A5.11_T2.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.11_T3.js | 37 +++++++++++++++++++ .../compound-assignment/S11.13.2_A5.11_T4.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.11_T5.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.1_T1.js | 36 ++++++++++++++++++ .../compound-assignment/S11.13.2_A5.1_T2.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.1_T3.js | 37 +++++++++++++++++++ .../compound-assignment/S11.13.2_A5.1_T4.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.1_T5.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.2_T1.js | 36 ++++++++++++++++++ .../compound-assignment/S11.13.2_A5.2_T2.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.2_T3.js | 37 +++++++++++++++++++ .../compound-assignment/S11.13.2_A5.2_T4.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.2_T5.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.3_T1.js | 36 ++++++++++++++++++ .../compound-assignment/S11.13.2_A5.3_T2.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.3_T3.js | 37 +++++++++++++++++++ .../compound-assignment/S11.13.2_A5.3_T4.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.3_T5.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.4_T1.js | 36 ++++++++++++++++++ .../compound-assignment/S11.13.2_A5.4_T2.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.4_T3.js | 37 +++++++++++++++++++ .../compound-assignment/S11.13.2_A5.4_T4.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.4_T5.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.5_T1.js | 36 ++++++++++++++++++ .../compound-assignment/S11.13.2_A5.5_T2.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.5_T3.js | 37 +++++++++++++++++++ .../compound-assignment/S11.13.2_A5.5_T4.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.5_T5.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.6_T1.js | 36 ++++++++++++++++++ .../compound-assignment/S11.13.2_A5.6_T2.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.6_T3.js | 37 +++++++++++++++++++ .../compound-assignment/S11.13.2_A5.6_T4.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.6_T5.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.7_T1.js | 36 ++++++++++++++++++ .../compound-assignment/S11.13.2_A5.7_T2.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.7_T3.js | 37 +++++++++++++++++++ .../compound-assignment/S11.13.2_A5.7_T4.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.7_T5.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.8_T1.js | 36 ++++++++++++++++++ .../compound-assignment/S11.13.2_A5.8_T2.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.8_T3.js | 37 +++++++++++++++++++ .../compound-assignment/S11.13.2_A5.8_T4.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.8_T5.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.9_T1.js | 36 ++++++++++++++++++ .../compound-assignment/S11.13.2_A5.9_T2.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.9_T3.js | 37 +++++++++++++++++++ .../compound-assignment/S11.13.2_A5.9_T4.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A5.9_T5.js | 33 +++++++++++++++++ .../compound-assignment/S11.13.2_A6.10_T1.js | 29 +++++++++++++++ .../compound-assignment/S11.13.2_A6.11_T1.js | 29 +++++++++++++++ .../compound-assignment/S11.13.2_A6.1_T1.js | 29 +++++++++++++++ .../compound-assignment/S11.13.2_A6.2_T1.js | 29 +++++++++++++++ .../compound-assignment/S11.13.2_A6.3_T1.js | 29 +++++++++++++++ .../compound-assignment/S11.13.2_A6.4_T1.js | 29 +++++++++++++++ .../compound-assignment/S11.13.2_A6.5_T1.js | 29 +++++++++++++++ .../compound-assignment/S11.13.2_A6.6_T1.js | 29 +++++++++++++++ .../compound-assignment/S11.13.2_A6.7_T1.js | 29 +++++++++++++++ .../compound-assignment/S11.13.2_A6.8_T1.js | 29 +++++++++++++++ .../compound-assignment/S11.13.2_A6.9_T1.js | 29 +++++++++++++++ .../postfix-decrement/S11.3.2_A5_T1.js | 35 ++++++++++++++++++ .../postfix-decrement/S11.3.2_A5_T2.js | 32 ++++++++++++++++ .../postfix-decrement/S11.3.2_A5_T3.js | 36 ++++++++++++++++++ .../postfix-decrement/S11.3.2_A5_T4.js | 32 ++++++++++++++++ .../postfix-decrement/S11.3.2_A5_T5.js | 32 ++++++++++++++++ .../postfix-increment/S11.3.1_A5_T1.js | 35 ++++++++++++++++++ .../postfix-increment/S11.3.1_A5_T2.js | 32 ++++++++++++++++ .../postfix-increment/S11.3.1_A5_T3.js | 36 ++++++++++++++++++ .../postfix-increment/S11.3.1_A5_T4.js | 32 ++++++++++++++++ .../postfix-increment/S11.3.1_A5_T5.js | 32 ++++++++++++++++ .../prefix-decrement/S11.4.5_A5_T1.js | 35 ++++++++++++++++++ .../prefix-decrement/S11.4.5_A5_T2.js | 32 ++++++++++++++++ .../prefix-decrement/S11.4.5_A5_T3.js | 36 ++++++++++++++++++ .../prefix-decrement/S11.4.5_A5_T4.js | 32 ++++++++++++++++ .../prefix-decrement/S11.4.5_A5_T5.js | 32 ++++++++++++++++ .../prefix-increment/S11.4.4_A5_T1.js | 35 ++++++++++++++++++ .../prefix-increment/S11.4.4_A5_T2.js | 32 ++++++++++++++++ .../prefix-increment/S11.4.4_A5_T3.js | 36 ++++++++++++++++++ .../prefix-increment/S11.4.4_A5_T4.js | 32 ++++++++++++++++ .../prefix-increment/S11.4.4_A5_T5.js | 32 ++++++++++++++++ 94 files changed, 3106 insertions(+) create mode 100755 test/language/expressions/assignment/S11.13.1_A5_T1.js create mode 100755 test/language/expressions/assignment/S11.13.1_A5_T2.js create mode 100755 test/language/expressions/assignment/S11.13.1_A5_T3.js create mode 100755 test/language/expressions/assignment/S11.13.1_A5_T4.js create mode 100755 test/language/expressions/assignment/S11.13.1_A5_T5.js create mode 100755 test/language/expressions/assignment/S11.13.1_A6_T1.js create mode 100755 test/language/expressions/assignment/S11.13.1_A6_T2.js create mode 100755 test/language/expressions/assignment/S11.13.1_A6_T3.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.10_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.10_T2.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.10_T3.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.10_T4.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.10_T5.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.11_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.11_T2.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.11_T3.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.11_T4.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.11_T5.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.1_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.1_T2.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.1_T3.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.1_T4.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.1_T5.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.2_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.2_T2.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.2_T3.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.2_T4.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.2_T5.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.3_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.3_T2.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.3_T3.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.3_T4.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.3_T5.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.4_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.4_T2.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.4_T3.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.4_T4.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.4_T5.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.5_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.5_T2.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.5_T3.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.5_T4.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.5_T5.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.6_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.6_T2.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.6_T3.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.6_T4.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.6_T5.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.7_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.7_T2.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.7_T3.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.7_T4.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.7_T5.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.8_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.8_T2.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.8_T3.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.8_T4.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.8_T5.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.9_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.9_T2.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.9_T3.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.9_T4.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A5.9_T5.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A6.10_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A6.11_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A6.1_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A6.2_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A6.3_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A6.4_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A6.5_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A6.6_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A6.7_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A6.8_T1.js create mode 100755 test/language/expressions/compound-assignment/S11.13.2_A6.9_T1.js create mode 100755 test/language/expressions/postfix-decrement/S11.3.2_A5_T1.js create mode 100755 test/language/expressions/postfix-decrement/S11.3.2_A5_T2.js create mode 100755 test/language/expressions/postfix-decrement/S11.3.2_A5_T3.js create mode 100755 test/language/expressions/postfix-decrement/S11.3.2_A5_T4.js create mode 100755 test/language/expressions/postfix-decrement/S11.3.2_A5_T5.js create mode 100755 test/language/expressions/postfix-increment/S11.3.1_A5_T1.js create mode 100755 test/language/expressions/postfix-increment/S11.3.1_A5_T2.js create mode 100755 test/language/expressions/postfix-increment/S11.3.1_A5_T3.js create mode 100755 test/language/expressions/postfix-increment/S11.3.1_A5_T4.js create mode 100755 test/language/expressions/postfix-increment/S11.3.1_A5_T5.js create mode 100755 test/language/expressions/prefix-decrement/S11.4.5_A5_T1.js create mode 100755 test/language/expressions/prefix-decrement/S11.4.5_A5_T2.js create mode 100755 test/language/expressions/prefix-decrement/S11.4.5_A5_T3.js create mode 100755 test/language/expressions/prefix-decrement/S11.4.5_A5_T4.js create mode 100755 test/language/expressions/prefix-decrement/S11.4.5_A5_T5.js create mode 100755 test/language/expressions/prefix-increment/S11.4.4_A5_T1.js create mode 100755 test/language/expressions/prefix-increment/S11.4.4_A5_T2.js create mode 100755 test/language/expressions/prefix-increment/S11.4.4_A5_T3.js create mode 100755 test/language/expressions/prefix-increment/S11.4.4_A5_T4.js create mode 100755 test/language/expressions/prefix-increment/S11.4.4_A5_T5.js diff --git a/test/language/expressions/assignment/S11.13.1_A5_T1.js b/test/language/expressions/assignment/S11.13.1_A5_T1.js new file mode 100755 index 0000000000..9f32fe4e1f --- /dev/null +++ b/test/language/expressions/assignment/S11.13.1_A5_T1.js @@ -0,0 +1,30 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Assignment Operator calls PutValue(lref, rval) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, rval) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = {x: 1}; + + with (scope) { + x = (delete scope.x, 2); + } + + if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/assignment/S11.13.1_A5_T2.js b/test/language/expressions/assignment/S11.13.1_A5_T2.js new file mode 100755 index 0000000000..4850d96810 --- /dev/null +++ b/test/language/expressions/assignment/S11.13.1_A5_T2.js @@ -0,0 +1,27 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Assignment Operator calls PutValue(lref, rval) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, rval) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. +flags: [noStrict] +---*/ + +var x = 0; +var scope = {x: 1}; + +with (scope) { + x = (delete scope.x, 2); +} + +if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/assignment/S11.13.1_A5_T3.js b/test/language/expressions/assignment/S11.13.1_A5_T3.js new file mode 100755 index 0000000000..874579c684 --- /dev/null +++ b/test/language/expressions/assignment/S11.13.1_A5_T3.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Assignment Operator calls PutValue(lref, rval) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, rval) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. +flags: [noStrict] +---*/ + +var outerScope = {x: 0}; +var innerScope = {x: 1}; + +with (outerScope) { + with (innerScope) { + x = (delete innerScope.x, 2); + } +} + +if (innerScope.x !== 2) { + $ERROR('#1: innerScope.x === 2. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/assignment/S11.13.1_A5_T4.js b/test/language/expressions/assignment/S11.13.1_A5_T4.js new file mode 100755 index 0000000000..74924f150f --- /dev/null +++ b/test/language/expressions/assignment/S11.13.1_A5_T4.js @@ -0,0 +1,27 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Assignment Operator calls PutValue(lref, rval) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, rval) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when assignment is in strict-mode code and the + original binding is no longer present. +flags: [noStrict] +---*/ + +var scope = {x: 1}; + +with (scope) { + (function() { + "use strict"; + x = (delete scope.x, 2); + })(); +} + +if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/assignment/S11.13.1_A5_T5.js b/test/language/expressions/assignment/S11.13.1_A5_T5.js new file mode 100755 index 0000000000..b6a3393614 --- /dev/null +++ b/test/language/expressions/assignment/S11.13.1_A5_T5.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Assignment Operator calls PutValue(lref, rval) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, rval) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when assignment is in strict-mode code and the + original binding is no longer present. +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + value: 1 +}); + +(function() { + "use strict"; + x = (delete fnGlobalObject().x, 2); +})(); + +if (fnGlobalObject().x !== 2) { + $ERROR('#1: fnGlobalObject().x === 2. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/assignment/S11.13.1_A6_T1.js b/test/language/expressions/assignment/S11.13.1_A6_T1.js new file mode 100755 index 0000000000..e1fc3f7313 --- /dev/null +++ b/test/language/expressions/assignment/S11.13.1_A6_T1.js @@ -0,0 +1,28 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Assignment Operator calls PutValue(lref, rval) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, rval) uses the initially + created Reference even if a more local binding is available. +flags: [noStrict] +---*/ + +function testAssignment() { + var x = 0; + var innerX = (function() { + x = (eval("var x;"), 1); + return x; + })(); + + if (innerX !== undefined) { + $ERROR('#1: innerX === undefined. Actual: ' + (innerX)); + } + if (x !== 1) { + $ERROR('#2: x === 1. Actual: ' + (x)); + } +} +testAssignment(); diff --git a/test/language/expressions/assignment/S11.13.1_A6_T2.js b/test/language/expressions/assignment/S11.13.1_A6_T2.js new file mode 100755 index 0000000000..2c244ac6ea --- /dev/null +++ b/test/language/expressions/assignment/S11.13.1_A6_T2.js @@ -0,0 +1,28 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Assignment Operator calls PutValue(lref, rval) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, rval) uses the initially + created Reference even if a more local binding is available. +flags: [noStrict] +---*/ + +function testAssignment() { + var x = 0; + var innerX = (function() { + x = (eval("var x = 2;"), 1); + return x; + })(); + + if (innerX !== 2) { + $ERROR('#1: innerX === 2. Actual: ' + (innerX)); + } + if (x !== 1) { + $ERROR('#2: x === 1. Actual: ' + (x)); + } +} +testAssignment(); diff --git a/test/language/expressions/assignment/S11.13.1_A6_T3.js b/test/language/expressions/assignment/S11.13.1_A6_T3.js new file mode 100755 index 0000000000..3717918a48 --- /dev/null +++ b/test/language/expressions/assignment/S11.13.1_A6_T3.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Assignment Operator calls PutValue(lref, rval) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, rval) uses the initially + created Reference even if a more local binding is available. +flags: [noStrict] +---*/ + +function testAssignment() { + var x = 0; + var scope = {}; + + with (scope) { + x = (scope.x = 2, 1); + } + + if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); + } + if (x !== 1) { + $ERROR('#2: x === 1. Actual: ' + (x)); + } +} +testAssignment(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.10_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A5.10_T1.js new file mode 100755 index 0000000000..cafb27cf36 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.10_T1.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. + Check operator is "x ^= y". +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 2; + } + }; + + with (scope) { + x ^= 3; + } + + if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.10_T2.js b/test/language/expressions/compound-assignment/S11.13.2_A5.10_T2.js new file mode 100755 index 0000000000..2822744526 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.10_T2.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. + Check operator is "x ^= y". +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + x ^= 3; +} + +if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.10_T3.js b/test/language/expressions/compound-assignment/S11.13.2_A5.10_T3.js new file mode 100755 index 0000000000..7c93934362 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.10_T3.js @@ -0,0 +1,37 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. + Check operator is "x ^= y". +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 2; + } +}; + +with (outerScope) { + with (innerScope) { + x ^= 3; + } +} + +if (innerScope.x !== 1) { + $ERROR('#1: innerScope.x === 1. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.10_T4.js b/test/language/expressions/compound-assignment/S11.13.2_A5.10_T4.js new file mode 100755 index 0000000000..7860a32a19 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.10_T4.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x ^= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x ^= y". +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + (function() { + "use strict"; + x ^= 3; + })(); +} + +if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.10_T5.js b/test/language/expressions/compound-assignment/S11.13.2_A5.10_T5.js new file mode 100755 index 0000000000..2e44feabc0 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.10_T5.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x ^= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x ^= y". +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 2; + } +}); + +(function() { + "use strict"; + x ^= 3; +})(); + +if (fnGlobalObject().x !== 1) { + $ERROR('#1: fnGlobalObject().x === 1. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.11_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A5.11_T1.js new file mode 100755 index 0000000000..84bdc34fd4 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.11_T1.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. + Check operator is "x |= y". +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 2; + } + }; + + with (scope) { + x |= 4; + } + + if (scope.x !== 6) { + $ERROR('#1: scope.x === 6. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.11_T2.js b/test/language/expressions/compound-assignment/S11.13.2_A5.11_T2.js new file mode 100755 index 0000000000..2d9af20b7c --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.11_T2.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. + Check operator is "x |= y". +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + x |= 4; +} + +if (scope.x !== 6) { + $ERROR('#1: scope.x === 6. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.11_T3.js b/test/language/expressions/compound-assignment/S11.13.2_A5.11_T3.js new file mode 100755 index 0000000000..82a1831c2f --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.11_T3.js @@ -0,0 +1,37 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. + Check operator is "x |= y". +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 2; + } +}; + +with (outerScope) { + with (innerScope) { + x |= 4; + } +} + +if (innerScope.x !== 6) { + $ERROR('#1: innerScope.x === 6. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.11_T4.js b/test/language/expressions/compound-assignment/S11.13.2_A5.11_T4.js new file mode 100755 index 0000000000..25edd063f7 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.11_T4.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x |= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x |= y". +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + (function() { + "use strict"; + x |= 4; + })(); +} + +if (scope.x !== 6) { + $ERROR('#1: scope.x === 6. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.11_T5.js b/test/language/expressions/compound-assignment/S11.13.2_A5.11_T5.js new file mode 100755 index 0000000000..37ff88d695 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.11_T5.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x |= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x |= y". +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 2; + } +}); + +(function() { + "use strict"; + x |= 4; +})(); + +if (fnGlobalObject().x !== 6) { + $ERROR('#1: fnGlobalObject().x === 6. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.1_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A5.1_T1.js new file mode 100755 index 0000000000..b84848127c --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.1_T1.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. + Check operator is "x *= y". +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 2; + } + }; + + with (scope) { + x *= 3; + } + + if (scope.x !== 6) { + $ERROR('#1: scope.x === 6. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.1_T2.js b/test/language/expressions/compound-assignment/S11.13.2_A5.1_T2.js new file mode 100755 index 0000000000..dc36113412 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.1_T2.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. + Check operator is "x *= y". +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + x *= 3; +} + +if (scope.x !== 6) { + $ERROR('#1: scope.x === 6. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.1_T3.js b/test/language/expressions/compound-assignment/S11.13.2_A5.1_T3.js new file mode 100755 index 0000000000..3828108946 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.1_T3.js @@ -0,0 +1,37 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. + Check operator is "x *= y". +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 2; + } +}; + +with (outerScope) { + with (innerScope) { + x *= 3; + } +} + +if (innerScope.x !== 6) { + $ERROR('#1: innerScope.x === 6. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.1_T4.js b/test/language/expressions/compound-assignment/S11.13.2_A5.1_T4.js new file mode 100755 index 0000000000..6271b1f05d --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.1_T4.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x *= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x *= y". +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + (function() { + "use strict"; + x *= 3; + })(); +} + +if (scope.x !== 6) { + $ERROR('#1: scope.x === 6. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.1_T5.js b/test/language/expressions/compound-assignment/S11.13.2_A5.1_T5.js new file mode 100755 index 0000000000..1e78dd1a35 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.1_T5.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x *= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x *= y". +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 2; + } +}); + +(function() { + "use strict"; + x *= 3; +})(); + +if (fnGlobalObject().x !== 6) { + $ERROR('#1: fnGlobalObject().x === 6. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.2_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A5.2_T1.js new file mode 100755 index 0000000000..b0601e9a58 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.2_T1.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. + Check operator is "x /= y". +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 6; + } + }; + + with (scope) { + x /= 3; + } + + if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.2_T2.js b/test/language/expressions/compound-assignment/S11.13.2_A5.2_T2.js new file mode 100755 index 0000000000..452f06fcb1 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.2_T2.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. + Check operator is "x /= y". +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 6; + } +}; + +with (scope) { + x /= 3; +} + +if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.2_T3.js b/test/language/expressions/compound-assignment/S11.13.2_A5.2_T3.js new file mode 100755 index 0000000000..d31665890d --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.2_T3.js @@ -0,0 +1,37 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. + Check operator is "x /= y". +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 6; + } +}; + +with (outerScope) { + with (innerScope) { + x /= 3; + } +} + +if (innerScope.x !== 2) { + $ERROR('#1: innerScope.x === 2. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.2_T4.js b/test/language/expressions/compound-assignment/S11.13.2_A5.2_T4.js new file mode 100755 index 0000000000..e860d2a456 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.2_T4.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x /= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x /= y". +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 6; + } +}; + +with (scope) { + (function() { + "use strict"; + x /= 3; + })(); +} + +if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.2_T5.js b/test/language/expressions/compound-assignment/S11.13.2_A5.2_T5.js new file mode 100755 index 0000000000..8b255af103 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.2_T5.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x /= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x /= y". +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 6; + } +}); + +(function() { + "use strict"; + x /= 3; +})(); + +if (fnGlobalObject().x !== 2) { + $ERROR('#1: fnGlobalObject().x === 2. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.3_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A5.3_T1.js new file mode 100755 index 0000000000..176689d687 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.3_T1.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. + Check operator is "x %= y". +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 5; + } + }; + + with (scope) { + x %= 3; + } + + if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.3_T2.js b/test/language/expressions/compound-assignment/S11.13.2_A5.3_T2.js new file mode 100755 index 0000000000..f969c365d5 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.3_T2.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. + Check operator is "x %= y". +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 5; + } +}; + +with (scope) { + x %= 3; +} + +if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.3_T3.js b/test/language/expressions/compound-assignment/S11.13.2_A5.3_T3.js new file mode 100755 index 0000000000..153c8d5e4e --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.3_T3.js @@ -0,0 +1,37 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. + Check operator is "x %= y". +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 5; + } +}; + +with (outerScope) { + with (innerScope) { + x %= 3; + } +} + +if (innerScope.x !== 2) { + $ERROR('#1: innerScope.x === 2. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.3_T4.js b/test/language/expressions/compound-assignment/S11.13.2_A5.3_T4.js new file mode 100755 index 0000000000..f2f918bd19 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.3_T4.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x %= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x %= y". +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 5; + } +}; + +with (scope) { + (function() { + "use strict"; + x %= 3; + })(); +} + +if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.3_T5.js b/test/language/expressions/compound-assignment/S11.13.2_A5.3_T5.js new file mode 100755 index 0000000000..f7b844e8bb --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.3_T5.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x %= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x %= y". +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 5; + } +}); + +(function() { + "use strict"; + x %= 3; +})(); + +if (fnGlobalObject().x !== 2) { + $ERROR('#1: fnGlobalObject().x === 2. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.4_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A5.4_T1.js new file mode 100755 index 0000000000..844c3b07ca --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.4_T1.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. + Check operator is "x += y". +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 2; + } + }; + + with (scope) { + x += 1; + } + + if (scope.x !== 3) { + $ERROR('#1: scope.x === 3. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.4_T2.js b/test/language/expressions/compound-assignment/S11.13.2_A5.4_T2.js new file mode 100755 index 0000000000..255288bd2d --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.4_T2.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. + Check operator is "x += y". +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + x += 1; +} + +if (scope.x !== 3) { + $ERROR('#1: scope.x === 3. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.4_T3.js b/test/language/expressions/compound-assignment/S11.13.2_A5.4_T3.js new file mode 100755 index 0000000000..54755f96d4 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.4_T3.js @@ -0,0 +1,37 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. + Check operator is "x += y". +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 2; + } +}; + +with (outerScope) { + with (innerScope) { + x += 1; + } +} + +if (innerScope.x !== 3) { + $ERROR('#1: innerScope.x === 3. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.4_T4.js b/test/language/expressions/compound-assignment/S11.13.2_A5.4_T4.js new file mode 100755 index 0000000000..22165d9055 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.4_T4.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x += y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x += y". +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + (function() { + "use strict"; + x += 1; + })(); +} + +if (scope.x !== 3) { + $ERROR('#1: scope.x === 3. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.4_T5.js b/test/language/expressions/compound-assignment/S11.13.2_A5.4_T5.js new file mode 100755 index 0000000000..3002cc9ebf --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.4_T5.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x += y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x += y". +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 2; + } +}); + +(function() { + "use strict"; + x += 1; +})(); + +if (fnGlobalObject().x !== 3) { + $ERROR('#1: fnGlobalObject().x === 3. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.5_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A5.5_T1.js new file mode 100755 index 0000000000..93c7b9314d --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.5_T1.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. + Check operator is "x -= y". +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 2; + } + }; + + with (scope) { + x -= 1; + } + + if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.5_T2.js b/test/language/expressions/compound-assignment/S11.13.2_A5.5_T2.js new file mode 100755 index 0000000000..dbdccdb303 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.5_T2.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. + Check operator is "x -= y". +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + x -= 1; +} + +if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.5_T3.js b/test/language/expressions/compound-assignment/S11.13.2_A5.5_T3.js new file mode 100755 index 0000000000..de7874b087 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.5_T3.js @@ -0,0 +1,37 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. + Check operator is "x -= y". +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 2; + } +}; + +with (outerScope) { + with (innerScope) { + x -= 1; + } +} + +if (innerScope.x !== 1) { + $ERROR('#1: innerScope.x === 1. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.5_T4.js b/test/language/expressions/compound-assignment/S11.13.2_A5.5_T4.js new file mode 100755 index 0000000000..295e6e2a8d --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.5_T4.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x -= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x -= y". +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + (function() { + "use strict"; + x -= 1; + })(); +} + +if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.5_T5.js b/test/language/expressions/compound-assignment/S11.13.2_A5.5_T5.js new file mode 100755 index 0000000000..993cb3ea2e --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.5_T5.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x -= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x -= y". +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 2; + } +}); + +(function() { + "use strict"; + x -= 1; +})(); + +if (fnGlobalObject().x !== 1) { + $ERROR('#1: fnGlobalObject().x === 1. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.6_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A5.6_T1.js new file mode 100755 index 0000000000..71aeb004f0 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.6_T1.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. + Check operator is "x <<= y". +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 2; + } + }; + + with (scope) { + x <<= 3; + } + + if (scope.x !== 16) { + $ERROR('#1: scope.x === 16. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.6_T2.js b/test/language/expressions/compound-assignment/S11.13.2_A5.6_T2.js new file mode 100755 index 0000000000..fe3b3276e6 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.6_T2.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. + Check operator is "x <<= y". +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + x <<= 3; +} + +if (scope.x !== 16) { + $ERROR('#1: scope.x === 16. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.6_T3.js b/test/language/expressions/compound-assignment/S11.13.2_A5.6_T3.js new file mode 100755 index 0000000000..0e7f0d5498 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.6_T3.js @@ -0,0 +1,37 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. + Check operator is "x <<= y". +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 2; + } +}; + +with (outerScope) { + with (innerScope) { + x <<= 3; + } +} + +if (innerScope.x !== 16) { + $ERROR('#1: innerScope.x === 16. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.6_T4.js b/test/language/expressions/compound-assignment/S11.13.2_A5.6_T4.js new file mode 100755 index 0000000000..f09709a3b2 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.6_T4.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x <<= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x <<= y". +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + (function() { + "use strict"; + x <<= 3; + })(); +} + +if (scope.x !== 16) { + $ERROR('#1: scope.x === 16. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.6_T5.js b/test/language/expressions/compound-assignment/S11.13.2_A5.6_T5.js new file mode 100755 index 0000000000..4097e36d53 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.6_T5.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x <<= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x <<= y". +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 2; + } +}); + +(function() { + "use strict"; + x <<= 3; +})(); + +if (fnGlobalObject().x !== 16) { + $ERROR('#1: fnGlobalObject().x === 16. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.7_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A5.7_T1.js new file mode 100755 index 0000000000..08be817e5d --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.7_T1.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. + Check operator is "x >>= y". +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 16; + } + }; + + with (scope) { + x >>= 3; + } + + if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.7_T2.js b/test/language/expressions/compound-assignment/S11.13.2_A5.7_T2.js new file mode 100755 index 0000000000..4cdb34e475 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.7_T2.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. + Check operator is "x >>= y". +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 16; + } +}; + +with (scope) { + x >>= 3; +} + +if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.7_T3.js b/test/language/expressions/compound-assignment/S11.13.2_A5.7_T3.js new file mode 100755 index 0000000000..ae5880b76a --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.7_T3.js @@ -0,0 +1,37 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. + Check operator is "x >>= y". +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 16; + } +}; + +with (outerScope) { + with (innerScope) { + x >>= 3; + } +} + +if (innerScope.x !== 2) { + $ERROR('#1: innerScope.x === 2. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.7_T4.js b/test/language/expressions/compound-assignment/S11.13.2_A5.7_T4.js new file mode 100755 index 0000000000..3a77770860 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.7_T4.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x >>= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x >>= y". +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 16; + } +}; + +with (scope) { + (function() { + "use strict"; + x >>= 3; + })(); +} + +if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.7_T5.js b/test/language/expressions/compound-assignment/S11.13.2_A5.7_T5.js new file mode 100755 index 0000000000..400adb4543 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.7_T5.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x >>= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x >>= y". +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 16; + } +}); + +(function() { + "use strict"; + x >>= 3; +})(); + +if (fnGlobalObject().x !== 2) { + $ERROR('#1: fnGlobalObject().x === 2. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.8_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A5.8_T1.js new file mode 100755 index 0000000000..5f2f35bb0b --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.8_T1.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. + Check operator is "x >>>= y". +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 16; + } + }; + + with (scope) { + x >>>= 3; + } + + if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.8_T2.js b/test/language/expressions/compound-assignment/S11.13.2_A5.8_T2.js new file mode 100755 index 0000000000..bcc8cfec5f --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.8_T2.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. + Check operator is "x >>>= y". +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 16; + } +}; + +with (scope) { + x >>>= 3; +} + +if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.8_T3.js b/test/language/expressions/compound-assignment/S11.13.2_A5.8_T3.js new file mode 100755 index 0000000000..8dee0779c0 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.8_T3.js @@ -0,0 +1,37 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. + Check operator is "x >>>= y". +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 16; + } +}; + +with (outerScope) { + with (innerScope) { + x >>>= 3; + } +} + +if (innerScope.x !== 2) { + $ERROR('#1: innerScope.x === 2. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.8_T4.js b/test/language/expressions/compound-assignment/S11.13.2_A5.8_T4.js new file mode 100755 index 0000000000..67e2de3a63 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.8_T4.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x >>>= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x >>>= y". +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 16; + } +}; + +with (scope) { + (function() { + "use strict"; + x >>>= 3; + })(); +} + +if (scope.x !== 2) { + $ERROR('#1: scope.x === 2. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.8_T5.js b/test/language/expressions/compound-assignment/S11.13.2_A5.8_T5.js new file mode 100755 index 0000000000..3982a1d6d3 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.8_T5.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x >>>= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x >>>= y". +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 16; + } +}); + +(function() { + "use strict"; + x >>>= 3; +})(); + +if (fnGlobalObject().x !== 2) { + $ERROR('#1: fnGlobalObject().x === 2. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.9_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A5.9_T1.js new file mode 100755 index 0000000000..be6ee5e30e --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.9_T1.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. + Check operator is "x &= y". +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 5; + } + }; + + with (scope) { + x &= 3; + } + + if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.9_T2.js b/test/language/expressions/compound-assignment/S11.13.2_A5.9_T2.js new file mode 100755 index 0000000000..01f7fd6239 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.9_T2.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. + Check operator is "x &= y". +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 5; + } +}; + +with (scope) { + x &= 3; +} + +if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.9_T3.js b/test/language/expressions/compound-assignment/S11.13.2_A5.9_T3.js new file mode 100755 index 0000000000..3ef60424c5 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.9_T3.js @@ -0,0 +1,37 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. + Check operator is "x &= y". +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 5; + } +}; + +with (outerScope) { + with (innerScope) { + x &= 3; + } +} + +if (innerScope.x !== 1) { + $ERROR('#1: innerScope.x === 1. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.9_T4.js b/test/language/expressions/compound-assignment/S11.13.2_A5.9_T4.js new file mode 100755 index 0000000000..eaedb8c7de --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.9_T4.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x &= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x &= y". +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 5; + } +}; + +with (scope) { + (function() { + "use strict"; + x &= 3; + })(); +} + +if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A5.9_T5.js b/test/language/expressions/compound-assignment/S11.13.2_A5.9_T5.js new file mode 100755 index 0000000000..dd0465397f --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A5.9_T5.js @@ -0,0 +1,33 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lref, v) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x &= y' is in strict-mode code and the + original binding is no longer present. + Check operator is "x &= y". +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 5; + } +}); + +(function() { + "use strict"; + x &= 3; +})(); + +if (fnGlobalObject().x !== 1) { + $ERROR('#1: fnGlobalObject().x === 1. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/compound-assignment/S11.13.2_A6.10_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A6.10_T1.js new file mode 100755 index 0000000000..6806d2ea46 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A6.10_T1.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, v) uses the initially + created Reference even if a more local binding is available. + Check operator is "x ^= y". +flags: [noStrict] +---*/ + +function testCompoundAssignment() { + var x = 1; + var innerX = (function() { + x ^= (eval("var x = 2;"), 4); + return x; + })(); + + if (innerX !== 2) { + $ERROR('#1: innerX === 2. Actual: ' + (innerX)); + } + if (x !== 5) { + $ERROR('#2: x === 5. Actual: ' + (x)); + } +} +testCompoundAssignment(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A6.11_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A6.11_T1.js new file mode 100755 index 0000000000..64920b83c9 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A6.11_T1.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, v) uses the initially + created Reference even if a more local binding is available. + Check operator is "x |= y". +flags: [noStrict] +---*/ + +function testCompoundAssignment() { + var x = 1; + var innerX = (function() { + x |= (eval("var x = 2;"), 4); + return x; + })(); + + if (innerX !== 2) { + $ERROR('#1: innerX === 2. Actual: ' + (innerX)); + } + if (x !== 5) { + $ERROR('#2: x === 5. Actual: ' + (x)); + } +} +testCompoundAssignment(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A6.1_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A6.1_T1.js new file mode 100755 index 0000000000..bc0814916f --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A6.1_T1.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, v) uses the initially + created Reference even if a more local binding is available. + Check operator is "x *= y". +flags: [noStrict] +---*/ + +function testCompoundAssignment() { + var x = 3; + var innerX = (function() { + x *= (eval("var x = 2;"), 4); + return x; + })(); + + if (innerX !== 2) { + $ERROR('#1: innerX === 2. Actual: ' + (innerX)); + } + if (x !== 12) { + $ERROR('#2: x === 12. Actual: ' + (x)); + } +} +testCompoundAssignment(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A6.2_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A6.2_T1.js new file mode 100755 index 0000000000..fbb90b8454 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A6.2_T1.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, v) uses the initially + created Reference even if a more local binding is available. + Check operator is "x /= y". +flags: [noStrict] +---*/ + +function testCompoundAssignment() { + var x = 15; + var innerX = (function() { + x /= (eval("var x = 2;"), 3); + return x; + })(); + + if (innerX !== 2) { + $ERROR('#1: innerX === 2. Actual: ' + (innerX)); + } + if (x !== 5) { + $ERROR('#2: x === 5. Actual: ' + (x)); + } +} +testCompoundAssignment(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A6.3_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A6.3_T1.js new file mode 100755 index 0000000000..d8fc7146f6 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A6.3_T1.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, v) uses the initially + created Reference even if a more local binding is available. + Check operator is "x %= y". +flags: [noStrict] +---*/ + +function testCompoundAssignment() { + var x = 7; + var innerX = (function() { + x %= (eval("var x = 2;"), 4); + return x; + })(); + + if (innerX !== 2) { + $ERROR('#1: innerX === 2. Actual: ' + (innerX)); + } + if (x !== 3) { + $ERROR('#2: x === 3. Actual: ' + (x)); + } +} +testCompoundAssignment(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A6.4_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A6.4_T1.js new file mode 100755 index 0000000000..3bb0664ffc --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A6.4_T1.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, v) uses the initially + created Reference even if a more local binding is available. + Check operator is "x += y". +flags: [noStrict] +---*/ + +function testCompoundAssignment() { + var x = 3; + var innerX = (function() { + x += (eval("var x = 2;"), 1); + return x; + })(); + + if (innerX !== 2) { + $ERROR('#1: innerX === 2. Actual: ' + (innerX)); + } + if (x !== 4) { + $ERROR('#2: x === 4. Actual: ' + (x)); + } +} +testCompoundAssignment(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A6.5_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A6.5_T1.js new file mode 100755 index 0000000000..0d1b98117f --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A6.5_T1.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, v) uses the initially + created Reference even if a more local binding is available. + Check operator is "x -= y". +flags: [noStrict] +---*/ + +function testCompoundAssignment() { + var x = 5; + var innerX = (function() { + x -= (eval("var x = 2;"), 1); + return x; + })(); + + if (innerX !== 2) { + $ERROR('#1: innerX === 2. Actual: ' + (innerX)); + } + if (x !== 4) { + $ERROR('#2: x === 4. Actual: ' + (x)); + } +} +testCompoundAssignment(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A6.6_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A6.6_T1.js new file mode 100755 index 0000000000..0e39ce6799 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A6.6_T1.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, v) uses the initially + created Reference even if a more local binding is available. + Check operator is "x <<= y". +flags: [noStrict] +---*/ + +function testCompoundAssignment() { + var x = 1; + var innerX = (function() { + x <<= (eval("var x = 2;"), 3); + return x; + })(); + + if (innerX !== 2) { + $ERROR('#1: innerX === 2. Actual: ' + (innerX)); + } + if (x !== 8) { + $ERROR('#2: x === 8. Actual: ' + (x)); + } +} +testCompoundAssignment(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A6.7_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A6.7_T1.js new file mode 100755 index 0000000000..9e24083772 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A6.7_T1.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, v) uses the initially + created Reference even if a more local binding is available. + Check operator is "x >>= y". +flags: [noStrict] +---*/ + +function testCompoundAssignment() { + var x = 8; + var innerX = (function() { + x >>= (eval("var x = 2;"), 1); + return x; + })(); + + if (innerX !== 2) { + $ERROR('#1: innerX === 2. Actual: ' + (innerX)); + } + if (x !== 4) { + $ERROR('#2: x === 4. Actual: ' + (x)); + } +} +testCompoundAssignment(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A6.8_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A6.8_T1.js new file mode 100755 index 0000000000..f5be57cdda --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A6.8_T1.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, v) uses the initially + created Reference even if a more local binding is available. + Check operator is "x >>>= y". +flags: [noStrict] +---*/ + +function testCompoundAssignment() { + var x = 8; + var innerX = (function() { + x >>>= (eval("var x = 2;"), 1); + return x; + })(); + + if (innerX !== 2) { + $ERROR('#1: innerX === 2. Actual: ' + (innerX)); + } + if (x !== 4) { + $ERROR('#2: x === 4. Actual: ' + (x)); + } +} +testCompoundAssignment(); diff --git a/test/language/expressions/compound-assignment/S11.13.2_A6.9_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A6.9_T1.js new file mode 100755 index 0000000000..df40895a80 --- /dev/null +++ b/test/language/expressions/compound-assignment/S11.13.2_A6.9_T1.js @@ -0,0 +1,29 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Compound Assignment Operator calls PutValue(lref, v) +description: > + Evaluating LeftHandSideExpression lref returns Reference type; Reference + base value is an environment record and environment record kind is + declarative environment record. PutValue(lref, v) uses the initially + created Reference even if a more local binding is available. + Check operator is "x &= y". +flags: [noStrict] +---*/ + +function testCompoundAssignment() { + var x = 5; + var innerX = (function() { + x &= (eval("var x = 2;"), 3); + return x; + })(); + + if (innerX !== 2) { + $ERROR('#1: innerX === 2. Actual: ' + (innerX)); + } + if (x !== 1) { + $ERROR('#2: x === 1. Actual: ' + (x)); + } +} +testCompoundAssignment(); diff --git a/test/language/expressions/postfix-decrement/S11.3.2_A5_T1.js b/test/language/expressions/postfix-decrement/S11.3.2_A5_T1.js new file mode 100755 index 0000000000..fb43d87f16 --- /dev/null +++ b/test/language/expressions/postfix-decrement/S11.3.2_A5_T1.js @@ -0,0 +1,35 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x-- calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 2; + } + }; + + with (scope) { + x--; + } + + if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/postfix-decrement/S11.3.2_A5_T2.js b/test/language/expressions/postfix-decrement/S11.3.2_A5_T2.js new file mode 100755 index 0000000000..26f96a3855 --- /dev/null +++ b/test/language/expressions/postfix-decrement/S11.3.2_A5_T2.js @@ -0,0 +1,32 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x-- calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + x--; +} + +if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/postfix-decrement/S11.3.2_A5_T3.js b/test/language/expressions/postfix-decrement/S11.3.2_A5_T3.js new file mode 100755 index 0000000000..6446e87287 --- /dev/null +++ b/test/language/expressions/postfix-decrement/S11.3.2_A5_T3.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x-- calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 2; + } +}; + +with (outerScope) { + with (innerScope) { + x--; + } +} + +if (innerScope.x !== 1) { + $ERROR('#1: innerScope.x === 1. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/postfix-decrement/S11.3.2_A5_T4.js b/test/language/expressions/postfix-decrement/S11.3.2_A5_T4.js new file mode 100755 index 0000000000..aa01013595 --- /dev/null +++ b/test/language/expressions/postfix-decrement/S11.3.2_A5_T4.js @@ -0,0 +1,32 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x-- calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x--' is in strict-mode code and the + original binding is no longer present. +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + (function() { + "use strict"; + x--; + })(); +} + +if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/postfix-decrement/S11.3.2_A5_T5.js b/test/language/expressions/postfix-decrement/S11.3.2_A5_T5.js new file mode 100755 index 0000000000..6a6c183222 --- /dev/null +++ b/test/language/expressions/postfix-decrement/S11.3.2_A5_T5.js @@ -0,0 +1,32 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x-- calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x--' is in strict-mode code and the + original binding is no longer present. +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 2; + } +}); + +(function() { + "use strict"; + x--; +})(); + +if (fnGlobalObject().x !== 1) { + $ERROR('#1: fnGlobalObject().x === 1. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/postfix-increment/S11.3.1_A5_T1.js b/test/language/expressions/postfix-increment/S11.3.1_A5_T1.js new file mode 100755 index 0000000000..2b4bcd0532 --- /dev/null +++ b/test/language/expressions/postfix-increment/S11.3.1_A5_T1.js @@ -0,0 +1,35 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x++ calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 2; + } + }; + + with (scope) { + x++; + } + + if (scope.x !== 3) { + $ERROR('#1: scope.x === 3. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/postfix-increment/S11.3.1_A5_T2.js b/test/language/expressions/postfix-increment/S11.3.1_A5_T2.js new file mode 100755 index 0000000000..ade4a0a9b0 --- /dev/null +++ b/test/language/expressions/postfix-increment/S11.3.1_A5_T2.js @@ -0,0 +1,32 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x++ calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + x++; +} + +if (scope.x !== 3) { + $ERROR('#1: scope.x === 3. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/postfix-increment/S11.3.1_A5_T3.js b/test/language/expressions/postfix-increment/S11.3.1_A5_T3.js new file mode 100755 index 0000000000..6e3c717193 --- /dev/null +++ b/test/language/expressions/postfix-increment/S11.3.1_A5_T3.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x++ calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 2; + } +}; + +with (outerScope) { + with (innerScope) { + x++; + } +} + +if (innerScope.x !== 3) { + $ERROR('#1: innerScope.x === 3. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/postfix-increment/S11.3.1_A5_T4.js b/test/language/expressions/postfix-increment/S11.3.1_A5_T4.js new file mode 100755 index 0000000000..41468ff553 --- /dev/null +++ b/test/language/expressions/postfix-increment/S11.3.1_A5_T4.js @@ -0,0 +1,32 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x++ calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x++' is in strict-mode code and the + original binding is no longer present. +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + (function() { + "use strict"; + x++; + })(); +} + +if (scope.x !== 3) { + $ERROR('#1: scope.x === 3. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/postfix-increment/S11.3.1_A5_T5.js b/test/language/expressions/postfix-increment/S11.3.1_A5_T5.js new file mode 100755 index 0000000000..a078046187 --- /dev/null +++ b/test/language/expressions/postfix-increment/S11.3.1_A5_T5.js @@ -0,0 +1,32 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x++ calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when 'x++' is in strict-mode code and the + original binding is no longer present. +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 2; + } +}); + +(function() { + "use strict"; + x++; +})(); + +if (fnGlobalObject().x !== 3) { + $ERROR('#1: fnGlobalObject().x === 3. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/prefix-decrement/S11.4.5_A5_T1.js b/test/language/expressions/prefix-decrement/S11.4.5_A5_T1.js new file mode 100755 index 0000000000..a868280068 --- /dev/null +++ b/test/language/expressions/prefix-decrement/S11.4.5_A5_T1.js @@ -0,0 +1,35 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator --x calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 2; + } + }; + + with (scope) { + --x; + } + + if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/prefix-decrement/S11.4.5_A5_T2.js b/test/language/expressions/prefix-decrement/S11.4.5_A5_T2.js new file mode 100755 index 0000000000..a501cb6308 --- /dev/null +++ b/test/language/expressions/prefix-decrement/S11.4.5_A5_T2.js @@ -0,0 +1,32 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator --x calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + --x; +} + +if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/prefix-decrement/S11.4.5_A5_T3.js b/test/language/expressions/prefix-decrement/S11.4.5_A5_T3.js new file mode 100755 index 0000000000..0925e780dc --- /dev/null +++ b/test/language/expressions/prefix-decrement/S11.4.5_A5_T3.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator --x calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 2; + } +}; + +with (outerScope) { + with (innerScope) { + --x; + } +} + +if (innerScope.x !== 1) { + $ERROR('#1: innerScope.x === 1. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/prefix-decrement/S11.4.5_A5_T4.js b/test/language/expressions/prefix-decrement/S11.4.5_A5_T4.js new file mode 100755 index 0000000000..58476799a3 --- /dev/null +++ b/test/language/expressions/prefix-decrement/S11.4.5_A5_T4.js @@ -0,0 +1,32 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator --x calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when '--x' is in strict-mode code and the + original binding is no longer present. +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + (function() { + "use strict"; + --x; + })(); +} + +if (scope.x !== 1) { + $ERROR('#1: scope.x === 1. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/prefix-decrement/S11.4.5_A5_T5.js b/test/language/expressions/prefix-decrement/S11.4.5_A5_T5.js new file mode 100755 index 0000000000..2bfe66d606 --- /dev/null +++ b/test/language/expressions/prefix-decrement/S11.4.5_A5_T5.js @@ -0,0 +1,32 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator --x calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when '--x' is in strict-mode code and the + original binding is no longer present. +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 2; + } +}); + +(function() { + "use strict"; + --x; +})(); + +if (fnGlobalObject().x !== 1) { + $ERROR('#1: fnGlobalObject().x === 1. Actual: ' + (fnGlobalObject().x)); +} diff --git a/test/language/expressions/prefix-increment/S11.4.4_A5_T1.js b/test/language/expressions/prefix-increment/S11.4.4_A5_T1.js new file mode 100755 index 0000000000..f01ee32aba --- /dev/null +++ b/test/language/expressions/prefix-increment/S11.4.4_A5_T1.js @@ -0,0 +1,35 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator ++x calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding function environment record is not changed. +flags: [noStrict] +---*/ + +function testFunction() { + var x = 0; + var scope = { + get x() { + delete this.x; + return 2; + } + }; + + with (scope) { + ++x; + } + + if (scope.x !== 3) { + $ERROR('#1: scope.x === 3. Actual: ' + (scope.x)); + } + if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); + } +} +testFunction(); diff --git a/test/language/expressions/prefix-increment/S11.4.4_A5_T2.js b/test/language/expressions/prefix-increment/S11.4.4_A5_T2.js new file mode 100755 index 0000000000..09f0d48a43 --- /dev/null +++ b/test/language/expressions/prefix-increment/S11.4.4_A5_T2.js @@ -0,0 +1,32 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator ++x calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding global environment record is not changed. +flags: [noStrict] +---*/ + +var x = 0; +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + ++x; +} + +if (scope.x !== 3) { + $ERROR('#1: scope.x === 3. Actual: ' + (scope.x)); +} +if (x !== 0) { + $ERROR('#2: x === 0. Actual: ' + (x)); +} diff --git a/test/language/expressions/prefix-increment/S11.4.4_A5_T3.js b/test/language/expressions/prefix-increment/S11.4.4_A5_T3.js new file mode 100755 index 0000000000..f9cf3cebed --- /dev/null +++ b/test/language/expressions/prefix-increment/S11.4.4_A5_T3.js @@ -0,0 +1,36 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator ++x calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + Binding in surrounding object environment record is not changed. +flags: [noStrict] +---*/ + +var outerScope = { + x: 0 +}; +var innerScope = { + get x() { + delete this.x; + return 2; + } +}; + +with (outerScope) { + with (innerScope) { + ++x; + } +} + +if (innerScope.x !== 3) { + $ERROR('#1: innerScope.x === 3. Actual: ' + (innerScope.x)); +} +if (outerScope.x !== 0) { + $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x)); +} diff --git a/test/language/expressions/prefix-increment/S11.4.4_A5_T4.js b/test/language/expressions/prefix-increment/S11.4.4_A5_T4.js new file mode 100755 index 0000000000..12178597b8 --- /dev/null +++ b/test/language/expressions/prefix-increment/S11.4.4_A5_T4.js @@ -0,0 +1,32 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator ++x calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when '++x' is in strict-mode code and the + original binding is no longer present. +flags: [noStrict] +---*/ + +var scope = { + get x() { + delete this.x; + return 2; + } +}; + +with (scope) { + (function() { + "use strict"; + ++x; + })(); +} + +if (scope.x !== 3) { + $ERROR('#1: scope.x === 3. Actual: ' + (scope.x)); +} diff --git a/test/language/expressions/prefix-increment/S11.4.4_A5_T5.js b/test/language/expressions/prefix-increment/S11.4.4_A5_T5.js new file mode 100755 index 0000000000..8702266b9b --- /dev/null +++ b/test/language/expressions/prefix-increment/S11.4.4_A5_T5.js @@ -0,0 +1,32 @@ +// Copyright (C) 2014 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator ++x calls PutValue(lhs, newValue) +description: > + Evaluating LeftHandSideExpression lhs returns Reference type; Reference + base value is an environment record and environment record kind is + object environment record. PutValue(lhs, newValue) uses the initially + created Reference even if the environment binding is no longer present. + No ReferenceError is thrown when '++x' is in strict-mode code and the + original binding is no longer present. +includes: + - fnGlobalObject.js +---*/ + +Object.defineProperty(fnGlobalObject(), "x", { + configurable: true, + get: function() { + delete this.x; + return 2; + } +}); + +(function() { + "use strict"; + ++x; +})(); + +if (fnGlobalObject().x !== 3) { + $ERROR('#1: fnGlobalObject().x === 3. Actual: ' + (fnGlobalObject().x)); +} -- GitLab