diff --git a/src/main/java/com/hubspot/jinjava/lib/filter/StripTagsFilter.java b/src/main/java/com/hubspot/jinjava/lib/filter/StripTagsFilter.java index 9beebe359..72eed3d30 100644 --- a/src/main/java/com/hubspot/jinjava/lib/filter/StripTagsFilter.java +++ b/src/main/java/com/hubspot/jinjava/lib/filter/StripTagsFilter.java @@ -36,20 +36,22 @@ public Object filter(Object object, JinjavaInterpreter interpreter, String... ar } int numDeferredTokensStart = interpreter.getContext().getDeferredTokens().size(); - String val = interpreter.renderFlat((String) object); - if (interpreter.getContext().getDeferredTokens().size() > numDeferredTokensStart) { - throw new DeferredValueException("Deferred in StripTagsFilter"); - } + try (JinjavaInterpreter.InterpreterScopeClosable c = interpreter.enterScope()) { + String val = interpreter.renderFlat((String) object); + if (interpreter.getContext().getDeferredTokens().size() > numDeferredTokensStart) { + throw new DeferredValueException("Deferred in StripTagsFilter"); + } - String cleanedVal = Jsoup.parse(val).text(); - cleanedVal = Jsoup.clean(cleanedVal, Whitelist.none()); + String cleanedVal = Jsoup.parse(val).text(); + cleanedVal = Jsoup.clean(cleanedVal, Whitelist.none()); - // backwards compatibility with Jsoup.parse - cleanedVal = cleanedVal.replaceAll(" ", " "); + // backwards compatibility with Jsoup.parse + cleanedVal = cleanedVal.replaceAll(" ", " "); - String normalizedVal = WHITESPACE.matcher(cleanedVal).replaceAll(" "); + String normalizedVal = WHITESPACE.matcher(cleanedVal).replaceAll(" "); - return normalizedVal; + return normalizedVal; + } } @Override diff --git a/src/test/java/com/hubspot/jinjava/lib/filter/StripTagsFilterTest.java b/src/test/java/com/hubspot/jinjava/lib/filter/StripTagsFilterTest.java index b28f58cd2..146ae1865 100644 --- a/src/test/java/com/hubspot/jinjava/lib/filter/StripTagsFilterTest.java +++ b/src/test/java/com/hubspot/jinjava/lib/filter/StripTagsFilterTest.java @@ -2,9 +2,12 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import com.hubspot.jinjava.Jinjava; +import com.hubspot.jinjava.JinjavaConfig; +import com.hubspot.jinjava.interpret.Context; import com.hubspot.jinjava.interpret.DeferredValueException; import com.hubspot.jinjava.interpret.JinjavaInterpreter; import com.hubspot.jinjava.lib.tag.eager.DeferredToken; @@ -12,27 +15,31 @@ import com.hubspot.jinjava.tree.parse.ExpressionToken; import java.util.Collections; import java.util.concurrent.atomic.AtomicInteger; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Answers; import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.internal.stubbing.answers.ReturnsArgumentAt; import org.mockito.runners.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class StripTagsFilterTest { - @Mock(answer = Answers.RETURNS_DEEP_STUBS) - JinjavaInterpreter interpreter; + private JinjavaInterpreter interpreter; @InjectMocks - StripTagsFilter filter; + private StripTagsFilter filter; @Before public void setup() { - when(interpreter.getContext().getDeferredTokens()).thenReturn(Collections.emptySet()); - when(interpreter.renderFlat(anyString())).thenAnswer(new ReturnsArgumentAt(0)); + JinjavaConfig config = JinjavaConfig.newBuilder().build(); + Jinjava jinjava = new Jinjava(config); + this.interpreter = new JinjavaInterpreter(jinjava.newInterpreter()); + JinjavaInterpreter.pushCurrent(interpreter); + } + + @After + public void teardown() { + JinjavaInterpreter.popCurrent(); } @Test @@ -96,10 +103,27 @@ public void itAddsWhitespaceBetweenParagraphTags() { .isEqualTo("Test Value"); } + @Test + public void itExecutesJinjavaInsideTag() { + assertThat( + filter.filter("{% for i in [1, 2, 3] %}