public function testApplyCallback() { $initialized = []; $callback = function (Node $node) use(&$initialized) { $initialized[] = $node; }; Utils::applyCallback($callback, $this->root); // no duplicate calls, 1 call per node self::assertTrue(count($initialized) === 3); self::assertTrue(in_array($this->root, $initialized, true)); self::assertTrue(in_array($this->attCh, $initialized, true)); self::assertTrue(in_array($this->attChL2, $initialized, true)); self::assertFalse(in_array($this->ch, $initialized, true)); // Check init of nodes added later $this->attChL2->addChild($this->ch); self::assertTrue(count($initialized) === 6); // change tree structure $this->attChL2->detach(); $this->attChL2->attachTo($this->root); // changing tree structure must not provoke duplicate init self::assertTrue(count($initialized) === 6); // assert that init works for already initialized nodes that was detached & attached again $this->ch->detach(); $newNode = new Node($this->chL2); $this->ch->attachTo($this->attChL2); self::assertTrue(count($initialized) === 7); self::assertTrue(in_array($newNode, $initialized, true)); $newNode->detach(); // 6 new nodes instead of 7 must be added $callback2 = function (Node $node) use(&$initialized) { $initialized[] = $node; }; Utils::applyCallback($callback2, $this->root); self::assertTrue(count($initialized) === 13); }
/** * @param Compound $root * @param bool $prepend */ public function attachToCompound(Compound $root, $prepend = false) { parent::attachToCompound($root, $prepend); // try to update pagination immediately // because it can be rendered before this component. $this->paginationControl || Utils::applyCallback(function (PaginationControl $pagination) { $this->paginationControl || $this->setPaginationControl($pagination); }, $root, PaginationControl::class); }