Skip to content

Commit

Permalink
#1888 fix retrieving simple arrays via field selectors
Browse files Browse the repository at this point in the history
  • Loading branch information
thjaeckle committed Feb 2, 2024
1 parent 023f931 commit feba669
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -432,8 +432,8 @@ private static JsonObject filterByTrie(final JsonObject self, final JsonFieldSel
filteredChildValue = filterByTrie(childValue.asObject(), trie.descend(key)); // recurse!
} else if (childValue.isArray()) {
filteredChildValue = childValue.asArray().stream()
.filter(JsonValue::isObject)
.map(value -> filterByTrie(value.asObject(), trie.descend(key))) // recurse!
.map(value -> value.isObject() ? filterByTrie(value.asObject(), trie.descend(key)) // recurse!
: value)
.collect(JsonCollectors.valuesToArray());
} else {
filteredChildValue = childValue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1433,6 +1433,68 @@ public void partiallyIntersectingPointersHaveNoEffectInFieldSelector() {
assertThat(actual).isEqualTo(underTest.remove("x"));
}

@Test
public void nestedObjectsInsideArraysAreSelectedWhenSelectingViaFieldSelector() {
final JsonObject underTest = JsonObject.newBuilder()
.set("some", JsonObject.newBuilder()
.set("nested", JsonArray.newBuilder()
.add(JsonObject.newBuilder()
.set("a", 1)
.set("b", 2)
.set("c", 3)
.build()
)
.add(JsonObject.newBuilder()
.set("a", 11)
.set("b", 22)
.set("c", 33)
.build()
)
.build())
.build()
)
.set("other", "foo")
.build();

final JsonFieldSelector selectorSelectingArray =
JsonFieldSelector.newInstance("some/nested/b");
final JsonObject actual = underTest.get(selectorSelectingArray);

final JsonObject expected = JsonObject.newBuilder()
.set("some", JsonObject.newBuilder()
.set("nested", JsonArray.newBuilder()
.add(JsonObject.newBuilder()
.set("b", 2)
.build()
)
.add(JsonObject.newBuilder()
.set("b", 22)
.build()
)
.build())
.build()
)
.build();
assertThat(actual).isEqualTo(expected);
}

@Test
public void simpleArraysArePreservedWhenSelectingViaFieldSelector() {
final JsonObject underTest = JsonObject.newBuilder()
.set("some", JsonObject.newBuilder()
.set("nested", JsonArray.newBuilder()
.add(1, 2, 3)
.build())
.build()
)
.set("other", "foo")
.build();
final JsonFieldSelector selectorSelectingArray =
JsonFieldSelector.newInstance("some/nested");
final JsonObject actual = underTest.get(selectorSelectingArray);
assertThat(actual).isEqualTo(underTest.remove("other"));
}

@Test
public void jsonObjectsNestedInArraysShouldCompareWithoutFieldDefinitions() {
final JsonObject objectWithoutDefinition =
Expand Down

0 comments on commit feba669

Please sign in to comment.