surrogate-pair-split.js (1589B)
1 // |reftest| skip-if(!this.hasOwnProperty('Intl')||!this.Intl.Segmenter) 2 3 // Calling %Segments.prototype%.containing in the middle of a surrogate pair 4 // doubles back to the lead surrogate. 5 6 // Grapheme 7 { 8 let segmenter = new Intl.Segmenter(undefined, {granularity: "grapheme"}); 9 10 let string = "\u{1F925}"; 11 let segments = segmenter.segment(string); 12 13 let data1 = segments.containing(0); 14 let data2 = segments.containing(1); 15 let data3 = segments.containing(2); 16 17 assertEq(data1.segment, string); 18 assertDeepEq(data1, data2); 19 assertEq(data3, undefined); 20 } 21 22 // Word 23 { 24 let segmenter = new Intl.Segmenter(undefined, {granularity: "word"}); 25 26 let prefix = "Nothing to see here! "; 27 let string = "\u{1F925}"; 28 let segments = segmenter.segment(prefix + string); 29 30 let data1 = segments.containing(prefix.length + 0); 31 let data2 = segments.containing(prefix.length + 1); 32 let data3 = segments.containing(prefix.length + 2); 33 34 assertEq(data1.segment, string); 35 assertDeepEq(data1, data2); 36 assertEq(data3, undefined); 37 } 38 39 // Sentence 40 { 41 let segmenter = new Intl.Segmenter(undefined, {granularity: "sentence"}); 42 43 let prefix = "Nothing to see here! Please disperse. "; 44 let string = "\u{1F925}"; 45 let segments = segmenter.segment(prefix + string); 46 47 let data1 = segments.containing(prefix.length + 0); 48 let data2 = segments.containing(prefix.length + 1); 49 let data3 = segments.containing(prefix.length + 2); 50 51 assertEq(data1.segment, string); 52 assertDeepEq(data1, data2); 53 assertEq(data3, undefined); 54 } 55 56 if (typeof reportCompare === "function") 57 reportCompare(0, 0);