| //@ skip if $hostOS == "windows" |
| description("This test checks String.prototype.toLocaleUpperCase()."); |
| |
| shouldBe("String.prototype.toLocaleUpperCase.length", "0"); |
| |
| // Check empty string optimization. |
| shouldBe("''.toLocaleUpperCase()", "''"); |
| |
| // Generic |
| shouldBe("String.prototype.toLocaleUpperCase.call({ toString() { return 'a' } })", "'A'"); |
| shouldThrow("String.prototype.toLocaleUpperCase.call({ toString() { throw Error('1') } })", "'Error: 1'"); |
| shouldThrow("String.prototype.toLocaleUpperCase.call(null)"); |
| shouldThrow("String.prototype.toLocaleUpperCase.call(undefined)"); |
| |
| // Ignores non-object, non-string locale list. |
| shouldBe("'a'.toLocaleUpperCase(9)", "'A'"); |
| // Handles array-like objects with holes. |
| shouldBe("'i'.toLocaleUpperCase({ length: 4, 1: 'az', 3: 'en' })", "'\\u0130'"); |
| // Doesn't throw, but ignores private tags. |
| shouldBe("'a'.toLocaleUpperCase('x-some-thing')", "'A'"); |
| // Throws on problems with length, get, or toString. |
| shouldThrow("'a'.toLocaleUpperCase(Object.create(null, { length: { get() { throw Error('a') } } }))", "'Error: a'"); |
| shouldThrow("'a'.toLocaleUpperCase(Object.create(null, { length: { value: 1 }, 0: { get() { throw Error('b') } } }))", "'Error: b'"); |
| shouldThrow("'a'.toLocaleUpperCase([ { toString() { throw Error('c') } } ])", "'Error: c'"); |
| // Throws on bad tags. |
| shouldThrow("'a'.toLocaleUpperCase([ 5 ])", "'TypeError: locale value must be a string or object'"); |
| shouldThrow("'a'.toLocaleUpperCase('')", "'RangeError: invalid language tag: '"); |
| shouldThrow("'a'.toLocaleUpperCase('a')", "'RangeError: invalid language tag: a'"); |
| shouldThrow("'a'.toLocaleUpperCase('abcdefghij')", "'RangeError: invalid language tag: abcdefghij'"); |
| shouldThrow("'a'.toLocaleUpperCase('#$')", "'RangeError: invalid language tag: #$'"); |
| shouldThrow("'a'.toLocaleUpperCase('en-@-abc')", "'RangeError: invalid language tag: en-@-abc'"); |
| shouldThrow("'a'.toLocaleUpperCase('en-u')", "'RangeError: invalid language tag: en-u'"); |
| shouldThrow("'a'.toLocaleUpperCase('en-u-kn-true-u-ko-true')", "'RangeError: invalid language tag: en-u-kn-true-u-ko-true'"); |
| shouldThrow("'a'.toLocaleUpperCase('en-x')", "'RangeError: invalid language tag: en-x'"); |
| shouldThrow("'a'.toLocaleUpperCase('en-*')", "'RangeError: invalid language tag: en-*'"); |
| shouldThrow("'a'.toLocaleUpperCase('en-')", "'RangeError: invalid language tag: en-'"); |
| shouldThrow("'a'.toLocaleUpperCase('en--US')", "'RangeError: invalid language tag: en--US'"); |
| |
| // Check ascii and accents. |
| shouldBe("'AbCdEfGhIjKlMnOpQRStuvWXyZ0123456789'.toLocaleUpperCase()", "'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'"); |
| shouldBe("'àéîöœøūñ'.toLocaleUpperCase()", "'ÀÉÎÖŒØŪÑ'"); |
| |
| // Check non-special case for i. |
| shouldBe("'i'.toLocaleUpperCase('und')", "'I'"); |
| |
| // Check for special casing of Azeri. |
| shouldBe("'\\u0130'.toLocaleUpperCase('az')", "'\\u0130'"); |
| shouldBe("'I'.toLocaleUpperCase('az')", "'I'"); |
| shouldBe("'i'.toLocaleUpperCase('az')", "'\\u0130'"); |
| shouldBe("'\\u0131'.toLocaleUpperCase('az')", "'I'"); |
| |
| // Check for special casing of Lithuanian. |
| shouldBe("'I\\u0307'.toLocaleUpperCase('lt')", "'I\\u0307'"); |
| shouldBe("'J\\u0307'.toLocaleUpperCase('lt')", "'J\\u0307'"); |
| // Code points with Soft_Dotted property (Unicode 5.1, PropList.txt) |
| var softDotted = [ |
| "\\u0069", "\\u006A", // LATIN SMALL LETTER I..LATIN SMALL LETTER J |
| "\\u012F", // LATIN SMALL LETTER I WITH OGONEK |
| "\\u0249", // LATIN SMALL LETTER J WITH STROKE |
| "\\u0268", // LATIN SMALL LETTER I WITH STROKE |
| "\\u029D", // LATIN SMALL LETTER J WITH CROSSED-TAIL |
| "\\u02B2", // MODIFIER LETTER SMALL J |
| "\\u03F3", // GREEK LETTER YOT |
| "\\u0456", // CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I |
| "\\u0458", // CYRILLIC SMALL LETTER JE |
| "\\u1D62", // LATIN SUBSCRIPT SMALL LETTER I |
| "\\u1D96", // LATIN SMALL LETTER I WITH RETROFLEX HOOK |
| "\\u1DA4", // MODIFIER LETTER SMALL I WITH STROKE |
| "\\u1DA8", // MODIFIER LETTER SMALL J WITH CROSSED-TAIL |
| "\\u1E2D", // LATIN SMALL LETTER I WITH TILDE BELOW |
| "\\u1ECB", // LATIN SMALL LETTER I WITH DOT BELOW |
| "\\u2071", // SUPERSCRIPT LATIN SMALL LETTER I |
| "\\u2148", "\\u2149", // DOUBLE-STRUCK ITALIC SMALL I..DOUBLE-STRUCK ITALIC SMALL J |
| "\\u2C7C", // LATIN SUBSCRIPT SMALL LETTER J |
| "\\uD835\\uDC22", "\\uD835\\uDC23", // MATHEMATICAL BOLD SMALL I..MATHEMATICAL BOLD SMALL J |
| "\\uD835\\uDC56", "\\uD835\\uDC57", // MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL J |
| "\\uD835\\uDC8A", "\\uD835\\uDC8B", // MATHEMATICAL BOLD ITALIC SMALL I..MATHEMATICAL BOLD ITALIC SMALL J |
| "\\uD835\\uDCBE", "\\uD835\\uDCBF", // MATHEMATICAL SCRIPT SMALL I..MATHEMATICAL SCRIPT SMALL J |
| "\\uD835\\uDCF2", "\\uD835\\uDCF3", // MATHEMATICAL BOLD SCRIPT SMALL I..MATHEMATICAL BOLD SCRIPT SMALL J |
| "\\uD835\\uDD26", "\\uD835\\uDD27", // MATHEMATICAL FRAKTUR SMALL I..MATHEMATICAL FRAKTUR SMALL J |
| "\\uD835\\uDD5A", "\\uD835\\uDD5B", // MATHEMATICAL DOUBLE-STRUCK SMALL I..MATHEMATICAL DOUBLE-STRUCK SMALL J |
| "\\uD835\\uDD8E", "\\uD835\\uDD8F", // MATHEMATICAL BOLD FRAKTUR SMALL I..MATHEMATICAL BOLD FRAKTUR SMALL J |
| "\\uD835\\uDDC2", "\\uD835\\uDDC3", // MATHEMATICAL SANS-SERIF SMALL I..MATHEMATICAL SANS-SERIF SMALL J |
| "\\uD835\\uDDF6", "\\uD835\\uDDF7", // MATHEMATICAL SANS-SERIF BOLD SMALL I..MATHEMATICAL SANS-SERIF BOLD SMALL J |
| "\\uD835\\uDE2A", "\\uD835\\uDE2B", // MATHEMATICAL SANS-SERIF ITALIC SMALL I..MATHEMATICAL SANS-SERIF ITALIC SMALL J |
| "\\uD835\\uDE5E", "\\uD835\\uDE5F", // MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J |
| "\\uD835\\uDE92", "\\uD835\\uDE93", // MATHEMATICAL MONOSPACE SMALL I..MATHEMATICAL MONOSPACE SMALL J |
| ]; |
| // COMBINING DOT ABOVE (U+0307) removed when preceded by Soft_Dotted. |
| for (var i = 0; i < softDotted.length; ++i) { |
| shouldBe("'" + softDotted[i] + "\\u0307'.toLocaleUpperCase('lt')", "'" + softDotted[i] + "'.toLocaleUpperCase('und')"); |
| shouldBe("'" + softDotted[i] + "\\u0323\\u0307'.toLocaleUpperCase('lt')", "'" + softDotted[i] + "'.toLocaleUpperCase('und') + '\\u0323'"); |
| shouldBe("'" + softDotted[i] + "\\uD800\\uDDFD\\u0307'.toLocaleUpperCase('lt')", "'" + softDotted[i] + "'.toLocaleUpperCase('und') + '\\uD800\\uDDFD'"); |
| } |
| |
| // Check for special casing of Turkish. |
| shouldBe("'\\u0130'.toLocaleUpperCase('tr')", "'\\u0130'"); |
| shouldBe("'I'.toLocaleUpperCase('tr')", "'I'"); |
| shouldBe("'i'.toLocaleUpperCase('tr')", "'\\u0130'"); |
| shouldBe("'\\u0131'.toLocaleUpperCase('tr')", "'I'"); |