<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta charset="utf-8">
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description("Tests find for strings with Russian letters й and ё in them.");

function canFind(target, specimen)
{
    getSelection().empty();
    var textNode = document.createTextNode(specimen);
    document.body.appendChild(textNode);
    document.execCommand("FindString", false, target);
    var result = getSelection().rangeCount != 0;
    getSelection().empty();
    document.body.removeChild(textNode);
    return result;
}

var letterCyrillicI = String.fromCharCode(0x0418);
var letterCyrillicSmallI = String.fromCharCode(0x0438);
var letterCyrillicShortI = String.fromCharCode(0x0419);
var letterCyrillicSmallShortI = String.fromCharCode(0x0439);
var letterCyrillicE = String.fromCharCode(0x0415);
var letterCyrillicSmallE = String.fromCharCode(0x0435);
var letterCyrillicYO = String.fromCharCode(0x0401);
var letterCyrillicSmallYO = String.fromCharCode(0x0451);
var combiningDiaeresis = String.fromCharCode(0x0308);
var combiningBreve = String.fromCharCode(0x0306);

var decomposedCyrillicShortI = letterCyrillicI + combiningBreve;
var decomposedCyrillicSmallShortI = letterCyrillicSmallI + combiningBreve;
var decomposedCyrillicYO = letterCyrillicE + combiningDiaeresis;
var decomposedCyrillicSmallYO = letterCyrillicSmallE + combiningDiaeresis;

debug('Exact matches first as a baseline');
debug('');

shouldBe('canFind(decomposedCyrillicShortI, decomposedCyrillicShortI)', 'true');
shouldBe('canFind(decomposedCyrillicSmallShortI, decomposedCyrillicSmallShortI)', 'true');
shouldBe('canFind(letterCyrillicShortI, letterCyrillicShortI)', 'true');
shouldBe('canFind(letterCyrillicSmallShortI, letterCyrillicSmallShortI)', 'true');
shouldBe('canFind("й", "йод")', 'true');
shouldBe('canFind("ё", "мумиё")', 'true');


debug('');
debug('Composed and decomposed forms: Must be treated as equal');
debug('');

shouldBe('canFind(decomposedCyrillicYO, decomposedCyrillicYO)', 'true');
shouldBe('canFind(decomposedCyrillicSmallYO, decomposedCyrillicSmallYO)', 'true');
shouldBe('canFind(letterCyrillicShortI, decomposedCyrillicShortI)', 'true');
shouldBe('canFind(letterCyrillicSmallShortI, decomposedCyrillicSmallShortI)', 'true');
shouldBe('canFind(letterCyrillicYO, decomposedCyrillicYO)', 'true');
shouldBe('canFind(letterCyrillicSmallYO, decomposedCyrillicSmallYO)', 'true');
shouldBe('canFind(decomposedCyrillicShortI, letterCyrillicShortI)', 'true');
shouldBe('canFind(decomposedCyrillicSmallShortI, letterCyrillicSmallShortI)', 'true');
shouldBe('canFind(decomposedCyrillicYO, letterCyrillicYO)', 'true');
shouldBe('canFind(decomposedCyrillicSmallYO, letterCyrillicSmallYO)', 'true');

debug('');
debug('Small and capital letters: Must be treated as equal');
debug('');

shouldBe('canFind(letterCyrillicSmallI, letterCyrillicI)', 'true');
shouldBe('canFind(letterCyrillicSmallYO, letterCyrillicYO)', 'true');
shouldBe('canFind(letterCyrillicI, letterCyrillicSmallI)', 'true');
shouldBe('canFind(letterCyrillicYO, letterCyrillicSmallYO)', 'true');
shouldBe('canFind(decomposedCyrillicSmallShortI, letterCyrillicI)', 'true');
shouldBe('canFind(decomposedCyrillicSmallYO, letterCyrillicYO)', 'true');
shouldBe('canFind(decomposedCyrillicShortI, letterCyrillicSmallI)', 'true');
shouldBe('canFind(decomposedCyrillicYO, letterCyrillicSmallYO)', 'true');
shouldBe('canFind(letterCyrillicSmallI + letterCyrillicSmallYO, letterCyrillicSmallI + letterCyrillicYO)', 'true');
shouldBe('canFind("й", "Йод")', 'true');
shouldBe('canFind("ё", "МУМИЁ")', 'true');
shouldBe('canFind("Й", "йод")', 'true');
shouldBe('canFind("Ё", "мумиё")', 'true');

debug('');
debug('Е and Ё: Must be treated as equal');
debug('');

shouldBe('canFind("мумие", "мумиё")', 'true');
shouldBe('canFind("МУМИЕ", "МУМИЁ")', 'true');
shouldBe('canFind("мумиё", "мумие")', 'true');
shouldBe('canFind("МУМИЁ", "МУМИЕ")', 'true');

debug('');
debug('Й and и: Must *not* be treated as equal');
debug('');

shouldBe('canFind("зайка", "заика")', 'false');
shouldBe('canFind("заика", "зайка")', 'false');

debug('');
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
