blob: d13b7b8abbaa8479fda59b37fa835592fedc14b7 [file] [log] [blame]
// Copyright 2008 The Apache Software Foundation
//
// 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 org.apache.tapestry5.internal.util;
import junit.framework.Assert;
import org.testng.annotations.Test;
import java.util.Locale;
/**
* This, too, was adapted from commons-lang code. Could be cleaned up a bit to better take advantage of TestNG.
*/
@SuppressWarnings({ "EmptyCatchBlock" })
public class LocaleUtilsTest extends Assert
{
/**
* Pass in a valid language, test toLocale.
*
* @param language the language string
*/
private void assertValidToLocale(String language)
{
Locale locale = LocaleUtils.toLocale(language);
assertNotNull("valid locale", locale);
assertEquals(language, locale.getLanguage());
//country and variant are empty
assertTrue(locale.getCountry() == null || locale.getCountry().length() == 0);
assertTrue(locale.getVariant() == null || locale.getVariant().length() == 0);
}
/**
* Pass in a valid language, test toLocale.
*
* @param localeString to pass to toLocale()
* @param language of the resulting Locale
* @param country of the resulting Locale
*/
private void assertValidToLocale(String localeString, String language, String country)
{
Locale locale = LocaleUtils.toLocale(localeString);
assertNotNull("valid locale", locale);
assertEquals(language, locale.getLanguage());
assertEquals(country, locale.getCountry());
//variant is empty
assertTrue(locale.getVariant() == null || locale.getVariant().length() == 0);
}
/**
* Pass in a valid language, test toLocale.
*
* @param localeString to pass to toLocale()
* @param language of the resulting Locale
* @param country of the resulting Locale
* @param variant of the resulting Locale
*/
private void assertValidToLocale(
String localeString, String language,
String country, String variant)
{
Locale locale = LocaleUtils.toLocale(localeString);
assertNotNull("valid locale", locale);
assertEquals(language, locale.getLanguage());
assertEquals(country, locale.getCountry());
assertEquals(variant, locale.getVariant());
}
@Test
public void toLocale_just_language()
{
assertEquals(null, LocaleUtils.toLocale(null));
assertValidToLocale("us");
assertValidToLocale("fr");
assertValidToLocale("de");
assertValidToLocale("zh");
// Valid format but lang doesnt exist, should make instance anyway
assertValidToLocale("qq");
try
{
LocaleUtils.toLocale("Us");
fail("Should fail if not lowercase");
}
catch (IllegalArgumentException iae)
{
}
try
{
LocaleUtils.toLocale("US");
fail("Should fail if not lowercase");
}
catch (IllegalArgumentException iae)
{
}
try
{
LocaleUtils.toLocale("uS");
fail("Should fail if not lowercase");
}
catch (IllegalArgumentException iae)
{
}
try
{
LocaleUtils.toLocale("u#");
fail("Should fail if not lowercase");
}
catch (IllegalArgumentException iae)
{
}
try
{
LocaleUtils.toLocale("u");
fail("Must be 2 chars if less than 5");
}
catch (IllegalArgumentException iae)
{
}
try
{
LocaleUtils.toLocale("uuu");
fail("Must be 2 chars if less than 5");
}
catch (IllegalArgumentException iae)
{
}
try
{
LocaleUtils.toLocale("uu_U");
fail("Must be 2 chars if less than 5");
}
catch (IllegalArgumentException iae)
{
}
}
@Test
public void toLocale_language_and_country()
{
assertValidToLocale("us_EN", "us", "EN");
//valid though doesnt exist
assertValidToLocale("us_ZH", "us", "ZH");
try
{
LocaleUtils.toLocale("us-EN");
fail("Should fail as not underscore");
}
catch (IllegalArgumentException iae)
{
}
try
{
LocaleUtils.toLocale("us_En");
fail("Should fail second part not uppercase");
}
catch (IllegalArgumentException iae)
{
}
try
{
LocaleUtils.toLocale("us_en");
fail("Should fail second part not uppercase");
}
catch (IllegalArgumentException iae)
{
}
try
{
LocaleUtils.toLocale("us_eN");
fail("Should fail second part not uppercase");
}
catch (IllegalArgumentException iae)
{
}
try
{
LocaleUtils.toLocale("uS_EN");
fail("Should fail first part not lowercase");
}
catch (IllegalArgumentException iae)
{
}
try
{
LocaleUtils.toLocale("us_E3");
fail("Should fail second part not uppercase");
}
catch (IllegalArgumentException iae)
{
}
}
/**
* Test toLocale() method.
*/
@Test
public void toLocale_with_variant()
{
assertValidToLocale("us_EN_A", "us", "EN", "A");
assertValidToLocale("us_EN_a", "us", "EN", "a");
assertValidToLocale("us_EN_SFsafdFDsdfF", "us", "EN", "SFsafdFDsdfF");
try
{
LocaleUtils.toLocale("us_EN-a");
fail("Should fail as not underscore");
}
catch (IllegalArgumentException iae)
{
}
try
{
LocaleUtils.toLocale("uu_UU_");
fail("Must be 3, 5 or 7+ in length");
}
catch (IllegalArgumentException iae)
{
}
}
}