diff --git a/test/language/expressions/postfix-decrement/S11.3.2_A6_T1.js b/test/language/expressions/postfix-decrement/S11.3.2_A6_T1.js new file mode 100755 index 0000000000000000000000000000000000000000..960a0b4da7ae01d3027ce3d61a8d07beab985836 --- /dev/null +++ b/test/language/expressions/postfix-decrement/S11.3.2_A6_T1.js @@ -0,0 +1,31 @@ +// Copyright (C) 2015 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x-- evaluates its reference expression once. +description: > + The operand expression is evaluated exactly once. Operand expression is + MemberExpression: base[prop]. base is the null value. +---*/ + +function DummyError() { } + +assert.throws(DummyError, function() { + var base = null; + var prop = function() { + throw new DummyError(); + }; + + base[prop()]--; +}); + +assert.throws(TypeError, function() { + var base = null; + var prop = { + toString: function() { + $ERROR("property key evaluated"); + } + }; + + base[prop]--; +}); diff --git a/test/language/expressions/postfix-decrement/S11.3.2_A6_T2.js b/test/language/expressions/postfix-decrement/S11.3.2_A6_T2.js new file mode 100755 index 0000000000000000000000000000000000000000..9a033e79f7a17d21bb36a371a0d52acb8831c1f0 --- /dev/null +++ b/test/language/expressions/postfix-decrement/S11.3.2_A6_T2.js @@ -0,0 +1,31 @@ +// Copyright (C) 2015 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x-- evaluates its reference expression once. +description: > + The operand expression is evaluated exactly once. Operand expression is + MemberExpression: base[prop]. base is the undefined value. +---*/ + +function DummyError() { } + +assert.throws(DummyError, function() { + var base = undefined; + var prop = function() { + throw new DummyError(); + }; + + base[prop()]--; +}); + +assert.throws(TypeError, function() { + var base = undefined; + var prop = { + toString: function() { + $ERROR("property key evaluated"); + } + }; + + base[prop]--; +}); diff --git a/test/language/expressions/postfix-decrement/S11.3.2_A6_T3.js b/test/language/expressions/postfix-decrement/S11.3.2_A6_T3.js new file mode 100755 index 0000000000000000000000000000000000000000..951c72303e1ba3a5eddf8c0504f6b4ebe8c1aa12 --- /dev/null +++ b/test/language/expressions/postfix-decrement/S11.3.2_A6_T3.js @@ -0,0 +1,22 @@ +// Copyright (C) 2015 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x-- evaluates its reference expression once. +description: > + The operand expression is evaluated exactly once. Operand expression is + MemberExpression: base[prop]. ToPropertyKey(prop) is not called multiple + times. +---*/ + +var propKeyEvaluated = false; +var base = {}; +var prop = { + toString: function() { + assert(!propKeyEvaluated); + propKeyEvaluated = true; + return 1; + } +}; + +base[prop]--; diff --git a/test/language/expressions/postfix-increment/S11.3.1_A6_T1.js b/test/language/expressions/postfix-increment/S11.3.1_A6_T1.js new file mode 100755 index 0000000000000000000000000000000000000000..077c0b26fcdab4636f7810ef90aceacda1a862e9 --- /dev/null +++ b/test/language/expressions/postfix-increment/S11.3.1_A6_T1.js @@ -0,0 +1,31 @@ +// Copyright (C) 2015 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x++ evaluates its reference expression once. +description: > + The operand expression is evaluated exactly once. Operand expression is + MemberExpression: base[prop]. base is the null value. +---*/ + +function DummyError() { } + +assert.throws(DummyError, function() { + var base = null; + var prop = function() { + throw new DummyError(); + }; + + base[prop()]++; +}); + +assert.throws(TypeError, function() { + var base = null; + var prop = { + toString: function() { + $ERROR("property key evaluated"); + } + }; + + base[prop]++; +}); diff --git a/test/language/expressions/postfix-increment/S11.3.1_A6_T2.js b/test/language/expressions/postfix-increment/S11.3.1_A6_T2.js new file mode 100755 index 0000000000000000000000000000000000000000..4eb9d5b712c11377cd64c02fe763c11a0eb75c0c --- /dev/null +++ b/test/language/expressions/postfix-increment/S11.3.1_A6_T2.js @@ -0,0 +1,31 @@ +// Copyright (C) 2015 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x++ evaluates its reference expression once. +description: > + The operand expression is evaluated exactly once. Operand expression is + MemberExpression: base[prop]. base is the undefined value. +---*/ + +function DummyError() { } + +assert.throws(DummyError, function() { + var base = undefined; + var prop = function() { + throw new DummyError(); + }; + + base[prop()]++; +}); + +assert.throws(TypeError, function() { + var base = undefined; + var prop = { + toString: function() { + $ERROR("property key evaluated"); + } + }; + + base[prop]++; +}); diff --git a/test/language/expressions/postfix-increment/S11.3.1_A6_T3.js b/test/language/expressions/postfix-increment/S11.3.1_A6_T3.js new file mode 100755 index 0000000000000000000000000000000000000000..4611e4551b2b5960aef8e0cf5af08d1c4110dff7 --- /dev/null +++ b/test/language/expressions/postfix-increment/S11.3.1_A6_T3.js @@ -0,0 +1,22 @@ +// Copyright (C) 2015 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator x++ evaluates its reference expression once. +description: > + The operand expression is evaluated exactly once. Operand expression is + MemberExpression: base[prop]. ToPropertyKey(prop) is not called multiple + times. +---*/ + +var propKeyEvaluated = false; +var base = {}; +var prop = { + toString: function() { + assert(!propKeyEvaluated); + propKeyEvaluated = true; + return 1; + } +}; + +base[prop]++; diff --git a/test/language/expressions/prefix-decrement/S11.4.5_A6_T1.js b/test/language/expressions/prefix-decrement/S11.4.5_A6_T1.js new file mode 100755 index 0000000000000000000000000000000000000000..567a7534a5c11cc5ebc33059d70479b30063a88b --- /dev/null +++ b/test/language/expressions/prefix-decrement/S11.4.5_A6_T1.js @@ -0,0 +1,31 @@ +// Copyright (C) 2015 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator --x evaluates its reference expression once. +description: > + The operand expression is evaluated exactly once. Operand expression is + MemberExpression: base[prop]. base is the null value. +---*/ + +function DummyError() { } + +assert.throws(DummyError, function() { + var base = null; + var prop = function() { + throw new DummyError(); + }; + + --base[prop()]; +}); + +assert.throws(TypeError, function() { + var base = null; + var prop = { + toString: function() { + $ERROR("property key evaluated"); + } + }; + + --base[prop]; +}); diff --git a/test/language/expressions/prefix-decrement/S11.4.5_A6_T2.js b/test/language/expressions/prefix-decrement/S11.4.5_A6_T2.js new file mode 100755 index 0000000000000000000000000000000000000000..7eec750dadb925c93fb13801f2394e1c51387412 --- /dev/null +++ b/test/language/expressions/prefix-decrement/S11.4.5_A6_T2.js @@ -0,0 +1,31 @@ +// Copyright (C) 2015 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator --x evaluates its reference expression once. +description: > + The operand expression is evaluated exactly once. Operand expression is + MemberExpression: base[prop]. base is the undefined value. +---*/ + +function DummyError() { } + +assert.throws(DummyError, function() { + var base = undefined; + var prop = function() { + throw new DummyError(); + }; + + --base[prop()]; +}); + +assert.throws(TypeError, function() { + var base = undefined; + var prop = { + toString: function() { + $ERROR("property key evaluated"); + } + }; + + --base[prop]; +}); diff --git a/test/language/expressions/prefix-decrement/S11.4.5_A6_T3.js b/test/language/expressions/prefix-decrement/S11.4.5_A6_T3.js new file mode 100755 index 0000000000000000000000000000000000000000..592c328607c042c9a00132a3602ea949141a99e8 --- /dev/null +++ b/test/language/expressions/prefix-decrement/S11.4.5_A6_T3.js @@ -0,0 +1,22 @@ +// Copyright (C) 2015 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator --x evaluates its reference expression once. +description: > + The operand expression is evaluated exactly once. Operand expression is + MemberExpression: base[prop]. ToPropertyKey(prop) is not called multiple + times. +---*/ + +var propKeyEvaluated = false; +var base = {}; +var prop = { + toString: function() { + assert(!propKeyEvaluated); + propKeyEvaluated = true; + return 1; + } +}; + +--base[prop]; diff --git a/test/language/expressions/prefix-increment/S11.4.4_A6_T1.js b/test/language/expressions/prefix-increment/S11.4.4_A6_T1.js new file mode 100755 index 0000000000000000000000000000000000000000..bce4f1a1ec10f2a465723d75a1f9e71ce326da79 --- /dev/null +++ b/test/language/expressions/prefix-increment/S11.4.4_A6_T1.js @@ -0,0 +1,31 @@ +// Copyright (C) 2015 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator ++x evaluates its reference expression once. +description: > + The operand expression is evaluated exactly once. Operand expression is + MemberExpression: base[prop]. base is the null value. +---*/ + +function DummyError() { } + +assert.throws(DummyError, function() { + var base = null; + var prop = function() { + throw new DummyError(); + }; + + ++base[prop()]; +}); + +assert.throws(TypeError, function() { + var base = null; + var prop = { + toString: function() { + $ERROR("property key evaluated"); + } + }; + + ++base[prop]; +}); diff --git a/test/language/expressions/prefix-increment/S11.4.4_A6_T2.js b/test/language/expressions/prefix-increment/S11.4.4_A6_T2.js new file mode 100755 index 0000000000000000000000000000000000000000..e2b5e85e2112deea3a75d4bac71e5fdf9f233f2d --- /dev/null +++ b/test/language/expressions/prefix-increment/S11.4.4_A6_T2.js @@ -0,0 +1,31 @@ +// Copyright (C) 2015 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator ++x evaluates its reference expression once. +description: > + The operand expression is evaluated exactly once. Operand expression is + MemberExpression: base[prop]. base is the undefined value. +---*/ + +function DummyError() { } + +assert.throws(DummyError, function() { + var base = undefined; + var prop = function() { + throw new DummyError(); + }; + + ++base[prop()]; +}); + +assert.throws(TypeError, function() { + var base = undefined; + var prop = { + toString: function() { + $ERROR("property key evaluated"); + } + }; + + ++base[prop]; +}); diff --git a/test/language/expressions/prefix-increment/S11.4.4_A6_T3.js b/test/language/expressions/prefix-increment/S11.4.4_A6_T3.js new file mode 100755 index 0000000000000000000000000000000000000000..94473bb28802173a163f60b594c108f24f9202ad --- /dev/null +++ b/test/language/expressions/prefix-increment/S11.4.4_A6_T3.js @@ -0,0 +1,22 @@ +// Copyright (C) 2015 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: Operator ++x evaluates its reference expression once. +description: > + The operand expression is evaluated exactly once. Operand expression is + MemberExpression: base[prop]. ToPropertyKey(prop) is not called multiple + times. +---*/ + +var propKeyEvaluated = false; +var base = {}; +var prop = { + toString: function() { + assert(!propKeyEvaluated); + propKeyEvaluated = true; + return 1; + } +}; + +++base[prop];