105fa7802d0874812c234a29745586677ee5837eaFredrik Roubert/* GENERATED SOURCE. DO NOT MODIFY. */
205fa7802d0874812c234a29745586677ee5837eaFredrik Roubert// © 2017 and later: Unicode, Inc. and others.
305fa7802d0874812c234a29745586677ee5837eaFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
405fa7802d0874812c234a29745586677ee5837eaFredrik Roubertpackage android.icu.dev.test.translit;
505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
605fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport java.util.Enumeration;
705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
805fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport org.junit.Test;
905fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport org.junit.runner.RunWith;
1005fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport org.junit.runners.Parameterized;
1105fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
1205fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport android.icu.dev.test.TestFmwk;
1305fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport android.icu.impl.UtilityExtensions;
1405fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport android.icu.text.Replaceable;
1505fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport android.icu.text.ReplaceableString;
1605fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport android.icu.text.Transliterator;
1705fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport android.icu.testsharding.MainTestShard;
1805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
1905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert// Check to see that incremental gets at least part way through a reasonable string.
2005fa7802d0874812c234a29745586677ee5837eaFredrik Roubert@MainTestShard
2105fa7802d0874812c234a29745586677ee5837eaFredrik Roubert@RunWith(Parameterized.class)
2205fa7802d0874812c234a29745586677ee5837eaFredrik Roubertpublic class IncrementalProgressTest extends TestFmwk {
2305fa7802d0874812c234a29745586677ee5837eaFredrik Roubert    private String lang;
2405fa7802d0874812c234a29745586677ee5837eaFredrik Roubert    private String text;
2505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
2605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert    public IncrementalProgressTest(String lang, String text){
2705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        this.lang = lang;
2805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        this.text = text;
2905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert    }
3005fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
3105fa7802d0874812c234a29745586677ee5837eaFredrik Roubert    @Parameterized.Parameters
3205fa7802d0874812c234a29745586677ee5837eaFredrik Roubert    public static String[][] testData(){
3305fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        String latinTest = "The Quick Brown Fox.";
3405fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        String devaTest = Transliterator.getInstance("Latin-Devanagari").transliterate(latinTest);
3505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        String kataTest = Transliterator.getInstance("Latin-Katakana").transliterate(latinTest);
3605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        // Labels have to be valid transliterator source names.
3705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        String[][] tests = {
3805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                {"Any", latinTest},
3905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                {"Latin", latinTest},
4005fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                {"Halfwidth", latinTest},
4105fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                {"Devanagari", devaTest},
4205fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                {"Katakana", kataTest},
4305fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        };
4405fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        return tests;
4505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert    }
4605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
4705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert    public void CheckIncrementalAux(Transliterator t, String input) {
4805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        Replaceable test = new ReplaceableString(input);
4905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        Transliterator.Position pos = new Transliterator.Position(0, test.length(), 0, test.length());
5005fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        t.transliterate(test, pos);
5105fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        boolean gotError = false;
5205fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
5305fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        // we have a few special cases. Any-Remove (pos.start = 0, but also = limit) and U+XXXXX?X?
5405fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        if (pos.start == 0 && pos.limit != 0 && !t.getID().equals("Hex-Any/Unicode")) {
5505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            errln("No Progress, " + t.getID() + ": " + UtilityExtensions.formatInput(test, pos));
5605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            gotError = true;
5705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        } else {
5805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            logln("PASS Progress, " + t.getID() + ": " + UtilityExtensions.formatInput(test, pos));
5905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        }
6005fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        t.finishTransliteration(test, pos);
6105fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        if (pos.start != pos.limit) {
6205fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            errln("Incomplete, " + t.getID() + ":  " + UtilityExtensions.formatInput(test, pos));
6305fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            gotError = true;
6405fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        }
6505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        if(!gotError){
6605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            //errln("FAIL: Did not get expected error");
6705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        }
6805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert    }
6905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
7005fa7802d0874812c234a29745586677ee5837eaFredrik Roubert    @Test
7105fa7802d0874812c234a29745586677ee5837eaFredrik Roubert    public void TestIncrementalProgress() {
7205fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        Enumeration targets = Transliterator.getAvailableTargets(this.lang);
7305fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        while(targets.hasMoreElements()) {
7405fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            String target = (String) targets.nextElement();
7505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            Enumeration variants = Transliterator.getAvailableVariants(this.lang, target);
7605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            while(variants.hasMoreElements()) {
7705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                String variant = (String) variants.nextElement();
7805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                String id = this.lang + "-" + target + "/" + variant;
7905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                logln("id: " + id);
8005fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
8105fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                Transliterator t = Transliterator.getInstance(id);
8205fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                CheckIncrementalAux(t, text);
8305fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
8405fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                String rev = t.transliterate(text);
8505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
8605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                // Special treatment: This transliterator has no registered inverse, skip for now.
8705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                if (id.equals("Devanagari-Arabic/"))
8805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                    continue;
8905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
9005fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                Transliterator inv = t.getInverse();
9105fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                CheckIncrementalAux(inv, rev);
9205fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            }
9305fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        }
9405fa7802d0874812c234a29745586677ee5837eaFredrik Roubert    }
9505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
9605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert}