blob: 515e99221fc03a76a2cbffd785698ffc8d15aaf7 [file] [log] [blame]
/*
******************************************************************************************
* Copyright (C) 2009-2010, Google, Inc.; International Business Machines Corporation and *
* others. All Rights Reserved. *
******************************************************************************************
*/
package com.ibm.icu.dev.test.util;
import com.ibm.icu.dev.test.TestFmwk;
import com.ibm.icu.util.LocaleMatcher;
import com.ibm.icu.util.LocaleMatcher.LanguageMatcherData;
import com.ibm.icu.util.LocalePriorityList;
import com.ibm.icu.util.ULocale;
/**
* Test the LanguageMatcher.
*
* @author markdavis
*/
public class LocaleMatcherTest extends TestFmwk {
public static void main(String[] args) throws Exception {
new LocaleMatcherTest().run(args);
}
public void testBasics() {
final LocaleMatcher matcher = new LocaleMatcher(LocalePriorityList.add(ULocale.FRENCH).add(ULocale.UK)
.add(ULocale.ENGLISH).build());
logln(matcher.toString());
assertEquals(ULocale.UK, matcher.getBestMatch(ULocale.UK));
assertEquals(ULocale.ENGLISH, matcher.getBestMatch(ULocale.US));
assertEquals(ULocale.FRENCH, matcher.getBestMatch(ULocale.FRANCE));
assertEquals(ULocale.FRENCH, matcher.getBestMatch(ULocale.JAPAN));
}
public void testFallback() {
// check that script fallbacks are handled right
final LocaleMatcher matcher = new LocaleMatcher("zh_CN, zh_TW, iw");
assertEquals(new ULocale("zh_TW"), matcher.getBestMatch("zh_Hant"));
assertEquals(new ULocale("zh_CN"), matcher.getBestMatch("zh"));
assertEquals(new ULocale("zh_CN"), matcher.getBestMatch("zh_Hans_CN"));
assertEquals(new ULocale("zh_TW"), matcher.getBestMatch("zh_Hant_HK"));
assertEquals(new ULocale("he"), matcher.getBestMatch("iw_IT"));
}
public void testSpecials() {
// check that nearby languages are handled
final LocaleMatcher matcher = new LocaleMatcher("en, fil, ro, nn");
assertEquals(new ULocale("fil"), matcher.getBestMatch("tl"));
assertEquals(new ULocale("ro"), matcher.getBestMatch("mo"));
assertEquals(new ULocale("nn"), matcher.getBestMatch("nb"));
// make sure default works
assertEquals(new ULocale("en"), matcher.getBestMatch("ja"));
}
public void testRegionalSpecials() {
// verify that en_AU is closer to en_GB than to en (which is en_US)
final LocaleMatcher matcher = new LocaleMatcher("en, en_GB, es, es_419");
assertEquals("en_AU in {en, en_GB, es, es_419}", new ULocale("en_GB"), matcher.getBestMatch("en_AU"));
assertEquals("es_MX in {en, en_GB, es, es_419}", new ULocale("es_419"), matcher.getBestMatch("es_MX"));
assertEquals("es_ES in {en, en_GB, es, es_419}", new ULocale("es"), matcher.getBestMatch("es_ES"));
}
public void TestLocaleMatcherCoverage() {
// Add tests for better code coverage
LocaleMatcher matcher = new LocaleMatcher(LocalePriorityList.add(null, 0).build(), null);
logln(matcher.toString());
LanguageMatcherData data = new LanguageMatcherData();
LanguageMatcherData clone = data.cloneAsThawed();
if (clone.equals(data)) {
errln("Error cloneAsThawed() is equal.");
}
if (data.isFrozen()) {
errln("Error LanguageMatcherData is frozen!");
}
}
private void assertEquals(Object expected, Object string) {
assertEquals("", expected, string);
}
}