12d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// © 2016 and later: Unicode, Inc. and others.
22d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2002-2014, International Business Machines Corporation and
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved.
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Port From:   ICU4C v2.1 : Collate/CollationTurkishTest
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Source File: $ICU4CRoot/source/test/intltest/trcoll.cpp
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert **/
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.collator;
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale;
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
192d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubertimport org.junit.Before;
202d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubertimport org.junit.Test;
212d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk;
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.CollationKey;
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.Collator;
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class CollationTurkishTest extends TestFmwk{
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static char[][] testSourceCases = {
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x73, 0x0327},
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x76, 0x00E4, 0x74},
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x6f, 0x6c, 0x64},
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x00FC, 0x6f, 0x69, 0x64},
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x68, 0x011E, 0x61, 0x6c, 0x74},
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x73, 0x74, 0x72, 0x65, 0x73, 0x015E},
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x76, 0x6f, 0x0131, 0x64},
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x69, 0x64, 0x65, 0x61},
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x00FC, 0x6f, 0x69, 0x64},
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x76, 0x6f, 0x0131, 0x64},
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x69, 0x64, 0x65, 0x61}
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static char[][] testTargetCases = {
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x75, 0x0308},
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x76, 0x62, 0x74},
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x00D6, 0x61, 0x79},
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x76, 0x6f, 0x69, 0x64},
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x68, 0x61, 0x6c, 0x74},
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x015E, 0x74, 0x72, 0x65, 0x015E, 0x73},
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x76, 0x6f, 0x69, 0x64},
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x49, 0x64, 0x65, 0x61},
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x76, 0x6f, 0x69, 0x64},
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x76, 0x6f, 0x69, 0x64},
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x49, 0x64, 0x65, 0x61}
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static int[] results = {
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1,
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1,
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1,
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1,
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        1,
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1,
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1,
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        1,
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // test priamry > 8
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1,
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1,
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        1
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private Collator myCollation = null;
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public CollationTurkishTest() {
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
752d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert
762d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert    @Before
772d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert    public void init()throws Exception{
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        myCollation = Collator.getInstance(new Locale("tr", ""));
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
812d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert    @Test
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestTertiary() {
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int i = 0;
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        myCollation.setStrength(Collator.TERTIARY);
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (i = 0; i < 8 ; i++) {
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            doTest(testSourceCases[i], testTargetCases[i], results[i]);
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
902d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert    @Test
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestPrimary() {
927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int i;
937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        myCollation.setStrength(Collator.PRIMARY);
947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (i = 8; i < 11; i++) {
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            doTest(testSourceCases[i], testTargetCases[i], results[i]);
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // main test routine, tests rules specific to turkish locale
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private void doTest(char[] source, char[] target, int result) {
1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String s = new String(source);
1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String t = new String(target);
1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int compareResult = myCollation.compare(s, t);
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        CollationKey sortKey1, sortKey2;
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        sortKey1 = myCollation.getCollationKey(s);
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        sortKey2 = myCollation.getCollationKey(t);
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int keyResult = sortKey1.compareTo(sortKey2);
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        reportCResult(s, t, sortKey1, sortKey2, compareResult, keyResult, compareResult, result);
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private void reportCResult( String source, String target, CollationKey sourceKey, CollationKey targetKey,
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                                int compareResult, int keyResult, int incResult, int expectedResult ) {
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (expectedResult < -1 || expectedResult > 1) {
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("***** invalid call to reportCResult ****");
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return;
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        boolean ok1 = (compareResult == expectedResult);
1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        boolean ok2 = (keyResult == expectedResult);
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        boolean ok3 = (incResult == expectedResult);
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (ok1 && ok2 && ok3 && !isVerbose()) {
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return;
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String msg1 = ok1? "Ok: compare(\"" : "FAIL: compare(\"";
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String msg2 = "\", \"";
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String msg3 = "\") returned ";
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String msg4 = "; expected ";
1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String sExpect = new String("");
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String sResult = new String("");
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            sResult = CollationTest.appendCompareResult(compareResult, sResult);
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            sExpect = CollationTest.appendCompareResult(expectedResult, sExpect);
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (ok1) {
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                logln(msg1 + source + msg2 + target + msg3 + sResult);
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } else {
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln(msg1 + source + msg2 + target + msg3 + sResult + msg4 + sExpect);
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            msg1 = ok2 ? "Ok: key(\"" : "FAIL: key(\"";
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            msg2 = "\").compareTo(key(\"";
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            msg3 = "\")) returned ";
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            sResult = CollationTest.appendCompareResult(keyResult, sResult);
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (ok2) {
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                logln(msg1 + source + msg2 + target + msg3 + sResult);
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } else {
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln(msg1 + source + msg2 + target + msg3 + sResult + msg4 + sExpect);
1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                msg1 = "  ";
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                msg2 = " vs. ";
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln(msg1 + CollationTest.prettify(sourceKey) + msg2 + CollationTest.prettify(targetKey));
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            msg1 = ok3 ? "Ok: incCompare(\"" : "FAIL: incCompare(\"";
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            msg2 = "\", \"";
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            msg3 = "\") returned ";
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            sResult = CollationTest.appendCompareResult(incResult, sResult);
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (ok3) {
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                logln(msg1 + source + msg2 + target + msg3 + sResult);
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } else {
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln(msg1 + source + msg2 + target + msg3 + sResult + msg4 + sExpect);
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
169