X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/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 index 0000000..b444280 --- /dev/null +++ b/tests/stress/template-literal-syntax.js @@ -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");