blob: be0383ce0b060f603fc0ad9d92ab94f687b0b897 [file] [log] [blame]
/*
**********************************************************************
* Copyright (c) 2010, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* Author: Steven R. Loomis
**********************************************************************
*/
package org.unicode.cldr.unittest;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Map;
import java.util.TreeMap;
import org.unicode.cldr.util.CLDRConfig;
import org.unicode.cldr.util.CLDRFile;
import org.unicode.cldr.util.CLDRLocale;
import org.unicode.cldr.util.CLDRLocale.CLDRFormatter;
import org.unicode.cldr.util.CLDRLocale.FormatBehavior;
import org.unicode.cldr.util.CLDRPaths;
import org.unicode.cldr.util.Factory;
import org.unicode.cldr.util.FileReaders;
import org.unicode.cldr.util.SimpleFactory;
import org.unicode.cldr.util.XMLFileReader;
import org.unicode.cldr.util.XPathParts;
import com.ibm.icu.dev.test.TestFmwk;
import com.ibm.icu.text.Transform;
import com.ibm.icu.util.ULocale;
/**
* @author srl
*
*/
public class TestCLDRUtils extends TestFmwk {
/**
*
*/
public TestCLDRUtils() {
// TODO Auto-generated constructor stub
}
static Transform<String, String> SHORT_ALT_PICKER = new Transform<String, String>() {
public String transform(String source) {
return "short";
}
};
public void TestVariantName() {
CLDRFile english = CLDRConfig.getInstance().getEnglish();
checkNames(english, "en_US_POSIX", "American English (Computer)",
"US English (Computer)", "English (United States, Computer)",
"English (US, Computer)");
checkNames(english, new ULocale("en_US_POSIX").toLanguageTag(),
"American English (Computer)", "US English (Computer)",
"English (United States, Computer)", "English (US, Computer)");
checkNames(english, "en_HK", "English (Hong Kong SAR China)",
"English (Hong Kong)", "English (Hong Kong SAR China)",
"English (Hong Kong)");
checkNames(english, "en_GB", "British English", "UK English",
"English (United Kingdom)", "English (UK)");
checkNames(english, "eo_001", "Esperanto (World)");
checkNames(english, "el_POLYTON", "Greek (Polytonic)");
checkNames(english, new ULocale("el__POLYTON").toLanguageTag(),
"Greek (Polytonic)");
CLDRFile french = CLDRConfig.getInstance().getCldrFactory()
.make("fr", true);
checkNames(french, "en_US_POSIX", "anglais américain (informatique)",
"anglais [É.-U.] (informatique)",
"anglais (États-Unis, informatique)",
"anglais (É.-U., informatique)");
}
/**
*
* @param french
* @param locale
* @param combinedLong
* @param otherNames
* : combinedShort, uncombinedLong, uncombinedShort
*/
private void checkNames(CLDRFile french, String locale,
String combinedLong, String... otherNames) {
assertEquals("Test variant formatting combinedLong " + locale,
combinedLong, french.getName(locale));
String combinedShort = otherNames.length > 0 ? otherNames[0]
: combinedLong;
String uncombinedLong = otherNames.length > 1 ? otherNames[1]
: combinedLong;
String uncombinedShort = otherNames.length > 2 ? otherNames[2]
: uncombinedLong;
assertEquals("Test variant formatting combinedShort " + locale,
combinedShort, french.getName(locale, false, SHORT_ALT_PICKER));
assertEquals("Test variant formatting uncombinedLong " + locale,
uncombinedLong, french.getName(locale, true));
assertEquals("Test variant formatting uncombinedShort " + locale,
uncombinedShort, french.getName(locale, true, SHORT_ALT_PICKER));
}
public void TestEmptyCLDRFile() {
CLDRLocale aloc = CLDRLocale.getInstance("und_AQ_NONEXISTENT");
logln("Testing CLDRFile.make(" + aloc.toString() + ").write()");
CLDRFile emptyFile = SimpleFactory.makeFile(aloc.getBaseName());
StringWriter outStream = new StringWriter();
try {
emptyFile.write(new PrintWriter(outStream));
} finally {
logln(aloc.getBaseName()
+ ".xml: "
+ outStream.toString().replaceAll("\n", "\\\\n")
.replaceAll("\t", "\\\\t"));
}
if (outStream.toString().length() == 0) {
errln("Error: empty CLDRFile of " + aloc
+ " turned into a 0-length string.");
}
}
public void TestCLDRLocaleFormatNoFile() {
logln("Tests for CLDRLocale:");
CLDRLocale
.setDefaultFormatter(new CLDRFormatter(FormatBehavior.replace));
String tests_str[] = { "", "root", "el__POLYTON", "el_POLYTON",
"__UND", "en", "en_GB", "en_Shav", "en_Shav_GB",
"en_Latn_GB_POLYTON", "nnh", "sq_XK" };
for (String s : tests_str) {
CLDRLocale loc = CLDRLocale.getInstance(s);
String str = loc.toString();
ULocale uloc = loc.toULocale();
String fromloc = new ULocale(s).toString();
String format = loc.getDisplayName();
CLDRLocale parent = loc.getParent();
logln(s + ": tostring:" + str + ", uloc:" + uloc + ", fromloc:"
+ fromloc + ", format: " + format + ", parent:" + parent);
}
CLDRLocale.setDefaultFormatter(CLDRLocale.getSimpleFormatterFor(ULocale
.getDefault()));
}
// Disable this test, because we now require known DtdTypes
public void oldTestCLDRLocaleDataDriven() throws IOException {
XMLFileReader myReader = new XMLFileReader();
final Factory cldrFactory = Factory
.make(CLDRPaths.MAIN_DIRECTORY, ".*");
final CLDRFile engFile = cldrFactory.make("en", true);
final CLDRFormatter engFormat = new CLDRFormatter(engFile);
final XPathParts xpp = new XPathParts(null, null);
final Map<String, String> attrs = new TreeMap<String, String>();
myReader.setHandler(new XMLFileReader.SimpleHandler() {
public void handlePathValue(String path, String value) {
xpp.clear();
xpp.initialize(path);
attrs.clear();
for (String k : xpp.getAttributeKeys(-1)) {
attrs.put(k, xpp.getAttributeValue(-1, k));
}
String elem = xpp.getElement(-1);
logln("* <" + elem + " " + attrs.toString() + ">" + value
+ "</" + elem + ">");
String loc = attrs.get("locale");
CLDRLocale locale = CLDRLocale.getInstance(loc);
if (elem.equals("format")) {
String type = attrs.get("type");
String result = null;
boolean combined = Boolean.parseBoolean(attrs
.get("combined"));
Transform<String, String> picker = attrs.get("alt")
.equalsIgnoreCase("short") ? SHORT_ALT_PICKER
: null;
if (type.equals("region")) {
result = locale.getDisplayCountry(engFormat);
} else if (type.equals("all")) {
result = locale.getDisplayName(engFormat, combined,
picker);
} else {
errln("Unknown test type: " + type);
return;
}
if (result == null) {
errln("Null result!");
return;
}
logln(" result=" + result);
if (!result.equals(value)) {
errln("For format test " + attrs.toString()
+ " expected '" + value + "' got '" + result
+ "'");
}
} else if (elem.equals("echo")) {
logln("*** \"" + value.trim() + "\"");
} else {
throw new IllegalArgumentException(
"Unknown test element type " + elem);
}
};
// public void handleComment(String path, String comment) {};
// public void handleElementDecl(String name, String model) {};
// public void handleAttributeDecl(String eName, String aName,
// String type, String mode, String value) {};
});
String fileName = "TestCLDRLocale" + ".xml";
logln("Reading" + fileName);
myReader.read(TestCLDRUtils.class.getResource("data/" + fileName)
.toString(), FileReaders.openFile(TestCLDRUtils.class, "data/"
+ fileName), -1, true);
}
public void TestCLDRLocaleInheritance() {
CLDRLocale ml = CLDRLocale.getInstance("ml");
CLDRLocale ml_IN = CLDRLocale.getInstance("ml_IN");
CLDRLocale ml_Mlym = CLDRLocale.getInstance("ml_Mlym");
CLDRLocale ml_Mlym_IN = CLDRLocale.getInstance("ml_Mlym_IN");
logln("Testing descendants of " + ml + " " + ml.getDisplayName());
CLDRLocale areSub[][] = { // isChild returns true for i!=0
{ ml, ml_IN, ml_Mlym, ml_Mlym_IN }, { ml_Mlym, ml_Mlym_IN }, };
for (CLDRLocale[] row : areSub) {
CLDRLocale parent = row[0];
for (CLDRLocale child : row) {
// TODO move the first checkChild here if the meaning changes.
if (child == parent) {
continue;
}
checkChild(child, parent, false);
checkChild(parent, child, true);
}
}
CLDRLocale notSub[] = { // isChild returns false
CLDRLocale.getInstance("mli"), CLDRLocale.getInstance("root"),
CLDRLocale.ROOT };
for (CLDRLocale child : notSub) {
checkChild(ml, child, false);
}
}
public void TestCLDRLocaleEquivalence() {
assertEquals("root is caseless", CLDRLocale.getInstance("root"), CLDRLocale.getInstance("RoOt"));
assertEquals("root = empty", CLDRLocale.getInstance("root"), CLDRLocale.getInstance(""));
String test = "zh-TW-u-co-pinyin";
assertEquals(test, test, CLDRLocale.getInstance(test).toLanguageTag());
}
private boolean checkChild(CLDRLocale parent, CLDRLocale child,
boolean expected) {
boolean got = child.childOf(parent);
String message = child + ".childOf(" + parent + ") " + "["
+ child.getDisplayName() + ", " + parent.getDisplayName()
+ "] " + "= " + got;
if (got == expected) {
logln(message);
} else {
errln(message + ", but expected " + expected);
}
return got;
}
/**
* @param args
*/
public static void main(String[] args) {
double deltaTime = System.currentTimeMillis();
new TestCLDRUtils().run(args);
deltaTime = System.currentTimeMillis() - deltaTime;
System.out.println("Seconds: " + deltaTime / 1000);
}
}