diff --git a/README.md b/README.md index b750415..c6ff874 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ Maven com.neovisionaries nv-i18n 1.2 - + See Also diff --git a/src/main/java/com/neovisionaries/i18n/LocaleCode.java b/src/main/java/com/neovisionaries/i18n/LocaleCode.java index a4d2d91..b4f7273 100644 --- a/src/main/java/com/neovisionaries/i18n/LocaleCode.java +++ b/src/main/java/com/neovisionaries/i18n/LocaleCode.java @@ -1184,8 +1184,7 @@ public static LocaleCode getByCode(String language, String country, boolean case if (language == null) { - // There is no LocaleCode whose language is not given. - return null; + return getByCountry(country, caseSensitive); } // Canonicalize the given country code. @@ -1232,6 +1231,38 @@ public static LocaleCode getByLocale(Locale locale) // so true can be given as the third argument. return getByCode(language, country, true); } + + /** + * Get a LocaleCode instance that corresponds to the given + * country code + * + * @param country + * ISO 3166-1 alpha-2 country code. + * + * @param caseSensitive + * If true, the given language code must be lower-case and + * the given country code, if not null, must be upper-case. + * If false, this method internally canonicalizes the given + * codes and then performs search. + * @return + * A LocaleCode instance, or null if not found. + */ + public static LocaleCode getByCountry(String country, boolean caseSensitive) { + String search; + if (caseSensitive) { + search = country; + } else { + search = country.toUpperCase(); + } + for (LocaleCode localeCode : values()) { + // finds first pair + if (localeCode.getCountry() != null && localeCode.getCountry().name().equals(search)) { + return localeCode; + } + } + return null; + } private static LocaleCode getByCode5(String code, boolean caseSensitive) diff --git a/src/test/java/com/neovisionaries/i18n/LocaleCodeTest.java b/src/test/java/com/neovisionaries/i18n/LocaleCodeTest.java new file mode 100644 index 0000000..393819e --- /dev/null +++ b/src/test/java/com/neovisionaries/i18n/LocaleCodeTest.java @@ -0,0 +1,272 @@ +/* + * Copyright 2013 Krzysztof Suszyński . + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.neovisionaries.i18n; + +import java.util.Locale; +import static org.junit.Assert.*; +import org.junit.Test; + +/** + * + * @author Krzysztof Suszyński + */ +public class LocaleCodeTest { + + /** + * Test of values method, of class LocaleCode. + */ + @Test + public void testValues() { + int expResult = 150; + LocaleCode[] result = LocaleCode.values(); + assertEquals(expResult, result.length); + } + + /** + * Test of valueOf method, of class LocaleCode. + */ + @Test + public void testValueOf() { + String name = "pl_PL"; + LocaleCode expResult = LocaleCode.pl_PL; + LocaleCode result = LocaleCode.valueOf(name); + assertEquals(expResult, result); + name = "pl"; + expResult = LocaleCode.pl; + result = LocaleCode.valueOf(name); + assertEquals(expResult, result); + } + + /** + * Test of getLanguage method, of class LocaleCode. + */ + @Test + public void testGetLanguage() { + LocaleCode instance = LocaleCode.pl_PL; + LanguageCode expResult = LanguageCode.pl; + LanguageCode result = instance.getLanguage(); + assertEquals(expResult, result); + instance = LocaleCode.pl; + expResult = LanguageCode.pl; + result = instance.getLanguage(); + assertEquals(expResult, result); + instance = LocaleCode.ja; + expResult = LanguageCode.ja; + result = instance.getLanguage(); + assertEquals(expResult, result); + instance = LocaleCode.ja_JP; + expResult = LanguageCode.ja; + result = instance.getLanguage(); + assertEquals(expResult, result); + } + + /** + * Test of getCountry method, of class LocaleCode. + */ + @Test + public void testGetCountry() { + LocaleCode instance = LocaleCode.pl_PL; + CountryCode expResult = CountryCode.PL; + CountryCode result = instance.getCountry(); + assertEquals(expResult, result); + instance = LocaleCode.ja_JP; + expResult = CountryCode.JP; + result = instance.getCountry(); + assertEquals(expResult, result); + instance = LocaleCode.ja; + expResult = null; + result = instance.getCountry(); + assertEquals(expResult, result); + } + + /** + * Test of toString method, of class LocaleCode. + */ + @Test + public void testToString() { + LocaleCode instance = LocaleCode.pl_PL; + String expResult = "pl-PL"; + String result = instance.toString(); + assertEquals(expResult, result); + instance = LocaleCode.pl; + expResult = "pl"; + result = instance.toString(); + assertEquals(expResult, result); + } + + /** + * Test of toLocale method, of class LocaleCode. + */ + @Test + public void testToLocale() { + LocaleCode instance = LocaleCode.pl_PL; + Locale expResult = new Locale("pl", "PL"); + Locale result = instance.toLocale(); + assertEquals(expResult, result); + instance = LocaleCode.pl; + expResult = new Locale("pl"); + result = instance.toLocale(); + assertEquals(expResult, result); + } + + /** + * Test of getByCode method, of class LocaleCode. + */ + @Test + public void testGetByCode_String() { + String code = ""; + LocaleCode expResult = null; + LocaleCode result = LocaleCode.getByCode(code); + assertEquals(expResult, result); + code = "ja_JP"; + expResult = LocaleCode.ja_JP; + result = LocaleCode.getByCode(code); + assertEquals(expResult, result); + code = "ja"; + expResult = LocaleCode.ja; + result = LocaleCode.getByCode(code); + assertEquals(expResult, result); + } + + /** + * Test of getByCode method, of class LocaleCode. + */ + @Test + public void testGetByCode_String_boolean() { + String code = ""; + boolean caseSensitive = false; + LocaleCode expResult = null; + LocaleCode result = LocaleCode.getByCode(code, caseSensitive); + assertEquals(expResult, result); + code = "ja_JP"; + caseSensitive = false; + expResult = LocaleCode.ja_JP; + result = LocaleCode.getByCode(code, caseSensitive); + assertEquals(expResult, result); + code = "ja"; + caseSensitive = false; + expResult = LocaleCode.ja; + result = LocaleCode.getByCode(code, caseSensitive); + assertEquals(expResult, result); + } + + /** + * Test of getByCode method, of class LocaleCode. + */ + @Test + public void testGetByCode_String_String() { + String language = ""; + String country = ""; + LocaleCode expResult = null; + LocaleCode result = LocaleCode.getByCode(language, country); + assertEquals(expResult, result); + language = "zh"; + country = "TW"; + expResult = LocaleCode.zh_TW; + result = LocaleCode.getByCode(language, country); + assertEquals(expResult, result); + language = ""; + country = "TW"; + expResult = LocaleCode.zh_TW; + result = LocaleCode.getByCode(language, country); + assertEquals(expResult, result); + language = ""; + country = "pl"; + expResult = LocaleCode.pl_PL; + result = LocaleCode.getByCode(language, country); + assertEquals(expResult, result); + language = "ja"; + country = ""; + expResult = LocaleCode.ja; + result = LocaleCode.getByCode(language, country); + assertEquals(expResult, result); + } + + /** + * Test of getByCode method, of class LocaleCode. + */ + @Test + public void testGetByCode_3args() { + String language = ""; + String country = ""; + boolean caseSensitive = false; + LocaleCode expResult = null; + LocaleCode result = LocaleCode.getByCode(language, country, caseSensitive); + assertEquals(expResult, result); + language = "zh"; + country = "TW"; + caseSensitive = true; + expResult = LocaleCode.zh_TW; + result = LocaleCode.getByCode(language, country, caseSensitive); + assertEquals(expResult, result); + language = ""; + country = "TW"; + caseSensitive = true; + expResult = LocaleCode.zh_TW; + result = LocaleCode.getByCode(language, country, caseSensitive); + assertEquals(expResult, result); + language = ""; + country = "pl"; + caseSensitive = false; + expResult = LocaleCode.pl_PL; + result = LocaleCode.getByCode(language, country, caseSensitive); + assertEquals(expResult, result); + language = "ja"; + country = ""; + caseSensitive = false; + expResult = LocaleCode.ja; + result = LocaleCode.getByCode(language, country, caseSensitive); + assertEquals(expResult, result); + } + + /** + * Test of getByLocale method, of class LocaleCode. + */ + @Test + public void testGetByLocale() { + Locale locale = Locale.CANADA_FRENCH; + LocaleCode expResult = LocaleCode.fr_CA; + LocaleCode result = LocaleCode.getByLocale(locale); + assertEquals(expResult, result); + locale = Locale.CHINA; + expResult = LocaleCode.zh_CN; + result = LocaleCode.getByLocale(locale); + assertEquals(expResult, result); + locale = Locale.JAPAN; + expResult = LocaleCode.ja_JP; + result = LocaleCode.getByLocale(locale); + assertEquals(expResult, result); + locale = Locale.JAPANESE; + expResult = LocaleCode.ja; + result = LocaleCode.getByLocale(locale); + assertEquals(expResult, result); + } + + /** + * Test of getByCountry method, of class LocaleCode. + */ + @Test + public void testGetByCountry() { + String country = "pl"; + LocaleCode expResult = LocaleCode.pl_PL; + LocaleCode result = LocaleCode.getByCountry(country, false); + assertEquals(expResult, result); + result = LocaleCode.getByCountry(country, true); + assertNull(result); + result = LocaleCode.getByCountry("JP", true); + assertSame(LocaleCode.ja_JP, result); + } +}