package org.jtwig.integration.issues;
import org.jtwig.JtwigModel;
import org.jtwig.JtwigTemplate;
import org.jtwig.environment.EnvironmentConfigurationBuilder;
import org.jtwig.extension.Extension;
import org.jtwig.functions.FunctionRequest;
import org.jtwig.functions.JtwigFunction;
import org.junit.Test;
import java.io.ByteArrayOutputStream;
import java.nio.charset.Charset;
import java.util.Collection;
import java.util.Collections;
import static org.jtwig.environment.EnvironmentConfigurationBuilder.configuration;
import static org.junit.Assert.assertArrayEquals;
public class Issue310Test {
@Test
public void renderEncodingWithNestedConstructsTest() throws Exception {
ByteArrayOutputStream outputStream1 = new ByteArrayOutputStream();
ByteArrayOutputStream outputStream2 = new ByteArrayOutputStream();
JtwigModel model = JtwigModel.newModel().with("string", "The รจ");
Charset outputCharset = Charset.forName("Cp858");
JtwigTemplate.inlineTemplate("{{string}}", configuration()
.render().withOutputCharset(outputCharset).and()
.build()).render(model, outputStream1);
JtwigTemplate.inlineTemplate("{% filter void %}{{string}}{% endfilter %}", configuration()
.render().withOutputCharset(outputCharset).and()
.extensions().add(new MyExtension()).and()
.build()).render(model, outputStream2);
assertArrayEquals(outputStream1.toByteArray(), outputStream2.toByteArray());
}
public static class MyExtension implements Extension {
@Override
public void configure(EnvironmentConfigurationBuilder configurationBuilder) {
configurationBuilder.functions()
.add(new JtwigFunction() {
@Override
public String name() {
return "void";
}
@Override
public Collection<String> aliases() {
return Collections.emptyList();
}
@Override
public Object execute(FunctionRequest request) {
return request.get(0);
}
});
}
}
}