+;;; Strict mode errors
+
+(js2-deftest-parse function-bad-strict-parameters
+ "'use strict';\nfunction foo(eval, {arguments}, bar) {\n}"
+ :syntax-error "eval" :errors-count 2)
+
+(js2-deftest-parse function-retroactive-bad-strict-parameters
+ "function foo(arguments) {'use strict';}"
+ :syntax-error "arguments" :errors-count 1)
+
+(js2-deftest-parse function-duplicate-strict-parameters
+ "'use strict';\nfunction foo(a, a) {\n}"
+ :syntax-error "a" :errors-count 1)
+
+(js2-deftest-parse function-bad-strict-function-name
+ "'use strict';\nfunction eval() {\n}"
+ :syntax-error "eval" :errors-count 1)
+
+(js2-deftest-parse function-bad-retroactive-strict-function-name
+ "function arguments() {'use strict';}"
+ :syntax-error "arguments" :errors-count 1)
+
+(js2-deftest-parse function-bad-strict-catch-name
+ "'use strict';\ntry {} catch (eval) {}"
+ :syntax-error "eval" :errors-count 1)
+
+(js2-deftest-parse function-bad-strict-variable-name
+ "'use strict';\nvar eval = 'kekeke';"
+ :syntax-error "eval" :errors-count 1)
+
+(js2-deftest-parse function-bad-strict-assignment
+ "'use strict';\narguments = 'fufufu';"
+ :syntax-error "arguments" :errors-count 1)
+
+(js2-deftest-parse function-property-strict-assignment
+ "'use strict';\narguments.okay = 'alright';")
+
+(js2-deftest-parse function-strict-with
+ "'use strict';\nwith ({}) {}"
+ :syntax-error "with" :errors-count 1)
+
+(js2-deftest-parse function-strict-octal
+ "'use strict';\nvar number = 0644;"
+ :syntax-error "0644" :errors-count 1)
+
+(js2-deftest-parse function-strict-octal-allow-0o
+ "'use strict';\n0o644;" :reference "'use strict';\n420;")
+
+(js2-deftest-parse function-strict-duplicate-keys
+ "'use strict';\nvar object = {a: 1, a: 2, 'a': 3, ['a']: 4, 1: 5, '1': 6, [1 + 1]: 7};"
+ :syntax-error "a" :errors-count 4) ; "a" has 3 dupes, "1" has 1 dupe.
+
+(js2-deftest-parse function-strict-duplicate-getter
+ "'use strict';\nvar a = {get x() {}, get x() {}};"
+ :syntax-error "x" :errors-count 1)
+
+(js2-deftest-parse function-strict-duplicate-setter
+ "'use strict';\nvar a = {set x() {}, set x() {}};"
+ :syntax-error "x" :errors-count 1)
+
+;;; Lack of errors in strict mode
+
+(js2-deftest-parse function-strict-const-scope
+ "'use strict';\nconst a;\nif (1) {\n const a;\n}")
+
+(js2-deftest-parse function-strict-no-getter-setter-duplicate
+ "'use strict';\nvar a = {get x() {}, set x() {}};")
+