/*
* $Id: TestPropertyMessageResources.java 480549 2006-11-29 12:16:15Z niallp $
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.struts.util;
import junit.framework.Test;
import junit.framework.TestSuite;
import junit.framework.TestCase;
import java.util.Locale;
import org.apache.struts.config.MessageResourcesConfig;
/**
* Unit tests for PropertyMessageResources.
*
* @version $Revision: 480549 $
*/
public class TestPropertyMessageResources extends TestCase {
private static final String FOO_RESOURCES = "org.apache.struts.util.Foo";
private Locale defaultLocale;
// ----------------------------------------------------------------- Basics
public TestPropertyMessageResources(String name) {
super(name);
}
public static void main(String[] args) {
junit.awtui.TestRunner.main(new String[] {
TestPropertyMessageResources.class.getName()
});
}
public static Test suite() {
return (new TestSuite(TestPropertyMessageResources.class));
}
// ----------------------------------------------------- Setup and Teardown
public void setUp() {
// cache the default locale
defaultLocale = Locale.getDefault();
}
public void tearDown() {
// restore the default locale
Locale.setDefault(defaultLocale);
}
// ------------------------------------------------------- Individual Tests
/**
* Test Struts default PropertyMessageResources behaviour
*/
public void testDefaultMode() {
Locale.setDefault(Locale.US);
// Create message resources - default Struts Behaviour
// MessageResources resources = createMessageResources(FOO_RESOURCES, true, "DEFAULT");
MessageResources resources = createMessageResources(FOO_RESOURCES, true, null);
// Test language (& default) only keys
assertEquals("key.lang FRANCE", "LANG default", resources.getMessage(Locale.FRANCE, "key.lang")); // no cached en_US
assertEquals("key.lang English", "LANG en", resources.getMessage(Locale.ENGLISH, "key.lang"));
assertEquals("key.lang US", "LANG en", resources.getMessage(Locale.US, "key.lang"));
assertEquals("key.lang ITALY", "LANG en", resources.getMessage(Locale.ITALY, "key.lang")); // cached en_US
assertEquals("key.lang German", "LANG de", resources.getMessage(Locale.GERMAN, "key.lang"));
assertEquals("key.lang GERMANY", "LANG de", resources.getMessage(Locale.GERMANY, "key.lang"));
// Test country (& default) only keys
assertEquals("key.country FRANCE", "COUNTRY en_US", resources.getMessage(Locale.FRANCE, "key.country"));
assertEquals("key.country English", "COUNTRY en_US", resources.getMessage(Locale.ENGLISH, "key.country"));
assertEquals("key.country US", "COUNTRY en_US", resources.getMessage(Locale.US, "key.country"));
assertEquals("key.country ITALY", "COUNTRY en_US", resources.getMessage(Locale.ITALY, "key.country"));
assertEquals("key.country German", "COUNTRY en_US", resources.getMessage(Locale.GERMAN, "key.country"));
assertEquals("key.country GERMANY", "COUNTRY de_DE", resources.getMessage(Locale.GERMANY, "key.country"));
// Test Unique Keys with wrong Locale
assertEquals("Wrong Locale en only", null, resources.getMessage(Locale.GERMAN, "key.en"));
assertEquals("Wrong Locale en_US only", "en_US only", resources.getMessage(Locale.GERMANY, "key.en_US"));
// Run tests with common expected results
commonTests(resources);
}
/**
* Test JSTL compatible PropertyMessageResources behaviour
*/
public void testJstlMode() {
Locale.setDefault(Locale.US);
// Create message resources - default Struts Behaviour
MessageResources resources = createMessageResources(FOO_RESOURCES, true, "JSTL");
// Test language (& default) only keys
assertEquals("key.lang FRANCE", "LANG default", resources.getMessage(Locale.FRANCE, "key.lang"));
assertEquals("key.lang English", "LANG en", resources.getMessage(Locale.ENGLISH, "key.lang"));
assertEquals("key.lang US", "LANG en", resources.getMessage(Locale.US, "key.lang"));
assertEquals("key.lang ITALY", "LANG default", resources.getMessage(Locale.ITALY, "key.lang"));
assertEquals("key.lang German", "LANG de", resources.getMessage(Locale.GERMAN, "key.lang"));
assertEquals("key.lang GERMANY", "LANG de", resources.getMessage(Locale.GERMANY, "key.lang"));
// Test country (& default) only keys
assertEquals("key.country FRANCE", "COUNTRY default", resources.getMessage(Locale.FRANCE, "key.country"));
assertEquals("key.country English", "COUNTRY default", resources.getMessage(Locale.ENGLISH, "key.country"));
assertEquals("key.country US", "COUNTRY en_US", resources.getMessage(Locale.US, "key.country"));
assertEquals("key.country ITALY", "COUNTRY default", resources.getMessage(Locale.ITALY, "key.country"));
assertEquals("key.country German", "COUNTRY default", resources.getMessage(Locale.GERMAN, "key.country"));
assertEquals("key.country GERMANY", "COUNTRY de_DE", resources.getMessage(Locale.GERMANY, "key.country"));
// Test Unique Keys with wrong Locale
assertEquals("Wrong Locale en only", null, resources.getMessage(Locale.GERMAN, "key.en"));
assertEquals("Wrong Locale en_US only", null, resources.getMessage(Locale.GERMANY, "key.en_US"));
// Run tests with common expected results
commonTests(resources);
}
/**
* Test "PropertyResourceBundle" compatible PropertyMessageResources behaviour
*/
public void testResourceBundleMode() {
Locale.setDefault(Locale.US);
// Create message resources - default Struts Behaviour
MessageResources resources = createMessageResources(FOO_RESOURCES, true, "RESOURCE");
// Test language (& default) only keys
assertEquals("key.lang FRANCE", "LANG en", resources.getMessage(Locale.FRANCE, "key.lang"));
assertEquals("key.lang English", "LANG en", resources.getMessage(Locale.ENGLISH, "key.lang"));
assertEquals("key.lang US", "LANG en", resources.getMessage(Locale.US, "key.lang"));
assertEquals("key.lang ITALY", "LANG en", resources.getMessage(Locale.ITALY, "key.lang"));
assertEquals("key.lang German", "LANG de", resources.getMessage(Locale.GERMAN, "key.lang"));
assertEquals("key.lang GERMANY", "LANG de", resources.getMessage(Locale.GERMANY, "key.lang"));
// Test country (& default) only keys
assertEquals("key.country FRANCE", "COUNTRY en_US", resources.getMessage(Locale.FRANCE, "key.country"));
assertEquals("key.country English", "COUNTRY en_US", resources.getMessage(Locale.ENGLISH, "key.country"));
assertEquals("key.country US", "COUNTRY en_US", resources.getMessage(Locale.US, "key.country"));
assertEquals("key.country ITALY", "COUNTRY en_US", resources.getMessage(Locale.ITALY, "key.country"));
assertEquals("key.country German", "COUNTRY en_US", resources.getMessage(Locale.GERMAN, "key.country"));
assertEquals("key.country GERMANY", "COUNTRY de_DE", resources.getMessage(Locale.GERMANY, "key.country"));
// Test Unique Keys with wrong Locale
assertEquals("Wrong Locale en only", "en only", resources.getMessage(Locale.GERMAN, "key.en"));
assertEquals("Wrong Locale en_US only", "en_US only", resources.getMessage(Locale.GERMANY, "key.en_US"));
// Run tests with common expected results
commonTests(resources);
}
/**
* Tests with common expected results
*/
public void commonTests(MessageResources resources) {
// Test "null" Locale
assertEquals("null Locale", "ALL default", resources.getMessage((Locale)null, "key.all"));
// Test Default only key with all Locales
assertEquals("Check default en", "default only", resources.getMessage(Locale.ENGLISH, "key.default"));
assertEquals("Check default en_US", "default only", resources.getMessage(Locale.US, "key.default"));
assertEquals("Check default de", "default only", resources.getMessage(Locale.GERMAN, "key.default"));
assertEquals("Check default de_DE", "default only", resources.getMessage(Locale.GERMANY, "key.default"));
// Test key in all locales
assertEquals("Check ALL en", "ALL en", resources.getMessage(Locale.ENGLISH, "key.all"));
assertEquals("Check ALL en_US", "ALL en_US", resources.getMessage(Locale.US, "key.all"));
assertEquals("Check ALL de", "ALL de", resources.getMessage(Locale.GERMAN, "key.all"));
assertEquals("Check ALL de_DE", "ALL de_DE", resources.getMessage(Locale.GERMANY, "key.all"));
// Test key unique to each locale
assertEquals("Check en only", "en only", resources.getMessage(Locale.ENGLISH, "key.en"));
assertEquals("Check en_US only", "en_US only", resources.getMessage(Locale.US, "key.en_US"));
assertEquals("Check de only", "de only", resources.getMessage(Locale.GERMAN, "key.de"));
assertEquals("Check de_DE only", "de_DE only", resources.getMessage(Locale.GERMANY, "key.de_DE"));
// Test unique keys with incorrect Locale
assertEquals("Missing default", null, resources.getMessage(Locale.ENGLISH, "missing"));
assertEquals("Missing de only", null, resources.getMessage(Locale.US, "key.de"));
assertEquals("Missing de_DE only", null, resources.getMessage(Locale.US, "key.de_DE"));
}
/**
* Create the PropertyMessageResources.
*/
private MessageResources createMessageResources(String file, boolean returnNull, String mode) {
MessageResourcesConfig config = new MessageResourcesConfig();
config.setNull(returnNull);
if (mode != null) {
config.setProperty("mode", mode);
}
PropertyMessageResourcesFactory factory = new PropertyMessageResourcesFactory();
factory.setConfig(config);
factory.setReturnNull(returnNull);
return factory.createResources(file);
}
}