public static JSONObject getDiff(JSONObject original, JSONObject updated) { JSONObject ret = new JSONObject(); Set<String> originalKeys = getKeys(original); Set<String> updatedKeys = getKeys(updated); Object newValue = updated.opt(key); if (isEmpty(oldValue)) { if (!isEmpty(newValue)) { } else if (isEmpty(newValue)) { if (!areObjectsEqual(oldValue, newValue)) { ret.put(key, newValue);
/** * Tests to make sure that objects that differ are calculated correctly. */ @Test public void deviceDiffing1() { try { JSONObject original = new JSONObject(loadTextAssetAsString(TEST_DATA_DIR + "testJsonDiffing.1.old.json")); JSONObject updated = new JSONObject(loadTextAssetAsString(TEST_DATA_DIR + "testJsonDiffing.1.new.json")); JSONObject expected = new JSONObject(loadTextAssetAsString(TEST_DATA_DIR + "testJsonDiffing.1.expected.json")); JSONObject result = JsonDiffer.getDiff(original, updated); ApptentiveLog.e("result: %s", result); boolean equal = JsonDiffer.areObjectsEqual(result, expected); assertTrue(equal); } catch (JSONException e) { throw new RuntimeException(e); } }
Object leftValue = leftJSONObject.get(key); Object rightValue = rightJSONObject.get(key); if (!areObjectsEqual(leftValue, rightValue)) { return false; if (!areObjectsEqual(leftArray.get(i), rightArray.get(i))) { return false;
/** * Tests to make sure that objects that are the same return a null diff. */ @Test public void deviceDiffing2() { try { JSONObject original = new JSONObject(loadTextAssetAsString(TEST_DATA_DIR + "testJsonDiffing.2.old.json")); JSONObject updated = new JSONObject(loadTextAssetAsString(TEST_DATA_DIR + "testJsonDiffing.2.new.json")); JSONObject result = JsonDiffer.getDiff(original, updated); ApptentiveLog.e("result: %s", result); assertNull(result); } catch (JSONException e) { throw new RuntimeException(e); } } }
@Test public void timeExtendedData() throws JSONException { ApptentiveLog.e("testTimeExtendedData()"); ExtendedData expected = new TimeExtendedData(loadTextAssetAsString(TEST_DATA_DIR + "testTimeExtendedData.json")); TimeExtendedData millis = new TimeExtendedData(1406251926165L); ApptentiveLog.e("expected: %s\n\n millis: %s", expected.toJsonObject().toString(), millis.toJsonObject().toString()); assertTrue(JsonDiffer.areObjectsEqual(expected.toJsonObject(), millis.toJsonObject())); TimeExtendedData seconds = new TimeExtendedData(1406251926.165); assertTrue(JsonDiffer.areObjectsEqual(expected.toJsonObject(), seconds.toJsonObject())); TimeExtendedData date = new TimeExtendedData(new Date(1406251926165L)); assertTrue(JsonDiffer.areObjectsEqual(expected.toJsonObject(), date.toJsonObject())); } }
@Test public void testVersionHistoryStoreMigration() { String oldFormat = loadTextAssetAsString("model/versionHistoryStoreOld.txt"); VersionHistoryStoreMigrator.migrateV1ToV2(oldFormat); try { JSONArray expected = new JSONArray(loadTextAssetAsString("model/versionHistoryStore.json")); JSONArray result = VersionHistoryStore.getBaseArray(); boolean equal = JsonDiffer.areObjectsEqual(result, expected); if (!equal) { ApptentiveLog.e("Expected:\n%s", expected); ApptentiveLog.e("Result:\n%s", result); } assertTrue("VersionHistoryStoreMigrator migrated incorrectly.", equal); } catch (JSONException e) { assertNull(e); throw new RuntimeException("Error processing JSON in test.", e); } }
@Test public void testVersionHistoryStoreOrdering() { try { JSONArray expected = new JSONArray(loadTextAssetAsString("model/versionHistoryStore.json")); VersionHistoryStore.updateVersionHistory(1, "3.3.0", 1.472853954087E9d); VersionHistoryStore.updateVersionHistory(2, "3.3.1", 1.472854098019E9d); JSONArray result = VersionHistoryStore.getBaseArray(); boolean equal = JsonDiffer.areObjectsEqual(result, expected); if (!equal) { ApptentiveLog.e("Expected:\n%s", expected); ApptentiveLog.e("Result:\n%s", result); } assertTrue("VersionHistoryStore failed to maintain version history order.", equal); } catch (JSONException e) { assertNull(e); throw new RuntimeException("Error processing JSON in test.", e); } }
@Test public void testVersionHistoryStoreTimeAtInstall() { VersionHistory versionHistory = new VersionHistory(); versionHistory.updateVersionHistory(1.472853951000E9d, 1, "1.0.0"); versionHistory.updateVersionHistory(1.472853952000E9d, 2, "1.0.1"); versionHistory.updateVersionHistory(1.472853953000E9d, 3, "1.1.0"); versionHistory.updateVersionHistory(1.472853954000E9d, versionCode, "1.2.0"); versionHistory.updateVersionHistory(1.472853955000E9d, 10, "2.0.0"); versionHistory.updateVersionHistory(1.472853956000E9d, 15, "2.1.0"); assertTrue(JsonDiffer.areObjectsEqual(new Apptentive.DateTime(1.472853951000E9d).toJSONObject(), versionHistory.getTimeAtInstallTotal().toJSONObject())); assertTrue(JsonDiffer.areObjectsEqual(new Apptentive.DateTime(1.472853954000E9d).toJSONObject(), versionHistory.getTimeAtInstallForVersionCode(versionCode).toJSONObject())); assertTrue(JsonDiffer.areObjectsEqual(new Apptentive.DateTime(1.472853955000E9d).toJSONObject(), versionHistory.getTimeAtInstallForVersionName(versionName).toJSONObject())); }
actual.setNonce("4579c403-e8c5-4e6b-8826-f3d61e6ebb98"); boolean equal = JsonDiffer.areObjectsEqual(expected.getJsonObject(), actual.getJsonObject()); ApptentiveLog.e("Events are equal: %b", equal); assertTrue(equal);
@Test public void commerceExtendedData() throws JSONException { ApptentiveLog.e("testCommerceExtendedData()"); ExtendedData expected = new CommerceExtendedData(loadTextAssetAsString(TEST_DATA_DIR + "testCommerceExtendedData.json")); CommerceExtendedData actual = new CommerceExtendedData() .setId("commerce_id") .setAffiliation("1111111111") .setRevenue(100d) .setShipping(5L) .setTax(4.38f) .setCurrency("USD"); CommerceExtendedData.Item item = new CommerceExtendedData.Item(22222222, "Item Name", "Category", 20, 5.0d, "USD"); actual.addItem(item); assertTrue(JsonDiffer.areObjectsEqual(expected.toJsonObject(), actual.toJsonObject())); }