package org.trimou.handlebars.i18n;
import static org.junit.Assert.assertEquals;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
import org.junit.Before;
import org.junit.Test;
import org.trimou.AbstractEngineTest;
import org.trimou.engine.MustacheEngineBuilder;
import org.trimou.engine.locale.FixedLocaleSupport;
import org.trimou.util.ImmutableMap;
import org.trimou.util.Strings;
/**
* @author Martin Kouba
*/
public class TimeFormatHelperTest extends AbstractEngineTest {
@Override
@Before
public void buildEngine() {
engine = MustacheEngineBuilder.newBuilder()
.registerHelper("formatTime", new TimeFormatHelper())
.setLocaleSupport(FixedLocaleSupport.from(Locale.ENGLISH))
.build();
}
@Test
public void testInterpolation() {
Calendar day = day();
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";
Map<String, Object> data = ImmutableMap.of("calendar",
day, "date", day.getTime(), "milis", milis, "localDateTime",
LocalDateTime.ofInstant(day.toInstant(), TimeZone.getDefault()
.toZoneId()));
assertEquals(
Strings.repeat(expectedMedium, 4, "|"),
engine.compileMustache(
"time_helper_medium",
"{{formatTime calendar style=\"medium\"}}|{{formatTime date style=\"medium\"}}|{{formatTime milis style=\"medium\"}}|{{formatTime localDateTime style=\"medium\"}}")
.render(data));
assertEquals(
Strings.repeat(expectedShort, 4, "|"),
engine.compileMustache(
"time_helper_short",
"{{formatTime calendar style=\"short\"}}|{{formatTime date style=\"short\"}}|{{formatTime milis style=\"short\"}}|{{formatTime localDateTime style=\"short\"}}")
.render(data));
assertEquals(
Strings.repeat(expectedCustom, 4, "|"),
engine.compileMustache(
"time_helper_custom",
"{{formatTime calendar pattern=\"DD-MM-yyyy HH:mm\"}}|{{formatTime date pattern=\"DD-MM-yyyy HH:mm\"}}|{{formatTime milis pattern=\"DD-MM-yyyy HH:mm\"}}|{{formatTime localDateTime pattern=\"DD-MM-yyyy HH:mm\"}}")
.render(data));
}
@Test
public void testTimezone() {
Calendar day = day();
day.setTimeZone(TimeZone.getTimeZone("Europe/Prague"));
String expectedCustom = "01-01-2013 12:00";
assertEquals(
expectedCustom,
engine.compileMustache("time_helper_timezone",
"{{formatTime day pattern=\"DD-MM-yyyy HH:mm\" timeZone=\"Europe/London\"}}")
.render(ImmutableMap.of("day", day)));
}
@Test
public void testLocale() {
Calendar day = day();
String expectedCustom = "Led 01-01-2013";
assertEquals(
expectedCustom,
engine.compileMustache("time_helper_locale",
"{{formatTime this pattern=\"MMM DD-MM-yyyy\" locale='cs'}}")
.render(day));
}
private Calendar day() {
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);
return day;
}
}