示例#1
0
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;
}