diff --git a/src/test/java/com/hubspot/jinjava/lib/tag/IfTagTest.java b/src/test/java/com/hubspot/jinjava/lib/tag/IfTagTest.java index bcbe3da1a..6216973eb 100644 --- a/src/test/java/com/hubspot/jinjava/lib/tag/IfTagTest.java +++ b/src/test/java/com/hubspot/jinjava/lib/tag/IfTagTest.java @@ -7,6 +7,8 @@ import com.hubspot.jinjava.BaseInterpretingTest; import com.hubspot.jinjava.tree.TagNode; import com.hubspot.jinjava.tree.TreeParser; +import com.hubspot.jinjava.util.HasObjectTruthValue; +import com.hubspot.jinjava.util.ObjectTruthValueTest; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.Before; @@ -34,6 +36,17 @@ public void itDoesntEvalChildrenWhenExprIsFalse() { assertThat(tag.interpret(n, interpreter).trim()).isEqualTo(""); } + @Test + public void itChecksObjectTruthValue() { + context.put("foo", new TestObject().setObjectTruthValue(true)); + TagNode n = fixture("if-object"); + assertThat(tag.interpret(n, interpreter).trim()).isEqualTo("ifblock"); + + context.put("foo", new TestObject().setObjectTruthValue(false)); + n = fixture("if-object"); + assertThat(tag.interpret(n, interpreter).trim()).isEqualTo(""); + } + @Test public void itTreatsNotFoundPropsAsNull() { context.put("settings", new Object()); @@ -117,4 +130,18 @@ private TagNode fixture(String name) { throw new RuntimeException(e); } } + + private class TestObject implements HasObjectTruthValue { + private boolean objectTruthValue = false; + + public TestObject setObjectTruthValue(boolean objectTruthValue) { + this.objectTruthValue = objectTruthValue; + return this; + } + + @Override + public boolean getObjectTruthValue() { + return objectTruthValue; + } + } } diff --git a/src/test/java/com/hubspot/jinjava/util/ObjectTruthValueTest.java b/src/test/java/com/hubspot/jinjava/util/ObjectTruthValueTest.java new file mode 100644 index 000000000..00748fc4f --- /dev/null +++ b/src/test/java/com/hubspot/jinjava/util/ObjectTruthValueTest.java @@ -0,0 +1,31 @@ +package com.hubspot.jinjava.util; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Before; +import org.junit.Test; + +public class ObjectTruthValueTest { + + @Test + public void itEvaluatesObjectsWithObjectTruthValue() { + assertThat(ObjectTruthValue.evaluate(new TestObject().setObjectTruthValue(true))) + .isTrue(); + assertThat(ObjectTruthValue.evaluate(new TestObject().setObjectTruthValue(false))) + .isFalse(); + } + + private class TestObject implements HasObjectTruthValue { + private boolean objectTruthValue = false; + + public TestObject setObjectTruthValue(boolean objectTruthValue) { + this.objectTruthValue = objectTruthValue; + return this; + } + + @Override + public boolean getObjectTruthValue() { + return objectTruthValue; + } + } +} diff --git a/src/test/resources/tags/iftag/if-object.jinja b/src/test/resources/tags/iftag/if-object.jinja new file mode 100644 index 000000000..914a75957 --- /dev/null +++ b/src/test/resources/tags/iftag/if-object.jinja @@ -0,0 +1,3 @@ +{% if foo %} +ifblock +{% endif %} \ No newline at end of file