1 package org.unicode.cldr.unittest; 2 3 import com.ibm.icu.dev.test.TestFmwk; 4 import com.ibm.icu.lang.UCharacter; 5 import com.ibm.icu.text.UTF16; 6 import com.ibm.icu.text.UnicodeSet; 7 import org.unicode.cldr.util.CLDRConfig; 8 import org.unicode.cldr.util.CLDRFile; 9 import org.unicode.cldr.util.XPathParts; 10 11 public class NumberingSystemsTest extends TestFmwk { 12 static CLDRConfig testInfo = CLDRConfig.getInstance(); 13 main(String[] args)14 public static void main(String[] args) { 15 new NumberingSystemsTest().run(args); 16 } 17 TestFile()18 public void TestFile() { 19 CLDRFile file = testInfo.getSupplementalFactory().make("numberingSystems", false); 20 for (String path : file) { 21 XPathParts parts = XPathParts.getFrozenInstance(path); 22 if (!"numberingSystems".equals(parts.getElement(1))) { 23 continue; 24 } 25 String id = parts.getAttributeValue(2, "id"); 26 String digits = parts.getAttributeValue(2, "digits"); 27 if (digits == null) { 28 continue; 29 } 30 assertEquals("Must have 10 values", 10, UTF16.countCodePoint(digits)); 31 int cp; 32 int value = 0; 33 for (int i = 0; i < digits.length(); i += UTF16.getCharCount(cp)) { 34 cp = UTF16.charAt(digits, i); 35 assertEquals("Value mismatch", value++, UCharacter.getNumericValue(cp)); 36 } 37 try { 38 UnicodeSet script = new UnicodeSet().applyPropertyAlias("script", id); 39 if (!script.containsAll(digits)) { 40 if (id.equals("latn") && digits.equals("0123456789") 41 || id.equals("arab") 42 && digits.equals( 43 "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669")) { 44 // ok 45 } else { 46 errln("Script doesn't match digits: " + id + ", " + digits); 47 } 48 } 49 } catch (Exception e) { 50 logln(id + " not a script"); 51 } 52 } 53 } 54 } 55