/* * Copyright 2008-2014 the original author or authors * * 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.kaleidofoundry.core.i18n; import java.util.Locale; import java.util.MissingResourceException; import org.junit.After; import org.junit.Assert; import org.junit.Test; import org.kaleidofoundry.core.lang.NotNullException; /** * Test {@link I18nMessages} and {@link DefaultMessageBundle} * * @author jraduget */ public abstract class AbstractI18nMessagesTest extends Assert { /** * @return root resource path containing i18n test mock */ abstract String getResourceRoot(); /** * Clear bundle cache after each test method */ @After public void cleanup() { I18nMessagesFactory.clearCache(); } @Test(expected = NotNullException.class) public void noParent_nullBasename() { I18nMessagesFactory.provides(null, Locale.ROOT); } @Test(expected = NotNullException.class) public void noParent_nullLocale() { I18nMessagesFactory.provides(getResourceRoot() + "root", (Locale) null); } @Test(expected = MissingResourceException.class) public void noResourceFile() { I18nMessagesFactory.provides(getResourceRoot() + "nofile"); } @Test(expected = MissingResourceException.class) public void noResourceKey() { final I18nMessages messages = I18nMessagesFactory.provides(getResourceRoot() + "root", Locale.FRENCH); messages.getMessage("noKey"); } @Test public void noParent_rootLocale() { final I18nMessages messages = I18nMessagesFactory.provides(getResourceRoot() + "root", Locale.ROOT); assertValues(messages, null); } @Test public void noParent_French() { final Locale locale = Locale.FRENCH; final I18nMessages messages = I18nMessagesFactory.provides(getResourceRoot() + "root", locale); assertValues(messages, locale); } @Test public void noParent_English() { final Locale locale = Locale.ENGLISH; final I18nMessages messages = I18nMessagesFactory.provides(getResourceRoot() + "root", locale); assertValues(messages, locale); } @Test public void noParent_German() { final Locale locale = Locale.GERMAN; final I18nMessages messages = I18nMessagesFactory.provides(getResourceRoot() + "root", locale); assertValues(messages, locale); } @Test public void noParent_unknownLocale() { final I18nMessages messages = I18nMessagesFactory.provides(getResourceRoot() + "root", Locale.TRADITIONAL_CHINESE); assertValues(messages, null); } /** * test messageBundle with a parent and its child<br/> * if item is not found in children bundle, it have to found it in parent<br/> * children item can override parent item */ @Test public void withParent_French() { final Locale locale = Locale.FRENCH; final I18nMessages parent = I18nMessagesFactory.provides(getResourceRoot() + "root", locale); final I18nMessages messages = I18nMessagesFactory.provides(getResourceRoot() + "child", Locale.FRENCH, parent); final String localePrefix = locale != null ? locale.getLanguage() + " " : ""; assertEquals(localePrefix + "test override parent label", messages.getMessage("label.simple.test")); // override default value assertEquals(localePrefix + "test label 01", messages.getMessage("label.array.test", "01")); // parent item value assertEquals(localePrefix + "test label 01 02", messages.getMessage("label.array2.test", "01", "02")); // parent item value assertEquals(localePrefix + "test child label", messages.getMessage("child.simple.test")); // new child item value } /** * @throws Throwable */ @Test(expected = MissingResourceException.class) public void withParent_noResourceKey() throws Throwable { final Locale locale = Locale.FRENCH; final I18nMessages messages = I18nMessagesFactory.provides(getResourceRoot() + "child", locale); messages.getMessage("label.array.test"); } /** * Global test case * * @param messages * @param locale */ void assertValues(final I18nMessages messages, final Locale locale) { final String localePrefix = locale != null ? locale.getLanguage() + " " : ""; assertEquals(localePrefix + "test label", messages.getMessage("label.simple.test")); assertEquals(localePrefix + "test label 01", messages.getMessage("label.array.test", "01")); assertEquals(localePrefix + "test label 01 02", messages.getMessage("label.array2.test", "01", "02")); } }