From 64826c2ad3a6bf77a37762dc69664c0dc23a9485 Mon Sep 17 00:00:00 2001
From: Mike Pennisi <mike@mikepennisi.com>
Date: Mon, 29 Jun 2015 12:09:31 -0400
Subject: [PATCH] Make tests more strict

In ECMAScript 5, assignment to a non-reference value throws a runtime
ReferenceError. ECMAscript 6 specifies an early ReferenceError in these
cases. Tests for this behavior have been authored to pass in both cases.
Simplify these tests to describe and assert the early error.
---
 .../assignment/S11.13.1_A2.1_T3.js            | 24 -------------------
 .../assignment/non-simple-target.js           | 14 +++++++++++
 .../compound-assignment/S11.13.2_A2.2_T1.js   | 24 -------------------
 .../compound-assignment/S11.13.2_A2.2_T10.js  | 24 -------------------
 .../compound-assignment/S11.13.2_A2.2_T11.js  | 24 -------------------
 .../compound-assignment/S11.13.2_A2.2_T2.js   | 24 -------------------
 .../compound-assignment/S11.13.2_A2.2_T3.js   | 24 -------------------
 .../compound-assignment/S11.13.2_A2.2_T4.js   | 24 -------------------
 .../compound-assignment/S11.13.2_A2.2_T5.js   | 24 -------------------
 .../compound-assignment/S11.13.2_A2.2_T6.js   | 24 -------------------
 .../compound-assignment/S11.13.2_A2.2_T7.js   | 24 -------------------
 .../compound-assignment/S11.13.2_A2.2_T8.js   | 24 -------------------
 .../compound-assignment/S11.13.2_A2.2_T9.js   | 24 -------------------
 .../compound-assignment/add-non-simple.js     | 13 ++++++++++
 .../btws-and-non-simple.js                    | 13 ++++++++++
 .../compound-assignment/btws-or-non-simple.js | 13 ++++++++++
 .../btws-xor-non-simple.js                    | 13 ++++++++++
 .../compound-assignment/div-non-simple.js     | 13 ++++++++++
 .../left-shift-non-simple.js                  | 13 ++++++++++
 .../compound-assignment/mod-div-non-simple.js | 13 ++++++++++
 .../compound-assignment/mult-non-simple.js    | 13 ++++++++++
 .../right-shift-non-simple.js                 | 13 ++++++++++
 .../subtract-non-simple.js                    | 13 ++++++++++
 .../u-right-shift-non-simple.js               | 13 ++++++++++
 .../postfix-decrement/S11.3.2_A2.1_T3.js      | 24 -------------------
 .../postfix-decrement/non-simple.js           | 13 ++++++++++
 .../postfix-increment/S11.3.1_A2.1_T3.js      | 24 -------------------
 .../postfix-increment/non-simple.js           | 13 ++++++++++
 .../prefix-decrement/S11.4.5_A2.1_T3.js       | 24 -------------------
 .../prefix-decrement/non-simple.js            | 13 ++++++++++
 .../prefix-increment/S11.4.4_A2.1_T3.js       | 24 -------------------
 .../prefix-increment/non-simple.js            | 13 ++++++++++
 32 files changed, 209 insertions(+), 384 deletions(-)
 delete mode 100644 test/language/expressions/assignment/S11.13.1_A2.1_T3.js
 create mode 100644 test/language/expressions/assignment/non-simple-target.js
 delete mode 100644 test/language/expressions/compound-assignment/S11.13.2_A2.2_T1.js
 delete mode 100644 test/language/expressions/compound-assignment/S11.13.2_A2.2_T10.js
 delete mode 100644 test/language/expressions/compound-assignment/S11.13.2_A2.2_T11.js
 delete mode 100644 test/language/expressions/compound-assignment/S11.13.2_A2.2_T2.js
 delete mode 100644 test/language/expressions/compound-assignment/S11.13.2_A2.2_T3.js
 delete mode 100644 test/language/expressions/compound-assignment/S11.13.2_A2.2_T4.js
 delete mode 100644 test/language/expressions/compound-assignment/S11.13.2_A2.2_T5.js
 delete mode 100644 test/language/expressions/compound-assignment/S11.13.2_A2.2_T6.js
 delete mode 100644 test/language/expressions/compound-assignment/S11.13.2_A2.2_T7.js
 delete mode 100644 test/language/expressions/compound-assignment/S11.13.2_A2.2_T8.js
 delete mode 100644 test/language/expressions/compound-assignment/S11.13.2_A2.2_T9.js
 create mode 100644 test/language/expressions/compound-assignment/add-non-simple.js
 create mode 100644 test/language/expressions/compound-assignment/btws-and-non-simple.js
 create mode 100644 test/language/expressions/compound-assignment/btws-or-non-simple.js
 create mode 100644 test/language/expressions/compound-assignment/btws-xor-non-simple.js
 create mode 100644 test/language/expressions/compound-assignment/div-non-simple.js
 create mode 100644 test/language/expressions/compound-assignment/left-shift-non-simple.js
 create mode 100644 test/language/expressions/compound-assignment/mod-div-non-simple.js
 create mode 100644 test/language/expressions/compound-assignment/mult-non-simple.js
 create mode 100644 test/language/expressions/compound-assignment/right-shift-non-simple.js
 create mode 100644 test/language/expressions/compound-assignment/subtract-non-simple.js
 create mode 100644 test/language/expressions/compound-assignment/u-right-shift-non-simple.js
 delete mode 100644 test/language/expressions/postfix-decrement/S11.3.2_A2.1_T3.js
 create mode 100644 test/language/expressions/postfix-decrement/non-simple.js
 delete mode 100644 test/language/expressions/postfix-increment/S11.3.1_A2.1_T3.js
 create mode 100644 test/language/expressions/postfix-increment/non-simple.js
 delete mode 100644 test/language/expressions/prefix-decrement/S11.4.5_A2.1_T3.js
 create mode 100644 test/language/expressions/prefix-decrement/non-simple.js
 delete mode 100644 test/language/expressions/prefix-increment/S11.4.4_A2.1_T3.js
 create mode 100644 test/language/expressions/prefix-increment/non-simple.js

