Skip to content

Commit 4b2551f

Browse files
jasmith-hsclaude
andcommitted
Add ReverseFilter tests for primitive and object arrays; fix ReverseFilter for primitive arrays
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 6876ccb commit 4b2551f

4 files changed

Lines changed: 45 additions & 13 deletions

File tree

src/main/java/com/hubspot/jinjava/lib/filter/ReverseFilter.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.hubspot.jinjava.doc.annotations.JinjavaSnippet;
2121
import com.hubspot.jinjava.interpret.JinjavaInterpreter;
2222
import com.hubspot.jinjava.objects.collections.ArrayBacked;
23+
import java.lang.reflect.Array;
2324
import java.util.Collection;
2425
import java.util.Iterator;
2526
import java.util.NoSuchElementException;
@@ -54,7 +55,7 @@ public Object filter(Object object, JinjavaInterpreter interpreter, String... ar
5455
}
5556
// array
5657
if (object.getClass().isArray()) {
57-
return ReverseArrayIterator.create((Object[]) object);
58+
return ReverseArrayIterator.create(object);
5859
}
5960
// string
6061
if (object instanceof String) {
@@ -76,26 +77,26 @@ public String getName() {
7677
return "reverse";
7778
}
7879

79-
static class ReverseArrayIterator<T> implements Iterator<T>, ArrayBacked<T> {
80+
static class ReverseArrayIterator implements Iterator<Object>, ArrayBacked {
8081

81-
private final T[] array;
82+
private final Object array;
8283
private int index;
8384

84-
static <T> ReverseArrayIterator<T> create(T[] array) {
85-
return new ReverseArrayIterator<>(array);
85+
static ReverseArrayIterator create(Object array) {
86+
return new ReverseArrayIterator(array);
8687
}
8788

88-
private ReverseArrayIterator(T[] array) {
89+
private ReverseArrayIterator(Object array) {
8990
this.array = array;
90-
index = array.length - 1;
91+
index = Array.getLength(array) - 1;
9192
}
9293

9394
@Override
94-
public T next() {
95+
public Object next() {
9596
if (index < 0) {
9697
throw new NoSuchElementException();
9798
}
98-
return array[index--];
99+
return Array.get(array, index--);
99100
}
100101

101102
@Override
@@ -104,7 +105,7 @@ public boolean hasNext() {
104105
}
105106

106107
@Override
107-
public T[] backingArray() {
108+
public Object backingArray() {
108109
return array;
109110
}
110111
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package com.hubspot.jinjava.objects.collections;
22

3-
public interface ArrayBacked<T> {
4-
T[] backingArray();
3+
public interface ArrayBacked {
4+
Object backingArray();
55
}

src/main/java/com/hubspot/jinjava/util/EagerExpressionResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ private static boolean isResolvableObjectRec(
329329
if (isPrimitive(val)) {
330330
return true;
331331
}
332-
if (val instanceof ArrayBacked<?> arrayBacked) {
332+
if (val instanceof ArrayBacked arrayBacked) {
333333
val = arrayBacked.backingArray();
334334
}
335335
try {
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.hubspot.jinjava.lib.filter;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import com.hubspot.jinjava.BaseJinjavaTest;
6+
import java.util.HashMap;
7+
import java.util.Map;
8+
import org.junit.Test;
9+
10+
public class ReverseFilterTest extends BaseJinjavaTest {
11+
12+
@Test
13+
public void itReversesPrimitiveIntArray() {
14+
Map<String, Object> context = new HashMap<>();
15+
context.put("arr", new int[] { 1, 2, 3 });
16+
assertThat(
17+
jinjava.render("{% for item in arr|reverse %}{{ item }}{% endfor %}", context)
18+
)
19+
.isEqualTo("321");
20+
}
21+
22+
@Test
23+
public void itReversesObjectArray() {
24+
Map<String, Object> context = new HashMap<>();
25+
context.put("arr", new String[] { "a", "b", "c" });
26+
assertThat(
27+
jinjava.render("{% for item in arr|reverse %}{{ item }}{% endfor %}", context)
28+
)
29+
.isEqualTo("cba");
30+
}
31+
}

0 commit comments

Comments
 (0)