From c5ffe6c6c36a5f8dc7db60f3c2fc17fa9f489dcb Mon Sep 17 00:00:00 2001 From: Aydin Hassan Date: Sun, 13 May 2018 20:10:22 +0200 Subject: [PATCH 1/2] Fix wordwrap --- src/Util/StringUtil.php | 5 +- test/MenuItem/MenuMenuItemTest.php | 3 +- test/MenuItem/SelectableItemTest.php | 3 +- test/Util/StringUtilTest.php | 76 ++++++++++++++++------------ 4 files changed, 50 insertions(+), 37 deletions(-) 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..3df64b8b 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); + "sed do eiusmod tempor incididunt ut labore et dolore magna H" . + "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) + ); } } From 1dc8b08c187f29c251026e7fb964b73e6941aac9 Mon Sep 17 00:00:00 2001 From: Aydin Hassan Date: Sun, 13 May 2018 20:16:23 +0200 Subject: [PATCH 2/2] CS --- test/Util/StringUtilTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Util/StringUtilTest.php b/test/Util/StringUtilTest.php index 3df64b8b..19971a8d 100644 --- a/test/Util/StringUtilTest.php +++ b/test/Util/StringUtilTest.php @@ -59,11 +59,11 @@ 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" . + "sed do eiusmod tempor incididunt ut labore et dolore magna H" . "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" . + "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"; @@ -87,7 +87,7 @@ public function testSplitItemBug() : void $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?", + "item three \nI guess it \nisn't that \nbad, is it \n?", StringUtil::wordwrap($test, 11) ); }