package org.jtwig.integration.stackoverflow; import org.jtwig.JtwigModel; import org.jtwig.JtwigTemplate; import org.jtwig.environment.EnvironmentConfiguration; import org.jtwig.escape.EscapeEngine; import org.junit.Test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; import static org.jtwig.environment.EnvironmentConfigurationBuilder.configuration; // http://stackoverflow.com/questions/37906429/jtwig-global-field-filter public class JtwigGlobalFieldFilterTest { @Test public void example1() throws Exception { // define a custom escape mode with autoescape tag EnvironmentConfiguration configuration = configuration() .escape() .engines() .add("Custom", removeStrangeCharacters()) .and() .and() .build(); StringBuffer fieldValue = new StringBuffer() .append(Character.toChars(0xFF)) .append("a"); JtwigModel jtwigModel = JtwigModel.newModel().with("myField", fieldValue.toString()); String result = JtwigTemplate .inlineTemplate("{% autoescape 'Custom' %}{{ myField }}{% endautoescape %}", configuration) .render(jtwigModel); assertThat(result, is("a")); } @Test public void example2() throws Exception { // set the custom escape mode as initial escape mode EnvironmentConfiguration configuration = configuration() .escape() .withInitialEngine("Custom") .engines() .add("Custom", removeStrangeCharacters()) .and() .and() .build(); StringBuffer fieldValue = new StringBuffer() .append(Character.toChars(0xFF)) .append("a"); JtwigModel jtwigModel = JtwigModel.newModel().with("myField", fieldValue.toString()); String result = JtwigTemplate .inlineTemplate("{{ myField }}", configuration) .render(jtwigModel); assertThat(result, is("a")); } private EscapeEngine removeStrangeCharacters() { return new EscapeEngine() { @Override public String escape(String input) { return input.replaceAll("[^\\x00-\\x7F]", ""); } }; } }