139 lines
6.4 KiB
JavaScript
139 lines
6.4 KiB
JavaScript
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;
|