Skip to content

Commit 061c36f

Browse files
committed
SplitItemBuilder tests
1 parent 0df89c3 commit 061c36f

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed

test/Builder/SplitItemBuilderTest.php

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
<?php
2+
3+
namespace PhpSchool\CliMenuTest\Builder;
4+
5+
use PhpSchool\CliMenu\Builder\SplitItemBuilder;
6+
use PhpSchool\CliMenu\CliMenu;
7+
use PhpSchool\CliMenu\MenuItem\MenuMenuItem;
8+
use PhpSchool\CliMenu\MenuItem\SelectableItem;
9+
use PhpSchool\CliMenu\MenuItem\SplitItem;
10+
use PhpSchool\CliMenu\MenuItem\StaticItem;
11+
use PHPUnit\Framework\TestCase;
12+
13+
class SplitItemBuilderTest extends TestCase
14+
{
15+
public function testAddItem() : void
16+
{
17+
$callable = function () {
18+
};
19+
20+
$menu = new CliMenu(null, []);
21+
$builder = new SplitItemBuilder($menu);
22+
$builder->addItem('Item 1', $callable);
23+
$builder->addItem('Item 2', $callable);
24+
$item = $builder->build();
25+
26+
$expected = [
27+
[
28+
'class' => SelectableItem::class,
29+
'text' => 'Item 1',
30+
],
31+
[
32+
'class' => SelectableItem::class,
33+
'text' => 'Item 2',
34+
],
35+
];
36+
37+
$this->checkItems($item, $expected);
38+
}
39+
40+
public function testAddStaticItem() : void
41+
{
42+
43+
$menu = new CliMenu(null, []);
44+
$builder = new SplitItemBuilder($menu);
45+
$builder->addStaticItem('Static Item 1');
46+
$item = $builder->build();
47+
48+
$expected = [
49+
[
50+
'class' => StaticItem::class,
51+
'text' => 'Static Item 1',
52+
]
53+
];
54+
55+
$this->checkItems($item, $expected);
56+
}
57+
58+
public function testAddSubMenu() : void
59+
{
60+
$menu = new CliMenu(null, []);
61+
$builder = new SplitItemBuilder($menu);
62+
$builder->addSubMenu('My SubMenu', function () {
63+
});
64+
65+
$item = $builder->build();
66+
67+
$this->checkItems($item, [
68+
[
69+
'class' => MenuMenuItem::class
70+
]
71+
]);
72+
}
73+
74+
public function testAddSubMenuUsesTextParameterAsMenuItemText() : void
75+
{
76+
$menu = new CliMenu(null, []);
77+
$builder = new SplitItemBuilder($menu);
78+
$builder->addSubMenu('My SubMenu', function () {
79+
});
80+
81+
$item = $builder->build();
82+
83+
self::assertEquals('My SubMenu', $item->getItems()[0]->getText());
84+
}
85+
86+
public function testSetGutter() : void
87+
{
88+
$menu = new CliMenu(null, []);
89+
$builder = new SplitItemBuilder($menu);
90+
$builder->setGutter(4);
91+
92+
$item = $builder->build();
93+
self::assertEquals(4, self::readAttribute($item, 'gutter'));
94+
}
95+
96+
private function checkItems(SplitItem $item, array $expected) : void
97+
{
98+
$actualItems = $this->readAttribute($item, 'items');
99+
self::assertCount(count($expected), $actualItems);
100+
101+
foreach ($expected as $expectedItem) {
102+
$actualItem = array_shift($actualItems);
103+
104+
self::assertInstanceOf($expectedItem['class'], $actualItem);
105+
unset($expectedItem['class']);
106+
107+
foreach ($expectedItem as $property => $value) {
108+
self::assertEquals($this->readAttribute($actualItem, $property), $value);
109+
}
110+
}
111+
}
112+
}

0 commit comments

Comments
 (0)