package org.trimou.engine.resolver.i18n;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.trimou.AbstractEngineTest;
import org.trimou.engine.MustacheEngineBuilder;
import org.trimou.engine.config.Configuration;
import org.trimou.engine.config.ConfigurationKey;
import org.trimou.engine.locale.LocaleSupport;
import org.trimou.util.ImmutableMap;
import org.trimou.util.Strings;
/**
* @author Martin Kouba
*/
public class DateTimeFormatResolverTest extends AbstractEngineTest {
private DateTimeFormatResolver resolver;
@Override
@Before
public void buildEngine() {
resolver = new DateTimeFormatResolver();
engine = MustacheEngineBuilder.newBuilder()
.setProperty(DateTimeFormatResolver.CUSTOM_PATTERN_KEY,
"DD-MM-yyyy HH:mm")
.setLocaleSupport(new LocaleSupport() {
@Override
public Locale getCurrentLocale() {
return Locale.ENGLISH;
}
@Override
public void init(Configuration configuration) {
}
@Override
public Set<ConfigurationKey> getConfigurationKeys() {
return Collections.emptySet();
}
}).addResolver(resolver).build();
}
@Test
public void testResolution() {
assertNull(resolver.resolve(new Date(), "foo", null));
assertNull(resolver.resolve("5", "foo", null));
assertNotNull(
resolver.resolve(5, DateTimeFormatResolver.NAME_FORMAT, null));
assertNotNull(resolver.resolve(Calendar.getInstance(),
DateTimeFormatResolver.NAME_FORMAT_CUSTOM, null));
assertNotNull(resolver.resolve(new Date(),
DateTimeFormatResolver.NAME_FORMAT_DATE, null));
}
@Test
public void testInterpolation() {
Calendar day = Calendar.getInstance();
day.set(Calendar.YEAR, 2013);
day.set(Calendar.MONTH, 0);
day.set(Calendar.DAY_OF_MONTH, 1);
day.set(Calendar.HOUR_OF_DAY, 13);
day.set(Calendar.MINUTE, 0);
day.set(Calendar.SECOND, 0);
day.set(Calendar.MILLISECOND, 0);
long milis = day.getTimeInMillis();
String expectedShort = "1/1/13 1:00 PM";
String expectedMedium = "Jan 1, 2013 1:00:00 PM";
String expectedCustom = "01-01-2013 13:00";
String expectedDate = "Jan 1, 2013";
Map<String, Object> data = ImmutableMap.of("calendar", day, "date", day.getTime(), "milis", milis);
assertEquals(Strings.repeat(expectedMedium, 3, "|"),
engine.compileMustache("date_time_medium",
"{{calendar.format}}|{{date.format}}|{{milis.format}}")
.render(data));
assertEquals(Strings.repeat(expectedShort, 3, "|"),
engine.compileMustache("date_time_short",
"{{calendar.formatShort}}|{{date.formatShort}}|{{milis.formatShort}}")
.render(data));
assertEquals(Strings.repeat(expectedCustom, 3, "|"),
engine.compileMustache("date_time_custom",
"{{calendar.formatCustom}}|{{date.formatCustom}}|{{milis.formatCustom}}")
.render(data));
assertEquals(Strings.repeat(expectedDate, 3, "|"),
engine.compileMustache("date_only",
"{{calendar.formatDate}}|{{date.formatDate}}|{{milis.formatDate}}")
.render(data));
}
@Test(expected = IllegalStateException.class)
public void testMultipleInit() {
DateTimeFormatResolver resolver = new DateTimeFormatResolver();
// Just to init the resolver
MustacheEngineBuilder.newBuilder()
.omitServiceLoaderConfigurationExtensions()
.addResolver(resolver).build();
resolver.init(null);
}
}