commit-queue@webkit.org | 88a7476 | 2015-11-19 22:54:46 +0000 | [diff] [blame] | 1 | |
| 2 | function 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 | |
| 11 | function 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 | |
| 25 | testSyntax("({ a: this.a } = {})"); |
| 26 | testSyntax("({ a: this['a'] } = {})"); |
| 27 | testSyntax("({ a: this[\"a\"] } = {})"); |
| 28 | testSyntax("[this.a ] = []"); |
| 29 | testSyntax("[this['a']] = []"); |
| 30 | testSyntax("[this[0]] = []"); |
| 31 | testSyntax("[...this[0]] = []"); |
| 32 | testSyntax("[...[function f() {}.prop]] = []"); |
| 33 | testSyntax("[...[{prop: 1}.prop]] = []"); |
| 34 | testSyntax("[...[this[0], ...this[1]]] = []"); |
| 35 | testSyntax("({ a: obj.a } = {})"); |
| 36 | testSyntax("({ a: obj['a'] } = {})"); |
| 37 | testSyntax("({ a: obj[\"a\"] } = {})"); |
| 38 | testSyntax("({ a: function() {}['prop'] } = {})"); |
| 39 | testSyntax("({ a: {prop: 1}.prop } = {})"); |
| 40 | testSyntax("[obj.a ] = []"); |
| 41 | testSyntax("[obj['a']] = []"); |
| 42 | testSyntax("[obj[0]] = []"); |
| 43 | testSyntax("[function(){}.prop] = []"); |
| 44 | testSyntax("[{prop: 1}.prop] = []"); |
| 45 | |
| 46 | |
| 47 | testSyntaxError("[...c = 1] = []", "SyntaxError: Unexpected token '='. Expected a closing ']' following a rest element destructuring pattern."); |
| 48 | testSyntaxError("[...c, d] = []", "SyntaxError: Unexpected token ','. Expected a closing ']' following a rest element destructuring pattern."); |
| 49 | testSyntaxError("[this] = []", "SyntaxError: Invalid destructuring assignment target."); |
commit-queue@webkit.org | 85cc4ef | 2018-04-28 23:32:27 +0000 | [diff] [blame] | 50 | testSyntaxError("[th\\u{69}s] = []", "SyntaxError: Unexpected escaped characters in keyword token: 'th\\u{69}s'"); |
commit-queue@webkit.org | 88a7476 | 2015-11-19 22:54:46 +0000 | [diff] [blame] | 51 | testSyntaxError("[function() {}] = []", "SyntaxError: Invalid destructuring assignment target."); |
| 52 | testSyntaxError("['string'] = []", "SyntaxError: Invalid destructuring assignment target."); |
| 53 | testSyntaxError("[123] = []", "SyntaxError: Invalid destructuring assignment target."); |
| 54 | testSyntaxError("[true] = []", "SyntaxError: Invalid destructuring assignment target."); |
commit-queue@webkit.org | 85cc4ef | 2018-04-28 23:32:27 +0000 | [diff] [blame] | 55 | testSyntaxError("[tru\\u0065] = []", "SyntaxError: Unexpected escaped characters in keyword token: 'tru\\u0065'"); |
commit-queue@webkit.org | 88a7476 | 2015-11-19 22:54:46 +0000 | [diff] [blame] | 56 | testSyntaxError("[false] = []", "SyntaxError: Invalid destructuring assignment target."); |
commit-queue@webkit.org | 85cc4ef | 2018-04-28 23:32:27 +0000 | [diff] [blame] | 57 | testSyntaxError("[f\\u0061lse] = []", "SyntaxError: Unexpected escaped characters in keyword token: 'f\\u0061lse'"); |
commit-queue@webkit.org | 88a7476 | 2015-11-19 22:54:46 +0000 | [diff] [blame] | 58 | testSyntaxError("[null] = []", "SyntaxError: Invalid destructuring assignment target."); |
commit-queue@webkit.org | 85cc4ef | 2018-04-28 23:32:27 +0000 | [diff] [blame] | 59 | testSyntaxError("[n\\u{75}ll] = []", "SyntaxError: Unexpected escaped characters in keyword token: 'n\\u{75}ll'"); |
commit-queue@webkit.org | 3d56b84 | 2015-12-15 17:58:04 +0000 | [diff] [blame] | 60 | |
| 61 | testSyntaxError("'use strict'; ({ eval } = {})", "SyntaxError: Cannot modify 'eval' in strict mode."); |
commit-queue@webkit.org | 69997d6 | 2015-12-16 17:49:14 +0000 | [diff] [blame] | 62 | testSyntaxError("'use strict'; ({ eval = 0 } = {})", "SyntaxError: Cannot modify 'eval' in strict mode."); |
commit-queue@webkit.org | 3d56b84 | 2015-12-15 17:58:04 +0000 | [diff] [blame] | 63 | testSyntaxError("'use strict'; ({ a: eval } = {})", "SyntaxError: Cannot modify 'eval' in strict mode."); |
| 64 | testSyntaxError("'use strict'; ({ a: eval = 0 } = {})", "SyntaxError: Cannot modify 'eval' in strict mode."); |
| 65 | testSyntaxError("'use strict'; ({ arguments } = {})", "SyntaxError: Cannot modify 'arguments' in strict mode."); |
commit-queue@webkit.org | 69997d6 | 2015-12-16 17:49:14 +0000 | [diff] [blame] | 66 | testSyntaxError("'use strict'; ({ arguments = 0 } = {})", "SyntaxError: Cannot modify 'arguments' in strict mode."); |
commit-queue@webkit.org | 3d56b84 | 2015-12-15 17:58:04 +0000 | [diff] [blame] | 67 | testSyntaxError("'use strict'; ({ a: arguments } = {})", "SyntaxError: Cannot modify 'arguments' in strict mode."); |
| 68 | testSyntaxError("'use strict'; ({ a: arguments = 0 } = {})", "SyntaxError: Cannot modify 'arguments' in strict mode."); |
| 69 | testSyntaxError("'use strict'; ([ eval ] = [])", "SyntaxError: Cannot modify 'eval' in strict mode."); |
| 70 | testSyntaxError("'use strict'; ([ eval = 0 ] = [])", "SyntaxError: Cannot modify 'eval' in strict mode."); |
| 71 | testSyntaxError("'use strict'; ([ arguments ] = [])", "SyntaxError: Cannot modify 'arguments' in strict mode."); |
commit-queue@webkit.org | 85cc4ef | 2018-04-28 23:32:27 +0000 | [diff] [blame] | 72 | testSyntaxError("'use strict'; ([ arguments = 0 ] = [])", "SyntaxError: Cannot modify 'arguments' in strict mode."); |