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/26 21:18:41 UTC

johnzon git commit: JOHNZON-103 add test for Json.createDiff(source, target)

Repository: johnzon
Updated Branches:
  refs/heads/master 1900e037a -> 61a130e3e


JOHNZON-103 add test for Json.createDiff(source, target)

Commented out for now, JsonPatchTest#testDiff
Implementation of the logic is still TODO.


Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/61a130e3
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/61a130e3
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/61a130e3

Branch: refs/heads/master
Commit: 61a130e3e75b57a86d8f6bdd2395616abbf69afc
Parents: 1900e03
Author: Mark Struberg <st...@apache.org>
Authored: Sun Feb 26 22:17:26 2017 +0100
Committer: Mark Struberg <st...@apache.org>
Committed: Sun Feb 26 22:17:26 2017 +0100

----------------------------------------------------------------------
 .../org/apache/johnzon/core/JsonPatchTest.java  | 38 ++++++++++++++++++++
 1 file changed, 38 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/johnzon/blob/61a130e3/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 a54e7cd..dc54c0c 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
@@ -969,6 +969,44 @@ public class JsonPatchTest {
     }
 
 
+    //X @Test disabled for now
+    //X TODO implement the diff logic!
+    public void testDiff() {
+        // {"a":"xa","b":2,"c":{"d":"xd"},"e":[1,2,3]}
+        String jsonA = "{\"a\":\"xa\",\"b\":2,\"c\":{\"d\":\"xd\"},\"e\":[1,2,3]}";
+
+        // {"a":"xa","c":{"d":"xd", "d2":"xd2"},"e":[1,3],"f":"xe"}
+        String jsonB = "{\"a\":\"xa\",\"c\":{\"d\":\"xd\", \"d2\":\"xd2\"},\"e\":[1,3],\"f\":\"xe\"}";
+
+        // this results in 4 diff operations:
+        // removing b, adding d2, removing 2 from e, adding f
+        JsonPatch jsonPatch = Json.createDiff(Json.createReader(new StringReader(jsonA)).readObject(),
+                                              Json.createReader(new StringReader(jsonB)).readObject());
+        Assert.assertNotNull(jsonPatch);
+        JsonArray patchOperations = jsonPatch.toJsonArray();
+        Assert.assertNotNull(patchOperations);
+        Assert.assertEquals(4, patchOperations.size());
+        containsOperation(patchOperations, JsonPatch.Operation.REMOVE, "/b", null);
+        containsOperation(patchOperations, JsonPatch.Operation.ADD, "/c/d2", "xd2");
+        containsOperation(patchOperations, JsonPatch.Operation.REMOVE, "/e/2", null);
+        containsOperation(patchOperations, JsonPatch.Operation.ADD, "/f", "xe");
+    }
+
+    private void containsOperation(JsonArray patchOperations, JsonPatch.Operation patchOperation,
+                                   String jsonPointer, String value) {
+        for (JsonValue operation : patchOperations) {
+            if (operation instanceof JsonObject &&
+                patchOperation.operationName().equalsIgnoreCase(((JsonObject) operation).getString("op"))) {
+                Assert.assertEquals(jsonPointer, ((JsonObject) operation).getString("path"));
+
+                if (value != null) {
+                    Assert.assertEquals(value, ((JsonObject) operation).getString("value"));
+                }
+            }
+        }
+        Assert.fail("patchOperations does not contain " + patchOperation + " " + jsonPointer);
+    }
+
 
     private static String toJsonString(JsonStructure value) {
         StringWriter writer = new StringWriter();