]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - tests/stress/template-literal-syntax.js
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / tests / stress / template-literal-syntax.js
diff --git a/tests/stress/template-literal-syntax.js b/tests/stress/template-literal-syntax.js
new file mode 100644 (file)
index 0000000..b444280
--- /dev/null
@@ -0,0 +1,83 @@
+
+function testSyntax(script) {
+    try {
+        eval(script);
+    } catch (error) {
+        if (error instanceof SyntaxError)
+            throw new Error("Bad error: " + String(error));
+    }
+}
+
+function testSyntaxError(script, message) {
+    var error = null;
+    try {
+        eval(script);
+    } catch (e) {
+        error = e;
+    }
+    if (!error)
+        throw new Error("Expected syntax error not thrown");
+
+    if (String(error) !== message)
+        throw new Error("Bad error: " + String(error));
+}
+
+testSyntax("`Hello`");
+testSyntax("(`Hello`)");
+testSyntax("(`Hello`) + 42");
+testSyntax("`\nHello\nWorld`");
+testSyntax("`\nHello\n${World}`");
+testSyntax("`${World}`");
+testSyntax("`${World} Hello`");
+testSyntax("`$ {World} Hello`");
+testSyntax("`\\uFEFFtest`");
+testSyntax("`\r\n`");
+testSyntax("`\\r\\n`");
+testSyntax("`\n`");
+testSyntax("`\\n`");
+testSyntax("`\u2028`");
+testSyntax("`\\u2028`");
+testSyntax("`\u2029`");
+testSyntax("`\\u2029`");
+testSyntax("`\\0`");
+testSyntax("`\0`");
+testSyntax("`\\x7f`");
+testSyntax("(`Hello`) + 42");
+testSyntax("`\\\n`");
+testSyntax("`\\\r\n`");
+testSyntax("`\\\r`");
+
+testSyntaxError("`Hello", "SyntaxError: Unexpected EOF");
+testSyntaxError("`Hello${expr}", "SyntaxError: Unexpected EOF");
+testSyntaxError("`Hello${}", "SyntaxError: Unexpected token '}'. Template literal expression cannot be empty.");
+testSyntaxError("`Hello${expr} ${}", "SyntaxError: Unexpected token '}'. Template literal expression cannot be empty.");
+testSyntaxError("`Hello${expr}", "SyntaxError: Unexpected EOF");
+testSyntaxError("`Hello${expr} ${expr}", "SyntaxError: Unexpected EOF");
+testSyntaxError("`Hello${expr`", "SyntaxError: Unexpected EOF");
+testSyntaxError("`Hello${expr} ${expr`", "SyntaxError: Unexpected EOF");
+testSyntaxError("`Hello expr${`", "SyntaxError: Unexpected EOF");
+testSyntaxError("`Hello${expr} expr${`", "SyntaxError: Unexpected EOF");
+testSyntaxError("`Hello ${}`", "SyntaxError: Unexpected token '}'. Template literal expression cannot be empty.");
+testSyntaxError("`Hello${expr} ${}`", "SyntaxError: Unexpected token '}'. Template literal expression cannot be empty.");
+testSyntaxError("`\\07`", "SyntaxError: The only valid numeric escape in strict mode is '\\0'");
+for (var i = 1; i < 7; ++i) {
+    testSyntaxError("`\\" + i + "`", "SyntaxError: The only valid numeric escape in strict mode is '\\0'");
+    testSyntaxError("`${expr}\\" + i + "`", "SyntaxError: The only valid numeric escape in strict mode is '\\0'");
+}
+// \8 and \9 are not allowed.
+for (var i = 8; i < 9; ++i) {
+    testSyntaxError("`\\" + i + "`", "SyntaxError: The only valid numeric escape in strict mode is '\\0'");
+    testSyntaxError("`${expr}\\" + i + "`", "SyntaxError: The only valid numeric escape in strict mode is '\\0'");
+}
+testSyntaxError("`\\x7`", "SyntaxError: \\x can only be followed by a hex character sequence");
+testSyntaxError("`${expr}\\x7`", "SyntaxError: \\x can only be followed by a hex character sequence");
+testSyntaxError("`\\x`", "SyntaxError: \\x can only be followed by a hex character sequence");
+testSyntaxError("`${expr}\\x`", "SyntaxError: \\x can only be followed by a hex character sequence");
+testSyntaxError("`\\u`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
+testSyntaxError("`${expr}\\u`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
+testSyntaxError("`\\u2`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
+testSyntaxError("`${expr}\\u2`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
+testSyntaxError("`\\u20`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
+testSyntaxError("`${expr}\\u20`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
+testSyntaxError("`\\u202`", "SyntaxError: \\u can only be followed by a Unicode character sequence");
+testSyntaxError("`${expr}\\u202`", "SyntaxError: \\u can only be followed by a Unicode character sequence");