package org.trimou.handlebars.i18n;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.util.Collections;
import java.util.Locale;
import org.junit.Before;
import org.junit.Test;
import org.trimou.AbstractEngineTest;
import org.trimou.Mustache;
import org.trimou.engine.MustacheEngineBuilder;
import org.trimou.engine.locale.FixedLocaleSupport;
import org.trimou.exception.MustacheException;
import org.trimou.exception.MustacheProblem;
import org.trimou.handlebars.OptionsHashKeys;
import org.trimou.util.ImmutableMap;
/**
*
* @author Martin Kouba
*/
public class ResourceBundleHelperTest extends AbstractEngineTest {
@Override
@Before
public void buildEngine() {
engine = MustacheEngineBuilder
.newBuilder()
.setLocaleSupport(FixedLocaleSupport.from(Locale.ENGLISH))
.registerHelper("msg", new ResourceBundleHelper("messages"))
.build();
}
@Test
public void testInterpolation() {
String templateContents = "{{msg \"echo_one\"}},{{msg \"echo.two\"}},{{msg key}}";
Mustache mustache = engine.compileMustache("bundle_helper",
templateContents);
assertEquals("Hello,Hey,echo",
mustache.render(ImmutableMap.of("key", "echo")));
// Single quote literals
assertEquals("Hello",
engine.compileMustache("bundle_helper2", "{{msg 'echo_one'}}")
.render(null));
}
@Test
public void testBaseName() {
String templateContents = "{{msg \"test.key.bravo\" baseName=\"trimou\"}}";
Mustache mustache = engine.compileMustache("bundle_helper_basename",
templateContents);
assertEquals("42", mustache.render(null));
}
@Test
public void testFormat() {
String defaultFormat = "{{msg \"echo.printf\" \"Martin\"}}";
String none = "{{msg \"echo.printf\" format=\"none\"}}";
String printf = "{{msg \"echo.printf\" \"Martin\" format=\"printf\"}}";
String message = "{{msg \"echo.messageformat\" \"Martin\" format=\"message\"}}";
String unsupported = "{{msg \"echo.printf\" \"Martin\" format=\"berserk\"}}";
String wrongArguments = "{{msg \"echo.printf\"}}";
assertEquals(
"Hello Martin!",
engine.compileMustache("bundle_helper_defaultFormat",
defaultFormat).render(null));
assertEquals("Hello %s!",
engine.compileMustache("bundle_helper_defaultFormat", none)
.render(null));
assertEquals(
"Hello Martin!",
engine.compileMustache("bundle_helper_printf", printf).render(
null));
assertEquals("Hello Martin!",
engine.compileMustache("bundle_helper_message", message)
.render(null));
assertEquals(
"Hello Martin!",
engine.compileMustache("bundle_helper_unsupported", unsupported)
.render(null));
try {
engine.compileMustache("bundle_helper_wrongArguments",
wrongArguments).render(null);
fail();
} catch (MustacheException e) {
if (!e.getCode().equals(MustacheProblem.RENDER_IO_ERROR)) {
fail();
}
}
}
@Test
public void testLocale() {
String templateContents = "{{msg \"echo_one\" locale='de'}},{{msg \"echo.two\" locale=myLocale}},{{msg key locale='de'}}";
Mustache mustache = engine.compileMustache("bundle_helper_locale_01",
templateContents);
assertEquals("Hallo,He,oche", mustache.render(ImmutableMap
.<String, Object> of("key", "echo", "myLocale", Locale.GERMAN)));
mustache = engine.compileMustache("bundle_helper_locale_02",
"{{msg \"echo_one\"}}");
assertEquals("Hallo", mustache.render(Collections.singletonMap(OptionsHashKeys.LOCALE, Locale.GERMAN)));
}
}