blob: 019a1f98ca049689bfa71a81effd4da3b2bf0028 [file] [log] [blame]
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);