mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 02:32:45 +00:00 
			
		
		
		
	 3fee7b0d0b
			
		
	
	
		3fee7b0d0b
		
	
	
	
	
		
			
			These are tested by test262 but the current test262-runner reads the files in python which automatically converts \r\n to \n. This meant that we passed the tests while we should not have.
		
			
				
	
	
		
			94 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | ||
| These tests deliberately produce syntax errors to check what line the parser thinks we're on.
 | ||
| Note that line numbers are higher than you might expect as the parsed code is:
 | ||
| 
 | ||
| function anonymous(
 | ||
| ) {
 | ||
| <code>
 | ||
| }
 | ||
| 
 | ||
| ⚠ PLEASE MAKE SURE TO NOT LET YOUR EDITOR REMOVE THE LS/PS LINE TERMINATORS!
 | ||
| */
 | ||
| 
 | ||
| test("LINE FEED is a line terminator", () => {
 | ||
|     expect(() => {
 | ||
|         Function("\n\n@");
 | ||
|     }).toThrowWithMessage(SyntaxError, "line: 5, column: 1");
 | ||
| });
 | ||
| 
 | ||
| test("CARRIAGE RETURN is a line terminator", () => {
 | ||
|     expect(() => {
 | ||
|         Function("\r\r@");
 | ||
|     }).toThrowWithMessage(SyntaxError, "line: 5, column: 1");
 | ||
| });
 | ||
| 
 | ||
| test("LINE SEPARATOR is a line terminator", () => {
 | ||
|     expect(() => {
 | ||
|         Function("
@");
 | ||
|     }).toThrowWithMessage(SyntaxError, "line: 5, column: 1");
 | ||
| });
 | ||
| 
 | ||
| test("PARAGRAPH SEPARATOR is a line terminator", () => {
 | ||
|     expect(() => {
 | ||
|         Function("
@");
 | ||
|     }).toThrowWithMessage(SyntaxError, "line: 5, column: 1");
 | ||
| });
 | ||
| 
 | ||
| test("CR LF is counted as only one line terminator", () => {
 | ||
|     expect(() => {
 | ||
|         Function("\r\n\r\n@");
 | ||
|     }).toThrowWithMessage(SyntaxError, "line: 5, column: 1");
 | ||
| });
 | ||
| 
 | ||
| test("LF/CR are not allowed in string literal", () => {
 | ||
|     expect(() => {
 | ||
|         Function(`"
 | ||
|         "`);
 | ||
|     }).toThrowWithMessage(SyntaxError, "Unexpected token UnterminatedStringLiteral");
 | ||
| });
 | ||
| 
 | ||
| test("LS/PS are allowed in string literal", () => {
 | ||
|     expect(`"
"`).toEval();
 | ||
|     expect(`"
"`).toEval();
 | ||
| });
 | ||
| 
 | ||
| test("line terminators can be mixed (but please don't)", () => {
 | ||
|     expect(() => {
 | ||
|         Function("\r
\r\n
\n\r@");
 | ||
|     }).toThrowWithMessage(SyntaxError, "line: 9, column: 1");
 | ||
| });
 | ||
| 
 | ||
| test("all line terminators are valid for line continuations", () => {
 | ||
|     expect(Function('return "a\\\nb"')()).toBe("ab");
 | ||
|     expect(Function('return "a\\\rb"')()).toBe("ab");
 | ||
|     expect(Function('return "a\\\r\nb"')()).toBe("ab");
 | ||
|     expect(Function('return "a\\
b"')()).toBe("ab");
 | ||
|     expect(Function('return "a\\
b"')()).toBe("ab");
 | ||
| });
 | ||
| 
 | ||
| test("template-literals raw and real value", () => {
 | ||
|     let lastTemplate;
 | ||
|     let lastRaw;
 | ||
| 
 | ||
|     function tag(cs) {
 | ||
|         lastTemplate = cs[0];
 | ||
|         lastRaw = cs.raw[0];
 | ||
|     }
 | ||
| 
 | ||
|     function checkTemplate(string_value, expected_template, expected_raw) {
 | ||
|         eval("tag`" + string_value + "`");
 | ||
|         expect(lastTemplate).toBe(expected_template);
 | ||
|         expect(lastRaw).toBe(expected_raw);
 | ||
|     }
 | ||
| 
 | ||
|     checkTemplate("", "", "");
 | ||
|     checkTemplate("\n", "\n", "\n");
 | ||
|     checkTemplate("\r", "\n", "\n");
 | ||
|     checkTemplate("\r\n", "\n", "\n");
 | ||
|     checkTemplate("\n\r\n", "\n\n", "\n\n");
 | ||
| 
 | ||
|     checkTemplate("a\\\nb", "ab", "a\\\nb");
 | ||
|     checkTemplate("a\\\rb", "ab", "a\\\nb");
 | ||
|     checkTemplate("a\\
b", "ab", "a\\
b");
 | ||
|     checkTemplate("a\\
b", "ab", "a\\
b");
 | ||
| });
 |