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 <[email protected]> Authored: Sun Feb 26 22:17:26 2017 +0100 Committer: Mark Struberg <[email protected]> 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();
