You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rm...@apache.org on 2020/03/27 08:09:47 UTC

[johnzon] branch master updated: ensure '-' token is used for pointer.remove and not skipped due to number pattern check

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 <rm...@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()