REGRESSION (r183373): ASSERT failed in wtf/SHA1.h
[WebKit-https.git] / Source / JavaScriptCore / tests / stress / template-literal-syntax.js
1 //@ skip
2
3 function testSyntax(script) {
4     try {
5         eval(script);
6     } catch (error) {
7         if (error instanceof SyntaxError)
8             throw new Error("Bad error: " + String(error));
9     }
10 }
11
12 function testSyntaxError(script, message) {
13     var error = null;
14     try {
15         eval(script);
16     } catch (e) {
17         error = e;
18     }
19     if (!error)
20         throw new Error("Expected syntax error not thrown");
21
22     if (String(error) !== message)
23         throw new Error("Bad error: " + String(error));
24 }
25
26 testSyntax("`Hello`");
27 testSyntax("(`Hello`)");
28 testSyntax("(`Hello`) + 42");
29 testSyntax("`\nHello\nWorld`");
30 testSyntax("`\nHello\n${World}`");
31 testSyntax("`${World}`");
32 testSyntax("`${World} Hello`");
33 testSyntax("`$ {World} Hello`");
34 testSyntax("`\\uFEFFtest`");
35 testSyntax("`\r\n`");
36 testSyntax("`\\r\\n`");
37 testSyntax("`\n`");
38 testSyntax("`\\n`");
39 testSyntax("`\u2028`");
40 testSyntax("`\\u2028`");
41 testSyntax("`\u2029`");
42 testSyntax("`\\u2029`");
43 testSyntax("`\\0`");
44 testSyntax("`\0`");
45 testSyntax("`\\x7f`");
46 testSyntax("(`Hello`) + 42");
47 testSyntax("`\\\n`");
48 testSyntax("`\\\r\n`");
49 testSyntax("`\\\r`");
50
51 testSyntaxError("`Hello", "SyntaxError: Unexpected EOF");
52 testSyntaxError("`Hello${expr}", "SyntaxError: Unexpected EOF");
53 testSyntaxError("`Hello${}", "SyntaxError: Unexpected token '}'. Template literal expression cannot be empty.");
54 testSyntaxError("`Hello${expr} ${}", "SyntaxError: Unexpected token '}'. Template literal expression cannot be empty.");
55 testSyntaxError("`Hello${expr}", "SyntaxError: Unexpected EOF");
56 testSyntaxError("`Hello${expr} ${expr}", "SyntaxError: Unexpected EOF");
57 testSyntaxError("`Hello${expr`", "SyntaxError: Unexpected EOF");
58 testSyntaxError("`Hello${expr} ${expr`", "SyntaxError: Unexpected EOF");
59 testSyntaxError("`Hello expr${`", "SyntaxError: Unexpected EOF");
60 testSyntaxError("`Hello${expr} expr${`", "SyntaxError: Unexpected EOF");
61 testSyntaxError("`Hello ${}`", "SyntaxError: Unexpected token '}'. Template literal expression cannot be empty.");
62 testSyntaxError("`Hello${expr} ${}`", "SyntaxError: Unexpected token '}'. Template literal expression cannot be empty.");
63 testSyntaxError("`\\07`", "SyntaxError: The only valid numeric escape in strict mode is '\\0'");
64 for (var i = 1; i < 7; ++i) {
65     testSyntaxError("`\\" + i + "`", "SyntaxError: The only valid numeric escape in strict mode is '\\0'");
66     testSyntaxError("`${expr}\\" + i + "`", "SyntaxError: The only valid numeric escape in strict mode is '\\0'");
67 }
68 // \8 and \9 are not allowed.
69 for (var i = 8; i < 9; ++i) {
70     testSyntaxError("`\\" + i + "`", "SyntaxError: The only valid numeric escape in strict mode is '\\0'");
71     testSyntaxError("`${expr}\\" + i + "`", "SyntaxError: The only valid numeric escape in strict mode is '\\0'");
72 }
73 testSyntaxError("`\\x7`", "SyntaxError: \\x can only be followed by a hex character sequence");
74 testSyntaxError("`${expr}\\x7`", "SyntaxError: \\x can only be followed by a hex character sequence");
75 testSyntaxError("`\\x`", "SyntaxError: \\x can only be followed by a hex character sequence");
76 testSyntaxError("`${expr}\\x`", "SyntaxError: \\x can only be followed by a hex character sequence");
77 testSyntaxError("`\\u`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
78 testSyntaxError("`${expr}\\u`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
79 testSyntaxError("`\\u2`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
80 testSyntaxError("`${expr}\\u2`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
81 testSyntaxError("`\\u20`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
82 testSyntaxError("`${expr}\\u20`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
83 testSyntaxError("`\\u202`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
84 testSyntaxError("`${expr}\\u202`", "SyntaxError: \\u can only be followed by a Unicode character sequence");