/** @test */ public function visitorCorrectlyCreatesLeftRightEnumerationOnTree() { $node1 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('1', 0, 0, 1, '1'); $node2 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('2', 0, 0, 1, '2'); $node3 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('3', 0, 0, 1, '3'); $node4 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('4', 0, 0, 1, '4'); $node5 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('5', 0, 0, 1, '5'); $node6 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('6', 0, 0, 1, '6'); $node1->addChild($node2); $node2->setParent($node1); $node1->addChild($node5); $node5->setParent($node1); $node2->addChild($node3); $node3->setParent($node2); $node2->addChild($node4); $node4->setParent($node2); $node5->addChild($node6); $node6->setParent($node5); $tree = Tx_PtExtbase_Tree_Tree::getInstanceByRootNode($node1); $visitor = new Tx_PtExtbase_Tree_NestedSetVisitor(); $treeWalker = new Tx_PtExtbase_Tree_TreeWalker(array($visitor)); $treeWalker->traverseTreeDfs($tree); $this->assertEquals($node1->getLft(), 1); $this->assertEquals($node1->getRgt(), 12); $this->assertEquals($node2->getLft(), 2); $this->assertEquals($node2->getRgt(), 7); $this->assertEquals($node3->getLft(), 3); $this->assertEquals($node3->getRgt(), 4); $this->assertEquals($node4->getLft(), 5); $this->assertEquals($node4->getRgt(), 6); $this->assertEquals($node5->getLft(), 8); $this->assertEquals($node5->getRgt(), 11); $this->assertEquals($node6->getLft(), 9); $this->assertEquals($node6->getRgt(), 10); }
/** * @return Tx_PtExtbase_Tree_Tree */ protected function createTestTree() { $tree = Tx_PtExtbase_Tree_Tree::getEmptyTree('root'); $rootNode = $tree->getRoot(); $firstNode = new Tx_PtExtbase_Tree_Node('firstNode'); $secondNode = new Tx_PtExtbase_Tree_Node('secondNode'); $firstChildOfSecondNode = new Tx_PtExtbase_Tree_Node('firstChildOfSecondNode'); $secondNode->addChild($firstChildOfSecondNode); $rootNode->addChild($firstNode); $rootNode->addChild($secondNode); return $tree; }
/** * Get a list of subtree Uids * * @param $nodeUid * @return array */ protected function getSubTreeUIDs($nodeUid) { $subtreeNodeIdArray = array(); $treeNode = $this->tree->getNodeByUid($nodeUid); if ($treeNode instanceof Tx_PtExtbase_Tree_Node) { $subTreeNodes = $treeNode->getSubNodes(); $subtreeNodeIdArray = array(); foreach ($subTreeNodes as $subTreeNode) { /** @var Tx_PtExtbase_Tree_Node $subTreeNode */ $subtreeNodeIdArray[] = $subTreeNode->getUid(); } } else { $subtreeNodeIdArray[] = -1; } return $subtreeNodeIdArray; }
/** * @param integer $nodeUid * @return array|null */ protected function buildPathFromNodeToRoot($nodeUid) { if (!array_key_exists($nodeUid, $this->nodePathCache)) { $node = $this->tree->getNodeByUid($nodeUid); $pathFromNodeToRoot = array(); if ($node instanceof Tx_PtExtbase_Tree_Node) { $pathFromNodeToRoot[] = $node; while ($node != $this->tree->getRoot()) { $node = $node->getParent(); $pathFromNodeToRoot[] = $node; } $this->nodePathCache[$nodeUid] = $pathFromNodeToRoot; } else { $this->nodePathCache[$nodeUid] = null; } } return $this->nodePathCache[$nodeUid]; }
/** * @return Tx_PtExtbase_Tree_Tree */ protected function getTestTree() { $node1 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('1', 0, 0, 1, '1'); $node2 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('2', 0, 0, 1, '2'); $node3 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('3', 0, 0, 1, '3'); $node4 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('4', 0, 0, 1, '4'); $node5 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('5', 0, 0, 1, '5'); $node6 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('6', 0, 0, 1, '6'); $node1->addChild($node2); $node2->setParent($node1); $node1->addChild($node5); $node5->setParent($node1); $node2->addChild($node3); $node3->setParent($node2); $node2->addChild($node4); $node4->setParent($node2); $node5->addChild($node6); $node6->setParent($node5); $tree = Tx_PtExtbase_Tree_Tree::getInstanceByRootNode($node1); return $tree; }
/** * Builds a tree for given namespace. * * If there are no nodes for given namespace, a new, empty tree with a single root node will be returned. * * @param $namespace * @return Tx_PtExtbase_Tree_Tree * @throws Exception */ public function buildTreeForNamespace($namespace) { $nodes = $this->nodeRepository->findByNamespace($namespace); // We have no nodes for given namespace, so we return empty tree with single root node if ($nodes->count() == 0) { return $this->getEmptyTree($namespace); } $stack = new Tx_PtExtbase_Tree_Stack(); $prevLft = PHP_INT_MAX; foreach ($nodes as $node) { /* @var $node Tx_PtExtbase_Tree_Node */ /* Assertion: Nodes must be given in descending left-value order. */ if ($node->getLft() > $prevLft) { throw new Exception('Nodes must be given in descending left-value order', 1307861852); } $prevLft = $node->getLft(); #echo "<br><br>Knoten: " . $node->toString(); if ($stack->isEmpty() || $stack->top()->getRgt() > $node->getRgt()) { $stack->push($node); #echo "Pushed on stack:" . $stack->toString(); } else { #echo "Adding children:"; while (!$stack->isEmpty() && $stack->top()->getRgt() < $node->getRgt()) { #echo "In while - current node " . $node->toString() . " current topStack: " . $stack->top()->toString(); $stack->top()->setParent($node, false); $node->addChild($stack->top(), false); $stack->pop(); #echo "After while-iteration: ". $stack->toString(); } $stack->push($node); #echo "After pushing after while: <ul>" . $stack->toString() . "</ul>"; } } $tree = Tx_PtExtbase_Tree_Tree::getInstanceByRootNode($stack->top()); $tree->setRestrictedDepth($this->restrictedDepth); $tree->setRespectRestrictedDepth($this->respectRestrictedDepth); #echo "Finished tree: " . $tree->toString(); return $tree; }
/** @test */ public function setAndGetNamespaceReturnsSetNamespace() { $tree = new Tx_PtExtbase_Tree_Tree(); $tree->setNamespace('myTestNamespace'); $this->assertEquals('myTestNamespace', $tree->getNamespace()); }