blob: 4567da25e2f62d33cac5a04af0a1cc2d282ff877 [file] [log] [blame]
commit-queue@webkit.org88a74762015-11-19 22:54:46 +00001
2function testSyntax(script) {
3 try {
4 eval(script);
5 } catch (error) {
6 if (error instanceof SyntaxError)
7 throw new Error("Bad error: " + String(error));
8 }
9}
10
11function testSyntaxError(script, message) {
12 var error = null;
13 try {
14 eval(script);
15 } catch (e) {
16 error = e;
17 }
18 if (!error)
19 throw new Error("Expected syntax error not thrown");
20
21 if (String(error) !== message)
22 throw new Error("Bad error: " + String(error));
23}
24
25testSyntax("({ a: this.a } = {})");
26testSyntax("({ a: this['a'] } = {})");
27testSyntax("({ a: this[\"a\"] } = {})");
28testSyntax("[this.a ] = []");
29testSyntax("[this['a']] = []");
30testSyntax("[this[0]] = []");
31testSyntax("[...this[0]] = []");
32testSyntax("[...[function f() {}.prop]] = []");
33testSyntax("[...[{prop: 1}.prop]] = []");
34testSyntax("[...[this[0], ...this[1]]] = []");
35testSyntax("({ a: obj.a } = {})");
36testSyntax("({ a: obj['a'] } = {})");
37testSyntax("({ a: obj[\"a\"] } = {})");
38testSyntax("({ a: function() {}['prop'] } = {})");
39testSyntax("({ a: {prop: 1}.prop } = {})");
40testSyntax("[obj.a ] = []");
41testSyntax("[obj['a']] = []");
42testSyntax("[obj[0]] = []");
43testSyntax("[function(){}.prop] = []");
44testSyntax("[{prop: 1}.prop] = []");
45
46
47testSyntaxError("[...c = 1] = []", "SyntaxError: Unexpected token '='. Expected a closing ']' following a rest element destructuring pattern.");
48testSyntaxError("[...c, d] = []", "SyntaxError: Unexpected token ','. Expected a closing ']' following a rest element destructuring pattern.");
49testSyntaxError("[this] = []", "SyntaxError: Invalid destructuring assignment target.");
commit-queue@webkit.org85cc4ef2018-04-28 23:32:27 +000050testSyntaxError("[th\\u{69}s] = []", "SyntaxError: Unexpected escaped characters in keyword token: 'th\\u{69}s'");
commit-queue@webkit.org88a74762015-11-19 22:54:46 +000051testSyntaxError("[function() {}] = []", "SyntaxError: Invalid destructuring assignment target.");
52testSyntaxError("['string'] = []", "SyntaxError: Invalid destructuring assignment target.");
53testSyntaxError("[123] = []", "SyntaxError: Invalid destructuring assignment target.");
54testSyntaxError("[true] = []", "SyntaxError: Invalid destructuring assignment target.");
commit-queue@webkit.org85cc4ef2018-04-28 23:32:27 +000055testSyntaxError("[tru\\u0065] = []", "SyntaxError: Unexpected escaped characters in keyword token: 'tru\\u0065'");
commit-queue@webkit.org88a74762015-11-19 22:54:46 +000056testSyntaxError("[false] = []", "SyntaxError: Invalid destructuring assignment target.");
commit-queue@webkit.org85cc4ef2018-04-28 23:32:27 +000057testSyntaxError("[f\\u0061lse] = []", "SyntaxError: Unexpected escaped characters in keyword token: 'f\\u0061lse'");
commit-queue@webkit.org88a74762015-11-19 22:54:46 +000058testSyntaxError("[null] = []", "SyntaxError: Invalid destructuring assignment target.");
commit-queue@webkit.org85cc4ef2018-04-28 23:32:27 +000059testSyntaxError("[n\\u{75}ll] = []", "SyntaxError: Unexpected escaped characters in keyword token: 'n\\u{75}ll'");
commit-queue@webkit.org3d56b842015-12-15 17:58:04 +000060
61testSyntaxError("'use strict'; ({ eval } = {})", "SyntaxError: Cannot modify 'eval' in strict mode.");
commit-queue@webkit.org69997d62015-12-16 17:49:14 +000062testSyntaxError("'use strict'; ({ eval = 0 } = {})", "SyntaxError: Cannot modify 'eval' in strict mode.");
commit-queue@webkit.org3d56b842015-12-15 17:58:04 +000063testSyntaxError("'use strict'; ({ a: eval } = {})", "SyntaxError: Cannot modify 'eval' in strict mode.");
64testSyntaxError("'use strict'; ({ a: eval = 0 } = {})", "SyntaxError: Cannot modify 'eval' in strict mode.");
65testSyntaxError("'use strict'; ({ arguments } = {})", "SyntaxError: Cannot modify 'arguments' in strict mode.");
commit-queue@webkit.org69997d62015-12-16 17:49:14 +000066testSyntaxError("'use strict'; ({ arguments = 0 } = {})", "SyntaxError: Cannot modify 'arguments' in strict mode.");
commit-queue@webkit.org3d56b842015-12-15 17:58:04 +000067testSyntaxError("'use strict'; ({ a: arguments } = {})", "SyntaxError: Cannot modify 'arguments' in strict mode.");
68testSyntaxError("'use strict'; ({ a: arguments = 0 } = {})", "SyntaxError: Cannot modify 'arguments' in strict mode.");
69testSyntaxError("'use strict'; ([ eval ] = [])", "SyntaxError: Cannot modify 'eval' in strict mode.");
70testSyntaxError("'use strict'; ([ eval = 0 ] = [])", "SyntaxError: Cannot modify 'eval' in strict mode.");
71testSyntaxError("'use strict'; ([ arguments ] = [])", "SyntaxError: Cannot modify 'arguments' in strict mode.");
commit-queue@webkit.org85cc4ef2018-04-28 23:32:27 +000072testSyntaxError("'use strict'; ([ arguments = 0 ] = [])", "SyntaxError: Cannot modify 'arguments' in strict mode.");