package net.sf.openrocket.l10n; import static org.junit.Assert.*; import java.util.MissingResourceException; import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.auto.Mock; import org.jmock.integration.junit4.JMock; import org.jmock.integration.junit4.JUnit4Mockery; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(JMock.class) public class TestClassBasedTranslator { Mockery context = new JUnit4Mockery(); @Mock Translator translator; @Test public void testClassName() { // @formatter:off context.checking(new Expectations() {{ oneOf(translator).get("TestClassBasedTranslator.fake.key1"); will(returnValue("foobar")); }}); // @formatter:on ClassBasedTranslator cbt = new ClassBasedTranslator(translator, 0); cbt.get("fake.key1"); assertEquals("TestClassBasedTranslator", cbt.getClassName()); cbt = new ClassBasedTranslator(translator, "foobar"); assertEquals("foobar", cbt.getClassName()); } @Test public void testGetWithClassName() { ClassBasedTranslator cbt = new ClassBasedTranslator(translator, 0); // @formatter:off context.checking(new Expectations() {{ oneOf(translator).get("TestClassBasedTranslator.fake.key1"); will(returnValue("foobar")); }}); // @formatter:on assertEquals("foobar", cbt.get("fake.key1")); } @Test public void testGetWithoutClassName() { ClassBasedTranslator cbt = new ClassBasedTranslator(translator, 0); // @formatter:off context.checking(new Expectations() {{ oneOf(translator).get("TestClassBasedTranslator.fake.key2"); will(throwException(new MissingResourceException("a", "b", "c"))); oneOf(translator).get("fake.key2"); will(returnValue("barbaz")); }}); // @formatter:on assertEquals("barbaz", cbt.get("fake.key2")); } @Test public void testMissing() { ClassBasedTranslator cbt = new ClassBasedTranslator(translator, 0); // @formatter:off context.checking(new Expectations() {{ oneOf(translator).get("TestClassBasedTranslator.fake.key3"); will(throwException(new MissingResourceException("a", "b", "c"))); oneOf(translator).get("fake.key3"); will(throwException(new MissingResourceException("a", "b", "c"))); }}); // @formatter:on try { fail("Returned: " + cbt.get("fake.key3")); } catch (MissingResourceException e) { assertEquals("Neither key 'TestClassBasedTranslator.fake.key3' nor 'fake.key3' could be found", e.getMessage()); } } @Test public void testGetWithSubClass() { ClassBasedTranslator cbt = new ClassBasedTranslator(translator, 0); // @formatter:off context.checking(new Expectations() {{ oneOf(translator).get("TestClassBasedTranslator.fake.key1"); will(returnValue("foobar")); }}); // @formatter:on assertEquals("foobar", new Subclass().get(cbt, "fake.key1")); assertEquals("TestClassBasedTranslator", cbt.getClassName()); } private class Subclass { private String get(Translator trans, String key) { return trans.get(key); } } }