Skip to content

Commit d80c749

Browse files
authored
Merge pull request #183 from php-school/php-7.4
Php 7.4 support
2 parents 9b16a29 + 42ab4a8 commit d80c749

17 files changed

+166
-116
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
vendor/
22
.idea
33
/composer.lock
4+
/.phpunit.result.cache

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ cache:
55
- $HOME/.composer/cache/files
66

77
php:
8-
- 7.1
98
- 7.2
109
- 7.3
10+
- 7.4
1111

1212
install:
1313
- composer self-update

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
}
1515
],
1616
"require-dev": {
17-
"phpunit/phpunit": "^7.1",
17+
"phpunit/phpunit": "^8.0",
1818
"squizlabs/php_codesniffer": "^3.2",
1919
"phpstan/phpstan": "^0.11"
2020
},

src/CliMenu.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ public function setTitle(string $title) : void
132132
$this->title = $title;
133133
}
134134

135+
public function getTitle() : ?string
136+
{
137+
return $this->title;
138+
}
139+
135140
public function setParent(CliMenu $parent) : void
136141
{
137142
$this->parent = $parent;
@@ -228,6 +233,11 @@ public function addCustomControlMapping(string $input, callable $callable) : voi
228233
$this->customControlMappings[$input] = $callable;
229234
}
230235

236+
public function getCustomControlMappings() : array
237+
{
238+
return $this->customControlMappings;
239+
}
240+
231241
/**
232242
* Shorthand function to add multiple custom control mapping at once
233243
*/

src/MenuItem/AsciiArtItem.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,16 @@ public function getArtLength() : int
128128
return $this->artLength;
129129
}
130130

131+
public function getPosition() : string
132+
{
133+
return $this->position;
134+
}
135+
136+
public function getAlternateText() : string
137+
{
138+
return $this->alternateText;
139+
}
140+
131141
/**
132142
* Whether or not the menu item is showing the menustyle extra value
133143
*/

src/MenuItem/LineBreakItem.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ public function showsItemExtra() : bool
8080
return false;
8181
}
8282

83+
public function getLines() : int
84+
{
85+
return $this->lines;
86+
}
87+
8388
/**
8489
* Enable showing item extra
8590
*/

src/MenuItem/SplitItem.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ public function setGutter(int $gutter) : void
5252
$this->gutter = $gutter;
5353
}
5454

