| description("Test of Unicode escape sequences in string literals and identifiers, especially code point escape sequences."); |
| |
| function codeUnits(string) |
| { |
| var result = []; |
| for (var i = 0; i < string.length; ++i) { |
| var hex = "000" + string.charCodeAt(i).toString(16).toUpperCase(); |
| result.push(hex.substring(hex.length - 4)); |
| } |
| return result.join(","); |
| } |
| |
| function testStringUnicodeEscapeSequence(sequence, expectedResult) |
| { |
| shouldBeEqualToString('codeUnits("\\u' + sequence + '")', expectedResult); |
| } |
| |
| function testInvalidStringUnicodeEscapeSequence(sequence) |
| { |
| shouldThrow('codeUnits("\\u' + sequence + '")'); |
| } |
| |
| function testIdentifierStartUnicodeEscapeSequence(sequence, expectedResult) |
| { |
| shouldBeEqualToString('codeUnits(function \\u' + sequence + '(){}.name)', expectedResult); |
| } |
| |
| function testInvalidIdentifierStartUnicodeEscapeSequence(sequence) |
| { |
| shouldThrow('codeUnits(function \\u' + sequence + '(){}.name)'); |
| } |
| |
| function testIdentifierPartUnicodeEscapeSequence(sequence, expectedResult) |
| { |
| shouldBeEqualToString('codeUnits(function x\\u' + sequence + '(){}.name.substring(1))', expectedResult); |
| } |
| |
| function testInvalidIdentifierPartUnicodeEscapeSequence(sequence) |
| { |
| shouldThrow('codeUnits(function x\\u' + sequence + '(){}.name.substring(1))'); |
| } |
| |
| testStringUnicodeEscapeSequence("{0}", "0000"); |
| testStringUnicodeEscapeSequence("{41}", "0041"); |
| testStringUnicodeEscapeSequence("{D800}", "D800"); |
| testStringUnicodeEscapeSequence("{d800}", "D800"); |
| testStringUnicodeEscapeSequence("{DC00}", "DC00"); |
| testStringUnicodeEscapeSequence("{dc00}", "DC00"); |
| testStringUnicodeEscapeSequence("{FFFF}", "FFFF"); |
| testStringUnicodeEscapeSequence("{ffff}", "FFFF"); |
| testStringUnicodeEscapeSequence("{10000}", "D800,DC00"); |
| testStringUnicodeEscapeSequence("{10001}", "D800,DC01"); |
| testStringUnicodeEscapeSequence("{102C0}", "D800,DEC0"); |
| testStringUnicodeEscapeSequence("{102c0}", "D800,DEC0"); |
| testStringUnicodeEscapeSequence("{1D306}", "D834,DF06"); |
| testStringUnicodeEscapeSequence("{1d306}", "D834,DF06"); |
| testStringUnicodeEscapeSequence("{10FFFE}", "DBFF,DFFE"); |
| testStringUnicodeEscapeSequence("{10fffe}", "DBFF,DFFE"); |
| testStringUnicodeEscapeSequence("{10FFFF}", "DBFF,DFFF"); |
| testStringUnicodeEscapeSequence("{10ffff}", "DBFF,DFFF"); |
| testStringUnicodeEscapeSequence("{00000000000000000000000010FFFF}", "DBFF,DFFF"); |
| testStringUnicodeEscapeSequence("{00000000000000000000000010ffff}", "DBFF,DFFF"); |
| |
| testInvalidStringUnicodeEscapeSequence(""); |
| testInvalidStringUnicodeEscapeSequence("x"); |
| testInvalidStringUnicodeEscapeSequence("{"); |
| testInvalidStringUnicodeEscapeSequence("{}"); |
| testInvalidStringUnicodeEscapeSequence("{G}"); |
| testInvalidStringUnicodeEscapeSequence("{1G}"); |
| testInvalidStringUnicodeEscapeSequence("{110000}"); |
| testInvalidStringUnicodeEscapeSequence("{1000000}"); |
| testInvalidStringUnicodeEscapeSequence("{100000000000000000000000}"); |
| |
| testIdentifierStartUnicodeEscapeSequence("{41}", "0041"); |
| testIdentifierStartUnicodeEscapeSequence("{102C0}", "D800,DEC0"); |
| testIdentifierStartUnicodeEscapeSequence("{102c0}", "D800,DEC0"); |
| testIdentifierStartUnicodeEscapeSequence("{10000}", "D800,DC00"); |
| testIdentifierStartUnicodeEscapeSequence("{10001}", "D800,DC01"); |
| |
| testInvalidIdentifierStartUnicodeEscapeSequence(""); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{0}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{D800}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{d800}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{DC00}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{dc00}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{FFFF}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{ffff}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{10FFFE}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{10fffe}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{10FFFF}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{10ffff}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{00000000000000000000000010FFFF}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{00000000000000000000000010ffff}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{1D306}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{1d306}"); |
| |
| testInvalidIdentifierStartUnicodeEscapeSequence("x"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{G}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{1G}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{110000}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{1000000}"); |
| testInvalidIdentifierStartUnicodeEscapeSequence("{100000000000000000000000}"); |
| |
| testIdentifierPartUnicodeEscapeSequence("{41}", "0041"); |
| testIdentifierPartUnicodeEscapeSequence("{10000}", "D800,DC00"); |
| testIdentifierPartUnicodeEscapeSequence("{10001}", "D800,DC01"); |
| testIdentifierPartUnicodeEscapeSequence("{102C0}", "D800,DEC0"); |
| testIdentifierPartUnicodeEscapeSequence("{102c0}", "D800,DEC0"); |
| |
| testInvalidIdentifierPartUnicodeEscapeSequence(""); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{0}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{D800}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{d800}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{DC00}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{dc00}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{FFFF}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{ffff}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{1D306}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{1d306}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{10FFFE}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{10fffe}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{10FFFF}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{10ffff}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{00000000000000000000000010FFFF}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{00000000000000000000000010ffff}"); |
| |
| testInvalidIdentifierPartUnicodeEscapeSequence("x"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{G}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{1G}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{110000}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{1000000}"); |
| testInvalidIdentifierPartUnicodeEscapeSequence("{100000000000000000000000}"); |
| |
| var successfullyParsed = true; |