Skip to content

Commit 5185f45

Browse files
authored
Merge pull request #1296 from HubSpot/3.0/test-objects
[7] Jinjava 3.0: Centralize test objects in dedicated package
2 parents db8a1c1 + 22808dc commit 5185f45

32 files changed

Lines changed: 889 additions & 693 deletions

src/test/java/com/hubspot/jinjava/FilterOverrideTest.java

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22

33
import static org.assertj.core.api.Assertions.assertThat;
44

5-
import com.hubspot.jinjava.interpret.JinjavaInterpreter;
6-
import com.hubspot.jinjava.lib.filter.Filter;
5+
import com.hubspot.jinjava.testobjects.FilterOverrideTestObjects;
76
import java.util.HashMap;
87
import org.junit.Test;
98

@@ -16,26 +15,9 @@ public void itAllowsUsersToOverrideBuiltInFilters() {
1615

1716
assertThat(jinjava.render(template, new HashMap<>())).isEqualTo("11");
1817

19-
jinjava.getGlobalContext().registerClasses(DescriptiveAddFilter.class);
18+
jinjava
19+
.getGlobalContext()
20+
.registerClasses(FilterOverrideTestObjects.DescriptiveAddFilter.class);
2021
assertThat(jinjava.render(template, new HashMap<>())).isEqualTo("5 + 6 = 11");
2122
}
22-
23-
public static class DescriptiveAddFilter implements Filter {
24-
25-
@Override
26-
public String getName() {
27-
return "add";
28-
}
29-
30-
@Override
31-
public Object filter(Object var, JinjavaInterpreter interpreter, String... args) {
32-
return (
33-
var +
34-
" + " +
35-
args[0] +
36-
" = " +
37-
(Integer.parseInt(var.toString()) + Integer.parseInt(args[0]))
38-
);
39-
}
40-
}
4123
}

src/test/java/com/hubspot/jinjava/el/ExpressionResolverTest.java

Lines changed: 36 additions & 166 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import static org.assertj.core.api.Assertions.assertThat;
44
import static org.junit.Assert.assertEquals;
55