diff --git a/test/language/expressions/assignment/S11.13.1_A2.1_T3.js b/test/language/expressions/assignment/S11.13.1_A2.1_T3.js
deleted file mode 100644
index 17eef53cf5..0000000000
--- a/test/language/expressions/assignment/S11.13.1_A2.1_T3.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: Operator x = y uses GetValue and PutValue
-es5id: 11.13.1_A2.1_T3
-description: >
-    If Type(LeftHandSideExpression) is not Reference, throw
-    ReferenceError
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  1 = 1;
-  $ERROR('#1.1: 1 = 1 throw ReferenceError. Actual: ' + (1 = 1));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1 = 1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    1 = 1;
-  }
-}
diff --git a/test/language/expressions/assignment/non-simple-target.js b/test/language/expressions/assignment/non-simple-target.js
new file mode 100644
index 0000000000..d588b862b2
--- /dev/null
+++ b/test/language/expressions/assignment/non-simple-target.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if LeftHandSideExpression is neither an
+    ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.14.1
+description: Assignment with non-simple target
+negative: ReferenceError
+---*/
+
+1 = 1;
diff --git a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T1.js b/test/language/expressions/compound-assignment/S11.13.2_A2.2_T1.js
deleted file mode 100644
index 0d2f2da613..0000000000
--- a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T1.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: Operator uses PutValue
-es5id: 11.13.2_A2.2_T1
-description: >
-    If Type(LeftHandSideExpression) is not Reference, throw
-    ReferenceError. Check operator is "x *= y"
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  var z = (1 *= 1);
-  $ERROR('#1.1: 1 *= 1 throw ReferenceError. Actual: ' + (z));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1 *= 1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    var z = (1 *= 1);
-  }
-}
diff --git a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T10.js b/test/language/expressions/compound-assignment/S11.13.2_A2.2_T10.js
deleted file mode 100644
index 82b6c7646c..0000000000
--- a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T10.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: Operator uses PutValue
-es5id: 11.13.2_A2.2_T10
-description: >
-    If Type(LeftHandSideExpression) is not Reference, throw
-    ReferenceError. Check operator is "x ^= y"
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  var z = (1 ^= 1);
-  $ERROR('#1.1: 1 ^= 1 throw ReferenceError. Actual: ' + (z));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1 ^= 1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    var z = (1 ^= 1);
-  }
-}
diff --git a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T11.js b/test/language/expressions/compound-assignment/S11.13.2_A2.2_T11.js
deleted file mode 100644
index 082e26e3d6..0000000000
--- a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T11.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: Operator uses PutValue
-es5id: 11.13.2_A2.2_T11
-description: >
-    If Type(LeftHandSideExpression) is not Reference, throw
-    ReferenceError. Check operator is "x |= y"
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  var z = (1 |= 1);
-  $ERROR('#1.1: 1 |= 1 throw ReferenceError. Actual: ' + (z));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1 |= 1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    var z = (1 |= 1);
-  }
-}
diff --git a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T2.js b/test/language/expressions/compound-assignment/S11.13.2_A2.2_T2.js
deleted file mode 100644
index 7d88d53dc2..0000000000
--- a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T2.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: Operator uses PutValue
-es5id: 11.13.2_A2.2_T2
-description: >
-    If Type(LeftHandSideExpression) is not Reference, throw
-    ReferenceError. Check operator is "x /= y"
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  var z = (1 /= 1);
-  $ERROR('#1.1: 1 /= 1 throw ReferenceError. Actual: ' + (z));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1 /= 1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    var z = (1 /= 1);
-  }
-}
diff --git a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T3.js b/test/language/expressions/compound-assignment/S11.13.2_A2.2_T3.js
deleted file mode 100644
index b6295420a3..0000000000
--- a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T3.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: Operator uses PutValue
-es5id: 11.13.2_A2.2_T3
-description: >
-    If Type(LeftHandSideExpression) is not Reference, throw
-    ReferenceError. Check operator is "x %= y"
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  var z = (1 %= 1);
-  $ERROR('#1.1: 1 %= 1 throw ReferenceError. Actual: ' + (z));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1 %= 1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    var z = (1 %= 1);
-  }
-}
diff --git a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T4.js b/test/language/expressions/compound-assignment/S11.13.2_A2.2_T4.js
deleted file mode 100644
index f0453f600b..0000000000
--- a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T4.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: Operator uses PutValue
-es5id: 11.13.2_A2.2_T4
-description: >
-    If Type(LeftHandSideExpression) is not Reference, throw
-    ReferenceError. Check operator is "x += y"
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  var z = (1 += 1);
-  $ERROR('#1.1: 1 += 1 throw ReferenceError. Actual: ' + (z));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1 += 1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    var z = (1 += 1);
-  }
-}
diff --git a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T5.js b/test/language/expressions/compound-assignment/S11.13.2_A2.2_T5.js
deleted file mode 100644
index 7a47e877a8..0000000000
--- a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T5.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: Operator uses PutValue
-es5id: 11.13.2_A2.2_T5
-description: >
-    If Type(LeftHandSideExpression) is not Reference, throw
-    ReferenceError. Check operator is "x -= y"
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  var z = (1 -= 1);
-  $ERROR('#1.1: 1 -= 1 throw ReferenceError. Actual: ' + (z));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1 -= 1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    var z = (1 -= 1);
-  }
-}
diff --git a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T6.js b/test/language/expressions/compound-assignment/S11.13.2_A2.2_T6.js
deleted file mode 100644
index 447256afeb..0000000000
--- a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T6.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: Operator uses PutValue
-es5id: 11.13.2_A2.2_T6
-description: >
-    If Type(LeftHandSideExpression) is not Reference, throw
-    ReferenceError. Check operator is "x <<= y"
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  var z = (1 <<= 1);
-  $ERROR('#1.1: 1 <<= 1 throw ReferenceError. Actual: ' + (z));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1 <<= 1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    var z = (1 <<= 1);
-  }
-}
diff --git a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T7.js b/test/language/expressions/compound-assignment/S11.13.2_A2.2_T7.js
deleted file mode 100644
index 53f90d34fa..0000000000
--- a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T7.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: Operator uses PutValue
-es5id: 11.13.2_A2.2_T7
-description: >
-    If Type(LeftHandSideExpression) is not Reference, throw
-    ReferenceError. Check operator is "x >>= y"
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  var z = (1 >>= 1);
-  $ERROR('#1.1: 1 >>= 1 throw ReferenceError. Actual: ' + (z));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1 >>= 1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    var z = (1 >>= 1);
-  }
-}
diff --git a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T8.js b/test/language/expressions/compound-assignment/S11.13.2_A2.2_T8.js
deleted file mode 100644
index 60f928e96c..0000000000
--- a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T8.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: Operator uses PutValue
-es5id: 11.13.2_A2.2_T8
-description: >
-    If Type(LeftHandSideExpression) is not Reference, throw
-    ReferenceError. Check operator is "x >>>= y"
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  var z = (1 >>>= 1);
-  $ERROR('#1.1: 1 >>>= 1 throw ReferenceError. Actual: ' + (z));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1 >>>= 1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    var z = (1 >>>= 1);
-  }
-}
diff --git a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T9.js b/test/language/expressions/compound-assignment/S11.13.2_A2.2_T9.js
deleted file mode 100644
index 378932d68e..0000000000
--- a/test/language/expressions/compound-assignment/S11.13.2_A2.2_T9.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: Operator uses PutValue
-es5id: 11.13.2_A2.2_T9
-description: >
-    If Type(LeftHandSideExpression) is not Reference, throw
-    ReferenceError. Check operator is "x &= y"
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  var z = (1 &= 1);
-  $ERROR('#1.1: 1 &= 1 throw ReferenceError. Actual: ' + (z));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1 &= 1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    var z = (1 &= 1);
-  }
-}
diff --git a/test/language/expressions/compound-assignment/add-non-simple.js b/test/language/expressions/compound-assignment/add-non-simple.js
new file mode 100644
index 0000000000..c3d8922de1
--- /dev/null
+++ b/test/language/expressions/compound-assignment/add-non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.14.1
+description: Compound addition assignment with non-simple target
+negative: ReferenceError
+---*/
+
+1 += 1;
diff --git a/test/language/expressions/compound-assignment/btws-and-non-simple.js b/test/language/expressions/compound-assignment/btws-and-non-simple.js
new file mode 100644
index 0000000000..2947bf4e59
--- /dev/null
+++ b/test/language/expressions/compound-assignment/btws-and-non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.14.1
+description: Compound "bitwise and" assignment with non-simple target
+negative: ReferenceError
+---*/
+
+1 &= 1;
diff --git a/test/language/expressions/compound-assignment/btws-or-non-simple.js b/test/language/expressions/compound-assignment/btws-or-non-simple.js
new file mode 100644
index 0000000000..956a457ed1
--- /dev/null
+++ b/test/language/expressions/compound-assignment/btws-or-non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.14.1
+description: Compound "bitwise or" assignment with non-simple target
+negative: ReferenceError
+---*/
+
+1 |= 1;
diff --git a/test/language/expressions/compound-assignment/btws-xor-non-simple.js b/test/language/expressions/compound-assignment/btws-xor-non-simple.js
new file mode 100644
index 0000000000..63515dd5df
--- /dev/null
+++ b/test/language/expressions/compound-assignment/btws-xor-non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.14.1
+description: Compound "bitwise xor" assignment with non-simple target
+negative: ReferenceError
+---*/
+
+1 ^= 1;
diff --git a/test/language/expressions/compound-assignment/div-non-simple.js b/test/language/expressions/compound-assignment/div-non-simple.js
new file mode 100644
index 0000000000..03734dde94
--- /dev/null
+++ b/test/language/expressions/compound-assignment/div-non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.14.1
+description: Compound division assignment with non-simple target
+negative: ReferenceError
+---*/
+
+1 /= 1;
diff --git a/test/language/expressions/compound-assignment/left-shift-non-simple.js b/test/language/expressions/compound-assignment/left-shift-non-simple.js
new file mode 100644
index 0000000000..61a4d91e55
--- /dev/null
+++ b/test/language/expressions/compound-assignment/left-shift-non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.14.1
+description: Compound "left shift" assignment with non-simple target
+negative: ReferenceError
+---*/
+
+1 <<= 1;
diff --git a/test/language/expressions/compound-assignment/mod-div-non-simple.js b/test/language/expressions/compound-assignment/mod-div-non-simple.js
new file mode 100644
index 0000000000..2ff9777f8c
--- /dev/null
+++ b/test/language/expressions/compound-assignment/mod-div-non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.14.1
+description: Compound "modular division" assignment with non-simple target
+negative: ReferenceError
+---*/
+
+1 %= 1;
diff --git a/test/language/expressions/compound-assignment/mult-non-simple.js b/test/language/expressions/compound-assignment/mult-non-simple.js
new file mode 100644
index 0000000000..bf08e41182
--- /dev/null
+++ b/test/language/expressions/compound-assignment/mult-non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.14.1
+description: Compound multiplication assignment with non-simple target
+negative: ReferenceError
+---*/
+
+1 *= 1;
diff --git a/test/language/expressions/compound-assignment/right-shift-non-simple.js b/test/language/expressions/compound-assignment/right-shift-non-simple.js
new file mode 100644
index 0000000000..941d3319e2
--- /dev/null
+++ b/test/language/expressions/compound-assignment/right-shift-non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.14.1
+description: Compound "right shift" assignment with non-simple target
+negative: ReferenceError
+---*/
+
+1 >>= 1;
diff --git a/test/language/expressions/compound-assignment/subtract-non-simple.js b/test/language/expressions/compound-assignment/subtract-non-simple.js
new file mode 100644
index 0000000000..8c1f95b7bf
--- /dev/null
+++ b/test/language/expressions/compound-assignment/subtract-non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.14.1
+description: Compound subtraction assignment with non-simple target
+negative: ReferenceError
+---*/
+
+1 -= 1;
diff --git a/test/language/expressions/compound-assignment/u-right-shift-non-simple.js b/test/language/expressions/compound-assignment/u-right-shift-non-simple.js
new file mode 100644
index 0000000000..0114e77011
--- /dev/null
+++ b/test/language/expressions/compound-assignment/u-right-shift-non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.14.1
+description: Compound "unsigned right shift" assignment with non-simple target
+negative: ReferenceError
+---*/
+
+1 >>>= 1;
diff --git a/test/language/expressions/postfix-decrement/S11.3.2_A2.1_T3.js b/test/language/expressions/postfix-decrement/S11.3.2_A2.1_T3.js
deleted file mode 100644
index 6730b85c9b..0000000000
--- a/test/language/expressions/postfix-decrement/S11.3.2_A2.1_T3.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: >
- Operator x-- uses GetValue and PutValue
- ES6, 12.4.1 and 12.5.1 specify ReferenceError
-es5id: 11.3.2_A2.1_T3
-description: If Type(x) is not Reference, throw ReferenceError
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  1--;
-  $ERROR('#1.1: 1-- throw ReferenceError. Actual: ' + (1--));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1-- throw ReferenceError. Actual: ' + (e));  
-  } else {
-    1--;
-  }
-}
diff --git a/test/language/expressions/postfix-decrement/non-simple.js b/test/language/expressions/postfix-decrement/non-simple.js
new file mode 100644
index 0000000000..3387ae6666
--- /dev/null
+++ b/test/language/expressions/postfix-decrement/non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.4.1
+description: Applied to a non-simple assignment target
+negative: ReferenceError
+---*/
+
+1--;
diff --git a/test/language/expressions/postfix-increment/S11.3.1_A2.1_T3.js b/test/language/expressions/postfix-increment/S11.3.1_A2.1_T3.js
deleted file mode 100644
index 2e505b5324..0000000000
--- a/test/language/expressions/postfix-increment/S11.3.1_A2.1_T3.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: > 
- Operator x++ uses GetValue and PutValue
- ES6, 12.4.1 and 12.5.1 specify ReferenceError
-es5id: 11.3.1_A2.1_T3
-description: If Type(x) is not Reference, throw ReferenceError
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  1++;
-  $ERROR('#1.1: 1++ throw ReferenceError. Actual: ' + (1++));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: 1++ throw ReferenceError. Actual: ' + (e));  
-  } else {
-    1++;
-  }
-}
diff --git a/test/language/expressions/postfix-increment/non-simple.js b/test/language/expressions/postfix-increment/non-simple.js
new file mode 100644
index 0000000000..5d90aed8c7
--- /dev/null
+++ b/test/language/expressions/postfix-increment/non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    LeftHandSideExpression is false.
+es6id: 12.4.1
+description: Applied to a non-simple assignment target
+negative: ReferenceError
+---*/
+
+1++;
diff --git a/test/language/expressions/prefix-decrement/S11.4.5_A2.1_T3.js b/test/language/expressions/prefix-decrement/S11.4.5_A2.1_T3.js
deleted file mode 100644
index 2676764921..0000000000
--- a/test/language/expressions/prefix-decrement/S11.4.5_A2.1_T3.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: > 
- Operator --x uses GetValue and PutValue
- ES6 12.5.1 specifies this as ReferenceError
-es5id: 11.4.5_A2.1_T3
-description: If Type(x) is not Reference, throw ReferenceError
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  --1;
-  $ERROR('#1.1: --1 throw ReferenceError. Actual: ' + (--1));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: --1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    --1;
-  }
-}
diff --git a/test/language/expressions/prefix-decrement/non-simple.js b/test/language/expressions/prefix-decrement/non-simple.js
new file mode 100644
index 0000000000..b7a805a3b4
--- /dev/null
+++ b/test/language/expressions/prefix-decrement/non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    It is an early Reference Error if IsValidSimpleAssignmentTarget of
+    UnaryExpression is false.
+es5id: 12.5.1
+description: Applied to a non-simple assignment target
+negative: ReferenceError
+---*/
+
+--1;
diff --git a/test/language/expressions/prefix-increment/S11.4.4_A2.1_T3.js b/test/language/expressions/prefix-increment/S11.4.4_A2.1_T3.js
deleted file mode 100644
index ffb1d1c377..0000000000
--- a/test/language/expressions/prefix-increment/S11.4.4_A2.1_T3.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: >
- Operator ++x uses GetValue and PutValue
- ES6, 12.4.1 and 12.5.1 specify ReferenceError
-es5id: 11.4.4_A2.1_T3
-description: If Type(x) is not Reference, throw ReferenceError
-negative: ReferenceError
----*/
-
-//CHECK#1
-try {
-  ++1;
-  $ERROR('#1.1: ++1 throw ReferenceError. Actual: ' + (++1));  
-}
-catch (e) {
-  if ((e instanceof ReferenceError) !== true) {
-    $ERROR('#1.2: ++1 throw ReferenceError. Actual: ' + (e));  
-  } else {
-    ++1;
-  }
-}
diff --git a/test/language/expressions/prefix-increment/non-simple.js b/test/language/expressions/prefix-increment/non-simple.js
new file mode 100644
index 0000000000..42249e0536
--- /dev/null
+++ b/test/language/expressions/prefix-increment/non-simple.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+   It is an early Reference Error if IsValidSimpleAssignmentTarget of
+   UnaryExpression is false.
+es6id: 12.5.1
+description: Applied to a non-simple assignment target
+negative: ReferenceError
+---*/
+
+++1;
-- 
GitLab