19 declare(strict_types=1);
24 require_once(__DIR__ .
"/../../../../../../vendor/composer/vendor/autoload.php");
48 foreach ($data[$node_id] as $subnode_id) {
49 $subnodes[] = $this->build($data, $subnode_id);
57 'top' => [
'1.2',
'1.1'],
59 '1.2' => [
'1.2.1',
'1.2.2'],
60 '1.2.1' => [
'1.2.1.1'],
65 $this->topnode = $this->build(
$data,
'top');
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());
testPGSTreeZipperManipulateAll()
build(array $data, $node_id)
testPGSTreeZipperManipulation()