Skip to content

Commit 4567a5f

Browse files
fix consistency with get(int) that returns wrapped (#3464)
DelegateJsonObject/DelegateJsonArray for nested structures Signed-off-by: NeatGuyCoding <[email protected]>
1 parent 210c54d commit 4567a5f

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed

src/main/java/io/lettuce/core/json/DelegateJsonArray.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public List<JsonValue> asList() {
6060
List<JsonValue> result = new ArrayList<>();
6161

6262
for (JsonNode jsonNode : node) {
63-
result.add(new DelegateJsonValue(jsonNode, objectMapper));
63+
result.add(wrap(jsonNode, objectMapper));
6464
}
6565

6666
return result;

src/test/java/io/lettuce/core/json/DelegateJsonArrayUnitTests.java

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.junit.jupiter.api.Test;
1212

1313
import java.util.Iterator;
14+
import java.util.List;
1415

1516
import static io.lettuce.TestTags.UNIT_TEST;
1617
import static org.assertj.core.api.Assertions.assertThat;
@@ -214,4 +215,68 @@ void asAnythingElse() {
214215
assertThat(underTest.asNumber()).isNull();
215216
}
216217

218+
@Test
219+
void asListWithNestedObjects() {
220+
ObjectMapper objectMapper = new ObjectMapper();
221+
DefaultJsonParser parser = new DefaultJsonParser(objectMapper);
222+
223+
// Create an array containing nested objects
224+
DelegateJsonArray underTest = new DelegateJsonArray(objectMapper);
225+
underTest.add(parser.createJsonValue("{\"name\": \"Alice\", \"age\": 30}"));
226+
underTest.add(parser.createJsonValue("{\"name\": \"Bob\", \"age\": 25}"));
227+
228+
// Test that asList() returns proper DelegateJsonObject instances for nested objects
229+
List<JsonValue> list = underTest.asList();
230+
assertThat(list).hasSize(2);
231+
232+
// Verify that elements from asList() behave consistently with get()
233+
for (int i = 0; i < list.size(); i++) {
234+
JsonValue listElement = list.get(i);
235+
JsonValue getElement = underTest.get(i);
236+
237+
// Both should be DelegateJsonObject instances
238+
assertThat(listElement.isJsonObject()).isTrue();
239+
assertThat(getElement.isJsonObject()).isTrue();
240+
241+
// Both should have the same behavior
242+
assertThat(listElement.asJsonObject()).isNotNull();
243+
assertThat(getElement.asJsonObject()).isNotNull();
244+
245+
// Both should return the same string representation
246+
assertThat(listElement.toString()).isEqualTo(getElement.toString());
247+
}
248+
}
249+
250+
@Test
251+
void asListWithNestedArrays() {
252+
ObjectMapper objectMapper = new ObjectMapper();
253+
DefaultJsonParser parser = new DefaultJsonParser(objectMapper);
254+
255+
// Create an array containing nested arrays
256+
DelegateJsonArray underTest = new DelegateJsonArray(objectMapper);
257+
underTest.add(parser.createJsonValue("[1, 2, 3]"));
258+
underTest.add(parser.createJsonValue("[\"a\", \"b\", \"c\"]"));
259+
260+
// Test that asList() returns proper DelegateJsonArray instances for nested arrays
261+
List<JsonValue> list = underTest.asList();
262+
assertThat(list).hasSize(2);
263+
264+
// Verify that elements from asList() behave consistently with get()
265+
for (int i = 0; i < list.size(); i++) {
266+
JsonValue listElement = list.get(i);
267+
JsonValue getElement = underTest.get(i);
268+
269+
// Both should be DelegateJsonArray instances
270+
assertThat(listElement.isJsonArray()).isTrue();
271+
assertThat(getElement.isJsonArray()).isTrue();
272+
273+
// Both should have the same behavior
274+
assertThat(listElement.asJsonArray()).isNotNull();
275+
assertThat(getElement.asJsonArray()).isNotNull();
276+
277+
// Both should return the same string representation
278+
assertThat(listElement.toString()).isEqualTo(getElement.toString());
279+
}
280+
}
281+
217282
}

0 commit comments

Comments
 (0)