1/* GENERATED SOURCE. DO NOT MODIFY. */
2// © 2017 and later: Unicode, Inc. and others.
3// License & terms of use: http://www.unicode.org/copyright.html#License
4package android.icu.dev.test.translit;
5
6import java.util.Enumeration;
7
8import org.junit.Test;
9import org.junit.runner.RunWith;
10import org.junit.runners.Parameterized;
11
12import android.icu.dev.test.TestFmwk;
13import android.icu.impl.UtilityExtensions;
14import android.icu.text.Replaceable;
15import android.icu.text.ReplaceableString;
16import android.icu.text.Transliterator;
17import android.icu.testsharding.MainTestShard;
18
19// Check to see that incremental gets at least part way through a reasonable string.
20@MainTestShard
21@RunWith(Parameterized.class)
22public class IncrementalProgressTest extends TestFmwk {
23    private String lang;
24    private String text;
25
26    public IncrementalProgressTest(String lang, String text){
27        this.lang = lang;
28        this.text = text;
29    }
30
31    @Parameterized.Parameters
32    public static String[][] testData(){
33        String latinTest = "The Quick Brown Fox.";
34        String devaTest = Transliterator.getInstance("Latin-Devanagari").transliterate(latinTest);
35        String kataTest = Transliterator.getInstance("Latin-Katakana").transliterate(latinTest);
36        // Labels have to be valid transliterator source names.
37        String[][] tests = {
38                {"Any", latinTest},
39                {"Latin", latinTest},
40                {"Halfwidth", latinTest},
41                {"Devanagari", devaTest},
42                {"Katakana", kataTest},
43        };
44        return tests;
45    }
46
47    public void CheckIncrementalAux(Transliterator t, String input) {
48        Replaceable test = new ReplaceableString(input);
49        Transliterator.Position pos = new Transliterator.Position(0, test.length(), 0, test.length());
50        t.transliterate(test, pos);
51        boolean gotError = false;
52
53        // we have a few special cases. Any-Remove (pos.start = 0, but also = limit) and U+XXXXX?X?
54        if (pos.start == 0 && pos.limit != 0 && !t.getID().equals("Hex-Any/Unicode")) {
55            errln("No Progress, " + t.getID() + ": " + UtilityExtensions.formatInput(test, pos));
56            gotError = true;
57        } else {
58            logln("PASS Progress, " + t.getID() + ": " + UtilityExtensions.formatInput(test, pos));
59        }
60        t.finishTransliteration(test, pos);
61        if (pos.start != pos.limit) {
62            errln("Incomplete, " + t.getID() + ":  " + UtilityExtensions.formatInput(test, pos));
63            gotError = true;
64        }
65        if(!gotError){
66            //errln("FAIL: Did not get expected error");
67        }
68    }
69
70    @Test
71    public void TestIncrementalProgress() {
72        Enumeration targets = Transliterator.getAvailableTargets(this.lang);
73        while(targets.hasMoreElements()) {
74            String target = (String) targets.nextElement();
75            Enumeration variants = Transliterator.getAvailableVariants(this.lang, target);
76            while(variants.hasMoreElements()) {
77                String variant = (String) variants.nextElement();
78                String id = this.lang + "-" + target + "/" + variant;
79                logln("id: " + id);
80
81                Transliterator t = Transliterator.getInstance(id);
82                CheckIncrementalAux(t, text);
83
84                String rev = t.transliterate(text);
85
86                // Special treatment: This transliterator has no registered inverse, skip for now.
87                if (id.equals("Devanagari-Arabic/"))
88                    continue;
89
90                Transliterator inv = t.getInverse();
91                CheckIncrementalAux(inv, rev);
92            }
93        }
94    }
95
96}