/** * Test traverse, deep save, deep destroy */ public function testObjectTraverseACycle() { $a = new LeanObject("TestObject"); $b = new LeanObject("TestObject"); $c = new LeanObject("TestObject"); $a->set("likes", array($b, "foo")); $b->set("likes", array($c, 42)); $c->set("likes", $a); $objects = array(); // collected objects $seen = array(); LeanObject::traverse($a, $seen, function ($val) use(&$objects) { if ($val instanceof LeanObject) { $objects[] = $val; } }); $this->assertEquals(3, count($seen)); $this->assertEquals(3, count($objects)); // now start from $c $objects = array(); // collected objects $seen = array(); LeanObject::traverse($c, $seen, function ($val) use(&$objects) { if ($val instanceof LeanObject) { $objects[] = $val; } }); $this->assertEquals(3, count($seen)); $this->assertEquals(3, count($objects)); }