Skip to content

Commit 7088fe9

Browse files
committed
Unit tests for CheckableItems
1 parent bc0bdf7 commit 7088fe9

File tree

3 files changed

+194
-0
lines changed

3 files changed

+194
-0
lines changed

test/Builder/CliMenuBuilderTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use PhpSchool\CliMenu\CliMenu;
66
use PhpSchool\CliMenu\Builder\CliMenuBuilder;
77
use PhpSchool\CliMenu\MenuItem\AsciiArtItem;
8+
use PhpSchool\CliMenu\MenuItem\CheckableItem;
89
use PhpSchool\CliMenu\MenuItem\LineBreakItem;
910
use PhpSchool\CliMenu\MenuItem\MenuMenuItem;
1011
use PhpSchool\CliMenu\MenuItem\SelectableItem;
@@ -64,6 +65,8 @@ public function testModifyStyles() : void
6465
$builder->setMargin(4);
6566
$builder->setUnselectedMarker('>');
6667
$builder->setSelectedMarker('x');
68+
$builder->setUncheckedMarker('-');
69+
$builder->setCheckedMarker('+');
6770
$builder->setItemExtra('*');
6871
$builder->setTitleSeparator('-');
6972

@@ -78,6 +81,8 @@ public function testModifyStyles() : void
7881
self::assertEquals(4, $style->getMargin());
7982
self::assertEquals('>', $style->getUnselectedMarker());
8083
self::assertEquals('x', $style->getSelectedMarker());
84+
self::assertEquals('-', $style->getUncheckedMarker());
85+
self::assertEquals('+', $style->getCheckedMarker());
8186
self::assertEquals('*', $style->getItemExtra());
8287
self::assertEquals('-', $style->getTitleSeparator());
8388
}
@@ -364,6 +369,31 @@ public function testAddMultipleItems() : void
364369
$this->checkMenuItems($menu, $expected);
365370
}
366371

