This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/johnzon.git
The following commit(s) were added to refs/heads/master by this push: new 7b19841 ensure '-' token is used for pointer.remove and not skipped due to number pattern check 7b19841 is described below commit 7b198413cc858be387e82d3f639364b14a5742dd Author: Romain Manni-Bucau <rmannibu...@gmail.com> AuthorDate: Fri Mar 27 09:09:42 2020 +0100 ensure '-' token is used for pointer.remove and not skipped due to number pattern check --- .../main/java/org/apache/johnzon/core/JsonPointerImpl.java | 4 ++-- .../test/java/org/apache/johnzon/core/JsonPatchTest.java | 2 +- .../test/java/org/apache/johnzon/core/JsonPointerTest.java | 13 +++++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java index 46d62b3..e9cd32c 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java @@ -437,9 +437,9 @@ public class JsonPointerImpl implements JsonPointer { return objectBuilder.build(); } else if (jsonValue.getValueType() == JsonValue.ValueType.ARRAY) { final JsonArray jsonArray = jsonValue.asJsonArray(); - if (IS_NUMBER.matcher(token).matches()) { - final JsonArrayBuilder arrayBuilder = provider.createArrayBuilder(); + if ("-".equals(token) || IS_NUMBER.matcher(token).matches()) { final int arrayIndex = getArrayIndex(token, jsonArray, false); + final JsonArrayBuilder arrayBuilder = provider.createArrayBuilder(); final int jsonArraySize = jsonArray.size(); for (int i = 0; i < jsonArraySize; i++) { final boolean matchesIndex = i == arrayIndex; diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java index 6d9b41e..a255271 100644 --- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java +++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java @@ -717,7 +717,7 @@ public class JsonPatchTest { .build(); JsonPatchImpl patch = new JsonPatchImpl(PROVIDER, new JsonPatchImpl.PatchValue(PROVIDER, JsonPatch.Operation.COPY, - "/1", + "/2", "/-", null)); diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java index bf99d2d..2b840b2 100644 --- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java +++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java @@ -470,6 +470,19 @@ public class JsonPointerTest { } @Test + public void testRemoveLastArrayElementSimple() { + JsonPointerImpl jsonPointer = new JsonPointerImpl(JsonProvider.provider(), "/-"); + JsonStructure target = Json.createArrayBuilder() + .add("bar") + .add("qux") + .add("baz") + .build(); + + JsonStructure result = jsonPointer.remove(target); + assertEquals("[\"bar\",\"qux\"]", result.toString()); + } + + @Test public void testRemoveObjectMember() { JsonPointerImpl jsonPointer = new JsonPointerImpl(JsonProvider.provider(), "/baz"); JsonStructure target = Json.createObjectBuilder()