Skip to content

Commit 51b9f6f

Browse files
committed
Debug Undefined Feature to echo back Uknown tokens.
1 parent 87e0336 commit 51b9f6f

2 files changed

Lines changed: 34 additions & 0 deletions

File tree

src/main/java/com/hubspot/jinjava/lib/expression/DefaultExpressionStrategy.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.hubspot.jinjava.lib.expression;
22

3+
import com.hubspot.jinjava.features.FeatureActivationStrategy;
34
import com.hubspot.jinjava.interpret.JinjavaInterpreter;
45
import com.hubspot.jinjava.lib.filter.EscapeFilter;
56
import com.hubspot.jinjava.objects.SafeString;
@@ -11,6 +12,7 @@
1112
public class DefaultExpressionStrategy implements ExpressionStrategy {
1213

1314
private static final long serialVersionUID = 436239440273704843L;
15+
public static final String ECHO_UNDEFINED = "echoUndefined";
1416

1517
public RenderedOutputNode interpretOutput(
1618
ExpressionToken master,
@@ -41,6 +43,14 @@ public RenderedOutputNode interpretOutput(
4143
if (interpreter.getContext().isAutoEscape() && !(var instanceof SafeString)) {
4244
result = EscapeFilter.escapeHtmlEntities(result);
4345
}
46+
final FeatureActivationStrategy feat = interpreter
47+
.getConfig()
48+
.getFeatures()
49+
.getActivationStrategy(ECHO_UNDEFINED);
50+
51+
if (result.isEmpty() && feat.isActive(interpreter.getContext())){
52+
result = master.getImage();
53+
}
4454

4555
return new RenderedOutputNode(result);
4656
}

src/test/java/com/hubspot/jinjava/tree/ExpressionNodeTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.hubspot.jinjava.tree;
22

3+
import static com.hubspot.jinjava.lib.expression.DefaultExpressionStrategy.ECHO_UNDEFINED;
34
import static org.assertj.core.api.Assertions.assertThat;
45
import static org.assertj.core.api.Assertions.assertThatThrownBy;
56

67
import com.google.common.io.Resources;
78
import com.hubspot.jinjava.BaseInterpretingTest;
89
import com.hubspot.jinjava.Jinjava;
910
import com.hubspot.jinjava.JinjavaConfig;
11+
import com.hubspot.jinjava.features.FeatureConfig;
12+
import com.hubspot.jinjava.features.FeatureStrategies;
1013
import com.hubspot.jinjava.interpret.Context;
1114
import com.hubspot.jinjava.interpret.JinjavaInterpreter;
1215
import com.hubspot.jinjava.interpret.UnknownTokenException;
@@ -129,6 +132,27 @@ public void itRendersStringRange() throws Exception {
129132
assertThat(node.render(interpreter).toString()).isEqualTo("345");
130133
}
131134

135+
@Test
136+
public void itRenderDebugUndefined() {
137+
138+
final JinjavaConfig config = JinjavaConfig
139+
.newBuilder()
140+
.withFeatureConfig(FeatureConfig
141+
.newBuilder()
142+
.add(ECHO_UNDEFINED, FeatureStrategies.ACTIVE).build())
143+
.build();
144+
final JinjavaInterpreter jinjavaInterpreter = new Jinjava(config).newInterpreter();
145+
jinjavaInterpreter.getContext().put("subject", "this");
146+
147+
String template = "{{ subject | capitalize() }} expression {{ testing.template('hello_world') }} " +
148+
"has a {{ unknown | lower() }} " +
149+
"token but {{ unknown | default(\"replaced\") }}";
150+
Node node = new TreeParser(jinjavaInterpreter, template).buildTree();
151+
assertThat(jinjavaInterpreter.render(node))
152+
.isEqualTo("This expression {{ testing.template('hello_world') }} " +
153+
"has a {{ unknown | lower() }} token but replaced");
154+
}
155+
132156
@Test
133157
public void itFailsOnUnknownTokensVariables() throws Exception {
134158
final JinjavaConfig config = JinjavaConfig

0 commit comments

Comments
 (0)