From 7375bf696e81efbd303e4ced57e0c8ece30928d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kriszti=C3=A1n=20Ferenczi?= Date: Mon, 11 Mar 2019 15:48:55 +0100 Subject: [PATCH 1/6] [Console] Upgrade word wrapping in SymfonyStyle The original word wrapping method got sometimes ugly outputs because of formatter tags: , , etc. The new solution skips these tags from the line lengths. --- .../Component/Console/Style/SymfonyStyle.php | 19 +- .../Component/Console/Style/WordWrapper.php | 231 ++++++++++++++++++ .../Style/SymfonyStyle/output/output_13.txt | 9 +- .../Style/WordWrapper/input/lipsum.txt | 5 + .../WordWrapper/input/lipsum_with_tags.txt | 5 + .../lipsum_with_tags_and_custom_break.txt | 5 + .../Style/WordWrapper/input/utf120.txt | 1 + .../WordWrapper/input/with_long_words.txt | 9 + .../Style/WordWrapper/output/lipsum.txt | 24 ++ .../WordWrapper/output/lipsum_with_tags.txt | 24 ++ .../lipsum_with_tags_and_custom_break.txt | 24 ++ .../Style/WordWrapper/output/utf120.txt | 1 + .../output/with_long_words_with_cut.txt | 19 ++ .../output/with_long_words_without_cut.txt | 16 ++ .../Console/Tests/Style/WordWrapperTest.php | 124 ++++++++++ 15 files changed, 509 insertions(+), 7 deletions(-) create mode 100644 src/Symfony/Component/Console/Style/WordWrapper.php create mode 100644 src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/lipsum.txt create mode 100644 src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/lipsum_with_tags.txt create mode 100644 src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/lipsum_with_tags_and_custom_break.txt create mode 100644 src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/utf120.txt create mode 100644 src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/with_long_words.txt create mode 100644 src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/lipsum.txt create mode 100644 src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/lipsum_with_tags.txt create mode 100644 src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/lipsum_with_tags_and_custom_break.txt create mode 100644 src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/utf120.txt create mode 100644 src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/with_long_words_with_cut.txt create mode 100644 src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/with_long_words_without_cut.txt create mode 100644 src/Symfony/Component/Console/Tests/Style/WordWrapperTest.php diff --git a/src/Symfony/Component/Console/Style/SymfonyStyle.php b/src/Symfony/Component/Console/Style/SymfonyStyle.php index e74ab66270a14..6f78d6e6aa230 100644 --- a/src/Symfony/Component/Console/Style/SymfonyStyle.php +++ b/src/Symfony/Component/Console/Style/SymfonyStyle.php @@ -39,6 +39,7 @@ class SymfonyStyle extends OutputStyle private $progressBar; private $lineLength; private $bufferedOutput; + private $wordWrappers = []; public function __construct(InputInterface $input, OutputInterface $output) { @@ -387,17 +388,18 @@ private function createBlock($messages, $type = null, $style = null, $prefix = ' if (null !== $type) { $type = sprintf('[%s] ', $type); - $indentLength = \strlen($type); + $indentLength = \mb_strlen($type); $lineIndentation = str_repeat(' ', $indentLength); } + $wordWrapper = $this->getWordWrapper($this->lineLength - $prefixLength - $indentLength, PHP_EOL); // wrap and add newlines for each element foreach ($messages as $key => $message) { if ($escape) { $message = OutputFormatter::escape($message); } - $lines = array_merge($lines, explode(PHP_EOL, wordwrap($message, $this->lineLength - $prefixLength - $indentLength, PHP_EOL, true))); + $lines = array_merge($lines, explode(PHP_EOL, $wordWrapper->formattedStringWordwrap($message, true))); if (\count($messages) > 1 && $key < \count($messages) - 1) { $lines[] = ''; @@ -426,4 +428,17 @@ private function createBlock($messages, $type = null, $style = null, $prefix = ' return $lines; } + + /** + * Cache for WordWrappers + */ + private function getWordWrapper($width, $break) + { + $key = sprintf('%d - %s', $width, $break); + if (!array_key_exists($key, $this->wordWrappers)) { + $this->wordWrappers[$key] = new WordWrapper($width, $break); + } + + return $this->wordWrappers[$key]; + } } diff --git a/src/Symfony/Component/Console/Style/WordWrapper.php b/src/Symfony/Component/Console/Style/WordWrapper.php new file mode 100644 index 0000000000000..b9a49a4f8b4b3 --- /dev/null +++ b/src/Symfony/Component/Console/Style/WordWrapper.php @@ -0,0 +1,231 @@ +, , + */ +class WordWrapper +{ + /** + * How many charachters one line can contain + * + * @var int + */ + protected $width; + + /** + * End of the lines + * + * @var string + */ + protected $break; + + /** + * We collect the new lines into this array. + * + * @var array + */ + protected $newLines; + + /** + * The current line "words" + * + * @var array + */ + protected $newLineTokens; + + /** + * The current line "real" length, without the formatter "tags" and the spaces! + * + * @var int + */ + protected $currentLength; + + public function __construct($width, $break) + { + if ($width <= 0) { + throw new \InvalidArgumentException('You have to set more than 0 width!'); + } + if (mb_strlen($break) == 0) { + throw new \InvalidArgumentException('You have to use existing end of the line character or string!'); + } + $this->width = $width; + $this->break = $break; + } + + /** + * Close a line + */ + protected function closeLine() + { + if (\count($this->newLineTokens)) { + $this->newLines[] = implode(' ', $this->newLineTokens); + $this->newLineTokens = []; + $this->currentLength = 0; + } + } + + /** + * Register a token with setted length. + * + * @param string $token + * @param int $virtualTokenLength + */ + protected function addTokenToLine($token, $virtualTokenLength) + { + $this->newLineTokens[] = $token; + $this->currentLength += $virtualTokenLength; + } + + /** + * Close everything and build the formatted text + * + * @return string + */ + protected function finish() + { + $this->closeLine(); + + return implode($this->break, $this->newLines); + } + + /** + * Reset the array containers. + */ + protected function reset() + { + $this->newLineTokens = []; + $this->newLines = []; + } + + /** + * How long the current line is: currentLength + number of spaces (token numbers - 1) + * + * @return int + */ + protected function getCurrentLineLength() + { + return $this->currentLength + \count($this->newLineTokens) - 1; + } + + /** + * Virtual token length = length without "formatter tags". Eg: + * - lorem --> 5 + * - lorem --> 5 + * + * @param $token + * + * @return int + */ + protected function getVirtualTokenLength($token) + { + $virtualTokenLength = mb_strlen($token); + if (false !== strpos($token, '<')) { + $untaggedToken = preg_replace('/<[^>]+>/', '', $token); + $virtualTokenLength = mb_strlen($untaggedToken); + } + + return $virtualTokenLength; + } + + /** + * @param string $string The text + * @param bool $cutLongWords How the function handles the too long words that is longer then a line. It ignores + * this settings if the word is an URL! + * + * @return string + */ + public function formattedStringWordwrap($string, $cutLongWords = true) + { + $this->reset(); + $lines = explode($this->break, $string); + foreach ($lines as $n => $line) { + // Token can be a word + foreach (explode(' ', $line) as $token) { + $virtualTokenLength = $this->getVirtualTokenLength($token); + $lineLength = $this->getCurrentLineLength(); + // If width would be greater with the new token/word. The count()-1 is the number of spaces! + if ($lineLength + $virtualTokenLength < $this->width) { + $this->addTokenToLine($token, $virtualTokenLength); + } else { + if ($virtualTokenLength < $this->width) { + $this->closeLine(); + $this->addTokenToLine($token, $virtualTokenLength); + } elseif (!$cutLongWords || 'http' == mb_substr($token, 0, 4)) { + // We don't cat the long word if the $catLongWords is false or the word is an URL + $this->closeLine(); + $this->addTokenToLine($token, $virtualTokenLength); + $this->closeLine(); + } else { + $this->handleLongToken($token); + } + } + } + $this->closeLine(); + } + + return $this->finish(); + } + + /** + * If the word is longer than how long one line can be. + * + * @param string $token + */ + protected function handleLongToken($token) + { + $freeChars = $this->width - ($this->getCurrentLineLength() + 1); + // We start a new line if there is less space than 5 characters. + if ($freeChars < 5) { + $this->closeLine(); + $freeChars = $this->width; + } + // We try to finds "formatter tags": + // verylongwordwithtags --> verylongword withtags + $tokenBlocks = explode(' ', preg_replace('/<[^>]+>/', ' \\0 ', $token)); + $slicedToken = ''; + $slicedTokenVirtualLength = 0; + foreach ($tokenBlocks as $block) { + while ($block) { + list($token, $block, $blockLength) = $this->sliceTokenBlock($block, $freeChars); + $freeChars -= $blockLength; + $slicedTokenVirtualLength += $blockLength; + $slicedToken .= $token; + if (!$freeChars) { + $this->addTokenToLine($slicedToken, $slicedTokenVirtualLength); + $this->closeLine(); + $slicedToken = ''; + $slicedTokenVirtualLength = 0; + $freeChars = $this->width; + } + } + } + $this->addTokenToLine($slicedToken, $slicedTokenVirtualLength); + } + + /** + * It handles the long word "blocks". + * + * @param $tokenBlock + * @param $freeChars + * + * @return array [$token, $block, $blockLength] + */ + protected function sliceTokenBlock($tokenBlock, $freeChars) + { + if ('<' == $tokenBlock[0] && '>' == mb_substr($tokenBlock, -1)) { + return [$tokenBlock, '', 0]; + } + $blockLength = mb_strlen($tokenBlock); + if ($blockLength <= $freeChars) { + return [$tokenBlock, '', $blockLength]; + } + + return [ + mb_substr($tokenBlock, 0, $freeChars), + mb_substr($tokenBlock, $freeChars), + $freeChars, + ]; + } +} diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/SymfonyStyle/output/output_13.txt b/src/Symfony/Component/Console/Tests/Fixtures/Style/SymfonyStyle/output/output_13.txt index 0f3704b7482ea..4ecb6ae30e755 100644 --- a/src/Symfony/Component/Console/Tests/Fixtures/Style/SymfonyStyle/output/output_13.txt +++ b/src/Symfony/Component/Console/Tests/Fixtures/Style/SymfonyStyle/output/output_13.txt @@ -1,7 +1,6 @@ - // Lorem ipsum dolor sit amet, consectetur adipisicing 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 + // Lorem ipsum dolor sit amet, consectetur adipisicing 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 diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/lipsum.txt b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/lipsum.txt new file mode 100644 index 0000000000000..1af6faf7b8865 --- /dev/null +++ b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/lipsum.txt @@ -0,0 +1,5 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam quis ex in dolor mollis aliquet. Maecenas pharetra massa ipsum, id tincidunt velit tincidunt et. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas dignissim augue non risus bibendum, id volutpat elit varius. Phasellus a aliquam elit. Integer sem ipsum, posuere vel mauris et, lobortis tempor urna. Morbi in metus lobortis, iaculis nulla id, dapibus dolor. Donec cursus, justo a finibus faucibus, enim sapien venenatis tortor, id pretium felis dolor ut nunc. Integer viverra feugiat dolor, in ornare lacus porta ac. Cras at arcu quam. Proin fringilla vestibulum magna ut feugiat. Sed at tempor tellus. Aliquam erat volutpat. Aliquam erat volutpat. Fusce efficitur arcu efficitur nibh varius, quis tempor enim imperdiet. Sed sagittis purus non urna imperdiet blandit. + +Aliquam a bibendum diam, nec semper ipsum. Donec magna felis, molestie in nulla ut, cursus luctus nisl. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla lobortis nulla mi. Fusce a libero nec lorem aliquet molestie. Praesent sem diam, ultricies et posuere eu, blandit at lacus. Proin eleifend nisi id neque porta tincidunt. Quisque tempus purus sit amet erat posuere hendrerit. Proin vitae nisi eros. In hac habitasse platea dictumst. Ut ut metus eu diam aliquam feugiat. Pellentesque leo urna, efficitur ac velit quis, tempor molestie odio. Cras vitae cursus leo. + +Duis in libero ut odio porta dignissim. In molestie diam at ante dictum ullamcorper. Ut auctor eros elit, nec molestie erat viverra ut. Vestibulum nisl ex, cursus quis magna id, pulvinar condimentum sem. Nunc ac orci volutpat turpis luctus tempor. Phasellus non ultrices est. Proin quis risus ut risus interdum pellentesque. Vestibulum lobortis, est in accumsan porttitor, nunc neque vulputate ipsum, vel varius metus orci condimentum magna. Duis vulputate leo et mi interdum sollicitudin. Suspendisse malesuada sagittis urna ac mattis. Cras vel nisi eu enim interdum maximus in mollis augue. In faucibus vestibulum lectus at pharetra. Maecenas maximus massa ac massa ornare, sit amet blandit lacus ultricies. Suspendisse tristique pellentesque velit, a finibus libero pellentesque vel. Quisque pellentesque ornare tincidunt. diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/lipsum_with_tags.txt b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/lipsum_with_tags.txt new file mode 100644 index 0000000000000..5aee3ac84129d --- /dev/null +++ b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/lipsum_with_tags.txt @@ -0,0 +1,5 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam quis ex in dolor mollis aliquet. Maecenas pharetra massa ipsum, id tincidunt velit tincidunt et. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas dignissim augue non risus bibendum, id volutpat elit varius. Phasellus a aliquam elit. Integer sem ipsum, posuere vel mauris et, lobortis tempor urna. Morbi in metus lobortis, iaculis nulla id, dapibus dolor. Donec cursus, justo a finibus faucibus, enim sapien venenatis tortor, id pretium felis dolor ut nunc. Integer viverra feugiat dolor, in ornare lacus porta ac. Cras at arcu quam. Proin fringilla vestibulum magna ut feugiat. Sed at tempor tellus. Aliquam erat volutpat. Aliquam erat volutpat. Fusce efficitur arcu efficitur nibh varius, quis tempor enim imperdiet. Sed sagittis purus non urna imperdiet blandit. + +Aliquam a bibendum diam, nec semper ipsum. Donec magna felis, molestie in nulla ut, cursus luctus nisl. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla lobortis nulla mi. Fusce a libero nec lorem aliquet molestie. Praesent sem diam, ultricies et posuere eu, blandit at lacus. Proin eleifend nisi id neque porta tincidunt. Quisque tempus purus sit amet erat posuere hendrerit. Proin vitae nisi eros. In hac habitasse platea dictumst. Ut ut metus eu diam aliquam feugiat. Pellentesque leo urna, efficitur ac velit quis, tempor molestie odio. Cras vitae cursus leo. + +Duis in libero ut odio porta dignissim. In molestie diam at ante dictum ullamcorper. Ut auctor eros elit, nec molestie erat viverra ut. Vestibulum nisl ex, cursus quis magna id, pulvinar condimentum sem. Nunc ac orci volutpat turpis luctus tempor. Phasellus non ultrices est. Proin quis risus ut risus interdum pellentesque. Vestibulum lobortis, est in accumsan porttitor, nunc neque vulputate ipsum, vel varius metus orci condimentum magna. Duis vulputate leo et mi interdum sollicitudin. Suspendisse malesuada sagittis urna ac mattis. Cras vel nisi eu enim interdum maximus in mollis augue. In faucibus vestibulum lectus at pharetra. Maecenas maximus massa ac massa ornare, sit amet blandit lacus ultricies. Suspendisse tristique pellentesque velit, a finibus libero pellentesque vel. Quisque pellentesque ornare tincidunt. diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/lipsum_with_tags_and_custom_break.txt b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/lipsum_with_tags_and_custom_break.txt new file mode 100644 index 0000000000000..5483823fb8c05 --- /dev/null +++ b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/lipsum_with_tags_and_custom_break.txt @@ -0,0 +1,5 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam quis ex in dolor mollis aliquet. Maecenas pharetra massa ipsum, id tincidunt velit tincidunt et. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas dignissim augue non risus bibendum, id volutpat elit varius. Phasellus a aliquam elit. Integer sem ipsum, posuere vel mauris et, lobortis tempor urna. Morbi in metus lobortis, iaculis nulla id, dapibus dolor. Donec cursus, justo a finibus faucibus, enim sapien venenatis tortor, id pretium felis dolor ut nunc. Integer viverra feugiat dolor, in ornare lacus porta ac. Cras at arcu quam. Proin fringilla vestibulum magna ut feugiat. Sed at tempor tellus. Aliquam erat volutpat. Aliquam erat volutpat. Fusce efficitur arcu efficitur nibh varius, quis tempor enim imperdiet. Sed sagittis purus non urna imperdiet blandit.__break__ +__break__ +Aliquam a bibendum diam, nec semper ipsum. Donec magna felis, molestie in nulla ut, cursus luctus nisl. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla lobortis nulla mi. Fusce a libero nec lorem aliquet molestie. Praesent sem diam, ultricies et posuere eu, blandit at lacus. Proin eleifend nisi id neque porta tincidunt. Quisque tempus purus sit amet erat posuere hendrerit. Proin vitae nisi eros. In hac habitasse platea dictumst. Ut ut metus eu diam aliquam feugiat. Pellentesque leo urna, efficitur ac velit quis, tempor molestie odio. Cras vitae cursus leo.__break__ +__break__ +Duis in libero ut odio porta dignissim. In molestie diam at ante dictum ullamcorper. Ut auctor eros elit, nec molestie erat viverra ut. Vestibulum nisl ex, cursus quis magna id, pulvinar condimentum sem. Nunc ac orci volutpat turpis luctus tempor. Phasellus non ultrices est. Proin quis risus ut risus interdum pellentesque. Vestibulum lobortis, est in accumsan porttitor, nunc neque vulputate ipsum, vel varius metus orci condimentum magna. Duis vulputate leo et mi interdum sollicitudin. Suspendisse malesuada sagittis urna ac mattis. Cras vel nisi eu enim interdum maximus in mollis augue. In faucibus vestibulum lectus at pharetra. Maecenas maximus massa ac massa ornare, sit amet blandit lacus ultricies. Suspendisse tristique pellentesque velit, a finibus libero pellentesque vel. Quisque pellentesque ornare tincidunt.__break__ diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/utf120.txt b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/utf120.txt new file mode 100644 index 0000000000000..1ade5947f9316 --- /dev/null +++ b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/utf120.txt @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam quis ex in dolor mollis aliquet. UTF8:öüóőúéáűíÖÜÓŐÚÉÁŰÍ diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/with_long_words.txt b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/with_long_words.txt new file mode 100644 index 0000000000000..932b7b722b642 --- /dev/null +++ b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/input/with_long_words.txt @@ -0,0 +1,9 @@ +Lorem ipsum dolor sit amet: https://www.google.com/search?safe=off&ei=5jSGXIGbGofCkwWcpLGIBA&q=Lorem+ipsum+dolor+sit+amet%2C+consectetur+adipiscing+elit.&oq=Lorem+ipsum+dolor+sit+amet%2C+consectetur+adipiscing+elit.&gs_l=psy-ab.3..0j0i22i30l9.24765.24765..26089...0.0..0.98.98.1......0....2j1..gws-wiz.......0i71.RLWmD-mYSAY Lorem ipsum dolor + +Test longer than 5 chars in the end: +Simple long word: thisisaverylongwordthisisaverylongwordthisisaverylongword + +Test less than 5 chars in the end: +Simple long word.........: thisisaverylongwordthisisaverylongwordthisisaverylongword + +Long word with "tags": thisisaverylongwordthisisaverylongwordthisisaverylongword diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/lipsum.txt b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/lipsum.txt new file mode 100644 index 0000000000000..b4d91795ca115 --- /dev/null +++ b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/lipsum.txt @@ -0,0 +1,24 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam quis ex in dolor mollis aliquet. Maecenas pharetra massa +ipsum, id tincidunt velit tincidunt et. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac +turpis egestas. Maecenas dignissim augue non risus bibendum, id volutpat elit varius. Phasellus a aliquam elit. Integer +sem ipsum, posuere vel mauris et, lobortis tempor urna. Morbi in metus lobortis, iaculis nulla id, dapibus dolor. Donec +cursus, justo a finibus faucibus, enim sapien venenatis tortor, id pretium felis dolor ut nunc. Integer viverra feugiat +dolor, in ornare lacus porta ac. Cras at arcu quam. Proin fringilla vestibulum magna ut feugiat. Sed at tempor tellus. +Aliquam erat volutpat. Aliquam erat volutpat. Fusce efficitur arcu efficitur nibh varius, quis tempor enim imperdiet. +Sed sagittis purus non urna imperdiet blandit. + +Aliquam a bibendum diam, nec semper ipsum. Donec magna felis, molestie in nulla ut, cursus luctus nisl. Lorem ipsum +dolor sit amet, consectetur adipiscing elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla +lobortis nulla mi. Fusce a libero nec lorem aliquet molestie. Praesent sem diam, ultricies et posuere eu, blandit at +lacus. Proin eleifend nisi id neque porta tincidunt. Quisque tempus purus sit amet erat posuere hendrerit. Proin vitae +nisi eros. In hac habitasse platea dictumst. Ut ut metus eu diam aliquam feugiat. Pellentesque leo urna, efficitur ac +velit quis, tempor molestie odio. Cras vitae cursus leo. + +Duis in libero ut odio porta dignissim. In molestie diam at ante dictum ullamcorper. Ut auctor eros elit, nec molestie +erat viverra ut. Vestibulum nisl ex, cursus quis magna id, pulvinar condimentum sem. Nunc ac orci volutpat turpis luctus +tempor. Phasellus non ultrices est. Proin quis risus ut risus interdum pellentesque. Vestibulum lobortis, est in +accumsan porttitor, nunc neque vulputate ipsum, vel varius metus orci condimentum magna. Duis vulputate leo et mi +interdum sollicitudin. Suspendisse malesuada sagittis urna ac mattis. Cras vel nisi eu enim interdum maximus in mollis +augue. In faucibus vestibulum lectus at pharetra. Maecenas maximus massa ac massa ornare, sit amet blandit lacus +ultricies. Suspendisse tristique pellentesque velit, a finibus libero pellentesque vel. Quisque pellentesque ornare +tincidunt. diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/lipsum_with_tags.txt b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/lipsum_with_tags.txt new file mode 100644 index 0000000000000..bd9d865f1f0b0 --- /dev/null +++ b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/lipsum_with_tags.txt @@ -0,0 +1,24 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam quis ex in dolor mollis aliquet. Maecenas pharetra massa +ipsum, id tincidunt velit tincidunt et. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac +turpis egestas. Maecenas dignissim augue non risus bibendum, id volutpat elit varius. Phasellus a aliquam elit. Integer +sem ipsum, posuere vel mauris et, lobortis tempor urna. Morbi in metus lobortis, iaculis nulla id, dapibus dolor. Donec +cursus, justo a finibus faucibus, enim sapien venenatis tortor, id pretium felis dolor ut nunc. Integer viverra feugiat +dolor, in ornare lacus porta ac. Cras at arcu quam. Proin fringilla vestibulum magna ut feugiat. Sed at tempor tellus. +Aliquam erat volutpat. Aliquam erat volutpat. Fusce efficitur arcu efficitur nibh varius, quis tempor enim imperdiet. +Sed sagittis purus non urna imperdiet blandit. + +Aliquam a bibendum diam, nec semper ipsum. Donec magna felis, molestie in nulla ut, cursus luctus nisl. Lorem ipsum +dolor sit amet, consectetur adipiscing elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla +lobortis nulla mi. Fusce a libero nec lorem aliquet molestie. Praesent sem diam, ultricies et posuere eu, blandit at +lacus. Proin eleifend nisi id neque porta tincidunt. Quisque tempus purus sit amet erat posuere hendrerit. Proin vitae +nisi eros. In hac habitasse platea dictumst. Ut ut metus eu diam aliquam feugiat. Pellentesque leo urna, efficitur ac +velit quis, tempor molestie odio. Cras vitae cursus leo. + +Duis in libero ut odio porta dignissim. In molestie diam at ante dictum ullamcorper. Ut auctor eros elit, nec molestie +erat viverra ut. Vestibulum nisl ex, cursus quis magna id, pulvinar condimentum sem. Nunc ac orci volutpat turpis luctus +tempor. Phasellus non ultrices est. Proin quis risus ut risus interdum pellentesque. Vestibulum lobortis, est in +accumsan porttitor, nunc neque vulputate ipsum, vel varius metus orci condimentum magna. Duis vulputate leo et mi +interdum sollicitudin. Suspendisse malesuada sagittis urna ac mattis. Cras vel nisi eu enim interdum maximus in mollis +augue. In faucibus vestibulum lectus at pharetra. Maecenas maximus massa ac massa ornare, sit amet blandit lacus +ultricies. Suspendisse tristique pellentesque velit, a finibus libero pellentesque vel. Quisque pellentesque ornare +tincidunt. diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/lipsum_with_tags_and_custom_break.txt b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/lipsum_with_tags_and_custom_break.txt new file mode 100644 index 0000000000000..3a88148ee732e --- /dev/null +++ b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/lipsum_with_tags_and_custom_break.txt @@ -0,0 +1,24 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam quis ex in dolor mollis aliquet. Maecenas pharetra massa__break__ +ipsum, id tincidunt velit tincidunt et. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac__break__ +turpis egestas. Maecenas dignissim augue non risus bibendum, id volutpat elit varius. Phasellus a aliquam elit. Integer__break__ +sem ipsum, posuere vel mauris et, lobortis tempor urna. Morbi in metus lobortis, iaculis nulla id, dapibus dolor. Donec__break__ +cursus, justo a finibus faucibus, enim sapien venenatis tortor, id pretium felis dolor ut nunc. Integer viverra feugiat__break__ +dolor, in ornare lacus porta ac. Cras at arcu quam. Proin fringilla vestibulum magna ut feugiat. Sed at tempor tellus.__break__ +Aliquam erat volutpat. Aliquam erat volutpat. Fusce efficitur arcu efficitur nibh varius, quis tempor enim imperdiet.__break__ +Sed sagittis purus non urna imperdiet blandit.__break__ +__break__ +Aliquam a bibendum diam, nec semper ipsum. Donec magna felis, molestie in nulla ut, cursus luctus nisl. Lorem ipsum__break__ +dolor sit amet, consectetur adipiscing elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla__break__ +lobortis nulla mi. Fusce a libero nec lorem aliquet molestie. Praesent sem diam, ultricies et posuere eu, blandit at__break__ +lacus. Proin eleifend nisi id neque porta tincidunt. Quisque tempus purus sit amet erat posuere hendrerit. Proin vitae__break__ +nisi eros. In hac habitasse platea dictumst. Ut ut metus eu diam aliquam feugiat. Pellentesque leo urna, efficitur ac__break__ +velit quis, tempor molestie odio. Cras vitae cursus leo.__break__ +__break__ +Duis in libero ut odio porta dignissim. In molestie diam at ante dictum ullamcorper. Ut auctor eros elit, nec molestie__break__ +erat viverra ut. Vestibulum nisl ex, cursus quis magna id, pulvinar condimentum sem. Nunc ac orci volutpat turpis luctus__break__ +tempor. Phasellus non ultrices est. Proin quis risus ut risus interdum pellentesque. Vestibulum lobortis, est in__break__ +accumsan porttitor, nunc neque vulputate ipsum, vel varius metus orci condimentum magna. Duis vulputate leo et mi__break__ +interdum sollicitudin. Suspendisse malesuada sagittis urna ac mattis. Cras vel nisi eu enim interdum maximus in mollis__break__ +augue. In faucibus vestibulum lectus at pharetra. Maecenas maximus massa ac massa ornare, sit amet blandit lacus__break__ +ultricies. Suspendisse tristique pellentesque velit, a finibus libero pellentesque vel. Quisque pellentesque ornare__break__ +tincidunt.__break__ diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/utf120.txt b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/utf120.txt new file mode 100644 index 0000000000000..1ade5947f9316 --- /dev/null +++ b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/utf120.txt @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam quis ex in dolor mollis aliquet. UTF8:öüóőúéáűíÖÜÓŐÚÉÁŰÍ diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/with_long_words_with_cut.txt b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/with_long_words_with_cut.txt new file mode 100644 index 0000000000000..e61ed58982943 --- /dev/null +++ b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/with_long_words_with_cut.txt @@ -0,0 +1,19 @@ +Lorem ipsum dolor sit amet: +https://www.google.com/search?safe=off&ei=5jSGXIGbGofCkwWcpLGIBA&q=Lorem+ipsum+dolor+sit+amet%2C+consectetur+adipiscing+elit.&oq=Lorem+ipsum+dolor+sit+amet%2C+consectetur+adipiscing+elit.&gs_l=psy-ab.3..0j0i22i30l9.24765.24765..26089...0.0..0.98.98.1......0....2j1..gws-wiz.......0i71.RLWmD-mYSAY +Lorem ipsum dolor + +Test longer than 5 chars in +the end: +Simple long word: thisisaveryl +ongwordthisisaverylongwordthis +isaverylongword + +Test less than 5 chars in the +end: +Simple long word.........: +thisisaverylongwordthisisavery +longwordthisisaverylongword + +Long word with "tags": thisisa +verylongwordthisisaverylongwor +dthisisaverylongword diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/with_long_words_without_cut.txt b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/with_long_words_without_cut.txt new file mode 100644 index 0000000000000..0a7c617b4f490 --- /dev/null +++ b/src/Symfony/Component/Console/Tests/Fixtures/Style/WordWrapper/output/with_long_words_without_cut.txt @@ -0,0 +1,16 @@ +Lorem ipsum dolor sit amet: +https://www.google.com/search?safe=off&ei=5jSGXIGbGofCkwWcpLGIBA&q=Lorem+ipsum+dolor+sit+amet%2C+consectetur+adipiscing+elit.&oq=Lorem+ipsum+dolor+sit+amet%2C+consectetur+adipiscing+elit.&gs_l=psy-ab.3..0j0i22i30l9.24765.24765..26089...0.0..0.98.98.1......0....2j1..gws-wiz.......0i71.RLWmD-mYSAY +Lorem ipsum dolor + +Test longer than 5 chars in +the end: +Simple long word: +thisisaverylongwordthisisaverylongwordthisisaverylongword + +Test less than 5 chars in the +end: +Simple long word.........: +thisisaverylongwordthisisaverylongwordthisisaverylongword + +Long word with "tags": +thisisaverylongwordthisisaverylongwordthisisaverylongword diff --git a/src/Symfony/Component/Console/Tests/Style/WordWrapperTest.php b/src/Symfony/Component/Console/Tests/Style/WordWrapperTest.php new file mode 100644 index 0000000000000..66a57af444803 --- /dev/null +++ b/src/Symfony/Component/Console/Tests/Style/WordWrapperTest.php @@ -0,0 +1,124 @@ +expectException($exceptionClass); + $wordWrapper = new WordWrapper($width, $break); + } + + public function dpTestConstructorExceptions() + { + return [ + [0, PHP_EOL, \InvalidArgumentException::class], + [-1, PHP_EOL, \InvalidArgumentException::class], + [0, '', \InvalidArgumentException::class], + [1, '', \InvalidArgumentException::class], + ]; + } + + /** + * @param string $input + * @param integer $width + * @param string $break + * @param boolean $cut + * @param string $output + * + * @dataProvider dpFormattedStringWordwrap + */ + public function testFormattedStringWordwrap($input, $width, $break, $cut, $output) + { + $wordWrapper = new WordWrapper($width, $break); + $response = $wordWrapper->formattedStringWordwrap($this->getInputContents($input), $cut); + + $this->assertEquals($this->getOutputContents($output), $response); + } + + public function dpFormattedStringWordwrap() + { + $baseBreak = "\n"; + $customBreak = "__break__\n"; + + return [ + // Check empty + ['', 120, $baseBreak, true, ''], + [$baseBreak, 120, $baseBreak, true, $baseBreak], + // Check limit and UTF-8 + [ + 'utf120.txt', + 120, + $baseBreak, + true, + 'utf120.txt', + ], + // Check simple text + [ + 'lipsum.txt', + 120, + $baseBreak, + true, + 'lipsum.txt', + ], + // Check colored text + [ + 'lipsum_with_tags.txt', + 120, + $baseBreak, + true, + 'lipsum_with_tags.txt', + ], + // Check custom break + [ + 'lipsum_with_tags_and_custom_break.txt', + 120, + $customBreak, + true, + 'lipsum_with_tags_and_custom_break.txt', + ], + // Check long words + [ + 'with_long_words.txt', + 30, + $baseBreak, + true, + 'with_long_words_with_cut.txt', + ], + [ + 'with_long_words.txt', + 30, + $baseBreak, + false, + 'with_long_words_without_cut.txt', + ], + ]; + } + + protected function getInputContents($filenameOrText) + { + $file = __DIR__ . '/../Fixtures/Style/WordWrapper/input/' . $filenameOrText; + return file_exists($file) + ? file_get_contents($file) + : $filenameOrText; + } + + protected function getOutputContents($filenameOrText) + { + $file = __DIR__ . '/../Fixtures/Style/WordWrapper/output/' . $filenameOrText; + return file_exists($file) + ? file_get_contents($file) + : $filenameOrText; + } +} From 37db1e5e3514e64011577b9f4b9520fc5fe4e69f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kriszti=C3=A1n=20Ferenczi?= Date: Mon, 11 Mar 2019 16:15:03 +0100 Subject: [PATCH 2/6] CS fix --- .../Component/Console/Style/SymfonyStyle.php | 6 ++-- .../Component/Console/Style/WordWrapper.php | 32 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/Symfony/Component/Console/Style/SymfonyStyle.php b/src/Symfony/Component/Console/Style/SymfonyStyle.php index 6f78d6e6aa230..c98371f3e8559 100644 --- a/src/Symfony/Component/Console/Style/SymfonyStyle.php +++ b/src/Symfony/Component/Console/Style/SymfonyStyle.php @@ -39,7 +39,7 @@ class SymfonyStyle extends OutputStyle private $progressBar; private $lineLength; private $bufferedOutput; - private $wordWrappers = []; + private $wordWrappers = array(); public function __construct(InputInterface $input, OutputInterface $output) { @@ -430,12 +430,12 @@ private function createBlock($messages, $type = null, $style = null, $prefix = ' } /** - * Cache for WordWrappers + * Cache for WordWrappers. */ private function getWordWrapper($width, $break) { $key = sprintf('%d - %s', $width, $break); - if (!array_key_exists($key, $this->wordWrappers)) { + if (!\array_key_exists($key, $this->wordWrappers)) { $this->wordWrappers[$key] = new WordWrapper($width, $break); } diff --git a/src/Symfony/Component/Console/Style/WordWrapper.php b/src/Symfony/Component/Console/Style/WordWrapper.php index b9a49a4f8b4b3..254104ef29fd4 100644 --- a/src/Symfony/Component/Console/Style/WordWrapper.php +++ b/src/Symfony/Component/Console/Style/WordWrapper.php @@ -3,19 +3,19 @@ namespace Symfony\Component\Console\Style; /** - * This class can help you to create well formatted text blocks with "tags", like: , , + * This class can help you to create well formatted text blocks with "tags", like: , , . */ class WordWrapper { /** - * How many charachters one line can contain + * How many charachters one line can contain. * * @var int */ protected $width; /** - * End of the lines + * End of the lines. * * @var string */ @@ -29,7 +29,7 @@ class WordWrapper protected $newLines; /** - * The current line "words" + * The current line "words". * * @var array */ @@ -47,7 +47,7 @@ public function __construct($width, $break) if ($width <= 0) { throw new \InvalidArgumentException('You have to set more than 0 width!'); } - if (mb_strlen($break) == 0) { + if (0 == mb_strlen($break)) { throw new \InvalidArgumentException('You have to use existing end of the line character or string!'); } $this->width = $width; @@ -55,13 +55,13 @@ public function __construct($width, $break) } /** - * Close a line + * Close a line. */ protected function closeLine() { if (\count($this->newLineTokens)) { $this->newLines[] = implode(' ', $this->newLineTokens); - $this->newLineTokens = []; + $this->newLineTokens = array(); $this->currentLength = 0; } } @@ -79,7 +79,7 @@ protected function addTokenToLine($token, $virtualTokenLength) } /** - * Close everything and build the formatted text + * Close everything and build the formatted text. * * @return string */ @@ -95,12 +95,12 @@ protected function finish() */ protected function reset() { - $this->newLineTokens = []; - $this->newLines = []; + $this->newLineTokens = array(); + $this->newLines = array(); } /** - * How long the current line is: currentLength + number of spaces (token numbers - 1) + * How long the current line is: currentLength + number of spaces (token numbers - 1). * * @return int */ @@ -112,7 +112,7 @@ protected function getCurrentLineLength() /** * Virtual token length = length without "formatter tags". Eg: * - lorem --> 5 - * - lorem --> 5 + * - lorem --> 5. * * @param $token * @@ -215,17 +215,17 @@ protected function handleLongToken($token) protected function sliceTokenBlock($tokenBlock, $freeChars) { if ('<' == $tokenBlock[0] && '>' == mb_substr($tokenBlock, -1)) { - return [$tokenBlock, '', 0]; + return array($tokenBlock, '', 0); } $blockLength = mb_strlen($tokenBlock); if ($blockLength <= $freeChars) { - return [$tokenBlock, '', $blockLength]; + return array($tokenBlock, '', $blockLength); } - return [ + return array( mb_substr($tokenBlock, 0, $freeChars), mb_substr($tokenBlock, $freeChars), $freeChars, - ]; + ); } } From 3da30413a758657a4e0e8abe36e6549dee92688c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kriszti=C3=A1n=20Ferenczi?= Date: Mon, 11 Mar 2019 16:17:01 +0100 Subject: [PATCH 3/6] CS fix --- .../Console/Tests/Style/WordWrapperTest.php | 60 ++++++++++--------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/src/Symfony/Component/Console/Tests/Style/WordWrapperTest.php b/src/Symfony/Component/Console/Tests/Style/WordWrapperTest.php index 66a57af444803..976953caaad3e 100644 --- a/src/Symfony/Component/Console/Tests/Style/WordWrapperTest.php +++ b/src/Symfony/Component/Console/Tests/Style/WordWrapperTest.php @@ -22,20 +22,20 @@ public function testConstructorExceptions($width, $break, $exceptionClass) public function dpTestConstructorExceptions() { - return [ - [0, PHP_EOL, \InvalidArgumentException::class], - [-1, PHP_EOL, \InvalidArgumentException::class], - [0, '', \InvalidArgumentException::class], - [1, '', \InvalidArgumentException::class], - ]; + return array( + array(0, PHP_EOL, \InvalidArgumentException::class), + array(-1, PHP_EOL, \InvalidArgumentException::class), + array(0, '', \InvalidArgumentException::class), + array(1, '', \InvalidArgumentException::class), + ); } /** - * @param string $input - * @param integer $width - * @param string $break - * @param boolean $cut - * @param string $output + * @param string $input + * @param int $width + * @param string $break + * @param bool $cut + * @param string $output * * @dataProvider dpFormattedStringWordwrap */ @@ -52,63 +52,64 @@ public function dpFormattedStringWordwrap() $baseBreak = "\n"; $customBreak = "__break__\n"; - return [ + return array( // Check empty - ['', 120, $baseBreak, true, ''], - [$baseBreak, 120, $baseBreak, true, $baseBreak], + array('', 120, $baseBreak, true, ''), + array($baseBreak, 120, $baseBreak, true, $baseBreak), // Check limit and UTF-8 - [ + array( 'utf120.txt', 120, $baseBreak, true, 'utf120.txt', - ], + ), // Check simple text - [ + array( 'lipsum.txt', 120, $baseBreak, true, 'lipsum.txt', - ], + ), // Check colored text - [ + array( 'lipsum_with_tags.txt', 120, $baseBreak, true, 'lipsum_with_tags.txt', - ], + ), // Check custom break - [ + array( 'lipsum_with_tags_and_custom_break.txt', 120, $customBreak, true, 'lipsum_with_tags_and_custom_break.txt', - ], + ), // Check long words - [ + array( 'with_long_words.txt', 30, $baseBreak, true, 'with_long_words_with_cut.txt', - ], - [ + ), + array( 'with_long_words.txt', 30, $baseBreak, false, 'with_long_words_without_cut.txt', - ], - ]; + ), + ); } protected function getInputContents($filenameOrText) { - $file = __DIR__ . '/../Fixtures/Style/WordWrapper/input/' . $filenameOrText; + $file = __DIR__.'/../Fixtures/Style/WordWrapper/input/'.$filenameOrText; + return file_exists($file) ? file_get_contents($file) : $filenameOrText; @@ -116,7 +117,8 @@ protected function getInputContents($filenameOrText) protected function getOutputContents($filenameOrText) { - $file = __DIR__ . '/../Fixtures/Style/WordWrapper/output/' . $filenameOrText; + $file = __DIR__.'/../Fixtures/Style/WordWrapper/output/'.$filenameOrText; + return file_exists($file) ? file_get_contents($file) : $filenameOrText; From faffe82ca7e37c5b31ee396258beeeeeaf9d5ab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kriszti=C3=A1n=20Ferenczi?= Date: Mon, 11 Mar 2019 16:18:08 +0100 Subject: [PATCH 4/6] Typo fix --- src/Symfony/Component/Console/Style/WordWrapper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Console/Style/WordWrapper.php b/src/Symfony/Component/Console/Style/WordWrapper.php index 254104ef29fd4..8244c21508c43 100644 --- a/src/Symfony/Component/Console/Style/WordWrapper.php +++ b/src/Symfony/Component/Console/Style/WordWrapper.php @@ -8,7 +8,7 @@ class WordWrapper { /** - * How many charachters one line can contain. + * How many characters one line can contain. * * @var int */ From 930e1e7da196d01fe24f61ea3800e9a5d2672e44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kriszti=C3=A1n=20Ferenczi?= Date: Mon, 11 Mar 2019 16:20:24 +0100 Subject: [PATCH 5/6] License headers fix --- src/Symfony/Component/Console/Style/WordWrapper.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Symfony/Component/Console/Style/WordWrapper.php b/src/Symfony/Component/Console/Style/WordWrapper.php index 8244c21508c43..0faf98a122786 100644 --- a/src/Symfony/Component/Console/Style/WordWrapper.php +++ b/src/Symfony/Component/Console/Style/WordWrapper.php @@ -1,4 +1,12 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ namespace Symfony\Component\Console\Style; From c8265d0e1548501b9639cc2cfce366634b914977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kriszti=C3=A1n=20Ferenczi?= Date: Mon, 11 Mar 2019 16:40:36 +0100 Subject: [PATCH 6/6] Some changes in tests --- .../Console/Tests/Style/WordWrapperTest.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Symfony/Component/Console/Tests/Style/WordWrapperTest.php b/src/Symfony/Component/Console/Tests/Style/WordWrapperTest.php index 976953caaad3e..57ca910f6a5a0 100644 --- a/src/Symfony/Component/Console/Tests/Style/WordWrapperTest.php +++ b/src/Symfony/Component/Console/Tests/Style/WordWrapperTest.php @@ -10,23 +10,23 @@ class WordWrapperTest extends TestCase /** * @param int $width * @param string $break - * @param string $exceptionClass * * @dataProvider dpTestConstructorExceptions + * + * @expectedException \InvalidArgumentException */ - public function testConstructorExceptions($width, $break, $exceptionClass) + public function testConstructorExceptions($width, $break) { - $this->expectException($exceptionClass); $wordWrapper = new WordWrapper($width, $break); } public function dpTestConstructorExceptions() { return array( - array(0, PHP_EOL, \InvalidArgumentException::class), - array(-1, PHP_EOL, \InvalidArgumentException::class), - array(0, '', \InvalidArgumentException::class), - array(1, '', \InvalidArgumentException::class), + array(0, PHP_EOL), + array(-1, PHP_EOL), + array(0, ''), + array(1, ''), ); } @@ -110,7 +110,7 @@ protected function getInputContents($filenameOrText) { $file = __DIR__.'/../Fixtures/Style/WordWrapper/input/'.$filenameOrText; - return file_exists($file) + return file_exists($file) && is_file($file) ? file_get_contents($file) : $filenameOrText; } @@ -119,7 +119,7 @@ protected function getOutputContents($filenameOrText) { $file = __DIR__.'/../Fixtures/Style/WordWrapper/output/'.$filenameOrText; - return file_exists($file) + return file_exists($file) && is_file($file) ? file_get_contents($file) : $filenameOrText; }