function testToLowerCase() { var s1 = "abcdefgABCDEFGH 123456"; assertEq(isLatin1(s1), true); // Latin1 var s2 = s1.toLowerCase(); assertEq(isLatin1(s2), true); assertEq(s2, "abcdefgabcdefgh 123456"); s2 = s1.toLocaleLowerCase(); assertEq(isLatin1(s2), true); assertEq(s2, "abcdefgabcdefgh 123456"); // TwoByte s2 = "abcdefg\u1200ABCDEFGH 123456\u04AC".toLowerCase(); assertEq(s2, "abcdefg\u1200abcdefgh 123456\u04AD"); s2 = "abcdefg\u1200ABCDEFGH 123456\u04AC".toLocaleLowerCase(); assertEq(s2, "abcdefg\u1200abcdefgh 123456\u04AD"); // For toLowerCase, every Latin1 character maps to a Latin1 character. for (var i=0; i <= 0xff; i++) { var s = "\u1200\u11AA" + String.fromCharCode(i); assertEq(s.toLowerCase().charCodeAt(2) <= 0xff, true); } } testToLowerCase(); function testToUpperCase() { var s1 = "abcdefgABCDEFGH 12345"; assertEq(isLatin1(s1), true); // Latin1 var s2 = s1.toUpperCase(); assertEq(isLatin1(s2), true); assertEq(s2, "ABCDEFGABCDEFGH 12345"); s2 = s1.toLocaleUpperCase(); assertEq(isLatin1(s2), true); assertEq(s2, "ABCDEFGABCDEFGH 12345"); // TwoByte s2 = "abcdefg\u1200ABCDEFGH 12345\u1E0F".toUpperCase(); assertEq(s2, "ABCDEFG\u1200ABCDEFGH 12345\u1E0E"); s2 = "abcdefg\u1200ABCDEFGH 12345\u1E0F".toLocaleUpperCase(); assertEq(s2, "ABCDEFG\u1200ABCDEFGH 12345\u1E0E"); // Tricky case: Latin1 character \u00FF maps to \u0178, a // non-Latin1 character. s1 = "ABC\u00FF"; assertEq(isLatin1(s1), true); s2 = s1.toUpperCase(); assertEq(isLatin1(s2), false); assertEq(s2, "ABC\u0178"); } testToUpperCase();