public function testTraversePaths()
{
R::nuke();
$pageA = R::dispense('page')->setAttr('title', 'a');
$pageB = R::dispense('page')->setAttr('title', 'b');
$pageC = R::dispense('page')->setAttr('title', 'c');
$pageD = R::dispense('page')->setAttr('title', 'd');
$pageE = R::dispense('page')->setAttr('title', 'e');
$pageF = R::dispense('page')->setAttr('title', 'f');
$pageG = R::dispense('page')->setAttr('title', 'g');
$pageH = R::dispense('page')->setAttr('title', 'h');
$pageA->ownPage = array($pageB, $pageC);
$pageB->ownPage = array($pageD);
$pageC->ownPage = array($pageE, $pageF);
$pageD->ownPage = array($pageG);
$pageF->ownPage = array($pageH);
R::store($pageA);
$parents = array();
$pageF->traverse('page', function ($page) use(&$parents) {
$parents[] = $page->title;
});
asrt(implode(',', $parents), 'c,a');
$parents = array();
$pageH->traverse('page', function ($page) use(&$parents) {
$parents[] = $page->title;
});
asrt(implode(',', $parents), 'f,c,a');
$parents = array();
$pageG->traverse('page', function ($page) use(&$parents) {
$parents[] = $page->title;
});
asrt(implode(',', $parents), 'd,b,a');
$path = array();
$pageA->traverse('ownPageList', function ($page) use(&$path) {
$path[] = $page->title;
});
asrt(implode(',', $path), 'b,d,g,c,e,f,h');
$path = array();
$pageC->traverse('ownPageList', function ($page) use(&$path) {
$path[] = $page->title;
});
asrt(implode(',', $path), 'e,f,h');
$path = array();
$pageA->traverse('ownPageList', function ($page) use(&$path) {
$path[] = $page->title;
}, 2);
asrt(implode(',', $path), 'b,d,c,e,f');
}