372+
public function testAddCheckableItem() : void
373+
{
374+
$callable = function () {
375+
};
376+
377+
$builder = new CliMenuBuilder;
378+
$builder->disableDefaultItems();
379+
$builder->addCheckableItem('Item 1', $callable);
380+
$builder->addCheckableItem('Item 2', $callable);
381+
$menu = $builder->build();
382+
383+
$expected = [
384+
[
385+
'class' => CheckableItem::class,
386+
'text' => 'Item 1',
387+
],
388+
[
389+
'class' => CheckableItem::class,
390+
'text' => 'Item 2',
391+
],
392+
];
393+
394+
$this->checkMenuItems($menu, $expected);
395+
}
396+
367397
public function testAddStaticItem() : void
368398
{
369399

test/MenuItem/CheckableItemTest.php

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
<?php
2+
3+
namespace PhpSchool\CliMenuTest\MenuItem;
4+
5+
use PhpSchool\CliMenu\MenuItem\CheckableItem;
6+
use PhpSchool\CliMenu\MenuStyle;
7+
use PhpSchool\Terminal\Terminal;
8+
use PHPUnit\Framework\TestCase;
9+
10+
class CheckableItemTest extends TestCase
11+
{
12+
public function testCanSelectIsTrue() : void
13+
{
14+
$item = new CheckableItem('Item', function () {
15+
});
16+
$this->assertTrue($item->canSelect());
17+
}
18+
19+
public function testGetSelectAction() : void
20+
{
21+
$callable = function () {
22+
};
23+
$item = new CheckableItem('Item', $callable);
24+
$this->assertSame($callable, $item->getSelectAction());
25+
}
26+
27+
public function testShowsItemExtra() : void
28+
{
29+
$item = new CheckableItem('Item', function () {
30+
});
31+
$this->assertFalse($item->showsItemExtra());
32+
33+
$item = new CheckableItem('Item', function () {
34+
}, true);
35+
$this->assertTrue($item->showsItemExtra());
36+
}
37+
38+
public function testGetText() : void
39+
{
40+
$item = new CheckableItem('Item', function () {
41+
});
42+
$this->assertEquals('Item', $item->getText());
43+
}
44+
45+
public function testGetRows() : void
46+
{
47+
$terminal = $this->createMock(Terminal::class);
48+
$terminal->expects($this->any())->method('getWidth')->willReturn(100);
49+
50+
$menuStyle = new MenuStyle($terminal);
51+
$menuStyle->setPaddingLeftRight(0);
52+
$menuStyle->setWidth(8);
53+
54+
$item = new CheckableItem('Item', function () {
55+
});
56+
57+
$itemChecked = new CheckableItem('Item', function () {
58+
});
59+
$itemChecked->toggle();
60+
$this->assertEquals(['[ ] Item'], $item->getRows($menuStyle));
61+
$this->assertEquals(['[ ] Item'], $item->getRows($menuStyle, false));
62+
$this->assertEquals(['[✔] Item'], $itemChecked->getRows($menuStyle, true));
63+
}
64+
65+
public function testSetText() : void
66+
{
67+
$terminal = $this->createMock(Terminal::class);
68+
$terminal->expects($this->any())->method('getWidth')->willReturn(100);
69+
70+
$menuStyle = new MenuStyle($terminal);
71+
$menuStyle->setPaddingLeftRight(0);
72+
$menuStyle->setWidth(12);
73+
74+
$item = new CheckableItem('Item', function () {
75+
});
76+
$item->setText('New Text');
77+
78+
$itemChecked = new CheckableItem('Item', function () {
79+
});
80+
$itemChecked->setText('New Text');
81+
$itemChecked->toggle();
82+
$this->assertEquals(['[ ] New Text'], $item->getRows($menuStyle));
83+
$this->assertEquals(['[ ] New Text'], $item->getRows($menuStyle, false));
84+
$this->assertEquals(['[✔] New Text'], $itemChecked->getRows($menuStyle, true));
85+
}
86+
87+
public function testTogglesMarker() : void
88+
{
89+
$terminal = $this->createMock(Terminal::class);
90+
$terminal->expects($this->any())->method('getWidth')->willReturn(100);
91+
92+
$menuStyle = new MenuStyle($terminal);
93+
$menuStyle->setPaddingLeftRight(0);
94+
$menuStyle->setWidth(12);
95+
96+
$item = new CheckableItem('Item', function () {
97+
});
98+
99+
$itemChecked = new CheckableItem('Item', function () {
100+
});
101+
$itemChecked->toggle();
102+
$this->assertEquals(['[ ] Item'], $item->getRows($menuStyle));
103+
$this->assertEquals(['[ ] Item'], $item->getRows($menuStyle, false));
104+
$this->assertEquals(['[✔] Item'], $itemChecked->getRows($menuStyle, true));
105+
106+
$itemChecked->toggle();
107+
108+
$this->assertEquals(['[ ] Item'], $itemChecked->getRows($menuStyle, true));
109+
}
110+
111+
public function testGetRowsWithItemExtra() : void
112+
{
113+
$terminal = $this->createMock(Terminal::class);
114+
$terminal->expects($this->any())->method('getWidth')->willReturn(100);
115+
116+
$menuStyle = new MenuStyle($terminal);
117+
$menuStyle->setPaddingLeftRight(0);
118+
$menuStyle->setWidth(20);
119+
$menuStyle->setItemExtra('[EXTRA]');
120+
$menuStyle->setDisplaysExtra(true);
121+
122+
$item = new CheckableItem('Item', function () {
123+
}, true);
124+
$this->assertEquals(['[ ] Item [EXTRA]'], $item->getRows($menuStyle));
125+
}
126+
127+
public function testGetRowsWithMultipleLinesWithItemExtra() : void
128+
{
129+
$terminal = $this->createMock(Terminal::class);
130+
$terminal->expects($this->any())->method('getWidth')->willReturn(100);
131+
132+
$menuStyle = new MenuStyle($terminal);
133+
$menuStyle->setPaddingLeftRight(0);
134+
$menuStyle->setWidth(20);
135+
$menuStyle->setItemExtra('[EXTRA]');
136+
$menuStyle->setDisplaysExtra(true);
137+
138+
$item = new CheckableItem('LONG ITEM LINE', function () {
139+
}, true);
140+
$this->assertEquals(
141+
[
142+
"[ ] LONG [EXTRA]",
143+
" ITEM LINE",
144+
],
145+
$item->getRows($menuStyle)
146+
);
147+
}
148+
149+
public function testHideAndShowItemExtra() : void
150+
{
151+
$item = new CheckableItem('Item', function () {
152+
});
153+
154+
$this->assertFalse($item->showsItemExtra());
155+
$item->showItemExtra();
156+
$this->assertTrue($item->showsItemExtra());
157+
$item->hideItemExtra();
158+
$this->assertFalse($item->showsItemExtra());
159+
}
160+
}

test/MenuStyleTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ public function testGetterAndSetters() : void
100100
$style->setFg('yellow');
101101
$style->setUnselectedMarker('-');
102102
$style->setSelectedMarker('>');
103+
$style->setUncheckedMarker('/');
104+
$style->setCheckedMarker('+');
103105
$style->setItemExtra('EXTRA!');
104106
$style->setDisplaysExtra(true);
105107
$style->setTitleSeparator('+');
@@ -117,6 +119,8 @@ public function testGetterAndSetters() : void
117119
self::assertSame('yellow', $style->getFg());
118120
self::assertSame('-', $style->getUnselectedMarker());
119121
self::assertSame('>', $style->getSelectedMarker());
122+
self::assertEquals('/', $style->getUncheckedMarker());
123+
self::assertEquals('+', $style->getCheckedMarker());
120124
self::assertSame('EXTRA!', $style->getItemExtra());
121125
self::assertTrue($style->getDisplaysExtra());
122126
self::assertSame('+', $style->getTitleSeparator());

0 commit comments

Comments
 (0)