/* * 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.assertNull; 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.UnknownLanguageException; import org.junit.Before; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.SAXException; import java.io.IOException; import java.net.URL; import java.util.Locale; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; /** * Test cases for the {@link LanguageUtils} implementation. */ public class LanguageUtilsTest { /** 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 { } /** * Test method for * {@link ch.entwine.weblounge.common.impl.language.LanguageUtils#getLanguage(java.util.Locale)} * . */ @Test public void testGetLanguageLocale() { assertEquals(italian, LanguageUtils.getLanguage(italianLocale)); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.language.LanguageUtils#getLanguage(java.lang.String)} * . */ @Test public void testGetLanguageString() { assertEquals(italian, LanguageUtils.getLanguage("it")); try { LanguageUtils.getLanguage("xyz"); fail("Language xyz should not be resolved"); } catch (UnknownLanguageException e) { // Expected } } /** * Test method for * {@link ch.entwine.weblounge.common.impl.language.LanguageUtils#addDescriptions(javax.xml.xpath.XPath, org.w3c.dom.Node, java.lang.String, ch.entwine.weblounge.common.language.Language, ch.entwine.weblounge.common.impl.language.LocalizableContent, boolean)} * . */ @Test public void testAddDescriptions() { LocalizableContent<String> names = null; Node xml = null; // Read the test fragment try { DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); URL testContext = this.getClass().getResource("/localizable.xml"); Document doc = docBuilder.parse(testContext.openStream()); xml = doc.getFirstChild(); } catch (ParserConfigurationException e) { fail(e.getMessage()); } catch (SAXException e) { fail(e.getMessage()); } catch (IOException e) { fail(e.getMessage()); } // Test happy path names = LanguageUtils.addDescriptions(xml, "name", french, null, false); assertEquals(2, names.size()); assertTrue(names.supportsLanguage(english)); assertTrue(names.supportsLanguage(french)); assertEquals(french, names.getDefaultLanguage()); // Test missing default language names = LanguageUtils.addDescriptions(xml, "name", italian, null, false); assertEquals(2, names.size()); assertNull(names.getDefaultLanguage()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.language.LanguageUtils#getLanguageVariant(java.lang.String, ch.entwine.weblounge.common.language.Language)} * . */ @Test public void testGetLanguageVariant() { assertEquals("test_en", LanguageUtils.getLanguageVariant("test", english)); assertEquals("test_en.jsp", LanguageUtils.getLanguageVariant("test.jsp", english)); assertEquals("/a/test_en.jsp", LanguageUtils.getLanguageVariant("/a/test.jsp", english)); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.language.LanguageUtils#getLanguageVariants(java.lang.String, ch.entwine.weblounge.common.language.Language[])} * . */ @Test public void testGetLanguageVariantsStringLanguageArray() { Language[] languages = new Language[] { english, french }; String[] result = LanguageUtils.getLanguageVariants("test.jsp", languages); assertEquals(3, result.length); assertEquals("test_en.jsp", result[0]); assertEquals("test_fr.jsp", result[1]); assertEquals("test.jsp", result[2]); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.language.LanguageUtils#getBaseVersion(java.lang.String, ch.entwine.weblounge.common.language.LanguageManager)} * . */ @Test public void testGetBaseVersion() { assertEquals("test.jsp", LanguageUtils.getBaseVersion("test_en.jsp")); try { LanguageUtils.getBaseVersion("test_xyz.jsp"); fail("LanguageSupport failed when presented with by non existent language xyz"); } catch (UnknownLanguageException e) { // Expected } } /** * Test method for * {@link ch.entwine.weblounge.common.impl.language.LanguageUtils#extractLanguage(java.lang.String)} * . */ @Test public void testExtractLanguage() { assertEquals(italian, LanguageUtils.extractLanguage("test_it.jsp")); assertTrue(LanguageUtils.extractLanguage("test.jsp") == null); try { assertEquals(italian, LanguageUtils.extractLanguage("test_xyz.jsp")); fail("LanguageSupport was fooled by non existent language xyz"); } catch (UnknownLanguageException e) { // Expected } } }