Home | History | Annotate | Download | only in util
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 
     18 package org.apache.harmony.luni.tests.java.util;
     19 
     20 import java.util.Arrays;
     21 import java.util.HashSet;
     22 import java.util.List;
     23 import java.util.Locale;
     24 import java.util.Set;
     25 
     26 public class LocaleTest extends junit.framework.TestCase {
     27 
     28 	Locale testLocale;
     29 
     30 	Locale l;
     31 
     32 	Locale defaultLocale;
     33 
     34 	/**
     35 	 * @tests java.util.Locale#Locale(java.lang.String, java.lang.String)
     36 	 */
     37 	public void test_ConstructorLjava_lang_StringLjava_lang_String() {
     38 		// Test for method java.util.Locale(java.lang.String, java.lang.String)
     39 		Locale x = new Locale("xx", "CV");
     40 		assertTrue("Failed to create Locale", x.getCountry().equals("CV")
     41 				&& x.getVariant().equals(""));
     42 	}
     43 
     44 	/**
     45 	 * @tests java.util.Locale#Locale(java.lang.String, java.lang.String,
     46 	 *        java.lang.String)
     47 	 */
     48 	public void test_ConstructorLjava_lang_StringLjava_lang_StringLjava_lang_String() {
     49 		// Test for method java.util.Locale(java.lang.String, java.lang.String,
     50 		// java.lang.String)
     51 		Locale x = new Locale("xx", "CV", "ZZ");
     52 		assertTrue("Failed to create Locale", x.getLanguage().equals("xx")
     53 				&& (x.getCountry().equals("CV") && x.getVariant().equals("ZZ")));
     54                 try {
     55                    new Locale(null, "CV", "ZZ");
     56                    fail("expected NullPointerException with 1st parameter == null");
     57                 } catch(NullPointerException e) {
     58                 }
     59 
     60                 try {
     61                    new Locale("xx", null, "ZZ");
     62                    fail("expected NullPointerException with 2nd parameter == null");
     63                 } catch(NullPointerException e) {
     64                 }
     65 
     66                 try {
     67                    new Locale("xx", "CV", null);
     68                    fail("expected NullPointerException with 3rd parameter == null");
     69                 } catch(NullPointerException e) {
     70                 }
     71 	}
     72 
     73 	/**
     74 	 * @tests java.util.Locale#clone()
     75 	 */
     76 	public void test_clone() {
     77 		// Test for method java.lang.Object java.util.Locale.clone()
     78 		assertTrue("Clone failed", l.clone().equals(l));
     79 	}
     80 
     81 	/**
     82 	 * @tests java.util.Locale#equals(java.lang.Object)
     83 	 */
     84 	public void test_equalsLjava_lang_Object() {
     85 		// Test for method boolean java.util.Locale.equals(java.lang.Object)
     86 		Locale l2 = new Locale("en", "CA", "WIN32");
     87 		assertTrue("Same object returned false", testLocale.equals(testLocale));
     88 		assertTrue("Same values returned false", testLocale.equals(l2));
     89 		assertTrue("Different locales returned true", !testLocale.equals(l));
     90 
     91 	}
     92 
     93 	/**
     94      * @tests java.util.Locale#getAvailableLocales()
     95      */
     96     public void test_getAvailableLocales() {
     97         // Test for method java.util.Locale []
     98         // java.util.Locale.getAvailableLocales()
     99         // Assumes there will generally be about 100+ available locales...
    100         Locale[] locales = Locale.getAvailableLocales();
    101         assertTrue("Wrong number of locales: ", locales.length > 100);
    102         // regression test for HARMONY-1514
    103         // HashSet can filter duplicate locales
    104         Set<Locale> localesSet = new HashSet<Locale>(Arrays.asList(locales));
    105         // Non-bug difference for HARMONY-5442
    106         assertTrue(localesSet.size() <= locales.length);
    107     }
    108 
    109 	/**
    110      * @tests java.util.Locale#getCountry()
    111      */
    112 	public void test_getCountry() {
    113 		// Test for method java.lang.String java.util.Locale.getCountry()
    114 		assertTrue("Returned incorrect country: " + testLocale.getCountry(),
    115 				testLocale.getCountry().equals("CA"));
    116 	}
    117 
    118 	/**
    119 	 * @tests java.util.Locale#getDefault()
    120 	 */
    121 	public void test_getDefault() {
    122 		// Test for method java.util.Locale java.util.Locale.getDefault()
    123 		assertTrue("returns copy", Locale.getDefault() == Locale.getDefault());
    124 		Locale org = Locale.getDefault();
    125 		Locale.setDefault(l);
    126 		Locale x = Locale.getDefault();
    127 		Locale.setDefault(org);
    128 		assertEquals("Failed to get locale", "fr_CA_WIN32", x.toString());
    129 	}
    130 
    131 	/**
    132 	 * @tests java.util.Locale#getDisplayCountry()
    133 	 */
    134 	public void test_getDisplayCountry() {
    135 		// Test for method java.lang.String java.util.Locale.getDisplayCountry()
    136 		assertTrue("Returned incorrect country: "
    137 				+ testLocale.getDisplayCountry(), testLocale
    138 				.getDisplayCountry().equals("Canada"));
    139 
    140         // Regression for Harmony-1146
    141         // Non-bug difference for HARMONY-5442
    142         Locale l_countryCD = new Locale("", "CD"); //$NON-NLS-1$ //$NON-NLS-2$
    143                 assertEquals("Congo - Kinshasa", //$NON-NLS-1$
    144                         l_countryCD.getDisplayCountry());
    145 	}
    146 
    147 	/**
    148 	 * @tests java.util.Locale#getDisplayCountry(java.util.Locale)
    149 	 */
    150 	public void test_getDisplayCountryLjava_util_Locale() {
    151 		// Test for method java.lang.String
    152 		// java.util.Locale.getDisplayCountry(java.util.Locale)
    153 		assertEquals("Returned incorrect country", "Italie", Locale.ITALY
    154 				.getDisplayCountry(l));
    155 	}
    156 
    157 	/**
    158 	 * @tests java.util.Locale#getDisplayLanguage()
    159 	 */
    160 	public void test_getDisplayLanguage() {
    161 		// Test for method java.lang.String
    162 		// java.util.Locale.getDisplayLanguage()
    163 		assertTrue("Returned incorrect language: "
    164 				+ testLocale.getDisplayLanguage(), testLocale
    165 				.getDisplayLanguage().equals("English"));
    166 
    167 		// Regression for Harmony-1146
    168         Locale l_languageAE = new Locale("ae", ""); //$NON-NLS-1$ //$NON-NLS-2$
    169         assertEquals("Avestan", l_languageAE.getDisplayLanguage()); //$NON-NLS-1$
    170 
    171         // Regression for HARMONY-4402
    172         Locale defaultLocale = Locale.getDefault();
    173         try {
    174             Locale locale = new Locale("no", "NO");
    175             Locale.setDefault(locale);
    176             assertEquals("norsk", locale.getDisplayLanguage()); //$NON-NLS-1$
    177         } finally {
    178             Locale.setDefault(defaultLocale);
    179         }
    180 	}
    181 
    182 	/**
    183 	 * @tests java.util.Locale#getDisplayLanguage(java.util.Locale)
    184 	 */
    185 	public void test_getDisplayLanguageLjava_util_Locale() {
    186 		// Test for method java.lang.String
    187 		// java.util.Locale.getDisplayLanguage(java.util.Locale)
    188 		assertTrue("Returned incorrect language: "
    189 				+ testLocale.getDisplayLanguage(l), testLocale
    190 				.getDisplayLanguage(l).equals("anglais"));
    191 	}
    192 
    193 	/**
    194 	 * @tests java.util.Locale#getDisplayName()
    195 	 */
    196 	public void test_getDisplayName() {
    197 		// Test for method java.lang.String java.util.Locale.getDisplayName()
    198 		assertTrue("Returned incorrect name: " + testLocale.getDisplayName(),
    199 				testLocale.getDisplayName().equals("English (Canada,WIN32)"));
    200 	}
    201 
    202 	/**
    203 	 * @tests java.util.Locale#getDisplayName(java.util.Locale)
    204 	 */
    205 	public void test_getDisplayNameLjava_util_Locale() {
    206 		// Test for method java.lang.String
    207 		// java.util.Locale.getDisplayName(java.util.Locale)
    208 		assertTrue("Returned incorrect name: " + testLocale.getDisplayName(l),
    209 				testLocale.getDisplayName(l).equals("anglais (Canada,WIN32)"));
    210 	}
    211 
    212 	/**
    213 	 * @tests java.util.Locale#getDisplayVariant()
    214 	 */
    215 	public void test_getDisplayVariant() {
    216 		// Test for method java.lang.String java.util.Locale.getDisplayVariant()
    217 		assertTrue("Returned incorrect variant: "
    218 				+ testLocale.getDisplayVariant(), testLocale
    219 				.getDisplayVariant().equals("WIN32"));
    220 	}
    221 
    222 	/**
    223 	 * @tests java.util.Locale#getDisplayVariant(java.util.Locale)
    224 	 */
    225 	public void test_getDisplayVariantLjava_util_Locale() {
    226 		// Test for method java.lang.String
    227 		// java.util.Locale.getDisplayVariant(java.util.Locale)
    228 		assertTrue("Returned incorrect variant: "
    229 				+ testLocale.getDisplayVariant(l), testLocale
    230 				.getDisplayVariant(l).equals("WIN32"));
    231 	}
    232 
    233 	/**
    234 	 * @tests java.util.Locale#getISO3Country()
    235 	 */
    236 	public void test_getISO3Country() {
    237 		// Test for method java.lang.String java.util.Locale.getISO3Country()
    238 		assertTrue("Returned incorrect ISO3 country: "
    239 				+ testLocale.getISO3Country(), testLocale.getISO3Country()
    240 				.equals("CAN"));
    241 
    242         Locale l = new Locale("", "CD");
    243         assertEquals("COD", l.getISO3Country());
    244 	}
    245 
    246 	/**
    247 	 * @tests java.util.Locale#getISO3Language()
    248 	 */
    249 	public void test_getISO3Language() {
    250 		// Test for method java.lang.String java.util.Locale.getISO3Language()
    251 		assertTrue("Returned incorrect ISO3 language: "
    252 				+ testLocale.getISO3Language(), testLocale.getISO3Language()
    253 				.equals("eng"));
    254 
    255         Locale l = new Locale("ae");
    256         assertEquals("ave", l.getISO3Language());
    257 
    258         // Regression for Harmony-1146
    259 
    260         // Non-bug difference for HARMONY-5442
    261         Locale l_CountryCS = new Locale("", "CS"); //$NON-NLS-1$ //$NON-NLS-2$
    262         assertEquals("SCG", l_CountryCS.getISO3Country()); //$NON-NLS-1$
    263 
    264         // Regression for Harmony-1129
    265         l = new Locale("ak", ""); //$NON-NLS-1$ //$NON-NLS-2$
    266         assertEquals("aka", l.getISO3Language()); //$NON-NLS-1$
    267 	}
    268 
    269 	/**
    270 	 * @tests java.util.Locale#getISOCountries()
    271 	 */
    272 	public void test_getISOCountries() {
    273 		// Test for method java.lang.String []
    274 		// java.util.Locale.getISOCountries()
    275 		// Assumes all countries are 2 digits, and that there will always be
    276 		// 230 countries on the list...
    277 		String[] isoCountries = Locale.getISOCountries();
    278 		int length = isoCountries.length;
    279 		int familiarCount = 0;
    280 		for (int i = 0; i < length; i++) {
    281 			if (isoCountries[i].length() != 2) {
    282 				fail("Wrong format for ISOCountries.");
    283 			}
    284 			if (isoCountries[i].equals("CA") || isoCountries[i].equals("BB")
    285 					|| isoCountries[i].equals("US")
    286 					|| isoCountries[i].equals("KR"))
    287 				familiarCount++;
    288 		}
    289 		assertTrue("ISOCountries missing.", familiarCount == 4 && length > 230);
    290 	}
    291 
    292 	/**
    293 	 * @tests java.util.Locale#getISOLanguages()
    294 	 */
    295 	public void test_getISOLanguages() {
    296 		// Test for method java.lang.String []
    297 		// java.util.Locale.getISOLanguages()
    298 		// Assumes always at least 131 ISOlanguages...
    299 		String[] isoLang = Locale.getISOLanguages();
    300 		int length = isoLang.length;
    301 
    302 		// Non-bug difference for HARMONY-5442
    303 		assertTrue(isoLang[length / 2].length() == 3);
    304 		assertTrue(isoLang[length / 2].toLowerCase().equals(isoLang[length / 2]));
    305 		assertTrue("Wrong number of ISOLanguages.", length > 130);
    306 	}
    307 
    308 	/**
    309 	 * @tests java.util.Locale#getLanguage()
    310 	 */
    311 	public void test_getLanguage() {
    312 		// Test for method java.lang.String java.util.Locale.getLanguage()
    313 		assertTrue("Returned incorrect language: " + testLocale.getLanguage(),
    314 				testLocale.getLanguage().equals("en"));
    315 	}
    316 
    317 	/**
    318 	 * @tests java.util.Locale#getVariant()
    319 	 */
    320 	public void test_getVariant() {
    321 		// Test for method java.lang.String java.util.Locale.getVariant()
    322 		assertTrue("Returned incorrect variant: " + testLocale.getVariant(),
    323 				testLocale.getVariant().equals("WIN32"));
    324 	}
    325 
    326 	/**
    327 	 * @tests java.util.Locale#setDefault(java.util.Locale)
    328 	 */
    329 	public void test_setDefaultLjava_util_Locale() {
    330 		// Test for method void java.util.Locale.setDefault(java.util.Locale)
    331 
    332 		Locale org = Locale.getDefault();
    333 		Locale.setDefault(l);
    334 		Locale x = Locale.getDefault();
    335 		Locale.setDefault(org);
    336 		assertEquals("Failed to set locale", "fr_CA_WIN32", x.toString());
    337 
    338 		Locale.setDefault(new Locale("tr", ""));
    339 		String res1 = "\u0069".toUpperCase();
    340 		String res2 = "\u0049".toLowerCase();
    341 		Locale.setDefault(org);
    342 		assertEquals("Wrong toUppercase conversion", "\u0130", res1);
    343 		assertEquals("Wrong toLowercase conversion", "\u0131", res2);
    344 	}
    345 
    346 	/**
    347 	 * @tests java.util.Locale#toString()
    348 	 */
    349 	public void test_toString() {
    350 		// Test for method java.lang.String java.util.Locale.toString()
    351 		assertEquals("Returned incorrect string representation", "en_CA_WIN32", testLocale
    352 				.toString());
    353 
    354 		Locale l = new Locale("en", "");
    355 		assertEquals("Wrong representation 1", "en", l.toString());
    356 		l = new Locale("", "CA");
    357 		assertEquals("Wrong representation 2", "_CA", l.toString());
    358 
    359 		// Non-bug difference for HARMONY-5442
    360 		l = new Locale("", "CA", "var");
    361 		assertEquals("Wrong representation 2.5", "_CA_var", l.toString());
    362 		l = new Locale("en", "", "WIN");
    363 		assertEquals("Wrong representation 4", "en__WIN", l.toString());
    364 		l = new Locale("en", "CA");
    365 		assertEquals("Wrong representation 6", "en_CA", l.toString());
    366 		l = new Locale("en", "CA", "VAR");
    367 		assertEquals("Wrong representation 7", "en_CA_VAR", l.toString());
    368 
    369         l = new Locale("", "", "var");
    370         assertEquals("Wrong representation 8", "", l.toString());
    371 
    372 	}
    373 
    374     // Regression Test for HARMONY-2953
    375     public void test_getISO() {
    376         Locale locale = new Locale("an");
    377         assertEquals("arg", locale.getISO3Language());
    378 
    379         locale = new Locale("PS");
    380         assertEquals("pus", locale.getISO3Language());
    381 
    382         List<String> languages = Arrays.asList(Locale.getISOLanguages());
    383         assertTrue(languages.contains("ak"));
    384 
    385 		// Non-bug difference for HARMONY-5442
    386         List<String> countries = Arrays.asList(Locale.getISOCountries());
    387         assertFalse(countries.contains("CS"));
    388     }
    389 
    390     /**
    391      * @tests {@value java.util.Locale#ROOT}
    392      * @since 1.6
    393      */
    394     public void test_constantROOT() {
    395         Locale root = Locale.ROOT;
    396         assertEquals("", root.getLanguage());
    397         assertEquals("", root.getCountry());
    398         assertEquals("", root.getVariant());
    399     }
    400 
    401 	/**
    402 	 * Sets up the fixture, for example, open a network connection. This method
    403 	 * is called before a test is executed.
    404 	 */
    405 	protected void setUp() {
    406 		defaultLocale = Locale.getDefault();
    407 		Locale.setDefault(Locale.US);
    408 		testLocale = new Locale("en", "CA", "WIN32");
    409 		l = new Locale("fr", "CA", "WIN32");
    410 	}
    411 
    412 	/**
    413 	 * Tears down the fixture, for example, close a network connection. This
    414 	 * method is called after a test is executed.
    415 	 */
    416 	protected void tearDown() {
    417 		Locale.setDefault(defaultLocale);
    418 	}
    419 }
    420