19declare(strict_types=1);
24require_once(__DIR__ .
"/../../../../../../vendor/composer/vendor/autoload.php");
48 foreach (
$data[$node_id] as $subnode_id) {
49 $subnodes[] = $this->
build($data, $subnode_id);
51 return (
new NodeMock($node_id))->setSubnodes($subnodes);
57 'top' => [
'1.2',
'1.1'],
59 '1.2' => [
'1.2.1',
'1.2.2'],
60 '1.2.1' => [
'1.2.1.1'],
71 $this->assertEquals($n->getId(),
'top');
72 $this->assertInstanceOf(Node::class, $n->getSubnode(
'1.1'));
75 [
'top',
'1.2',
'1.2.2'],
76 $n->getSubnode(
'1.2')->getSubnode(
'1.2.2')->getPath()
80 [
'top',
'1.2',
'1.2.1'],
81 $n->findSubnodePath(
'1.2.1')
87 $zipper =
new Zipper($this->topnode);
88 $this->assertInstanceOf(Zipper::class, $zipper->toChild(
'1.1'));
89 $this->assertInstanceOf(
91 $zipper->toPath($this->topnode->findSubnodePath(
'1.2.1'))->toParent()
93 $this->assertInstanceOf(
95 $zipper->toPath($this->topnode->findSubnodePath(
'1.2.1'))->getRoot()
101 $zipper =
new Zipper($this->topnode);
103 $path = $this->topnode->findSubnodePath(
'1.2.1');
105 ->toPath(
$path)->modifyFocus(fn($n) => $n->withScore(7))
106 ->toParent()->modifyFocus(fn($n) => $n->withScore(6))
109 $zipper =
new Zipper($modified);
110 $other_path = $this->topnode->findSubnodePath(
'1.1');
112 ->toPath($other_path)->modifyFocus(fn($n) => $n->withScore(8))
114 $this->assertEquals(7, $modified->getSubnode(
'1.2')->getSubnode(
'1.2.1')->getScore());
115 $this->assertEquals(6, $modified->getSubnode(
'1.2')->getScore());
116 $this->assertEquals(8, $modified->getSubnode(
'1.1')->getScore());
119 $zipper =
new Zipper($modified);
121 ->toPath(
$path)->modifyFocus(fn($n) => $n->withScore(17))
123 $this->assertEquals(17, $modified->getSubnode(
'1.2')->getSubnode(
'1.2.1')->getScore());
124 $this->assertEquals(6, $modified->getSubnode(
'1.2')->getScore());
125 $this->assertEquals(8, $modified->getSubnode(
'1.1')->getScore());
130 $zipper =
new Zipper($this->topnode);
132 ->modifyAll(fn($n) => $n->withScore(count($n->getSubnodes())))
135 $this->assertEquals(2, $modified->getScore());
136 $this->assertEquals(0, $modified->getSubnode(
'1.1')->getScore());
137 $this->assertEquals(2, $modified->getSubnode(
'1.2')->getScore());
138 $this->assertEquals(1, $modified->getSubnode(
'1.2')->getSubnode(
'1.2.1')->getScore());
139 $this->assertEquals(0, $modified->getSubnode(
'1.2')->getSubnode(
'1.2.1')->getSubnode(
'1.2.1.1')->getScore());
140 $this->assertEquals(0, $modified->getSubnode(
'1.2')->getSubnode(
'1.2.2')->getScore());
build(array $data, $node_id)
testPGSTreeZipperManipulation()
testPGSTreeZipperManipulateAll()