diff --git a/src/Util/StringUtil.php b/src/Util/StringUtil.php index a0afbeed..4ce39878 100644 --- a/src/Util/StringUtil.php +++ b/src/Util/StringUtil.php @@ -18,8 +18,9 @@ public static function wordwrap(string $str, int $width, string $break = "\n") : $length += (mb_strlen($word) + 1); if ($length > $width) { - $length = mb_strlen($break); - return sprintf('%s%s', $break, $word); + $word = sprintf('%s%s', $break, $word); + $length = mb_strlen($word); + return $word; } return $word; diff --git a/test/MenuItem/MenuMenuItemTest.php b/test/MenuItem/MenuMenuItemTest.php index 8ffaae9c..ec336b57 100644 --- a/test/MenuItem/MenuMenuItemTest.php +++ b/test/MenuItem/MenuMenuItemTest.php @@ -125,7 +125,8 @@ public function testGetRowsWithMultipleLines() : void $this->assertEquals( [ " LONG ", - " ITEM LINE" + " ITEM ", + " LINE" ], $item->getRows($menuStyle) ); diff --git a/test/MenuItem/SelectableItemTest.php b/test/MenuItem/SelectableItemTest.php index 322e41b2..459a05bb 100644 --- a/test/MenuItem/SelectableItemTest.php +++ b/test/MenuItem/SelectableItemTest.php @@ -139,7 +139,8 @@ public function testGetRowsWithMultipleLinesWithItemExtra() : void $this->assertEquals( [ " LONG [EXTRA]", - " ITEM LINE" + " ITEM ", + " LINE" ], $item->getRows($menuStyle) ); diff --git a/test/Util/StringUtilTest.php b/test/Util/StringUtilTest.php index 4c0c9459..19971a8d 100644 --- a/test/Util/StringUtilTest.php +++ b/test/Util/StringUtilTest.php @@ -12,18 +12,30 @@ class StringUtilTest extends TestCase { protected $dummyText; + protected function setup() : void + { + parent::setUp(); + + $this->dummyText = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor ' . + 'incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud ' . + 'exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor ' . + 'in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. ' . + 'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt ' . + 'mollit anim id est laborum'; + } + public function testItWrapsAsExpectedTo80Length() : void { $result = StringUtil::wordwrap($this->dummyText, 80); $expected = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor \n" . - "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud \n" . - "exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor \n" . - "in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. \n" . - "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt \n" . - "mollit anim id est laborum"; + "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis \n" . + "nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. \n" . + "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu \n" . + "fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in \n" . + "culpa qui officia deserunt mollit anim id est laborum"; - $this->assertEquals($result, $expected); + self::assertEquals($expected, $result); } public function testItWrapsAsExpectedTo60Length() : void @@ -32,30 +44,30 @@ public function testItWrapsAsExpectedTo60Length() : void $result = StringUtil::wordwrap($this->dummyText, 60); $expected = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, \n" . "sed do eiusmod tempor incididunt ut labore et dolore magna \n" . - "aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco \n" . - "laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure \n" . - "dolor in reprehenderit in voluptate velit esse cillum dolore eu \n" . - "fugiat nulla pariatur. Excepteur sint occaecat cupidatat non \n" . - "proident, sunt in culpa qui officia deserunt mollit anim id est \n" . - "laborum"; - - $this->assertEquals($result, $expected); + "aliqua. Ut enim ad minim veniam, quis nostrud exercitation \n" . + "ullamco laboris nisi ut aliquip ex ea commodo consequat. \n" . + "Duis aute irure dolor in reprehenderit in voluptate velit \n" . + "esse cillum dolore eu fugiat nulla pariatur. Excepteur sint \n" . + "occaecat cupidatat non proident, sunt in culpa qui officia \n" . + "deserunt mollit anim id est laborum"; + + self::assertEquals($expected, $result); } public function testItCanUseACustomBreakCharacter() : void { - $result = StringUtil::wordwrap($this->dummyText, 60, 'H'); + $expected = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, H" . "sed do eiusmod tempor incididunt ut labore et dolore magna H" . - "aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco H" . - "laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure H" . - "dolor in reprehenderit in voluptate velit esse cillum dolore eu H" . - "fugiat nulla pariatur. Excepteur sint occaecat cupidatat non H" . - "proident, sunt in culpa qui officia deserunt mollit anim id est H" . - "laborum"; - - $this->assertEquals($result, $expected); + "aliqua. Ut enim ad minim veniam, quis nostrud exercitation H" . + "ullamco laboris nisi ut aliquip ex ea commodo consequat. H" . + "Duis aute irure dolor in reprehenderit in voluptate velit H" . + "esse cillum dolore eu fugiat nulla pariatur. Excepteur sint H" . + "occaecat cupidatat non proident, sunt in culpa qui officia H" . + "deserunt mollit anim id est laborum"; + + self::assertEquals($expected, $result); } public function testItCanStripAnsiEscapeSequence() : void @@ -70,15 +82,13 @@ public function testItCanStripAnsiEscapeSequence() : void $this->assertEquals('foobarbaz!!!', $result); } - protected function setup() : void + public function testSplitItemBug() : void { - parent::setUp(); - - $this->dummyText = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor ' . - 'incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud ' . - 'exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor ' . - 'in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. ' . - 'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt ' . - 'mollit anim id est laborum'; + $test = 'item three I guess it isn\'t that bad, is it ?'; + + self::assertEquals( + "item three \nI guess it \nisn't that \nbad, is it \n?", + StringUtil::wordwrap($test, 11) + ); } }