Home | History | Annotate | Download | only in translit
      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