package org.trimou.prettytime.resolver;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
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_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.MapResolver;
import org.trimou.util.ImmutableMap;
/**
*
* @author Martin Kouba
*/
public class PrettyTimeResolverTest {
@Test
public void testFormattableObjectsResolved() {
PrettyTimeResolver resolver = new PrettyTimeResolver();
// Just to init the resolver
MustacheEngineBuilder.newBuilder()
.omitServiceLoaderConfigurationExtensions()
.setProperty(PrettyTimeResolver.ENABLED_KEY, true)
.setLocaleSupport(FixedLocaleSupport.from(Locale.ENGLISH))
.addResolver(resolver).build();
assertNull(resolver.resolve(null, "prettyTime", null));
assertNull(resolver.resolve("foo", "prettyTime", null));
assertNotNull(resolver.resolve(new Date(), "prettyTime", null));
assertNotNull(resolver.resolve(10000L, "prettyTime", null));
assertNotNull(
resolver.resolve(Calendar.getInstance(), "prettyTime", null));
}
@Test
public void testInterpolation() {
MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.omitServiceLoaderConfigurationExtensions()
.setProperty(PrettyTimeResolver.ENABLED_KEY, true)
.setLocaleSupport(FixedLocaleSupport.from(Locale.ENGLISH))
.addResolver(new MapResolver())
.addResolver(new PrettyTimeResolver()).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", "{{now.prettyTime}}")
.render(ImmutableMap.<String, Object> of("now", now)));
assertEquals(expected,
engine.compileMustache("pretty_date", "{{now.prettyTime}}")
.render(ImmutableMap.<String, Object> of("now",
now.getTime())));
assertEquals(expected,
engine.compileMustache("pretty_long", "{{now.prettyTime}}")
.render(ImmutableMap.<String, Object> of("now",
now.getTimeInMillis())));
}
@Test
public void testCustomMatchName() {
PrettyTimeResolver resolver = new PrettyTimeResolver();
// Just to init the resolver
MustacheEngineBuilder.newBuilder()
.omitServiceLoaderConfigurationExtensions()
.setProperty(PrettyTimeResolver.ENABLED_KEY, true)
.setLocaleSupport(FixedLocaleSupport.from(Locale.ENGLISH))
.addResolver(resolver)
.setProperty(PrettyTimeResolver.MATCH_NAME_KEY, "pretty")
.build();
assertNull(resolver.resolve(null, "pretty", null));
assertNull(resolver.resolve("foo", "pretty", null));
assertNotNull(resolver.resolve(new Date(), "pretty", null));
}
@Test
public void testCustomPrettyTimeFactory() throws InterruptedException {
PrettyTimeResolver resolver = new PrettyTimeResolver(100,
locale -> {
PrettyTime prettyTime = new PrettyTime(locale);
prettyTime.getUnit(JustNow.class)
.setMaxQuantity(1000L * 2L);
return prettyTime;
});
// Just to init the resolver
MustacheEngineBuilder.newBuilder()
.omitServiceLoaderConfigurationExtensions()
.setProperty(PrettyTimeResolver.ENABLED_KEY, true)
.setLocaleSupport(FixedLocaleSupport.from(Locale.ENGLISH))
.addResolver(resolver).build();
Resources_en bundle = new Resources_en();
assertEquals(bundle.getString("JustNowPastPrefix"), resolver
.resolve(new Date().getTime() - 1000L, "prettyTime", null));
assertEquals(
"4 " + bundle.getString("SecondPluralName")
+ bundle.getString("SecondPastSuffix"),
resolver.resolve(new Date().getTime() - 4000L, "prettyTime",
null));
}
@Test
public void testDisabledResolver() {
MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.omitServiceLoaderConfigurationExtensions()
.setLocaleSupport(FixedLocaleSupport.from(Locale.ENGLISH))
.addResolver(new PrettyTimeResolver()).build();
assertTrue(engine.getConfiguration().getResolvers().isEmpty());
assertEquals("", engine.compileMustache("disabled_prettytime_resolver",
"{{this.prettyTime}}").render(new Date()));
}
}