55+
public function getGutter() : int
56+
{
57+
return $this->gutter;
58+
}
59+
5560
public function addItem(MenuItemInterface $item) : self
5661
{
5762
foreach (self::$blacklistedItems as $bl) {

test/Builder/CliMenuBuilderTest.php

Lines changed: 106 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
use PhpSchool\CliMenu\MenuItem\StaticItem;
1212
use PhpSchool\Terminal\Terminal;
1313
use PHPUnit\Framework\TestCase;
14-
use RuntimeException;
1514

1615
/**
1716
* @author Aydin Hassan <[email protected]>
@@ -69,17 +68,18 @@ public function testModifyStyles() : void
6968
$builder->setTitleSeparator('-');
7069

7170
$menu = $builder->build();
71+
$style = $menu->getStyle();
7272

73-
$this->checkStyleVariable($menu, 'bg', 'red');
74-
$this->checkStyleVariable($menu, 'fg', 'red');
75-
$this->checkStyleVariable($menu, 'width', 40);
76-
$this->checkStyleVariable($menu, 'paddingTopBottom', 4);
77-
$this->checkStyleVariable($menu, 'paddingLeftRight', 1);
78-
$this->checkStyleVariable($menu, 'margin', 4);
79-
$this->checkStyleVariable($menu, 'unselectedMarker', '>');
80-
$this->checkStyleVariable($menu, 'selectedMarker', 'x');
81-
$this->checkStyleVariable($menu, 'itemExtra', '*');
82-
$this->checkStyleVariable($menu, 'titleSeparator', '-');
73+
self::assertEquals('red', $style->getBg());
74+
self::assertEquals('red', $style->getFg());
75+
self::assertEquals(40, $style->getWidth());
76+
self::assertEquals(4, $style->getPaddingTopBottom());
77+
self::assertEquals(1, $style->getPaddingLeftRight());
78+
self::assertEquals(4, $style->getMargin());
79+
self::assertEquals('>', $style->getUnselectedMarker());
80+
self::assertEquals('x', $style->getSelectedMarker());
81+
self::assertEquals('*', $style->getItemExtra());
82+
self::assertEquals('-', $style->getTitleSeparator());
8383
}
8484

8585
public function testSetBorderShorthandFunction() : void
@@ -90,85 +90,93 @@ public function testSetBorderShorthandFunction() : void
9090
->method('getWidth')
9191
->will($this->returnValue(200));
9292

93-
$menu = (new CliMenuBuilder($terminal))
93+
$style = (new CliMenuBuilder($terminal))
9494
->setBorder(2)
95-
->build();
96-
97-
$this->checkStyleVariable($menu, 'borderTopWidth', 2);
98-
$this->checkStyleVariable($menu, 'borderRightWidth', 2);
99-
$this->checkStyleVariable($menu, 'borderBottomWidth', 2);
100-
$this->checkStyleVariable($menu, 'borderLeftWidth', 2);
101-
$this->checkStyleVariable($menu, 'borderColour', 'white');
95+
->build()
96+
->getStyle();
10297

103-
$menu = (new CliMenuBuilder($terminal))
98+
self::assertEquals(2, $style->getBorderTopWidth());
99+
self::assertEquals(2, $style->getBorderRightWidth());
100+
self::assertEquals(2, $style->getBorderBottomWidth());
101+
self::assertEquals(2, $style->getBorderLeftWidth());
102+
self::assertEquals('white', $style->getBorderColour());
103+
104+
$style = (new CliMenuBuilder($terminal))
104105
->setBorder(2, 4)
105-
->build();
106-
107-
$this->checkStyleVariable($menu, 'borderTopWidth', 2);
108-
$this->checkStyleVariable($menu, 'borderRightWidth', 4);
109-
$this->checkStyleVariable($menu, 'borderBottomWidth', 2);
110-
$this->checkStyleVariable($menu, 'borderLeftWidth', 4);
111-
$this->checkStyleVariable($menu, 'borderColour', 'white');
106+
->build()
107+
->getStyle();
112108

113-
$menu = (new CliMenuBuilder($terminal))
109+
self::assertEquals(2, $style->getBorderTopWidth());
110+
self::assertEquals(4, $style->getBorderRightWidth());
111+
self::assertEquals(2, $style->getBorderBottomWidth());
112+
self::assertEquals(4, $style->getBorderLeftWidth());
113+
self::assertEquals('white', $style->getBorderColour());
114+
115+
$style = (new CliMenuBuilder($terminal))
114116
->setBorder(2, 4, 6)
115-
->build();
116-
117-
$this->checkStyleVariable($menu, 'borderTopWidth', 2);
118-
$this->checkStyleVariable($menu, 'borderRightWidth', 4);
119-
$this->checkStyleVariable($menu, 'borderBottomWidth', 6);
120-
$this->checkStyleVariable($menu, 'borderLeftWidth', 4);
121-
$this->checkStyleVariable($menu, 'borderColour', 'white');
117+
->build()
118+
->getStyle();
122119

123-
$menu = (new CliMenuBuilder($terminal))
120+
self::assertEquals(2, $style->getBorderTopWidth());
121+
self::assertEquals(4, $style->getBorderRightWidth());
122+
self::assertEquals(6, $style->getBorderBottomWidth());
123+
self::assertEquals(4, $style->getBorderLeftWidth());
124+
self::assertEquals('white', $style->getBorderColour());
125+
126+
$style = (new CliMenuBuilder($terminal))
124127
->setBorder(2, 4, 6, 8)
125-
->build();
126-
127-
$this->checkStyleVariable($menu, 'borderTopWidth', 2);
128-
$this->checkStyleVariable($menu, 'borderRightWidth', 4);
129-
$this->checkStyleVariable($menu, 'borderBottomWidth', 6);
130-
$this->checkStyleVariable($menu, 'borderLeftWidth', 8);
131-
$this->checkStyleVariable($menu, 'borderColour', 'white');
128+
->build()
129+
->getStyle();
132130

133-
$menu = (new CliMenuBuilder($terminal))
131+
self::assertEquals(2, $style->getBorderTopWidth());
132+
self::assertEquals(4, $style->getBorderRightWidth());
133+
self::assertEquals(6, $style->getBorderBottomWidth());
134+
self::assertEquals(8, $style->getBorderLeftWidth());
135+
self::assertEquals('white', $style->getBorderColour());
136+
137+
$style = (new CliMenuBuilder($terminal))
134138
->setBorder(2, 4, 6, 8, 'green')
135-
->build();
136-
137-
$this->checkStyleVariable($menu, 'borderTopWidth', 2);
138-
$this->checkStyleVariable($menu, 'borderRightWidth', 4);
139-
$this->checkStyleVariable($menu, 'borderBottomWidth', 6);
140-
$this->checkStyleVariable($menu, 'borderLeftWidth', 8);
141-
$this->checkStyleVariable($menu, 'borderColour', 'green');
139+
->build()
140+
->getStyle();
142141

143-
$menu = (new CliMenuBuilder($terminal))
142+
self::assertEquals(2, $style->getBorderTopWidth());
143+
self::assertEquals(4, $style->getBorderRightWidth());
144+
self::assertEquals(6, $style->getBorderBottomWidth());
145+
self::assertEquals(8, $style->getBorderLeftWidth());
146+
self::assertEquals('green', $style->getBorderColour());
147+
148+
$style = (new CliMenuBuilder($terminal))
144149
->setBorder(2, 4, 6, 'green')
145-
->build();
146-
147-
$this->checkStyleVariable($menu, 'borderTopWidth', 2);
148-
$this->checkStyleVariable($menu, 'borderRightWidth', 4);
149-
$this->checkStyleVariable($menu, 'borderBottomWidth', 6);
150-
$this->checkStyleVariable($menu, 'borderLeftWidth', 4);
151-
$this->checkStyleVariable($menu, 'borderColour', 'green');
150+
->build()
151+
->getStyle();
152152

153-
$menu = (new CliMenuBuilder($terminal))
153+
self::assertEquals(2, $style->getBorderTopWidth());
154+
self::assertEquals(4, $style->getBorderRightWidth());
155+
self::assertEquals(6, $style->getBorderBottomWidth());
156+
self::assertEquals(4, $style->getBorderLeftWidth());
157+
self::assertEquals('green', $style->getBorderColour());
158+
159+
$style = (new CliMenuBuilder($terminal))
154160
->setBorder(2, 4, 'green')
155-
->build();
156-
157-
$this->checkStyleVariable($menu, 'borderTopWidth', 2);
158-
$this->checkStyleVariable($menu, 'borderRightWidth', 4);
159-
$this->checkStyleVariable($menu, 'borderBottomWidth', 2);
160-
$this->checkStyleVariable($menu, 'borderLeftWidth', 4);
161-
$this->checkStyleVariable($menu, 'borderColour', 'green');
161+
->build()
162+
->getStyle();
162163

163-
$menu = (new CliMenuBuilder($terminal))
164+
self::assertEquals(2, $style->getBorderTopWidth());
165+
self::assertEquals(4, $style->getBorderRightWidth());
166+
self::assertEquals(2, $style->getBorderBottomWidth());
167+
self::assertEquals(4, $style->getBorderLeftWidth());
168+
self::assertEquals('green', $style->getBorderColour());
169+
170+
$style = (new CliMenuBuilder($terminal))
164171
->setBorder(2, 'green')
165-
->build();
166-
167-
$this->checkStyleVariable($menu, 'borderTopWidth', 2);
168-
$this->checkStyleVariable($menu, 'borderRightWidth', 2);
169-
$this->checkStyleVariable($menu, 'borderBottomWidth', 2);
170-
$this->checkStyleVariable($menu, 'borderLeftWidth', 2);
171-
$this->checkStyleVariable($menu, 'borderColour', 'green');
172+
->build()
173+
->getStyle();
174+
175+
self::assertEquals(2, $style->getBorderTopWidth());
176+
self::assertEquals(2, $style->getBorderRightWidth());
177+
self::assertEquals(2, $style->getBorderBottomWidth());
178+
self::assertEquals(2, $style->getBorderLeftWidth());
179+
self::assertEquals('green', $style->getBorderColour());
172180
}
173181

174182
public function testSetBorderTopWidth() : void
@@ -232,10 +240,11 @@ public function test256ColoursCodes() : void
232240
$builder = new CliMenuBuilder($terminal);
233241
$builder->setBackgroundColour(16, 'white');
234242
$builder->setForegroundColour(206, 'red');
235-
$menu = $builder->build();
243+
$style = $builder->build()
244+
->getStyle();
236245

237-
$this->checkStyleVariable($menu, 'bg', 16);
238-
$this->checkStyleVariable($menu, 'fg', 206);
246+
self::assertEquals(16, $style->getBg());
247+
self::assertEquals(206, $style->getFg());
239248

240249
$terminal = static::createMock(Terminal::class);
241250
$terminal
@@ -246,10 +255,11 @@ public function test256ColoursCodes() : void
246255
$builder = new CliMenuBuilder($terminal);
247256
$builder->setBackgroundColour(16, 'white');
248257
$builder->setForegroundColour(206, 'red');
249-
$menu = $builder->build();
258+
$style = $builder->build()
259+
->getStyle();
250260

251-
$this->checkStyleVariable($menu, 'bg', 'white');
252-
$this->checkStyleVariable($menu, 'fg', 'red');
261+
self::assertEquals('white', $style->getBg());
262+
self::assertEquals('red', $style->getFg());
253263
}
254264

255265
public function testSetFgThrowsExceptionWhenColourCodeIsNotInRange() : void
@@ -288,8 +298,8 @@ public function testDisableDefaultItems() : void
288298
$builder->disableDefaultItems();
289299

290300
$menu = $builder->build();
291-
292-
$this->checkVariable($menu, 'items', []);
301+
302+
self::assertEquals([], $menu->getItems());
293303
}
294304

295305
public function testSetTitle() : void
@@ -299,7 +309,7 @@ public function testSetTitle() : void
299309

300310
$menu = $builder->build();
301311

302-
$this->checkVariable($menu, 'title', 'title');
312+
self::assertEquals('title', $menu->getTitle());
303313
}
304314

305315
public function testAddItem() : void
@@ -782,11 +792,15 @@ public function testAddSplitItemWithClosureBinding() : void
782792

783793
private function checkMenuItems(CliMenu $menu, array $expected) : void
784794
{
785-
$this->checkItems($this->readAttribute($menu, 'items'), $expected);
795+
$this->checkItems($menu->getItems(), $expected);
786796
}
787797

788798
private function checkItems(array $actualItems, array $expected) : void
789799
{
800+
$propMap = [
801+
'breakChar' => 'getText',
802+
];
803+
790804
self::assertCount(count($expected), $actualItems);
791805

792806
foreach ($expected as $expectedItem) {
@@ -796,21 +810,14 @@ private function checkItems(array $actualItems, array $expected) : void
796810
unset($expectedItem['class']);
797811

798812
foreach ($expectedItem as $property => $value) {
799-
self::assertEquals($this->readAttribute($actualItem, $property), $value);
813+
if (isset($propMap[$property])) {
814+
$getter = $propMap[$property];
815+
} else {
816+
$getter = 'get'. ucfirst($property);
817+
}
818+
819+
self::assertEquals($actualItem->{$getter}(), $value);
800820
}
801821
}
802822
}
803-
804-
805-
private function checkVariable(CliMenu $menu, string $property, $expected) : void
806-
{
807-
$actual = $this->readAttribute($menu, $property);
808-
self::assertEquals($expected, $actual);
809-
}
810-
811-
private function checkStyleVariable(CliMenu $menu, string $property, $expected) : void
812-
{
813-
$style = $this->readAttribute($menu, 'style');
814-
self::assertEquals($this->readAttribute($style, $property), $expected);
815-
}
816823
}

test/Builder/SplitItemBuilderTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public function testSetGutter() : void
9090
$builder->setGutter(4);
9191

9292
$item = $builder->build();
93-
self::assertEquals(4, self::readAttribute($item, 'gutter'));
93+
self::assertEquals(4, $item->getGutter());
9494
}
9595

9696
public function testAddSubMenuWithClosureBinding() : void
@@ -134,7 +134,7 @@ private function checkItems(array $actualItems, array $expected) : void
134134
unset($expectedItem['class']);
135135

136136
foreach ($expectedItem as $property => $value) {
137-
self::assertEquals($this->readAttribute($actualItem, $property), $value);
137+
self::assertEquals($actualItem->{'get'. ucfirst($property)}(), $value);
138138
}
139139
}
140140
}

0 commit comments

Comments
 (0)