1 /* GENERATED SOURCE. DO NOT MODIFY. */ 2 // 2016 and later: Unicode, Inc. and others. 3 // License & terms of use: http://www.unicode.org/copyright.html#License 4 /* 5 ******************************************************************************* 6 * Copyright (C) 2009-2014, Google, International Business Machines Corporation and 7 * others. All Rights Reserved. 8 ******************************************************************************* 9 */ 10 package android.icu.dev.test.translit; 11 12 import org.junit.Test; 13 import org.junit.runner.RunWith; 14 import org.junit.runners.JUnit4; 15 16 import android.icu.dev.test.TestFmwk; 17 import android.icu.lang.UScript; 18 import android.icu.text.Transliterator; 19 import android.icu.text.UTF16; 20 import android.icu.text.UnicodeSet; 21 import android.icu.text.UnicodeSetIterator; 22 import android.icu.util.ULocale; 23 import android.icu.testsharding.MainTestShard; 24 25 /** 26 * @author markdavis 27 * 28 */ 29 @MainTestShard 30 @RunWith(JUnit4.class) 31 public class AnyScriptTest extends TestFmwk { 32 @Test 33 public void TestContext() { 34 Transliterator t = Transliterator.createFromRules("foo", "::[bc]; a{b}d > B;", Transliterator.FORWARD); 35 String sample = "abd abc b"; 36 assertEquals("context works", "aBd abc b", t.transform(sample)); 37 } 38 39 @Test 40 public void TestScripts(){ 41 // get a couple of characters of each script for testing 42 43 StringBuffer testBuffer = new StringBuffer(); 44 for (int script = 0; script < UScript.CODE_LIMIT; ++script) { 45 UnicodeSet test = new UnicodeSet().applyPropertyAlias("script", UScript.getName(script)); 46 int count = Math.min(20, test.size()); 47 for (int i = 0; i < count; ++i){ 48 testBuffer.append(UTF16.valueOf(test.charAt(i))); 49 } 50 } 51 String test = testBuffer.toString(); 52 logln("Test line: " + test); 53 54 int inclusion = TestFmwk.getExhaustiveness(); 55 boolean testedUnavailableScript = false; 56 57 for (int script = 0; script < UScript.CODE_LIMIT; ++script) { 58 if (script == UScript.COMMON || script == UScript.INHERITED) { 59 continue; 60 } 61 // if the inclusion rate is not 10, skip all but a small number of items. 62 // Make sure, however, that we test at least one unavailable script 63 if (inclusion < 10 && script != UScript.LATIN 64 && script != UScript.HAN 65 && script != UScript.HIRAGANA 66 && testedUnavailableScript 67 ) { 68 continue; 69 } 70 71 String scriptName = UScript.getName(script); // long name 72 ULocale locale = new ULocale(scriptName); 73 if (locale.getLanguage().equals("new") || locale.getLanguage().equals("pau")) { 74 if (logKnownIssue("11171", 75 "long script name loosely looks like a locale ID with a known likely script")) { 76 continue; 77 } 78 } 79 Transliterator t; 80 try { 81 t = Transliterator.getInstance("any-" + scriptName); 82 } catch (Exception e) { 83 testedUnavailableScript = true; 84 logln("Skipping unavailable: " + scriptName); 85 continue; // we don't handle all scripts 86 } 87 logln("Checking: " + scriptName); 88 if (t != null) { 89 t.transform(test); // just verify we don't crash 90 } 91 String shortScriptName = UScript.getShortName(script); // 4-letter script code 92 try { 93 t = Transliterator.getInstance("any-" + shortScriptName); 94 } catch (Exception e) { 95 errln("Transliterator.getInstance() worked for \"any-" + scriptName + 96 "\" but not for \"any-" + shortScriptName + '\"'); 97 } 98 t.transform(test); // just verify we don't crash 99 } 100 } 101 102 /** 103 * Check to make sure that wide characters are converted when going to narrow scripts. 104 */ 105 @Test 106 public void TestForWidth(){ 107 Transliterator widen = Transliterator.getInstance("halfwidth-fullwidth"); 108 Transliterator narrow = Transliterator.getInstance("fullwidth-halfwidth"); 109 UnicodeSet ASCII = new UnicodeSet("[:ascii:]"); 110 String lettersAndSpace = "abc def"; 111 final String punctOnly = "( )"; 112 113 String wideLettersAndSpace = widen.transform(lettersAndSpace); 114 String widePunctOnly = widen.transform(punctOnly); 115 assertContainsNone("Should be wide", ASCII, wideLettersAndSpace); 116 assertContainsNone("Should be wide", ASCII, widePunctOnly); 117 118 String back; 119 back = narrow.transform(wideLettersAndSpace); 120 assertEquals("Should be narrow", lettersAndSpace, back); 121 back = narrow.transform(widePunctOnly); 122 assertEquals("Should be narrow", punctOnly, back); 123 124 Transliterator latin = Transliterator.getInstance("any-Latn"); 125 back = latin.transform(wideLettersAndSpace); 126 assertEquals("Should be ascii", lettersAndSpace, back); 127 128 back = latin.transform(widePunctOnly); 129 assertEquals("Should be ascii", punctOnly, back); 130 131 // Han-Latin is now forward-only per CLDR ticket #5630 132 //Transliterator t2 = Transliterator.getInstance("any-Han"); 133 //back = t2.transform(widePunctOnly); 134 //assertEquals("Should be same", widePunctOnly, back); 135 136 137 } 138 139 @Test 140 public void TestCommonDigits() { 141 UnicodeSet westernDigitSet = new UnicodeSet("[0-9]"); 142 UnicodeSet westernDigitSetAndMarks = new UnicodeSet("[[0-9][:Mn:]]"); 143 UnicodeSet arabicDigitSet = new UnicodeSet("[[:Nd:]&[:block=Arabic:]]"); 144 Transliterator latin = Transliterator.getInstance("Any-Latn"); 145 Transliterator arabic = Transliterator.getInstance("Any-Arabic"); 146 String westernDigits = getList(westernDigitSet); 147 String arabicDigits = getList(arabicDigitSet); 148 149 String fromArabic = latin.transform(arabicDigits); 150 assertContainsAll("Any-Latin transforms Arabic digits", westernDigitSetAndMarks, fromArabic); 151 if (false) { // we don't require conversion to Arabic digits 152 String fromLatin = arabic.transform(westernDigits); 153 assertContainsAll("Any-Arabic transforms Western digits", arabicDigitSet, fromLatin); 154 } 155 } 156 157 // might want to add to TestFmwk 158 private void assertContainsAll(String message, UnicodeSet set, String string) { 159 handleAssert(set.containsAll(string), message, set, string, "contains all of", false); 160 } 161 162 private void assertContainsNone(String message, UnicodeSet set, String string) { 163 handleAssert(set.containsNone(string), message, set, string, "contains none of", false); 164 } 165 166 // might want to add to UnicodeSet 167 private String getList(UnicodeSet set) { 168 StringBuffer result = new StringBuffer(); 169 for (UnicodeSetIterator it = new UnicodeSetIterator(set); it.next();) { 170 result.append(it.getString()); 171 } 172 return result.toString(); 173 } 174 } 175