From 6384256c0658c111d80690deb23cc25a9925a17a Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 1 Jul 2011 13:11:59 +0100 Subject: [PATCH] Unit tests for i18n component. --- components/net/sf/briar/i18n/I18nImpl.java | 9 +- .../net/sf/briar/setup/SetupWorker.java | 2 +- test/build.xml | 3 +- test/net/sf/briar/TestUtils.java | 8 ++ ...agerImplTest.java => FontManagerTest.java} | 10 +- test/net/sf/briar/i18n/I18nTest.java | 102 ++++++++++++++++++ test/net/sf/briar/setup/SetupWorkerTest.java | 2 +- 7 files changed, 125 insertions(+), 11 deletions(-) rename test/net/sf/briar/i18n/{FontManagerImplTest.java => FontManagerTest.java} (87%) create mode 100644 test/net/sf/briar/i18n/I18nTest.java diff --git a/components/net/sf/briar/i18n/I18nImpl.java b/components/net/sf/briar/i18n/I18nImpl.java index f4095a359..cf258512a 100644 --- a/components/net/sf/briar/i18n/I18nImpl.java +++ b/components/net/sf/briar/i18n/I18nImpl.java @@ -121,8 +121,11 @@ public class I18nImpl implements I18n { } public void loadLocale() throws IOException { - File root = FileUtils.getBriarDirectory(); - Scanner s = new Scanner(new File(root, "Data/locale.cfg")); + loadLocale(FileUtils.getBriarDirectory()); + } + + public void loadLocale(File dir) throws IOException { + Scanner s = new Scanner(new File(dir, "Data/locale.cfg")); if(s.hasNextLine()) setLocale(new Locale(s.nextLine())); s.close(); } @@ -132,7 +135,7 @@ public class I18nImpl implements I18n { } public void saveLocale(File dir) throws IOException { - File localeCfg = new File(dir, "locale.cfg"); + File localeCfg = new File(dir, "Data/locale.cfg"); FileOutputStream out = new FileOutputStream(localeCfg); PrintStream print = new PrintStream(out); print.println(locale); diff --git a/components/net/sf/briar/setup/SetupWorker.java b/components/net/sf/briar/setup/SetupWorker.java index c51693cec..415031796 100644 --- a/components/net/sf/briar/setup/SetupWorker.java +++ b/components/net/sf/briar/setup/SetupWorker.java @@ -82,7 +82,7 @@ class SetupWorker implements Runnable { createLaunchers(dir); if(callback.isCancelled()) return; // Save the chosen locale for the first launch - i18n.saveLocale(data); + i18n.saveLocale(dir); if(callback.isCancelled()) return; // Installation succeeded - delete the installer jar.deleteOnExit(); diff --git a/test/build.xml b/test/build.xml index f5f8413e0..12f16f550 100644 --- a/test/build.xml +++ b/test/build.xml @@ -13,7 +13,8 @@ - + + diff --git a/test/net/sf/briar/TestUtils.java b/test/net/sf/briar/TestUtils.java index bd8397c85..32b8198f5 100644 --- a/test/net/sf/briar/TestUtils.java +++ b/test/net/sf/briar/TestUtils.java @@ -33,4 +33,12 @@ public class TestUtils { public static void deleteTestDirectories() { delete(new File("test.tmp")); } + + public static File getBuildDirectory() { + File build = new File("build"); // Ant + if(build.exists() && build.isDirectory()) return build; + File bin = new File("bin"); // Eclipse + if(bin.exists() && bin.isDirectory()) return bin; + throw new RuntimeException("Could not find build directory"); + } } diff --git a/test/net/sf/briar/i18n/FontManagerImplTest.java b/test/net/sf/briar/i18n/FontManagerTest.java similarity index 87% rename from test/net/sf/briar/i18n/FontManagerImplTest.java rename to test/net/sf/briar/i18n/FontManagerTest.java index 3c5dbd675..0b5ebc415 100644 --- a/test/net/sf/briar/i18n/FontManagerImplTest.java +++ b/test/net/sf/briar/i18n/FontManagerTest.java @@ -3,15 +3,15 @@ import java.awt.Font; import java.util.Locale; import junit.framework.TestCase; -import net.sf.briar.i18n.FontManagerImpl; +import net.sf.briar.api.i18n.FontManager; import org.junit.Test; -public class FontManagerImplTest extends TestCase { +public class FontManagerTest extends TestCase { @Test public void testBundledFontsAreLoaded() { - FontManagerImpl fontManager = new FontManagerImpl(); + FontManager fontManager = new FontManagerImpl(); fontManager.initialize(Locale.UK); Font font = fontManager.getFontForLanguage("en"); // English @@ -28,7 +28,7 @@ public class FontManagerImplTest extends TestCase { @Test public void testInternationalCharactersCanBeDisplayed() { - FontManagerImpl fontManager = new FontManagerImpl(); + FontManager fontManager = new FontManagerImpl(); fontManager.initialize(Locale.UK); Font font = fontManager.getFontForLanguage("en"); // English @@ -52,7 +52,7 @@ public class FontManagerImplTest extends TestCase { @Test public void testSetAndGetUiFont() { - FontManagerImpl fontManager = new FontManagerImpl(); + FontManager fontManager = new FontManagerImpl(); fontManager.initialize(Locale.UK); Font font = fontManager.getUiFont(); assertEquals(12, font.getSize()); diff --git a/test/net/sf/briar/i18n/I18nTest.java b/test/net/sf/briar/i18n/I18nTest.java new file mode 100644 index 000000000..23e9c8fa5 --- /dev/null +++ b/test/net/sf/briar/i18n/I18nTest.java @@ -0,0 +1,102 @@ +package net.sf.briar.i18n; + +import java.awt.Font; +import java.io.File; +import java.io.IOException; +import java.util.Locale; + +import junit.framework.TestCase; +import net.sf.briar.TestUtils; +import net.sf.briar.api.i18n.FontManager; +import net.sf.briar.api.i18n.I18n; + +import org.jmock.Expectations; +import org.jmock.Mockery; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class I18nTest extends TestCase { + + final File base = + new File(TestUtils.getBuildDirectory(), "i18n.properties"); + final File french = + new File(TestUtils.getBuildDirectory(), "i18n_fr.properties"); + final File testDir = TestUtils.getTestDirectory(); + + FontManager fontManager = null; + I18n i18n = null; + + @Before + public void setUp() throws IOException { + TestUtils.createFile(base, + "FOO=foo\r\n" + + "BAR=bar\r\n"); + TestUtils.createFile(french, + "FOO=le foo\r\n" + + "BAR=la bar\r\n"); + fontManager = new FontManagerImpl(); + fontManager.initialize(Locale.UK); + i18n = new I18nImpl(fontManager); + } + + @Test + public void testTr() { + i18n.setLocale(Locale.UK); + assertEquals("foo", i18n.tr("FOO")); + i18n.setLocale(Locale.FRANCE); + assertEquals("le foo", i18n.tr("FOO")); + i18n.setLocale(Locale.CHINA); // No translation - use defaul + assertEquals("foo", i18n.tr("FOO")); + } + + @Test + public void testSettingLocaleAffectsComponentOrientation() { + i18n.setLocale(new Locale("en")); // English + assertTrue(i18n.getComponentOrientation().isLeftToRight()); + i18n.setLocale(new Locale("ar")); // Arabic + assertFalse(i18n.getComponentOrientation().isLeftToRight()); + } + + @Test + public void testListenersAreInformedOfLocaleChanges() { + final Font englishFont = fontManager.getFontForLanguage("en"); + final Font tibetanFont = fontManager.getFontForLanguage("bo"); + + Mockery context = new Mockery(); + final I18n.Listener listener = context.mock(I18n.Listener.class); + context.checking(new Expectations() {{ + // Listener should be called once when registered + oneOf(listener).localeChanged(englishFont); + // Listener should be called again when locale changes + oneOf(listener).localeChanged(tibetanFont); + }}); + + i18n.setLocale(new Locale("en")); + i18n.addListener(listener); + i18n.setLocale(new Locale("bo")); + i18n.removeListener(listener); + + context.assertIsSatisfied(); + } + + @Test + public void testSaveAndLoadLocale() throws IOException { + testDir.mkdirs(); + new File(testDir, "Data").mkdir(); + i18n.setLocale(new Locale("fr")); + assertEquals("le foo", i18n.tr("FOO")); + i18n.saveLocale(); + i18n.setLocale(new Locale("zh")); // No translation - use default + assertEquals("foo", i18n.tr("FOO")); + i18n.loadLocale(); + assertEquals("le foo", i18n.tr("FOO")); + } + + @After + public void tearDown() { + TestUtils.delete(base); + TestUtils.delete(french); + TestUtils.deleteTestDirectories(); + } +} diff --git a/test/net/sf/briar/setup/SetupWorkerTest.java b/test/net/sf/briar/setup/SetupWorkerTest.java index f311b8386..c597d9cf9 100644 --- a/test/net/sf/briar/setup/SetupWorkerTest.java +++ b/test/net/sf/briar/setup/SetupWorkerTest.java @@ -117,7 +117,7 @@ public class SetupWorkerTest extends TestCase { oneOf(callback).extractingFile(jreFoo); oneOf(callback).extractingFile(fooJar); oneOf(callback).extractingFile(fooTtf); - oneOf(i18n).saveLocale(new File(testDir, "Briar/Data")); + oneOf(i18n).saveLocale(new File(testDir, "Briar")); oneOf(callback).installed(new File(testDir, "Briar")); }});