blob: bb214e638fa25fcb9214d6ce71a1bc97425abb97 [file] [log] [blame]
ap@apple.comb108e6e2010-01-11 20:35:52 +00001<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2<html>
3<head>
ap@apple.com92352d02017-05-24 22:53:00 +00004<meta charset="utf-8">
mark.lam@apple.com0d4b5fc2013-09-08 00:44:54 +00005<script src="../../resources/js-test-pre.js"></script>
ap@apple.comb108e6e2010-01-11 20:35:52 +00006</head>
7<body>
ap@apple.com92352d02017-05-24 22:53:00 +00008<script>
9description("Tests find for strings with Russian letters й and ё in them.");
10
11function canFind(target, specimen)
12{
13 getSelection().empty();
14 var textNode = document.createTextNode(specimen);
15 document.body.appendChild(textNode);
16 document.execCommand("FindString", false, target);
17 var result = getSelection().rangeCount != 0;
18 getSelection().empty();
19 document.body.removeChild(textNode);
20 return result;
21}
22
23var letterCyrillicI = String.fromCharCode(0x0418);
24var letterCyrillicSmallI = String.fromCharCode(0x0438);
25var letterCyrillicShortI = String.fromCharCode(0x0419);
26var letterCyrillicSmallShortI = String.fromCharCode(0x0439);
27var letterCyrillicE = String.fromCharCode(0x0415);
28var letterCyrillicSmallE = String.fromCharCode(0x0435);
29var letterCyrillicYO = String.fromCharCode(0x0401);
30var letterCyrillicSmallYO = String.fromCharCode(0x0451);
31var combiningDiaeresis = String.fromCharCode(0x0308);
32var combiningBreve = String.fromCharCode(0x0306);
33
34var decomposedCyrillicShortI = letterCyrillicI + combiningBreve;
35var decomposedCyrillicSmallShortI = letterCyrillicSmallI + combiningBreve;
36var decomposedCyrillicYO = letterCyrillicE + combiningDiaeresis;
37var decomposedCyrillicSmallYO = letterCyrillicSmallE + combiningDiaeresis;
38
39debug('Exact matches first as a baseline');
40debug('');
41
42shouldBe('canFind(decomposedCyrillicShortI, decomposedCyrillicShortI)', 'true');
43shouldBe('canFind(decomposedCyrillicSmallShortI, decomposedCyrillicSmallShortI)', 'true');
44shouldBe('canFind(letterCyrillicShortI, letterCyrillicShortI)', 'true');
45shouldBe('canFind(letterCyrillicSmallShortI, letterCyrillicSmallShortI)', 'true');
46shouldBe('canFind("й", "йод")', 'true');
47shouldBe('canFind("ё", "мумиё")', 'true');
48
49
50debug('');
51debug('Composed and decomposed forms: Must be treated as equal');
52debug('');
53
54shouldBe('canFind(decomposedCyrillicYO, decomposedCyrillicYO)', 'true');
55shouldBe('canFind(decomposedCyrillicSmallYO, decomposedCyrillicSmallYO)', 'true');
56shouldBe('canFind(letterCyrillicShortI, decomposedCyrillicShortI)', 'true');
57shouldBe('canFind(letterCyrillicSmallShortI, decomposedCyrillicSmallShortI)', 'true');
58shouldBe('canFind(letterCyrillicYO, decomposedCyrillicYO)', 'true');
59shouldBe('canFind(letterCyrillicSmallYO, decomposedCyrillicSmallYO)', 'true');
60shouldBe('canFind(decomposedCyrillicShortI, letterCyrillicShortI)', 'true');
61shouldBe('canFind(decomposedCyrillicSmallShortI, letterCyrillicSmallShortI)', 'true');
62shouldBe('canFind(decomposedCyrillicYO, letterCyrillicYO)', 'true');
63shouldBe('canFind(decomposedCyrillicSmallYO, letterCyrillicSmallYO)', 'true');
64
65debug('');
66debug('Small and capital letters: Must be treated as equal');
67debug('');
68
69shouldBe('canFind(letterCyrillicSmallI, letterCyrillicI)', 'true');
70shouldBe('canFind(letterCyrillicSmallYO, letterCyrillicYO)', 'true');
71shouldBe('canFind(letterCyrillicI, letterCyrillicSmallI)', 'true');
72shouldBe('canFind(letterCyrillicYO, letterCyrillicSmallYO)', 'true');
73shouldBe('canFind(decomposedCyrillicSmallShortI, letterCyrillicI)', 'true');
74shouldBe('canFind(decomposedCyrillicSmallYO, letterCyrillicYO)', 'true');
75shouldBe('canFind(decomposedCyrillicShortI, letterCyrillicSmallI)', 'true');
76shouldBe('canFind(decomposedCyrillicYO, letterCyrillicSmallYO)', 'true');
77shouldBe('canFind(letterCyrillicSmallI + letterCyrillicSmallYO, letterCyrillicSmallI + letterCyrillicYO)', 'true');
78shouldBe('canFind("й", "Йод")', 'true');
79shouldBe('canFind("ё", "МУМИЁ")', 'true');
80shouldBe('canFind("Й", "йод")', 'true');
81shouldBe('canFind("Ё", "мумиё")', 'true');
82
83debug('');
84debug('Е and Ё: Must be treated as equal');
85debug('');
86
87shouldBe('canFind("мумие", "мумиё")', 'true');
88shouldBe('canFind("МУМИЕ", "МУМИЁ")', 'true');
89shouldBe('canFind("мумиё", "мумие")', 'true');
90shouldBe('canFind("МУМИЁ", "МУМИЕ")', 'true');
91
92debug('');
93debug('Й and и: Must *not* be treated as equal');
94debug('');
95
96shouldBe('canFind("зайка", "заика")', 'false');
97shouldBe('canFind("заика", "зайка")', 'false');
98
99debug('');
100</script>
mark.lam@apple.com0d4b5fc2013-09-08 00:44:54 +0000101<script src="../../resources/js-test-post.js"></script>
ap@apple.comb108e6e2010-01-11 20:35:52 +0000102</body>
103</html>