]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - tests/stress/template-literal-line-terminators.js
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / tests / stress / template-literal-line-terminators.js
diff --git a/tests/stress/template-literal-line-terminators.js b/tests/stress/template-literal-line-terminators.js
new file mode 100644 (file)
index 0000000..019a1f9
--- /dev/null
@@ -0,0 +1,57 @@
+
+function test(actual, expected) {
+    if (actual !== expected)
+        throw new Error("bad value: " + actual);
+}
+
+function testEval(script, expected) {
+    test(eval(script), expected);
+}
+
+function testEvalLineNumber(script, expected, lineNum) {
+    testEval(script, expected);
+
+    var error = null;
+    var actualLine;
+    try {
+        eval(script + ';throw new Error("line");');
+    } catch (error) {
+        actualLine = error.line;
+    }
+    test(actualLine, lineNum);
+}
+
+test(`Hello`, "Hello");
+test(`Hello World`, "Hello World");
+test(`
+`, "\n");
+test(`Hello
+World`, "Hello\nWorld");
+
+testEvalLineNumber("`Hello World`", "Hello World", 1);
+
+testEvalLineNumber("`Hello\rWorld`", "Hello\nWorld", 2);
+testEvalLineNumber("`Hello\nWorld`", "Hello\nWorld", 2);
+
+testEvalLineNumber("`Hello\r\rWorld`", "Hello\n\nWorld", 3);
+testEvalLineNumber("`Hello\r\nWorld`", "Hello\nWorld", 2);
+testEvalLineNumber("`Hello\n\nWorld`", "Hello\n\nWorld", 3);
+testEvalLineNumber("`Hello\n\rWorld`", "Hello\n\nWorld", 2);
+
+testEvalLineNumber("`Hello\n\r\nWorld`", "Hello\n\nWorld", 3);
+testEvalLineNumber("`Hello\r\n\rWorld`", "Hello\n\nWorld", 3);
+testEvalLineNumber("`Hello\n\n\nWorld`", "Hello\n\n\nWorld", 4);
+
+testEvalLineNumber("`Hello\n\r\n\rWorld`", "Hello\n\n\nWorld", 3);
+testEvalLineNumber("`Hello\n\r\n\nWorld`", "Hello\n\n\nWorld", 4);
+testEvalLineNumber("`Hello\r\n\n\nWorld`", "Hello\n\n\nWorld", 4);
+
+testEvalLineNumber("`Hello\\\n\r\rWorld`", "Hello\n\nWorld", 3);
+testEvalLineNumber("`Hello\\\r\n\n\nWorld`", "Hello\n\nWorld", 4);
+testEvalLineNumber("`Hello\\\n\r\n\nWorld`", "Hello\n\nWorld", 4);
+testEvalLineNumber("`Hello\\\n\r\r\nWorld`", "Hello\n\nWorld", 3);
+
+testEvalLineNumber("`\u2028`", "\u2028", 2);
+testEvalLineNumber("`\u2029`", "\u2029", 2);
+testEvalLineNumber("`\\u2028`", "\u2028", 1);
+testEvalLineNumber("`\\u2029`", "\u2029", 1);