package org.trimou.engine.config;
import static org.junit.Assert.fail;
import java.util.Collections;
import java.util.Date;
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.resolver.AbstractResolver;
import org.trimou.engine.resolver.ReflectionResolver;
import org.trimou.engine.resolver.ResolutionContext;
import org.trimou.engine.resolver.Resolver;
import org.trimou.exception.MustacheException;
import org.trimou.exception.MustacheProblem;
/**
*
* @author Martin Kouba
*/
public class ConfigPropertyValueConversionTest extends AbstractEngineTest {
@Before
public void buildEngine() {
}
@Test
public void testDefaultConversion() {
testValue(EngineConfigurationKey.TEMPLATE_CACHE_EXPIRATION_TIMEOUT,
"foo", false);
testValue(EngineConfigurationKey.TEMPLATE_CACHE_EXPIRATION_TIMEOUT,
10L, true);
testValue(EngineConfigurationKey.TEMPLATE_RECURSIVE_INVOCATION_LIMIT,
false, false);
testValue(EngineConfigurationKey.TEMPLATE_RECURSIVE_INVOCATION_LIMIT,
10, true);
testValue(ReflectionResolver.MEMBER_CACHE_MAX_SIZE_KEY, "nonsense",
false);
testValue(ReflectionResolver.MEMBER_CACHE_MAX_SIZE_KEY, 10L, true);
// Invalid default value type
final ConfigurationKey key = new ConfigurationKey() {
@Override
public Object getDefaultValue() {
return new Date();
}
@Override
public String get() {
return "invalid_default_value_type";
}
};
testValue(key, new Date(), false, new AbstractResolver(10) {
@Override
public Object resolve(Object contextObject, String name,
ResolutionContext context) {
return null;
}
@Override
public Set<ConfigurationKey> getConfigurationKeys() {
return Collections.singleton(key);
}
});
}
private void testValue(ConfigurationKey key, Object value,
boolean shouldBeValid) {
testValue(key, value, shouldBeValid, null);
}
private void testValue(ConfigurationKey key, Object value,
boolean shouldBeValid, Resolver dummyResolver) {
try {
MustacheEngineBuilder builder = MustacheEngineBuilder.newBuilder();
if(dummyResolver != null) {
builder.addResolver(dummyResolver);
}
builder.setProperty(key, value).build();
if (!shouldBeValid) {
fail("Should be invalid");
}
} catch (MustacheException e) {
if (shouldBeValid) {
fail("Should be valid");
}
if (!e.getCode().equals(
MustacheProblem.CONFIG_PROPERTY_INVALID_VALUE)) {
fail();
}
}
}
}