michael@0: // |reftest| skip-if(!xulRuntime.shell||!("normalize"in(String.prototype))) -- uses shell load() function, String.prototype.normalize is not enabled in all builds michael@0: var BUGNUMBER = 918987; michael@0: var summary = 'String.prototype.normalize'; michael@0: michael@0: print(BUGNUMBER + ": " + summary); michael@0: michael@0: /************** michael@0: * BEGIN TEST * michael@0: **************/ michael@0: michael@0: load('ecma_6/String/normalize-generateddata-input.js'); michael@0: michael@0: function codePointsToString(points) { michael@0: return points.map(x => String.fromCodePoint(x)).join(""); michael@0: } michael@0: function stringify(points) { michael@0: return points.map(x => x.toString(16)).join(); michael@0: } michael@0: michael@0: function runTest(test) { michael@0: var source = codePointsToString(test.source); michael@0: var NFC = codePointsToString(test.NFC); michael@0: var NFD = codePointsToString(test.NFD); michael@0: var NFKC = codePointsToString(test.NFKC); michael@0: var NFKD = codePointsToString(test.NFKD); michael@0: var sourceStr = stringify(test.source); michael@0: var nfcStr = stringify(test.NFC); michael@0: var nfdStr = stringify(test.NFD); michael@0: var nfkcStr = stringify(test.NFKC); michael@0: var nfkdStr = stringify(test.NFKD); michael@0: michael@0: /* NFC */ michael@0: assertEq(source.normalize(), NFC, "NFC of " + sourceStr); michael@0: assertEq(NFC.normalize(), NFC, "NFC of " + nfcStr); michael@0: assertEq(NFD.normalize(), NFC, "NFC of " + nfdStr); michael@0: assertEq(NFKC.normalize(), NFKC, "NFC of " + nfkcStr); michael@0: assertEq(NFKD.normalize(), NFKC, "NFC of " + nfkdStr); michael@0: michael@0: assertEq(source.normalize(undefined), NFC, "NFC of " + sourceStr); michael@0: assertEq(NFC.normalize(undefined), NFC, "NFC of " + nfcStr); michael@0: assertEq(NFD.normalize(undefined), NFC, "NFC of " + nfdStr); michael@0: assertEq(NFKC.normalize(undefined), NFKC, "NFC of " + nfkcStr); michael@0: assertEq(NFKD.normalize(undefined), NFKC, "NFC of " + nfkdStr); michael@0: michael@0: assertEq(source.normalize("NFC"), NFC, "NFC of " + sourceStr); michael@0: assertEq(NFC.normalize("NFC"), NFC, "NFC of " + nfcStr); michael@0: assertEq(NFD.normalize("NFC"), NFC, "NFC of " + nfdStr); michael@0: assertEq(NFKC.normalize("NFC"), NFKC, "NFC of " + nfkcStr); michael@0: assertEq(NFKD.normalize("NFC"), NFKC, "NFC of " + nfkdStr); michael@0: michael@0: /* NFD */ michael@0: assertEq(source.normalize("NFD"), NFD, "NFD of " + sourceStr); michael@0: assertEq(NFC.normalize("NFD"), NFD, "NFD of " + nfcStr); michael@0: assertEq(NFD.normalize("NFD"), NFD, "NFD of " + nfdStr); michael@0: assertEq(NFKC.normalize("NFD"), NFKD, "NFD of " + nfkcStr); michael@0: assertEq(NFKD.normalize("NFD"), NFKD, "NFD of " + nfkdStr); michael@0: michael@0: /* NFKC */ michael@0: assertEq(source.normalize("NFKC"), NFKC, "NFKC of " + sourceStr); michael@0: assertEq(NFC.normalize("NFKC"), NFKC, "NFKC of " + nfcStr); michael@0: assertEq(NFD.normalize("NFKC"), NFKC, "NFKC of " + nfdStr); michael@0: assertEq(NFKC.normalize("NFKC"), NFKC, "NFKC of " + nfkcStr); michael@0: assertEq(NFKD.normalize("NFKC"), NFKC, "NFKC of " + nfkdStr); michael@0: michael@0: /* NFKD */ michael@0: assertEq(source.normalize("NFKD"), NFKD, "NFKD of " + sourceStr); michael@0: assertEq(NFC.normalize("NFKD"), NFKD, "NFKD of " + nfcStr); michael@0: assertEq(NFD.normalize("NFKD"), NFKD, "NFKD of " + nfdStr); michael@0: assertEq(NFKC.normalize("NFKD"), NFKD, "NFKD of " + nfkcStr); michael@0: assertEq(NFKD.normalize("NFKD"), NFKD, "NFKD of " + nfkdStr); michael@0: } michael@0: michael@0: for (var test0 of tests_part0) { michael@0: runTest(test0); michael@0: } michael@0: var part1 = new Set(); michael@0: for (var test1 of tests_part1) { michael@0: part1.add(test1.source[0]); michael@0: runTest(test1); michael@0: } michael@0: for (var test2 of tests_part2) { michael@0: runTest(test2); michael@0: } michael@0: for (var test3 of tests_part3) { michael@0: runTest(test3); michael@0: } michael@0: michael@0: /* not listed in Part 1 */ michael@0: for (var x = 0; x <= 0x2FFFF; x++) { michael@0: if (part1.has(x)) { michael@0: continue; michael@0: } michael@0: var xstr = x.toString(16); michael@0: var c = String.fromCodePoint(x); michael@0: assertEq(c.normalize(), c, "NFC of " + xstr); michael@0: assertEq(c.normalize(undefined), c, "NFC of " + xstr); michael@0: assertEq(c.normalize("NFC"), c, "NFC of " + xstr); michael@0: assertEq(c.normalize("NFD"), c, "NFD of " + xstr); michael@0: assertEq(c.normalize("NFKC"), c, "NFKC of " + xstr); michael@0: assertEq(c.normalize("NFKD"), c, "NFKD of " + xstr); michael@0: } michael@0: michael@0: var myobj = {toString : (function () "a\u0301"), normalize : String.prototype.normalize}; michael@0: assertEq(myobj.normalize(), "\u00E1"); michael@0: michael@0: assertThrowsInstanceOf(function() { michael@0: "abc".normalize("NFE"); michael@0: }, RangeError, michael@0: "String.prototype.normalize should raise RangeError on invalid form"); michael@0: michael@0: assertEq("".normalize(), ""); michael@0: michael@0: /* JSRope test */ michael@0: var a = ""; michael@0: var b = ""; michael@0: for (var i = 0; i < 100; i++) { michael@0: a += "\u0100"; michael@0: b += "\u0041\u0304"; michael@0: } michael@0: assertEq(a.normalize("NFD"), b); michael@0: michael@0: /******************************************************************************/ michael@0: michael@0: if (typeof reportCompare === "function") michael@0: reportCompare(true, true); michael@0: print("Tests complete");