| 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(); |