Index: lutinutil/src/test/org/codelutin/i18n/bundle/I18nBundleManagerTest.java diff -u /dev/null lutinutil/src/test/org/codelutin/i18n/bundle/I18nBundleManagerTest.java:1.1 --- /dev/null Mon Mar 3 13:14:45 2008 +++ lutinutil/src/test/org/codelutin/i18n/bundle/I18nBundleManagerTest.java Mon Mar 3 13:14:40 2008 @@ -0,0 +1,250 @@ +package org.codelutin.i18n.bundle; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; +import org.codelutin.i18n.I18n; +import org.codelutin.i18n.Language; + +import java.io.File; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Locale; + +/** + * I18nBundleFinder Tester. + *
+ * For this tests, we assume we have the correspondant bundles : + * + * verydummy + * dummy + * dummyOnlyfr + * dummyOnlyen + * + * dummy-fr + * dummyOnlyfr-fr + * dummyOnlyfr2-fr + * dummy-en + * dummyOnlyen-en + * + * dummy-fr_FR + * lutinutil-fr_FR + * dummy-en_GB + * lutinutil-en_GB + * dummy-en_US + * + * + * @author chemit + * @version 1.0 + * @since03/02/2008+ */ +public class I18nBundleManagerTest extends TestCase { + + Locale locale; + + static URLClassLoader loader; + + private static Integer nbURLs = null; + + static enum BundleTest { + veryDummy(true, false, false, false, false, false), + dummy(true, true, true, true, true, true), + lutinutil(false, false, true, false, false, true), + onlyfr(true, true, false, false, false, false), + onylfr2(false, true, false, false, false, false), + onlyen(true, false, false, true, false, false); + + boolean hasGene; + boolean hasFr; + boolean hasFrFR; + boolean hasEn; + boolean hasEnUS; + boolean hasEnUK; + + BundleTest(boolean hasGene, boolean hasFr, boolean hasFrFR, boolean hasEn, boolean hasEnUS, boolean hasEnUK) { + this.hasGene = hasGene; + this.hasFr = hasFr; + this.hasFrFR = hasFrFR; + this.hasEn = hasEn; + this.hasEnUS = hasEnUS; + this.hasEnUK = hasEnUK; + } + + static int getNbGeneralBundles() { + int result = 0; + for (BundleTest bundleTest : values()) { + if (bundleTest.hasGene) { + result++; + } + } + return result; + } + + static int getNbLanguageBundles(boolean fr, boolean en) { + int result = 0; + for (BundleTest bundleTest : values()) { + if (bundleTest.hasGene) { + continue; + } + if (fr && bundleTest.hasFr) { + result++; + } + if (en && bundleTest.hasEn) { + result++; + } + } + return result; + } + + static int gerNbFullBundles(boolean fr, boolean us, boolean uk) { + int result = 0; + for (BundleTest bundleTest : values()) { + if (bundleTest.hasGene || ((uk || us) && bundleTest.hasEn) || (fr && bundleTest.hasFr)) { + continue; + } + if (fr && bundleTest.hasFrFR) { + result++; + } + if (us && bundleTest.hasEnUS) { + result++; + } + if (uk && bundleTest.hasEnUK) { + result++; + } + } + return result; + } + + static int getNbLanguageEntries(boolean fr, boolean en) { + int result = 0; + for (BundleTest bundleTest : values()) { + if (bundleTest.hasGene) { + result++; + } + if (fr && bundleTest.hasFr) { + result++; + } + if (en && bundleTest.hasEn) { + result++; + } + } + return result; + } + + static int gerNbFullEntries(boolean fr, boolean us, boolean uk) { + int result = 0; + for (BundleTest bundleTest : values()) { + if (bundleTest.hasGene) { + result++; + } + if (((uk || us) && bundleTest.hasEn)) { + result++; + } + + if ((fr && bundleTest.hasFr)) { + result++; + } + + if (fr && bundleTest.hasFrFR) { + result++; + } + if (us && bundleTest.hasEnUS) { + result++; + } + if (uk && bundleTest.hasEnUK) { + result++; + } + } + return result; + } + } + + public I18nBundleManagerTest(String name) { + super(name); + } + + @Override + public void setUp() throws Exception { + super.setUp(); + if (loader == null) { + loader = (URLClassLoader) I18n.class.getClassLoader(); + } + } + + @Override + public void tearDown() throws Exception { + super.tearDown(); + locale = null; + } + + + public static int getNbURLs() { + if (nbURLs == null) { + File f; + f = new File("target/test-classes/i18n"); + nbURLs = f.listFiles().length; + f = new File("target/classes/i18n"); + nbURLs += f.listFiles().length; + } + return nbURLs; + } + + public void testGetURLs() throws Exception { + assertEquals(getNbURLs(), I18nBundleManager.getInstance().getURLs(loader).length); + } + + public void testDetectBundles() throws Exception { + URL[] urls = I18nBundleManager.getInstance().getURLs(loader); + assertEquals(BundleTest.values().length, I18nBundleManager.getInstance().detectBundles(urls).size()); + } + + public void testGetBundles() throws Exception { + updateLanguage(null); + updateLanguage(Locale.FRENCH); + updateLanguage(Locale.ENGLISH); + updateLanguage(Locale.FRANCE); + updateLanguage(Locale.US); + updateLanguage(Locale.UK); + } + + protected void updateLanguage(Locale newLocale) { + locale = newLocale; + Language.newLanguage(locale, I18n.DEFAULT_ENCODING); + assertBundlesEntries(); + } + + protected void assertBundlesEntries() { + int nbGene = BundleTest.getNbGeneralBundles(); + boolean isFr = locale != null && "fr".equals(locale.getLanguage()); + boolean isEn = locale != null && "en".equals(locale.getLanguage()); + boolean isFrFR = isFr && "FR".equals(locale.getCountry()); + boolean isEnUS = isEn && "US".equals(locale.getCountry()); + boolean isEnGB = isEn && "GB".equals(locale.getCountry()); + + int nbLang = BundleTest.getNbLanguageBundles(isFr, isEn); + int nbFull = BundleTest.gerNbFullBundles(isFrFR, isEnUS, isEnGB); + + int nbEntries = 0; + + if (locale == null) { + nbEntries = nbGene; + } + + if (isFrFR) { + + } + + if (isFrFR || isEnUS || isEnGB) { + nbEntries += BundleTest.gerNbFullEntries(isFrFR, isEnUS, isEnGB); + } else if (isFr || isEn) { + nbEntries += BundleTest.getNbLanguageEntries(isFr, isEn); + } + + assertEquals(nbGene + nbLang + nbFull, I18nBundleManager.getInstance().getBundles(locale).length); + assertEquals(nbEntries, I18nBundleManager.getInstance().getBundleEntries(locale).length); + } + + public static Test suite() { + return new TestSuite(I18nBundleManagerTest.class); + } +}