6-
import com.google.common.collect.ForwardingList;
76
import com.google.common.collect.ImmutableMap;
87
import com.google.common.collect.ImmutableSet;
98
import com.google.common.collect.Lists;
@@ -18,10 +17,9 @@
1817
import com.hubspot.jinjava.interpret.TemplateError;
1918
import com.hubspot.jinjava.interpret.TemplateError.ErrorItem;
2019
import com.hubspot.jinjava.interpret.TemplateError.ErrorReason;
21-
import com.hubspot.jinjava.objects.PyWrapper;
2220
import com.hubspot.jinjava.objects.date.PyishDate;
21+
import com.hubspot.jinjava.testobjects.ExpressionResolverTestObjects;
2322
import java.math.BigDecimal;
24-
import java.util.Collection;
2523
import java.util.Date;
2624
import java.util.List;
2725
import java.util.Map;
@@ -163,7 +161,8 @@ public void itResolvesDictValWithDotParam() {
163161

164162
@Test
165163
public void itResolvesMapValOnCustomObject() {
166-
MyCustomMap dict = new MyCustomMap();
164+
ExpressionResolverTestObjects.MyCustomMap dict =
165+
new ExpressionResolverTestObjects.MyCustomMap();
167166
context.put("thedict", dict);
168167

169168
Object val = interpreter.resolveELExpression("thedict['foo']", -1);
@@ -177,7 +176,8 @@ public void itResolvesMapValOnCustomObject() {
177176

178177
@Test
179178
public void itResolvesOtherMethodsOnCustomMapObject() {
180-
MyCustomMap dict = new MyCustomMap();
179+
ExpressionResolverTestObjects.MyCustomMap dict =
180+
new ExpressionResolverTestObjects.MyCustomMap();
181181
context.put("thedict", dict);
182182

183183
Object val = interpreter.resolveELExpression("thedict.size", -1);
@@ -190,67 +190,6 @@ public void itResolvesOtherMethodsOnCustomMapObject() {
190190
assertThat(val2.toString()).isEqualTo("[foo=bar, two=2, size=777]");
191191
}
192192

193-
public static final class MyCustomMap implements Map<String, String> {
194-
195-
Map<String, String> data = ImmutableMap.of("foo", "bar", "two", "2", "size", "777");
196-
197-
@Override
198-
public int size() {
199-
return data.size();
200-
}
201-
202-
@Override
203-
public boolean isEmpty() {
204-
return data.isEmpty();
205-
}
206-
207-
@Override
208-
public boolean containsKey(Object key) {
209-
return data.containsKey(key);
210-
}
211-
212-
@Override
213-
public boolean containsValue(Object value) {
214-
return data.containsValue(value);
215-
}
216-
217-
@Override
218-
public String get(Object key) {
219-
return data.get(key);
220-
}
221-
222-
@Override
223-
public String put(String key, String value) {
224-
return null;
225-
}
226-
227-
@Override
228-
public String remove(Object key) {
229-
return null;
230-
}
231-
232-
@Override
233-
public void putAll(Map<? extends String, ? extends String> m) {}
234-
235-
@Override
236-
public void clear() {}
237-
238-
@Override
239-
public Set<String> keySet() {
240-
return data.keySet();
241-
}
242-
243-
@Override
244-
public Collection<String> values() {
245-
return data.values();
246-
}
247-
248-
@Override
249-
public Set<Entry<String, String>> entrySet() {
250-
return data.entrySet();
251-
}
252-
}
253-
254193
@Test
255194
public void itResolvesInnerDictVal() {
256195
Map<String, Object> dict = Maps.newHashMap();
@@ -274,24 +213,6 @@ public void itResolvesInnerListVal() {
274213
assertThat(val).isEqualTo("val");
275214
}
276215

277-
public static class MyCustomList<T> extends ForwardingList<T> implements PyWrapper {
278-
279-
private final List<T> list;
280-
281-
public MyCustomList(List<T> list) {
282-
this.list = list;
283-
}
284-
285-
@Override
286-
protected List<T> delegate() {
287-
return list;
288-
}
289-
290-
public int getTotalCount() {
291-
return list.size();
292-
}
293-
}
294-
295216
@Test
296217
public void itRecordsFilterNames() {
297218
Object val = interpreter.resolveELExpression("2.3 | round", -1);
@@ -301,7 +222,9 @@ public void itRecordsFilterNames() {
301222

302223
@Test
303224
public void callCustomListProperty() {
304-
List<Integer> myList = new MyCustomList<>(Lists.newArrayList(1, 2, 3, 4));
225+
List<Integer> myList = new ExpressionResolverTestObjects.MyCustomList<>(
226+
Lists.newArrayList(1, 2, 3, 4)
227+
);
305228

306229
context.put("mylist", myList);
307230
Object val = interpreter.resolveELExpression("mylist.total_count", -1);
@@ -353,15 +276,15 @@ public void syntaxError() {
353276

354277
@Test
355278
public void itWrapsDates() {
356-
context.put("myobj", new MyClass(new Date(0)));
279+
context.put("myobj", new ExpressionResolverTestObjects.MyClass(new Date(0)));
357280
Object result = interpreter.resolveELExpression("myobj.date", -1);
358281
assertThat(result).isInstanceOf(PyishDate.class);
359282
assertThat(result.toString()).isEqualTo("1970-01-01 00:00:00");
360283
}
361284

362285
@Test
363286
public void blackListedProperties() {
364-
context.put("myobj", new MyClass(new Date(0)));
287+
context.put("myobj", new ExpressionResolverTestObjects.MyClass(new Date(0)));
365288
interpreter.resolveELExpression("myobj.class.methods[0]", -1);
366289

367290
assertThat(interpreter.getErrorsCopy()).isNotEmpty();
@@ -373,14 +296,14 @@ public void blackListedProperties() {
373296

374297
@Test
375298
public void itWillNotReturnClassObjectProperties() {
376-
context.put("myobj", new MyClass(new Date(0)));
299+
context.put("myobj", new ExpressionResolverTestObjects.MyClass(new Date(0)));
377300
Object clazz = interpreter.resolveELExpression("myobj.clazz", -1);
378301
assertThat(clazz).isNull();
379302
}
380303

381304
@Test
382305
public void blackListedMethods() {
383-
context.put("myobj", new MyClass(new Date(0)));
306+
context.put("myobj", new ExpressionResolverTestObjects.MyClass(new Date(0)));
384307
interpreter.resolveELExpression("myobj.wait()", -1);
385308

386309
assertThat(interpreter.getErrorsCopy()).isNotEmpty();
@@ -390,7 +313,7 @@ public void blackListedMethods() {
390313

391314
@Test
392315
public void itWillNotReturnClassObjects() {
393-
context.put("myobj", new MyClass(new Date(0)));
316+
context.put("myobj", new ExpressionResolverTestObjects.MyClass(new Date(0)));
394317
interpreter.resolveELExpression("myobj.getClass()", -1);
395318

396319
assertThat(interpreter.getErrorsCopy()).isNotEmpty();
@@ -517,29 +440,35 @@ public void itStoresResolvedFunctions() {
517440

518441
@Test
519442
public void presentOptionalProperty() {
520-
context.put("myobj", new OptionalProperty(null, "foo"));
443+
context.put("myobj", new ExpressionResolverTestObjects.OptionalProperty(null, "foo"));
521444
assertThat(interpreter.resolveELExpression("myobj.val", -1)).isEqualTo("foo");
522445
assertThat(interpreter.getErrorsCopy()).isEmpty();
523446
}
524447

525448
@Test
526449
public void emptyOptionalProperty() {
527-
context.put("myobj", new OptionalProperty(null, null));
450+
context.put("myobj", new ExpressionResolverTestObjects.OptionalProperty(null, null));
528451
assertThat(interpreter.resolveELExpression("myobj.val", -1)).isNull();
529452
assertThat(interpreter.getErrorsCopy()).isEmpty();
530453
}
531454

532455
@Test
533456
public void presentNestedOptionalProperty() {
534-
context.put("myobj", new OptionalProperty(new MyClass(new Date(0)), "foo"));
457+
context.put(
458+
"myobj",
459+
new ExpressionResolverTestObjects.OptionalProperty(
460+
new ExpressionResolverTestObjects.MyClass(new Date(0)),
461+
"foo"
462+
)
463+
);
535464
assertThat(Objects.toString(interpreter.resolveELExpression("myobj.nested.date", -1)))
536465
.isEqualTo("1970-01-01 00:00:00");
537466
assertThat(interpreter.getErrorsCopy()).isEmpty();
538467
}
539468

540469
@Test
541470
public void emptyNestedOptionalProperty() {
542-
context.put("myobj", new OptionalProperty(null, null));
471+
context.put("myobj", new ExpressionResolverTestObjects.OptionalProperty(null, null));
543472
assertThat(interpreter.resolveELExpression("myobj.nested.date", -1)).isNull();
544473
assertThat(interpreter.getErrorsCopy()).isEmpty();
545474
}
@@ -548,7 +477,12 @@ public void emptyNestedOptionalProperty() {
548477
public void presentNestedNestedOptionalProperty() {
549478
context.put(
550479
"myobj",
551-
new NestedOptionalProperty(new OptionalProperty(new MyClass(new Date(0)), "foo"))
480+
new ExpressionResolverTestObjects.NestedOptionalProperty(
481+
new ExpressionResolverTestObjects.OptionalProperty(
482+
new ExpressionResolverTestObjects.MyClass(new Date(0)),
483+
"foo"
484+
)
485+
)
552486
);
553487
assertThat(
554488
Objects.toString(interpreter.resolveELExpression("myobj.nested.nested.date", -1))
@@ -559,7 +493,8 @@ public void presentNestedNestedOptionalProperty() {
559493

560494
@Test
561495
public void itResolvesLazyExpressionsToTheirUnderlyingValue() {
562-
TestClass testClass = new TestClass();
496+
ExpressionResolverTestObjects.TestClass testClass =
497+
new ExpressionResolverTestObjects.TestClass();
563498
Supplier<String> lazyString = () -> result("hallelujah", testClass);
564499

565500
context.put("myobj", ImmutableMap.of("test", LazyExpression.of(lazyString, "")));
@@ -580,7 +515,8 @@ public void itResolvesNullLazyExpressions() {
580515

581516
@Test
582517
public void itResolvesSuppliersOnlyIfResolved() {
583-
TestClass testClass = new TestClass();
518+
ExpressionResolverTestObjects.TestClass testClass =
519+
new ExpressionResolverTestObjects.TestClass();
584520
Supplier<String> lazyString = () -> result("hallelujah", testClass);
585521

586522
context.put(
@@ -596,7 +532,8 @@ public void itResolvesSuppliersOnlyIfResolved() {
596532

597533
@Test
598534
public void itResolvesLazyExpressionsInNested() {
599-
Supplier<TestClass> lazyObject = TestClass::new;
535+
Supplier<ExpressionResolverTestObjects.TestClass> lazyObject =
536+
ExpressionResolverTestObjects.TestClass::new;
600537

601538
context.put("myobj", ImmutableMap.of("test", LazyExpression.of(lazyObject, "")));
602539

@@ -675,75 +612,8 @@ public void itAddsInvalidInputErrorWhenArithmeticExceptionIsThrown() {
675612
.isEqualTo(ErrorReason.INVALID_INPUT);
676613
}
677614

678-
public String result(String value, TestClass testClass) {
615+
public String result(String value, ExpressionResolverTestObjects.TestClass testClass) {
679616
testClass.touch();
680617
return value;
681618
}
682-
683-
public static class TestClass {
684-
685-
private boolean touched = false;
686-
private String name = "Amazing test class";
687-
688-
public boolean isTouched() {
689-
return touched;
690-
}
691-
692-
public void touch() {
693-
this.touched = true;
694-
}
695-
696-
public String getName() {
697-
return name;
698-
}
699-
}
700-
701-
public static final class MyClass {
702-
703-
private Date date;
704-
705-
MyClass(Date date) {
706-
this.date = date;
707-
}
708-
709-
public Class getClazz() {
710-
return this.getClass();
711-
}
712-
713-
public Date getDate() {
714-
return date;
715-
}
716-
}
717-
718-
public static final class OptionalProperty {
719-
720-
private MyClass nested;
721-
private String val;
722-
723-
OptionalProperty(MyClass nested, String val) {
724-
this.nested = nested;
725-
this.val = val;
726-
}
727-
728-
public Optional<MyClass> getNested() {
729-
return Optional.ofNullable(nested);
730-
}
731-
732-
public Optional<String> getVal() {
733-
return Optional.ofNullable(val);
734-
}
735-
}
736-
737-
public static final class NestedOptionalProperty {
738-
739-
private OptionalProperty nested;
740-
741-
public NestedOptionalProperty(OptionalProperty nested) {
742-
this.nested = nested;
743-
}
744-
745-
public Optional<OptionalProperty> getNested() {
746-
return Optional.ofNullable(nested);
747-
}
748-
}
749619
}

0 commit comments

Comments
 (0)