blob: 823e2e0bedd48363be87afc36d010a9b7edef33e [file] [log] [blame]
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;