/** * @param TreeObject $subTree * @param TreeObject $value * @param TreeObject $ret * @param $key */ private function compareSubTree($subTree, TreeObject $value, &$ret, $key) { if ($subTree instanceof TreeObject) { if ($value->getHash() != $subTree->getHash()) { $ret->setValue($key, $this->diff($subTree, $value)); } } else { $ret->setValue($key, $value); } }
public function testReferenceJsons() { $first = TreeObject::createFrom(new JsonImport('{ "foo":{ "bar":"baz", "biz":"foo" }, "fiz":{ "foo":"baz" }, "bar":"baz", "baz":[ "foo", "bar" ] }')); $second = TreeObject::createFrom(new JsonImport('{ "foo":{ "bar":"baz1", "biz":"foo" }, "fiz":{ "foo":"baz" }, "bar":"baz", "baz":[ "foo1" ] }')); $diff = $this->comparator->diff($first, $second); $this->assertEquals('{"foo":{"bar":"baz1"},"baz":["foo1"]}', $diff->exportWith(new JsonExport())); }
public function testSubTreeCreation() { $arr = ["a" => 1, "b" => ["c" => 2], "c" => ["c" => 2]]; $tree = Tree::createFrom(new Provider($arr)); $this->assertTrue($tree->keyExists("a")); $this->assertTrue($tree->keyExists("b")); $this->assertTrue($tree->keyExists("c")); $this->assertTrue($tree->getKey("c")->keyExists("c")); $this->assertEquals(2, $tree->getKey("c")->getKey("c")); $this->assertEquals($tree->getKey("b")->getHash(), $tree->getKey("c")->getHash()); $this->assertEquals($arr, $tree->exportWith($this->exporter)); }
public function testChangedObjectInSubTree() { $first = TreeObject::createFrom(new Provider(["a" => 1, "b" => ["c" => 2, "d" => 3]])); $second = TreeObject::createFrom(new Provider(["a" => 1, "b" => ["c" => 2, "d" => ["e" => 4]]])); $this->assertEquals(["b" => ["d" => ["e" => 4]]], $this->comparator->diff($first, $second)->exportWith($this->exporter)); }
<?php /** * Created by PhpStorm. * User: alexk * Date: 2/2/16 * Time: 9:58 PM */ chdir(dirname(__DIR__)); require_once "vendor" . DIRECTORY_SEPARATOR . "autoload.php"; use JsonDiff\ValueObject\Tree\Tree as TreeObject; use JsonDiff\DataProvider\Json\Import as JsonProvider; use JsonDiff\Comparator\Diff\Tree\Tree as Comparator; use JsonDiff\DataProvider\Json\Export as JsonExporter; $first = TreeObject::createFrom(new JsonProvider('{ "foo":{ "bar":"baz", "biz":"foo" }, "fiz":{ "foo":"baz" }, "bar":"baz", "baz":[ "foo", "bar" ] }')); $second = TreeObject::createFrom(new JsonProvider('{ "foo":{ "bar":"baz1", "biz":"foo" }, "fiz":{ "foo":"baz" }, "bar":"baz", "baz":[ "foo1" ] }')); $comparator = new Comparator(); $diff = $comparator->diff($first, $second); $jsonExporter = new JsonExporter(); echo $first->exportWith($jsonExporter), PHP_EOL; echo $second->exportWith($jsonExporter), PHP_EOL; echo $diff->exportWith($jsonExporter), PHP_EOL;