/*
* Weblounge: Web Content Management System
* Copyright (c) 2003 - 2011 The Weblounge Team
* http://entwinemedia.com/weblounge
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package ch.entwine.weblounge.common.impl.language;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import ch.entwine.weblounge.common.language.Language;
import ch.entwine.weblounge.common.language.Localizable.LanguageResolution;
import ch.entwine.weblounge.common.language.LocalizationListener;
import org.junit.Before;
import org.junit.Test;
import java.util.Locale;
/**
* LocalizableObjectImplTest
*/
public class LocalizableObjectTest {
/** The localizable content */
protected LocalizableContent<String> content = null;
/** English locale */
protected Locale englishLocale = new Locale("en");
/** French locale */
protected Locale frenchLocale = new Locale("fr");
/** Italian locale */
protected Locale italianLocale = new Locale("it");
/** English */
protected Language english = new LanguageImpl(englishLocale);
/** French */
protected Language french = new LanguageImpl(frenchLocale);
/** Italian */
protected Language italian = new LanguageImpl(italianLocale);
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
content = new LocalizableContent<String>();
content.put(englishLocale.getDisplayLanguage(englishLocale), english);
content.put(englishLocale.getDisplayLanguage(frenchLocale), french);
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#LocalizableObject(ch.entwine.weblounge.common.language.Language)}.
*/
@Test
public void testLocalizableObjectLanguage() {
LocalizableObject lc = new LocalizableContent<String>(french);
assertEquals(french, lc.getDefaultLanguage());
assertEquals(LanguageResolution.Default, lc.getLanguageResolution());
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#enableLanguage(ch.entwine.weblounge.common.language.Language)}.
*/
@Test
public void testEnableLanguage() {
content.enableLanguage(italian);
assertTrue(content.supportsLanguage(italian));
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#disableLanguage(ch.entwine.weblounge.common.language.Language)}.
*/
@Test
public void testRemove() {
content.disableLanguage(french);
assertFalse(content.supportsLanguage(french));
assertEquals(1, content.size());
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableContent#switchedTo(ch.entwine.weblounge.common.language.Language)}.
*/
@Test
public void testSwitchedTo() {
final StringBuffer newLanguage = new StringBuffer();
content.addLocalizationListener(new LocalizationListener() {
public void switchedTo(Language language, Language requestedLanguage) {
newLanguage.append(language.getIdentifier());
}
});
content.switchTo(french);
assertEquals(french.getIdentifier(), newLanguage.toString());
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#switchTo(ch.entwine.weblounge.common.language.Language)}.
*/
@Test
public void testSwitchToLanguage() {
content.switchTo(french);
assertEquals(french, content.getLanguage());
content.switchTo(italian);
assertEquals(content.getOriginalLanguage(), content.getLanguage());
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#switchTo(ch.entwine.weblounge.common.language.Language, boolean)}.
*/
@Test
public void testSwitchToLanguageBoolean() {
try {
content.switchTo(italian, true);
fail("Language switch to unresolvable language did not fail");
} catch (IllegalStateException e) {
// Expected, everything's fine
}
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#getLanguage()}.
*/
@Test
public void testGetLanguage() {
assertEquals(english, content.getLanguage());
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#setLanguageResolution(ch.entwine.weblounge.common.language.Localizable.LanguageResolution)}.
*/
@Test
public void testSetLanguageResolution() {
content.setDefaultLanguage(french);
content.setLanguageResolution(LanguageResolution.Default);
assertEquals(LanguageResolution.Default, content.getLanguageResolution());
assertEquals(french, content.switchTo(italian));
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#getLanguageResolution()}.
*/
@Test
public void testGetLanguageResolution() {
assertEquals(LanguageResolution.Original, content.getLanguageResolution());
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#setDefaultLanguage(ch.entwine.weblounge.common.language.Language)}.
*/
@Test
public void testSetDefaultLanguage() {
content.setDefaultLanguage(null);
content.setDefaultLanguage(french);
assertEquals(french, content.getDefaultLanguage());
try {
content.setLanguageResolution(LanguageResolution.Default);
content.setDefaultLanguage(null);
fail("Setting the default language to null should be prohited in this case");
} catch (IllegalArgumentException e) {
// Expected
}
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#getDefaultLanguage()}.
*/
@Test
public void testGetDefaultLanguage() {
assertTrue(content.getDefaultLanguage() == null);
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#getOriginalLanguage()}.
*/
@Test
public void testGetOriginalLanguage() {
assertEquals(english, content.getOriginalLanguage());
LocalizableObject lc = new LocalizableContent<String>(french);
assertTrue(lc.getOriginalLanguage() == null);
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#setOriginalLanguage(ch.entwine.weblounge.common.language.Language)}.
*/
@Test
public void testSetOriginalLanguage() {
content.setOriginalLanguage(french);
assertEquals(french, content.getOriginalLanguage());
assertEquals(english, content.getLanguage());
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#supportsLanguage(ch.entwine.weblounge.common.language.Language)}.
*/
@Test
public void testSupportsLanguage() {
assertTrue(content.supportsLanguage(english));
assertFalse(content.supportsLanguage(italian));
LocalizableObject lc = new LocalizableContent<String>();
lc.setOriginalLanguage(english);
lc.setDefaultLanguage(french);
assertFalse(lc.supportsLanguage(english));
assertFalse(lc.supportsLanguage(french));
}
/**
* Test method for {@link ch.entwine.weblounge.common.impl.language.LocalizableObject#languages()}.
*/
@Test
public void testLanguages() {
assertEquals(2, content.languages().size());
assertTrue(content.languages().contains(english));
assertFalse(content.languages().contains(italian));
}
}