You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by st...@apache.org on 2017/02/24 12:07:23 UTC
[17/26] johnzon git commit: JOHNZON-98 implemented JsonPatchBuilder
JOHNZON-98 implemented JsonPatchBuilder
Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/0e4bd488
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/0e4bd488
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/0e4bd488
Branch: refs/heads/master
Commit: 0e4bd4888918bbf46db024bb62139c42de0d1bc0
Parents: 74cb908
Author: Reinhard Sandtner <rs...@apache.org>
Authored: Mon Nov 28 13:14:24 2016 +0100
Committer: Reinhard Sandtner <rs...@apache.org>
Committed: Mon Nov 28 13:14:24 2016 +0100
----------------------------------------------------------------------
.../johnzon/core/JsonPatchBuilderImpl.java | 121 ++++-
.../org/apache/johnzon/core/JsonPatchImpl.java | 125 +++++-
.../apache/johnzon/core/JsonPointerImpl.java | 4 +
.../johnzon/core/JsonPatchBuilderTest.java | 440 +++++++++++++++++++
.../org/apache/johnzon/core/JsonPatchTest.java | 130 +++---
5 files changed, 724 insertions(+), 96 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/johnzon/blob/0e4bd488/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchBuilderImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchBuilderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchBuilderImpl.java
index a6e7c8a..1dc5ae4 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchBuilderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchBuilderImpl.java
@@ -22,110 +22,183 @@ import javax.json.JsonPatch;
import javax.json.JsonPatchBuilder;
import javax.json.JsonStructure;
import javax.json.JsonValue;
+import java.util.ArrayList;
+import java.util.List;
-public class JsonPatchBuilderImpl implements JsonPatchBuilder {
- public JsonPatchBuilderImpl() {
- super();
+class JsonPatchBuilderImpl implements JsonPatchBuilder {
+
+ private final List<JsonPatchImpl.PatchValue> operations;
+
+
+ JsonPatchBuilderImpl() {
+ operations = new ArrayList<>();
}
- public JsonPatchBuilderImpl(JsonArray initialData) {
- super();
+ JsonPatchBuilderImpl(JsonArray initialData) {
+ operations = new ArrayList<>(initialData.size());
+
+ for (JsonValue value : initialData) {
+
+ JsonObject operation = (JsonObject) value;
+
+ JsonPatchOperation op = JsonPatchOperation.valueOf(operation.getString("op").toUpperCase());
+ String path = operation.getString("path");
+ String from = operation.getString("from", null);
+ JsonValue jsonValue = operation.get("value");
+
+ operations.add(new JsonPatchImpl.PatchValue(op,
+ path,
+ from,
+ jsonValue));
+ }
}
+ //X TODO this should get simplified to only one method like JsonPatch
@Override
public JsonStructure apply(JsonStructure target) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return build().apply(target);
}
@Override
public JsonObject apply(JsonObject target) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return build().apply(target);
}
@Override
public JsonArray apply(JsonArray target) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return build().apply(target);
}
+
@Override
public JsonPatchBuilder add(String path, JsonValue value) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return addOperation(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
+ path,
+ null,
+ value));
}
@Override
public JsonPatchBuilder add(String path, String value) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return add(path, toJsonString(value));
}
@Override
public JsonPatchBuilder add(String path, int value) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return add(path, toJsonNumber(value));
}
@Override
public JsonPatchBuilder add(String path, boolean value) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return add(path, toJsonBoolean(value));
}
+
@Override
public JsonPatchBuilder remove(String path) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return addOperation(new JsonPatchImpl.PatchValue(JsonPatchOperation.REMOVE,
+ path,
+ null,
+ null));
}
+
@Override
public JsonPatchBuilder replace(String path, JsonValue value) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return addOperation(new JsonPatchImpl.PatchValue(JsonPatchOperation.REPLACE,
+ path,
+ null,
+ value));
}
@Override
public JsonPatchBuilder replace(String path, String value) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return replace(path, toJsonString(value));
}
@Override
public JsonPatchBuilder replace(String path, int value) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return replace(path, toJsonNumber(value));
}
@Override
public JsonPatchBuilder replace(String path, boolean value) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return replace(path, toJsonBoolean(value));
}
+
@Override
public JsonPatchBuilder move(String path, String from) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return addOperation(new JsonPatchImpl.PatchValue(JsonPatchOperation.MOVE,
+ path,
+ from,
+ null));
}
+
@Override
public JsonPatchBuilder copy(String path, String from) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return addOperation(new JsonPatchImpl.PatchValue(JsonPatchOperation.COPY,
+ path,
+ from,
+ null));
}
+
@Override
public JsonPatchBuilder test(String path, JsonValue value) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return addOperation(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
+ path,
+ null,
+ value));
}
@Override
public JsonPatchBuilder test(String path, String value) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return test(path, toJsonString(value));
}
@Override
public JsonPatchBuilder test(String path, int value) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return test(path, toJsonNumber(value));
}
@Override
public JsonPatchBuilder test(String path, boolean value) {
- throw new UnsupportedOperationException("JSON-P 1.1");
+ return test(path, toJsonBoolean(value));
}
+
@Override
public JsonPatch build() {
- throw new UnsupportedOperationException("JSON-P 1.1");
+
+ // add operations to another list
+ // so we can clear and reuse the builder
+ JsonPatchImpl patch = new JsonPatchImpl(new ArrayList<>(operations));
+ operations.clear();
+
+ return patch;
+
}
+
+
+ private JsonPatchBuilder addOperation(JsonPatchImpl.PatchValue operation) {
+ operations.add(operation);
+ return this;
+ }
+
+ private static JsonValue toJsonBoolean(boolean value) {
+ return value ? JsonValue.TRUE : JsonValue.FALSE;
+ }
+
+ private static JsonValue toJsonString(String value) {
+ return value == null ? JsonValue.NULL : new JsonStringImpl(value);
+ }
+
+ private static JsonValue toJsonNumber(int value) {
+ return new JsonLongImpl(value);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/johnzon/blob/0e4bd488/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchImpl.java
index 0aaedf9..813dba0 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPatchImpl.java
@@ -20,11 +20,16 @@ package org.apache.johnzon.core;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
import javax.json.JsonException;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
import javax.json.JsonPatch;
-import javax.json.JsonPointer;
import javax.json.JsonStructure;
import javax.json.JsonValue;
@@ -37,6 +42,14 @@ class JsonPatchImpl implements JsonPatch {
this.patches = Arrays.asList(patches);
}
+ JsonPatchImpl(List<PatchValue> patches) {
+ if (patches == null) {
+ this.patches = Collections.emptyList();
+ } else {
+ this.patches = Collections.unmodifiableList(patches);
+ }
+ }
+
@Override
public <T extends JsonStructure> T apply(T target) {
@@ -81,21 +94,119 @@ class JsonPatchImpl implements JsonPatch {
}
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ JsonPatchImpl jsonPatch = (JsonPatchImpl) o;
+
+ return patches.equals(jsonPatch.patches);
+ }
+
+ @Override
+ public int hashCode() {
+ return patches.hashCode();
+ }
+
+
+ JsonArray toJsonArray() {
+
+ JsonArrayBuilder builder = Json.createArrayBuilder();
+ for (PatchValue patch : patches) {
+ builder.add(patch.toJson());
+ }
+
+ return builder.build();
+ }
+
+
static class PatchValue {
private final JsonPatchOperation operation;
- private final JsonPointer path;
- private final JsonPointer from;
+ private final JsonPointerImpl path;
+ private final JsonPointerImpl from;
private final JsonValue value;
PatchValue(JsonPatchOperation operation,
- JsonPointer path,
- JsonPointer from,
+ String path,
+ String from,
JsonValue value) {
this.operation = operation;
- this.path = path;
- this.from = from;
+ this.path = new JsonPointerImpl(path);
+
+ // ignore from if we do not need it
+ if (operation == JsonPatchOperation.MOVE || operation == JsonPatchOperation.COPY) {
+ this.from = new JsonPointerImpl(from);
+ } else {
+ this.from = null;
+ }
+
this.value = value;
}
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ PatchValue that = (PatchValue) o;
+
+ if (operation != that.operation) {
+ return false;
+ }
+ if (!path.equals(that.path)) {
+ return false;
+ }
+ if (from != null ? !from.equals(that.from) : that.from != null) {
+ return false;
+ }
+ return value != null ? value.equals(that.value) : that.value == null;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = operation.hashCode();
+ result = 31 * result + path.hashCode();
+ result = 31 * result + (from != null ? from.hashCode() : 0);
+ result = 31 * result + (value != null ? value.hashCode() : 0);
+ return result;
+ }
+
+
+ @Override
+ public String toString() {
+ return "{" +
+ "op: " + operation +
+ ", path: " + path +
+ ", from: " + from +
+ ", value: " + value +
+ '}';
+ }
+
+ JsonObject toJson() {
+ JsonObjectBuilder builder = Json.createObjectBuilder()
+ .add("op", operation.name().toLowerCase())
+ .add("path", path.getJsonPointer());
+
+ if (from != null) {
+ builder.add("from", from.getJsonPointer());
+ }
+
+ if (value != null) {
+ builder.add("value", value);
+ }
+
+ return builder.build();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/johnzon/blob/0e4bd488/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java
----------------------------------------------------------------------
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 8057f95..0b01c3d 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
@@ -289,6 +289,10 @@ public class JsonPointerImpl implements JsonPointer {
return (JsonArray) remove(target, 1, referenceTokens.size() - 1);
}
+ String getJsonPointer() {
+ return jsonPointer;
+ }
+
private void validateAdd(JsonValue target) {
validateJsonPointer(target, referenceTokens.size() - 1);
}
http://git-wip-us.apache.org/repos/asf/johnzon/blob/0e4bd488/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchBuilderTest.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchBuilderTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchBuilderTest.java
new file mode 100644
index 0000000..7fd2af0
--- /dev/null
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchBuilderTest.java
@@ -0,0 +1,440 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.johnzon.core;
+
+import org.junit.Test;
+
+import javax.json.Json;
+import javax.json.JsonPatch;
+import javax.json.JsonValue;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class JsonPatchBuilderTest {
+
+ @Test
+ public void testPatchBuilderAddString() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
+ "/foo",
+ null,
+ new JsonStringImpl("bar")));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().add("/foo", "bar")
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderAddStringNull() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
+ "/foo",
+ null,
+ JsonValue.NULL));
+
+ String nullString = null;
+ JsonPatch patch = new JsonPatchBuilderImpl().add("/foo", nullString)
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderAddJsonObject() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
+ "/foo",
+ null,
+ Json.createObjectBuilder()
+ .add("bar", "qux")
+ .build()));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().add("/foo", Json.createObjectBuilder()
+ .add("bar", "qux")
+ .build())
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderAddJsonArray() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
+ "/path",
+ null,
+ Json.createArrayBuilder()
+ .add("test")
+ .build()));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().add("/path", Json.createArrayBuilder()
+ .add("test")
+ .build())
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderAddJsonValueNull() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
+ "/path",
+ null,
+ JsonValue.NULL));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().add("/path", JsonValue.NULL)
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderAddInt() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
+ "/foo",
+ null,
+ new JsonStringImpl("bar")));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().add("/foo", "bar")
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderAddBoolean() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
+ "/path/true",
+ null,
+ JsonValue.TRUE),
+ new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
+ "/path/false",
+ null,
+ JsonValue.FALSE));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().add("/path/true", true)
+ .add("/path/false", false)
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testPatchBuilderAddMissingPath() {
+ new JsonPatchBuilderImpl().add(null, 0);
+ }
+
+
+ @Test
+ public void testPatchBuilderRemove() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REMOVE,
+ "/path/to/remove",
+ null,
+ null));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().remove("/path/to/remove")
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testPatchBuilderRemoveMissingPath() {
+ new JsonPatchBuilderImpl().remove(null);
+ }
+
+
+ @Test
+ public void testPatchBuilderReplaceString() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REPLACE,
+ "/path/to/replace",
+ null,
+ new JsonStringImpl("new value")));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().replace("/path/to/replace", "new value")
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderReplaceInt() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REPLACE,
+ "/replace/me",
+ null,
+ new JsonLongImpl(42)));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().replace("/replace/me", 42)
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderReplaceBoolean() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REPLACE,
+ "/true/to/replace",
+ null,
+ JsonValue.FALSE),
+ new JsonPatchImpl.PatchValue(JsonPatchOperation.REPLACE,
+ "/false/to/replace",
+ null,
+ JsonValue.TRUE));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().replace("/true/to/replace", false)
+ .replace("/false/to/replace", true)
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderReplaceJsonObject() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REPLACE,
+ "/replace/the/object",
+ null,
+ Json.createObjectBuilder()
+ .add("foo", "bar")
+ .build()));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().replace("/replace/the/object", Json.createObjectBuilder()
+ .add("foo", "bar")
+ .build())
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderReplaceJsonArray() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REPLACE,
+ "/replace/my/array",
+ null,
+ Json.createArrayBuilder()
+ .add("test")
+ .build()));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().replace("/replace/my/array", Json.createArrayBuilder()
+ .add("test")
+ .build())
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testPatchBuilderReplaceMissingPath() {
+ new JsonPatchBuilderImpl().replace(null, "ignored");
+ }
+
+
+ @Test
+ public void testPatchBuilderMove() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.MOVE,
+ "/move/to",
+ "/move/from",
+ null));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().move("/move/to", "/move/from")
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testPatchBuilderMoveMissingPath() {
+ new JsonPatchBuilderImpl().move(null, "/ignored");
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testPatchBuilderMoveMissingFrom() {
+ new JsonPatchBuilderImpl().move("/the/path", null);
+ }
+
+
+ @Test
+ public void testPatchBuilderCopy() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.COPY,
+ "/to",
+ "/from",
+ null));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().copy("/to", "/from")
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testPatchBuilderCopyMissingPath() {
+ new JsonPatchBuilderImpl().copy(null, "/ignored");
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testPatchBuilderCopyMissingFrom() {
+ new JsonPatchBuilderImpl().copy("/the/path", null);
+ }
+
+
+ @Test
+ public void testPatchBuilderTestString() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
+ "/to/test",
+ null,
+ new JsonStringImpl("value")));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().test("/to/test", "value")
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderTestBoolean() {
+
+ JsonPatchImpl exptected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
+ "/true/to/test",
+ null,
+ JsonValue.TRUE),
+ new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
+ "/false/to/test",
+ null,
+ JsonValue.FALSE));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().test("/true/to/test", true)
+ .test("/false/to/test", false)
+ .build();
+ assertNotNull(patch);
+ assertEquals(exptected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderTestInt() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
+ "/test/int",
+ null,
+ new JsonLongImpl(16)));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().test("/test/int", 16)
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderTestJsonValue() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
+ "/test/value",
+ null,
+ JsonValue.NULL));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().test("/test/value", JsonValue.NULL)
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderTestJsonObject() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
+ "/test/the/object",
+ null,
+ Json.createObjectBuilder()
+ .add("foo", "bar")
+ .build()));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().test("/test/the/object", Json.createObjectBuilder()
+ .add("foo", "bar")
+ .build())
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test
+ public void testPatchBuilderTestJsonArray() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
+ "/test/my/array",
+ null,
+ Json.createArrayBuilder()
+ .add("element")
+ .build()));
+
+ JsonPatch patch = new JsonPatchBuilderImpl().test("/test/my/array", Json.createArrayBuilder()
+ .add("element")
+ .build())
+ .build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testPatchBuilderTestMissingPath() {
+ new JsonPatchBuilderImpl().test(null, "ignored");
+ }
+
+
+ @Test
+ public void testPatchBuilderWithinitialData() {
+
+ JsonPatchImpl expected = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
+ "/add/an/object",
+ null,
+ Json.createObjectBuilder()
+ .add("name", "Cassius")
+ .build()),
+ new JsonPatchImpl.PatchValue(JsonPatchOperation.REPLACE,
+ "/replace/me",
+ null,
+ Json.createArrayBuilder()
+ .add(16)
+ .add(27)
+ .add("test")
+ .build()),
+ new JsonPatchImpl.PatchValue(JsonPatchOperation.REMOVE,
+ "/remove/it",
+ null,
+ null));
+
+ JsonPatch patch = new JsonPatchBuilderImpl(expected.toJsonArray()).build();
+ assertNotNull(patch);
+ assertEquals(expected, patch);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/johnzon/blob/0e4bd488/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java
----------------------------------------------------------------------
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 b4665ed..7e8ad67 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
@@ -44,7 +44,7 @@ public class JsonPatchTest {
.readObject();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
- Json.createJsonPointer("/baz"),
+ "/baz",
null, // no from
new JsonStringImpl("qux")));
@@ -66,7 +66,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
- Json.createJsonPointer("/foo/1"),
+ "/foo/1",
null, // no from
new JsonStringImpl("qux")));
@@ -92,7 +92,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
- Json.createJsonPointer("/foo/-"),
+ "/foo/-",
null, // no from
new JsonStringImpl("qux")));
@@ -116,7 +116,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
- Json.createJsonPointer("/-"),
+ "/-",
null, // no from
new JsonStringImpl("qux")));
@@ -138,7 +138,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
- Json.createJsonPointer("/baz/bat"),
+ "/baz/bat",
null, // no from
new JsonStringImpl("qux")));
@@ -153,7 +153,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
- Json.createJsonPointer("/5"),
+ "/5",
null,
new JsonStringImpl("baz")));
@@ -170,7 +170,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REMOVE,
- Json.createJsonPointer("/baz"),
+ "/baz",
null,
null));
@@ -193,7 +193,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REMOVE,
- Json.createJsonPointer("/foo/1"),
+ "/foo/1",
null,
null));
@@ -219,7 +219,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REMOVE,
- Json.createJsonPointer("/1"),
+ "/1",
null,
null));
@@ -241,7 +241,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REMOVE,
- Json.createJsonPointer("/nomatch"),
+ "/nomatch",
null,
null));
@@ -256,7 +256,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REMOVE,
- Json.createJsonPointer("/5"),
+ "/5",
null,
null));
@@ -273,7 +273,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REPLACE,
- Json.createJsonPointer("/baz"),
+ "/baz",
null,
new JsonStringImpl("boo")));
@@ -296,7 +296,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REPLACE,
- Json.createJsonPointer("/foo/1"),
+ "/foo/1",
null,
new JsonStringImpl("boo")));
@@ -323,7 +323,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REPLACE,
- Json.createJsonPointer("/0"),
+ "/0",
null,
new JsonStringImpl("boo")));
@@ -345,7 +345,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REPLACE,
- Json.createJsonPointer("/nomatch"),
+ "/nomatch",
null,
new JsonStringImpl("notneeded")));
@@ -360,7 +360,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.REPLACE,
- Json.createJsonPointer("/1"),
+ "/1",
null,
new JsonStringImpl("notneeded")));
@@ -380,8 +380,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.MOVE,
- Json.createJsonPointer("/qux/thud"),
- Json.createJsonPointer("/foo/waldo"),
+ "/qux/thud",
+ "/foo/waldo",
null));
JsonObject patched = patch.apply(object);
@@ -413,8 +413,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.MOVE,
- Json.createJsonPointer("/foo/3"),
- Json.createJsonPointer("/foo/1"),
+ "/foo/3",
+ "/foo/1",
null));
JsonObject patched = patch.apply(object);
@@ -442,8 +442,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.MOVE,
- Json.createJsonPointer("/0"),
- Json.createJsonPointer("/3"),
+ "/0",
+ "/3",
null));
JsonArray patched = patch.apply(array);
@@ -466,8 +466,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.MOVE,
- Json.createJsonPointer("/bar"),
- Json.createJsonPointer("/foo/2"),
+ "/bar",
+ "/foo/2",
null));
JsonObject patched = patch.apply(object);
@@ -492,8 +492,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.MOVE,
- Json.createJsonPointer("/baz"),
- Json.createJsonPointer("/nomatch"),
+ "/baz",
+ "/nomatch",
null));
patch.apply(object);
@@ -508,8 +508,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.MOVE,
- Json.createJsonPointer("/nomatch/child"),
- Json.createJsonPointer("/foo"),
+ "/nomatch/child",
+ "/foo",
null));
patch.apply(object);
@@ -524,8 +524,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.MOVE,
- Json.createJsonPointer("/object/key"),
- Json.createJsonPointer("/object"),
+ "/object/key",
+ "/object",
null));
patch.apply(object);
@@ -540,8 +540,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.COPY,
- Json.createJsonPointer("/baz"),
- Json.createJsonPointer("/foo"),
+ "/baz",
+ "/foo",
null));
JsonObject patched = patch.apply(object);
@@ -563,8 +563,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.COPY,
- Json.createJsonPointer("/foo/-"),
- Json.createJsonPointer("/foo/0"),
+ "/foo/-",
+ "/foo/0",
null));
JsonObject patched = patch.apply(object);
@@ -589,8 +589,8 @@ public class JsonPatchTest {
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.COPY,
- Json.createJsonPointer("/0"),
- Json.createJsonPointer("/1"),
+ "/0",
+ "/1",
null));
JsonArray patched = patch.apply(array);
@@ -615,8 +615,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.COPY,
- Json.createJsonPointer("/partner/partner/name"),
- Json.createJsonPointer("/name"),
+ "/partner/partner/name",
+ "/name",
null));
JsonObject patched = patch.apply(object);
@@ -641,8 +641,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.COPY,
- Json.createJsonPointer("/notneeded"),
- Json.createJsonPointer("/nomatch"),
+ "/notneeded",
+ "/nomatch",
null));
patch.apply(object);
@@ -656,8 +656,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.COPY,
- Json.createJsonPointer("/path/nomatch"),
- Json.createJsonPointer("/foo"),
+ "/path/nomatch",
+ "/foo",
null));
patch.apply(object);
@@ -672,8 +672,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.COPY,
- Json.createJsonPointer("/-"),
- Json.createJsonPointer("/2"),
+ "/-",
+ "/2",
null));
patch.apply(array);
@@ -687,8 +687,8 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.COPY,
- Json.createJsonPointer("/1"),
- Json.createJsonPointer("/-"),
+ "/1",
+ "/-",
null));
patch.apply(array);
@@ -703,7 +703,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
- Json.createJsonPointer("/foo"),
+ "/foo",
null,
new JsonStringImpl("qux")));
@@ -720,7 +720,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
- Json.createJsonPointer("/foo"),
+ "/foo",
null,
Json.createArrayBuilder().build()));
@@ -738,7 +738,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
- Json.createJsonPointer("/parents"),
+ "/parents",
null,
Json.createArrayBuilder() // yessss, we really want to create a new JsonArray ;)
.add("Odin")
@@ -761,7 +761,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
- Json.createJsonPointer("/numbers"),
+ "/numbers",
null,
Json.createArrayBuilder() // different ordering
.add(2)
@@ -781,7 +781,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
- Json.createJsonPointer("/foo/1"),
+ "/foo/1",
null,
new JsonStringImpl("baz")));
@@ -800,7 +800,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
- Json.createJsonPointer("/2"),
+ "/2",
null,
new JsonStringImpl("qux")));
@@ -819,7 +819,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
- Json.createJsonPointer("/0"),
+ "/0",
null,
new JsonStringImpl("bar")));
@@ -830,7 +830,7 @@ public class JsonPatchTest {
public void testTestingObjectMemeberNonexistentTarget() {
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
- Json.createJsonPointer("/nomatch"),
+ "/nomatch",
null,
JsonValue.EMPTY_JSON_OBJECT));
@@ -841,7 +841,7 @@ public class JsonPatchTest {
public void testTestingArrayElementIndexOutOfBounds() {
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.TEST,
- Json.createJsonPointer("/3"),
+ "/3",
null,
JsonValue.EMPTY_JSON_OBJECT));
@@ -858,7 +858,7 @@ public class JsonPatchTest {
.build();
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
- Json.createJsonPointer("/foo"),
+ "/foo",
null,
new JsonStringImpl("abcd")));
@@ -875,7 +875,7 @@ public class JsonPatchTest {
public void testAddArrayElementToEmptyArray() {
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
- Json.createJsonPointer("/-"),
+ "/-",
null,
new JsonStringImpl("foo")));
@@ -896,33 +896,33 @@ public class JsonPatchTest {
// i know this can be done with PatchBuilder but
// currently it's not implemented and its fun ;)
JsonPatchImpl patch = new JsonPatchImpl(new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
- Json.createJsonPointer("/family/father"),
+ "/family/father",
null,
Json.createObjectBuilder()
.add("name", "Gaio Modry Effect")
.build()),
new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
- Json.createJsonPointer("/family/mother"),
+ "/family/mother",
null,
Json.createObjectBuilder()
.add("name", "Cassius vom Hause Clarabella")
.build()),
new JsonPatchImpl.PatchValue(JsonPatchOperation.MOVE,
- Json.createJsonPointer("/family/children/0"),
- Json.createJsonPointer("/family/mother"),
+ "/family/children/0",
+ "/family/mother",
null),
new JsonPatchImpl.PatchValue(JsonPatchOperation.ADD,
- Json.createJsonPointer("/family/mother"),
+ "/family/mother",
null,
Json.createObjectBuilder()
.add("name", "Aimee vom Hause Clarabella")
.build()),
new JsonPatchImpl.PatchValue(JsonPatchOperation.COPY,
- Json.createJsonPointer("/pedigree"),
- Json.createJsonPointer("/family"),
+ "/pedigree",
+ "/family",
null),
new JsonPatchImpl.PatchValue(JsonPatchOperation.REMOVE,
- Json.createJsonPointer("/family"),
+ "/family",
null,
null));