9d504befbe9d1463fa6fc0cf9d93fa2c1e754dd7
[WebKit-https.git] / Source / JavaScriptCore / tests / stress / template-literal-line-terminators.js
1 function test(actual, expected) {
2     if (actual !== expected)
3         throw new Error("bad value: " + actual);
4 }
5
6 function testEval(script, expected) {
7     test(eval(script), expected);
8 }
9
10 function testEvalLineNumber(script, expected, lineNum) {
11     testEval(script, expected);
12
13     var error = null;
14     var actualLine;
15     try {
16         eval(script + ';throw new Error("line");');
17     } catch (error) {
18         actualLine = error.line;
19     }
20     test(actualLine, lineNum);
21 }
22
23 test(`Hello`, "Hello");
24 test(`Hello World`, "Hello World");
25 test(`
26 `, "\n");
27 test(`Hello
28 World`, "Hello\nWorld");
29
30 testEvalLineNumber("`Hello World`", "Hello World", 1);
31
32 testEvalLineNumber("`Hello\rWorld`", "Hello\nWorld", 2);
33 testEvalLineNumber("`Hello\nWorld`", "Hello\nWorld", 2);
34
35 testEvalLineNumber("`Hello\r\rWorld`", "Hello\n\nWorld", 3);
36 testEvalLineNumber("`Hello\r\nWorld`", "Hello\nWorld", 2);
37 testEvalLineNumber("`Hello\n\nWorld`", "Hello\n\nWorld", 3);
38 testEvalLineNumber("`Hello\n\rWorld`", "Hello\n\nWorld", 2);
39
40 testEvalLineNumber("`Hello\n\r\nWorld`", "Hello\n\nWorld", 3);
41 testEvalLineNumber("`Hello\r\n\rWorld`", "Hello\n\nWorld", 3);
42 testEvalLineNumber("`Hello\n\n\nWorld`", "Hello\n\n\nWorld", 4);
43
44 testEvalLineNumber("`Hello\n\r\n\rWorld`", "Hello\n\n\nWorld", 3);
45 testEvalLineNumber("`Hello\n\r\n\nWorld`", "Hello\n\n\nWorld", 4);
46 testEvalLineNumber("`Hello\r\n\n\nWorld`", "Hello\n\n\nWorld", 4);
47
48 testEvalLineNumber("`Hello\\\n\r\rWorld`", "Hello\n\nWorld", 3);
49 testEvalLineNumber("`Hello\\\r\n\n\nWorld`", "Hello\n\nWorld", 4);
50 testEvalLineNumber("`Hello\\\n\r\n\nWorld`", "Hello\n\nWorld", 4);
51 testEvalLineNumber("`Hello\\\n\r\r\nWorld`", "Hello\n\nWorld", 3);
52
53 testEvalLineNumber("`\u2028`", "\u2028", 2);
54 testEvalLineNumber("`\u2029`", "\u2029", 2);
55 testEvalLineNumber("`\\u2028`", "\u2028", 1);
56 testEvalLineNumber("`\\u2029`", "\u2029", 1);