]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-52_1/main/tests/translit/src/com/ibm/icu/dev/test/translit/AnyScriptTest.java
Clean up imports.
[Dictionary.git] / jars / icu4j-52_1 / main / tests / translit / src / com / ibm / icu / dev / test / translit / AnyScriptTest.java
1 /*
2  *******************************************************************************
3  * Copyright (C) 2009-2013, Google, International Business Machines Corporation and         *
4  * others. All Rights Reserved.                                                *
5  *******************************************************************************
6  */
7 package com.ibm.icu.dev.test.translit;
8
9 import com.ibm.icu.dev.test.TestFmwk;
10 import com.ibm.icu.lang.UScript;
11 import com.ibm.icu.text.Transliterator;
12 import com.ibm.icu.text.UTF16;
13 import com.ibm.icu.text.UnicodeSet;
14 import com.ibm.icu.text.UnicodeSetIterator;
15
16 /**
17  * @author markdavis
18  *
19  */
20 public class AnyScriptTest extends TestFmwk {
21     public static void main(String[] args) throws Exception {
22         new AnyScriptTest().run(args);
23     }
24     
25     public void TestContext() {
26         Transliterator t = Transliterator.createFromRules("foo", "::[bc]; a{b}d > B;", Transliterator.FORWARD);
27         String sample = "abd abc b";
28         assertEquals("context works", "aBd abc b", t.transform(sample));
29     }
30
31     public void TestScripts(){
32         // get a couple of characters of each script for testing
33         
34         StringBuffer testBuffer = new StringBuffer();
35         for (int script = 0; script < UScript.CODE_LIMIT; ++script) {
36             UnicodeSet test = new UnicodeSet().applyPropertyAlias("script", UScript.getName(script));
37             int count = Math.min(20, test.size());
38             for (int i = 0; i < count; ++i){
39                 testBuffer.append(UTF16.valueOf(test.charAt(i)));
40             }
41         }
42         String test = testBuffer.toString();
43         logln("Test line: " + test);
44         
45         int inclusion = getInclusion();
46         boolean testedUnavailableScript = false;
47         
48         for (int script = 0; script < UScript.CODE_LIMIT; ++script) {
49             if (script == UScript.COMMON || script == UScript.INHERITED) {
50                 continue;
51             }
52             // if the inclusion rate is not 10, skip all but a small number of items.
53             // Make sure, however, that we test at least one unavailable script
54             if (inclusion < 10 && script != UScript.LATIN
55                     && script != UScript.HAN 
56                     && script != UScript.HIRAGANA
57                     && testedUnavailableScript
58                     ) {
59                 continue;
60             }
61             
62             String scriptName = UScript.getName(script);
63             Transliterator t;
64             try {
65                 t = Transliterator.getInstance("any-" + scriptName);
66             } catch (Exception e) {
67                 testedUnavailableScript = true;
68                 logln("Skipping unavailable: " + scriptName);
69                 continue; // we don't handle all scripts
70             }
71             logln("Checking: " + scriptName);
72             if (t != null) {
73                 t.transform(test); // just verify we don't crash
74             }
75             scriptName = UScript.getShortName(script);
76             t = Transliterator.getInstance("any-" + scriptName);
77             t.transform(test); // just verify we don't crash
78         }
79     }
80     
81     /**
82      * Check to make sure that wide characters are converted when going to narrow scripts.
83      */
84     public void TestForWidth(){
85         Transliterator widen = Transliterator.getInstance("halfwidth-fullwidth");
86         Transliterator narrow = Transliterator.getInstance("fullwidth-halfwidth");
87         UnicodeSet ASCII = new UnicodeSet("[:ascii:]");
88         String lettersAndSpace = "abc def";
89         final String punctOnly = "( )";
90         
91         String wideLettersAndSpace = widen.transform(lettersAndSpace);
92         String widePunctOnly = widen.transform(punctOnly);
93         assertContainsNone("Should be wide", ASCII, wideLettersAndSpace);
94         assertContainsNone("Should be wide", ASCII, widePunctOnly);
95         
96         String back;
97         back = narrow.transform(wideLettersAndSpace);
98         assertEquals("Should be narrow", lettersAndSpace, back);
99         back = narrow.transform(widePunctOnly);
100         assertEquals("Should be narrow", punctOnly, back);
101         
102         Transliterator latin = Transliterator.getInstance("any-Latn");
103         back = latin.transform(wideLettersAndSpace);
104         assertEquals("Should be ascii", lettersAndSpace, back);
105         
106         back = latin.transform(widePunctOnly);
107         assertEquals("Should be ascii", punctOnly, back);
108        
109         // Han-Latin is now forward-only per CLDR ticket #5630
110         //Transliterator t2 = Transliterator.getInstance("any-Han");
111         //back = t2.transform(widePunctOnly);
112         //assertEquals("Should be same", widePunctOnly, back);
113
114
115     }
116     
117     public void TestCommonDigits() {
118         UnicodeSet westernDigitSet = new UnicodeSet("[0-9]");
119         UnicodeSet westernDigitSetAndMarks = new UnicodeSet("[[0-9][:Mn:]]");
120         UnicodeSet arabicDigitSet = new UnicodeSet("[[:Nd:]&[:block=Arabic:]]");
121         Transliterator latin = Transliterator.getInstance("Any-Latn");
122         Transliterator arabic = Transliterator.getInstance("Any-Arabic");
123         String westernDigits = getList(westernDigitSet);
124         String arabicDigits = getList(arabicDigitSet);
125
126         String fromArabic = latin.transform(arabicDigits);
127         assertContainsAll("Any-Latin transforms Arabic digits", westernDigitSetAndMarks, fromArabic);
128         if (false) { // we don't require conversion to Arabic digits
129             String fromLatin = arabic.transform(westernDigits);
130             assertContainsAll("Any-Arabic transforms Western digits", arabicDigitSet, fromLatin);
131         }
132     }
133
134     // might want to add to TestFmwk
135     private void assertContainsAll(String message, UnicodeSet set, String string) {
136         handleAssert(set.containsAll(string), message, set, string, "contains all of", false);
137     }
138
139     private void assertContainsNone(String message, UnicodeSet set, String string) {
140         handleAssert(set.containsNone(string), message, set, string, "contains none of", false);
141     }
142
143     // might want to add to UnicodeSet
144     private String getList(UnicodeSet set) {
145         StringBuffer result = new StringBuffer();
146         for (UnicodeSetIterator it = new UnicodeSetIterator(set); it.next();) {
147             result.append(it.getString());
148         }
149         return result.toString();
150     }
151 }