function diff_test($test) { // Skip comment-only or test op tests if (!(isset($test['doc']) && isset($test['expected']))) { return true; } $result = true; try { $doc1 = $test['doc']; // copy, in case sort/patch alters $doc2 = $test['expected']; $patch = JsonPatch::diff($doc1, $doc2); $patched = JsonPatch::patch($doc1, $patch); if (!JsonPatch::considered_equal($patched, $doc2)) { print "diff test failed:\n"; print_test($test); print "from: " . json_encode($doc1) . "\n"; print "diff: " . json_encode($patch) . "\n"; print "found: " . json_encode($patched) . "\n"; print "expected: " . json_encode($doc2) . "\n\n"; $result = false; } // reverse order $doc1 = $test['expected']; // copy, in case sort/patch alters $doc2 = $test['doc']; $patch = JsonPatch::diff($doc1, $doc2); $patched = JsonPatch::patch($doc1, $patch); if (!JsonPatch::considered_equal($patched, $doc2)) { print "reverse diff test failed:\n"; print_test($test); print "from: " . json_encode($doc1) . "\n"; print "diff: " . json_encode($patch) . "\n"; print "found: " . json_encode($patched) . "\n"; print "expected: " . json_encode($doc2) . "\n\n"; $result = false; } } catch (Exception $ex) { print "caught exception " . $ex->getMessage() . "\n"; return false; } return $result; }