package org.trimou.prettytime;
import static org.junit.Assert.assertEquals;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import org.junit.Test;
import org.ocpsoft.prettytime.PrettyTime;
import org.ocpsoft.prettytime.i18n.Resources_cs;
import org.ocpsoft.prettytime.i18n.Resources_en;
import org.ocpsoft.prettytime.units.JustNow;
import org.trimou.engine.MustacheEngine;
import org.trimou.engine.MustacheEngineBuilder;
import org.trimou.engine.locale.FixedLocaleSupport;
import org.trimou.engine.resolver.ThisResolver;
/**
*
* @author Martin Kouba
*/
public class PrettyTimeHelperTest {
@Test
public void testInterpolation() {
MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.omitServiceLoaderConfigurationExtensions()
.setLocaleSupport(FixedLocaleSupport.from(Locale.ENGLISH))
.addResolver(new ThisResolver())
.registerHelper("pretty", new PrettyTimeHelper()).build();
String expected = new Resources_en().getString("JustNowPastPrefix");
// JustNow the first time unit in the default list has max quantity 5
// mins
Calendar now = Calendar.getInstance();
now.set(Calendar.MINUTE, now.get(Calendar.MINUTE) - 1);
assertEquals(expected, engine
.compileMustache("pretty_cal", "{{pretty this}}").render(now));
assertEquals(expected,
engine.compileMustache("pretty_date", "{{pretty this}}")
.render(now.getTime()));
assertEquals(expected,
engine.compileMustache("pretty_long", "{{pretty this}}")
.render(now.getTimeInMillis()));
}
@Test
public void testCustomPrettyTimeFactory() throws InterruptedException {
PrettyTimeHelper helper = new PrettyTimeHelper(locale -> {
PrettyTime prettyTime = new PrettyTime(locale);
prettyTime.getUnit(JustNow.class).setMaxQuantity(1000L * 2L);
return prettyTime;
});
// Just to init the resolver
MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.omitServiceLoaderConfigurationExtensions()
.setLocaleSupport(FixedLocaleSupport.from(Locale.ENGLISH))
.addResolver(new ThisResolver())
.registerHelper("pretty", helper).build();
Resources_en bundle = new Resources_en();
assertEquals(bundle.getString("JustNowPastPrefix"),
engine.compileMustache("pretty_helper_custom_factory_01",
"{{pretty this}}")
.render(new Date().getTime() - 1000L));
assertEquals("4 " + bundle.getString("SecondPluralName")
+ bundle.getString("SecondPastSuffix"), engine
.compileMustache("pretty_helper_custom_factory_02",
"{{pretty this}}")
.render(new Date().getTime() - 4000L));
}
@Test
public void testLocale() {
MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.omitServiceLoaderConfigurationExtensions()
.setLocaleSupport(FixedLocaleSupport.from(Locale.ENGLISH))
.addResolver(new ThisResolver())
.registerHelper("pretty", new PrettyTimeHelper()).build();
// JustNow the first time unit in the default list has max quantity 5
// mins
Calendar now = Calendar.getInstance();
now.set(Calendar.MINUTE, now.get(Calendar.MINUTE) - 1);
assertEquals(new Resources_cs().getString("JustNowPastPrefix"),
engine.compileMustache("pretty_helper_locale",
"{{{pretty this locale='cs'}}}").render(now));
}
@Test
public void testCustomConverter() {
final Calendar day = Calendar.getInstance();
day.set(Calendar.YEAR, day.get(Calendar.YEAR) - 1);
day.set(Calendar.MONTH, day.get(Calendar.MONTH) - 1);
MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.omitServiceLoaderConfigurationExtensions()
.setLocaleSupport(FixedLocaleSupport.from(Locale.ENGLISH))
.addResolver(new ThisResolver())
.registerHelper("pretty",
PrettyTimeHelper.builder()
.setConverter(from -> day.getTime()).build())
.build();
assertEquals("1 year ago",
engine.compileMustache("pretty_conv", "{{pretty this}}")
.render(Calendar.getInstance()));
}
}