name: ProgressBarTest
class_comment: '# * @group time-sensitive'
dependencies:
- name: TestCase
  type: class
  source: PHPUnit\Framework\TestCase
- name: OutputFormatter
  type: class
  source: Symfony\Component\Console\Formatter\OutputFormatter
- name: Helper
  type: class
  source: Symfony\Component\Console\Helper\Helper
- name: ProgressBar
  type: class
  source: Symfony\Component\Console\Helper\ProgressBar
- name: ConsoleSectionOutput
  type: class
  source: Symfony\Component\Console\Output\ConsoleSectionOutput
- name: StreamOutput
  type: class
  source: Symfony\Component\Console\Output\StreamOutput
properties: []
methods:
- name: testFormatsWithoutMax
  visibility: public
  parameters:
  - name: format
  comment: "# * @group time-sensitive\n# */\n# class ProgressBarTest extends TestCase\n\
    # {\n# private string|false $colSize;\n# \n# protected function setUp(): void\n\
    # {\n# $this->colSize = getenv('COLUMNS');\n# putenv('COLUMNS=120');\n# }\n# \n\
    # protected function tearDown(): void\n# {\n# putenv($this->colSize ? 'COLUMNS='.$this->colSize\
    \ : 'COLUMNS');\n# }\n# \n# public function testMultipleStart()\n# {\n# $bar =\
    \ new ProgressBar($output = $this->getOutputStream(), 0, 0);\n# $bar->start();\n\
    # $bar->advance();\n# $bar->start();\n# \n# rewind($output->getStream());\n# $this->assertEquals(\n\
    # '    0 [>---------------------------]'.\n# $this->generateOutput('    1 [->--------------------------]').\n\
    # $this->generateOutput('    0 [>---------------------------]'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testAdvance()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 0, 0);\n# $bar->start();\n# $bar->advance();\n#\
    \ \n# rewind($output->getStream());\n# $this->assertEquals(\n# '    0 [>---------------------------]'.\n\
    # $this->generateOutput('    1 [->--------------------------]'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testResumeNoMax()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 0, 0);\n# $bar->start(null, 15);\n# $bar->advance();\n\
    # \n# rewind($output->getStream());\n# \n# $this->assertEquals(\n# '   15 [--------------->------------]'.\n\
    # $this->generateOutput('   16 [---------------->-----------]'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testResumeWithMax()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 5000, 0);\n# $bar->start(null, 1000);\n# \n# rewind($output->getStream());\n\
    # \n# $this->assertEquals(\n# ' 1000/5000 [=====>----------------------]  20%',\n\
    # stream_get_contents($output->getStream())\n# );\n# }\n# \n# public function\
    \ testRegularTimeEstimation()\n# {\n# $bar = new ProgressBar($output = $this->getOutputStream(),\
    \ 1_200, 0);\n# $bar->start();\n# \n# $bar->advance();\n# $bar->advance();\n#\
    \ \n# sleep(1);\n# \n# $this->assertEquals(\n# 600.0,\n# $bar->getEstimated()\n\
    # );\n# }\n# \n# public function testResumedTimeEstimation()\n# {\n# $bar = new\
    \ ProgressBar($output = $this->getOutputStream(), 1_200, 0);\n# $bar->start(null,\
    \ 599);\n# $bar->advance();\n# \n# sleep(1);\n# \n# $this->assertEquals(\n# 1_200.0,\n\
    # $bar->getEstimated()\n# );\n# \n# $this->assertEquals(\n# 600.0,\n# $bar->getRemaining()\n\
    # );\n# }\n# \n# public function testAdvanceWithStep()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 0, 0);\n# $bar->start();\n# $bar->advance(5);\n\
    # \n# rewind($output->getStream());\n# $this->assertEquals(\n# '    0 [>---------------------------]'.\n\
    # $this->generateOutput('    5 [----->----------------------]'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testAdvanceMultipleTimes()\n# {\n# $bar = new\
    \ ProgressBar($output = $this->getOutputStream(), 0, 0);\n# $bar->start();\n#\
    \ $bar->advance(3);\n# $bar->advance(2);\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# '    0 [>---------------------------]'.\n# $this->generateOutput('\
    \    3 [--->------------------------]').\n# $this->generateOutput('    5 [----->----------------------]'),\n\
    # stream_get_contents($output->getStream())\n# );\n# }\n# \n# public function\
    \ testAdvanceOverMax()\n# {\n# $bar = new ProgressBar($output = $this->getOutputStream(),\
    \ 10, 0);\n# $bar->setProgress(9);\n# $bar->advance();\n# $bar->advance();\n#\
    \ \n# rewind($output->getStream());\n# $this->assertEquals(\n# '  9/10 [=========================>--]\
    \  90%'.\n# $this->generateOutput(' 10/10 [============================] 100%').\n\
    # $this->generateOutput(' 11/11 [============================] 100%'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testRegress()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 0, 0);\n# $bar->start();\n# $bar->advance();\n#\
    \ $bar->advance();\n# $bar->advance(-1);\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# '    0 [>---------------------------]'.\n# $this->generateOutput('\
    \    1 [->--------------------------]').\n# $this->generateOutput('    2 [-->-------------------------]').\n\
    # $this->generateOutput('    1 [->--------------------------]'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testRegressWithStep()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 0, 0);\n# $bar->start();\n# $bar->advance(4);\n\
    # $bar->advance(4);\n# $bar->advance(-2);\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# '    0 [>---------------------------]'.\n# $this->generateOutput('\
    \    4 [---->-----------------------]').\n# $this->generateOutput('    8 [-------->-------------------]').\n\
    # $this->generateOutput('    6 [------>---------------------]'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testRegressMultipleTimes()\n# {\n# $bar = new\
    \ ProgressBar($output = $this->getOutputStream(), 0, 0);\n# $bar->start();\n#\
    \ $bar->advance(3);\n# $bar->advance(3);\n# $bar->advance(-1);\n# $bar->advance(-2);\n\
    # \n# rewind($output->getStream());\n# $this->assertEquals(\n# '    0 [>---------------------------]'.\n\
    # $this->generateOutput('    3 [--->------------------------]').\n# $this->generateOutput('\
    \    6 [------>---------------------]').\n# $this->generateOutput('    5 [----->----------------------]').\n\
    # $this->generateOutput('    3 [--->------------------------]'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testRegressBelowMin()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 10, 0);\n# $bar->setProgress(1);\n# $bar->advance(-1);\n\
    # $bar->advance(-1);\n# \n# rewind($output->getStream());\n# $this->assertEquals(\n\
    # '  1/10 [==>-------------------------]  10%'.\n# $this->generateOutput('  0/10\
    \ [>---------------------------]   0%'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testFormat()\n# {\n# $expected =\n# '  0/10 [>---------------------------]\
    \   0%'.\n# $this->generateOutput(' 10/10 [============================] 100%')\n\
    # ;\n# \n# // max in construct, no format\n# $bar = new ProgressBar($output =\
    \ $this->getOutputStream(), 10, 0);\n# $bar->start();\n# $bar->advance(10);\n\
    # $bar->finish();\n# \n# rewind($output->getStream());\n# $this->assertEquals($expected,\
    \ stream_get_contents($output->getStream()));\n# \n# // max in start, no format\n\
    # $bar = new ProgressBar($output = $this->getOutputStream(), 0, 0);\n# $bar->start(10);\n\
    # $bar->advance(10);\n# $bar->finish();\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals($expected, stream_get_contents($output->getStream()));\n\
    # \n# // max in construct, explicit format before\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 10, 0);\n# $bar->setFormat(ProgressBar::FORMAT_NORMAL);\n\
    # $bar->start();\n# $bar->advance(10);\n# $bar->finish();\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals($expected, stream_get_contents($output->getStream()));\n\
    # \n# // max in start, explicit format before\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 0, 0);\n# $bar->setFormat(ProgressBar::FORMAT_NORMAL);\n\
    # $bar->start(10);\n# $bar->advance(10);\n# $bar->finish();\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals($expected, stream_get_contents($output->getStream()));\n\
    # }\n# \n# public function testCustomizations()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 10, 0);\n# $bar->setBarWidth(10);\n# $bar->setBarCharacter('_');\n\
    # $bar->setEmptyBarCharacter(' ');\n# $bar->setProgressCharacter('/');\n# $bar->setFormat('\
    \ %current%/%max% [%bar%] %percent:3s%%');\n# $bar->start();\n# $bar->advance();\n\
    # \n# rewind($output->getStream());\n# $this->assertEquals(\n# '  0/10 [/    \
    \     ]   0%'.\n# $this->generateOutput('  1/10 [_/        ]  10%'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testDisplayWithoutStart()\n# {\n# $bar = new\
    \ ProgressBar($output = $this->getOutputStream(), 50, 0);\n# $bar->display();\n\
    # \n# rewind($output->getStream());\n# $this->assertEquals(\n# '  0/50 [>---------------------------]\
    \   0%',\n# stream_get_contents($output->getStream())\n# );\n# }\n# \n# public\
    \ function testDisplayWithQuietVerbosity()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(true, StreamOutput::VERBOSITY_QUIET), 50, 0);\n# $bar->display();\n\
    # \n# rewind($output->getStream());\n# $this->assertEquals(\n# '',\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testFinishWithoutStart()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 50, 0);\n# $bar->finish();\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# ' 50/50 [============================] 100%',\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testPercent()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 50, 0);\n# $bar->start();\n# $bar->display();\n\
    # $bar->advance();\n# $bar->advance();\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# '  0/50 [>---------------------------]   0%'.\n# $this->generateOutput('\
    \  1/50 [>---------------------------]   2%').\n# $this->generateOutput('  2/50\
    \ [=>--------------------------]   4%'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testOverwriteWithShorterLine()\n# {\n# $bar =\
    \ new ProgressBar($output = $this->getOutputStream(), 50, 0);\n# $bar->setFormat('\
    \ %current%/%max% [%bar%] %percent:3s%%');\n# $bar->start();\n# $bar->display();\n\
    # $bar->advance();\n# \n# // set shorter format\n# $bar->setFormat(' %current%/%max%\
    \ [%bar%]');\n# $bar->advance();\n# \n# rewind($output->getStream());\n# $this->assertEquals(\n\
    # '  0/50 [>---------------------------]   0%'.\n# $this->generateOutput('  1/50\
    \ [>---------------------------]   2%').\n# $this->generateOutput('  2/50 [=>--------------------------]'),\n\
    # stream_get_contents($output->getStream())\n# );\n# }\n# \n# public function\
    \ testOverwriteWithSectionOutput()\n# {\n# $sections = [];\n# $stream = $this->getOutputStream(true);\n\
    # $output = new ConsoleSectionOutput($stream->getStream(), $sections, $stream->getVerbosity(),\
    \ $stream->isDecorated(), new OutputFormatter());\n# \n# $bar = new ProgressBar($output,\
    \ 50, 0);\n# $bar->start();\n# $bar->display();\n# $bar->advance();\n# $bar->advance();\n\
    # \n# rewind($output->getStream());\n# $this->assertEquals(\n# '  0/50 [>---------------------------]\
    \   0%'.\\PHP_EOL.\n# \"\\x1b[1A\\x1b[0J\".'  1/50 [>---------------------------]\
    \   2%'.\\PHP_EOL.\n# \"\\x1b[1A\\x1b[0J\".'  2/50 [=>--------------------------]\
    \   4%'.\\PHP_EOL,\n# stream_get_contents($output->getStream())\n# );\n# }\n#\
    \ \n# public function testOverwriteWithAnsiSectionOutput()\n# {\n# // output has\
    \ 43 visible characters plus 2 invisible ANSI characters\n# putenv('COLUMNS=43');\n\
    # $sections = [];\n# $stream = $this->getOutputStream(true);\n# $output = new\
    \ ConsoleSectionOutput($stream->getStream(), $sections, $stream->getVerbosity(),\
    \ $stream->isDecorated(), new OutputFormatter());\n# \n# $bar = new ProgressBar($output,\
    \ 50, 0);\n# $bar->setFormat(\" \\033[44;37m%current%/%max%\\033[0m [%bar%] %percent:3s%%\"\
    );\n# $bar->start();\n# $bar->display();\n# $bar->advance();\n# $bar->advance();\n\
    # \n# rewind($output->getStream());\n# $this->assertSame(\n# \" \\033[44;37m 0/50\\\
    033[0m [>---------------------------]   0%\".\\PHP_EOL.\n# \"\\x1b[1A\\x1b[0J\
    \ \\033[44;37m 1/50\\033[0m [>---------------------------]   2%\".\\PHP_EOL.\n\
    # \"\\x1b[1A\\x1b[0J \\033[44;37m 2/50\\033[0m [=>--------------------------]\
    \   4%\".\\PHP_EOL,\n# stream_get_contents($output->getStream())\n# );\n# putenv('COLUMNS=120');\n\
    # }\n# \n# public function testOverwriteMultipleProgressBarsWithSectionOutputs()\n\
    # {\n# $sections = [];\n# $stream = $this->getOutputStream(true);\n# $output1\
    \ = new ConsoleSectionOutput($stream->getStream(), $sections, $stream->getVerbosity(),\
    \ $stream->isDecorated(), new OutputFormatter());\n# $output2 = new ConsoleSectionOutput($stream->getStream(),\
    \ $sections, $stream->getVerbosity(), $stream->isDecorated(), new OutputFormatter());\n\
    # \n# $progress = new ProgressBar($output1, 50, 0);\n# $progress2 = new ProgressBar($output2,\
    \ 50, 0);\n# \n# $progress->start();\n# $progress2->start();\n# \n# $progress2->advance();\n\
    # $progress->advance();\n# \n# rewind($stream->getStream());\n# \n# $this->assertEquals(\n\
    # '  0/50 [>---------------------------]   0%'.\\PHP_EOL.\n# '  0/50 [>---------------------------]\
    \   0%'.\\PHP_EOL.\n# \"\\x1b[1A\\x1b[0J\".'  1/50 [>---------------------------]\
    \   2%'.\\PHP_EOL.\n# \"\\x1b[2A\\x1b[0J\".'  1/50 [>---------------------------]\
    \   2%'.\\PHP_EOL.\n# \"\\x1b[1A\\x1b[0J\".'  1/50 [>---------------------------]\
    \   2%'.\\PHP_EOL.\n# '  1/50 [>---------------------------]   2%'.\\PHP_EOL,\n\
    # stream_get_contents($stream->getStream())\n# );\n# }\n# \n# public function\
    \ testOverwritWithNewlinesInMessage()\n# {\n# ProgressBar::setFormatDefinition('test',\
    \ '%current%/%max% [%bar%] %percent:3s%% %message% Fruitcake marzipan toffee.\
    \ Cupcake gummi bears tart dessert ice cream chupa chups cupcake chocolate bar\
    \ sesame snaps. Croissant halvah cookie jujubes powder macaroon. Fruitcake bear\
    \ claw bonbon jelly beans oat cake pie muffin Fruitcake marzipan toffee.');\n\
    # \n# $bar = new ProgressBar($output = $this->getOutputStream(), 50, 0);\n# $bar->setFormat('test');\n\
    # $bar->start();\n# $bar->display();\n# $bar->setMessage(\"Twas brillig, and the\
    \ slithy toves. Did gyre and gimble in the wabe: All mimsy were the borogoves,\
    \ And the mome raths outgrabe.\\nBeware the Jabberwock, my son! The jaws that\
    \ bite, the claws that catch! Beware the Jubjub bird, and shun The frumious Bandersnatch!\"\
    );\n# $bar->advance();\n# $bar->setMessage(\"He took his vorpal sword in hand;\
    \ Long time the manxome foe he sought\u2014 So rested he by the Tumtum tree And\
    \ stood awhile in thought.\\nAnd, as in uffish thought he stood, The Jabberwock,\
    \ with eyes of flame, Came whiffling through the tulgey wood, And burbled as it\
    \ came!\");\n# $bar->advance();\n# \n# rewind($output->getStream());\n# $this->assertEquals(\n\
    # \" 0/50 [>]   0% %message% Fruitcake marzipan toffee. Cupcake gummi bears tart\
    \ dessert ice cream chupa chups cupcake chocolate bar sesame snaps. Croissant\
    \ halvah cookie jujubes powder macaroon. Fruitcake bear claw bonbon jelly beans\
    \ oat cake pie muffin Fruitcake marzipan toffee.\\x1b[1G\\x1b[2K 1/50 [>]   2%\
    \ Twas brillig, and the slithy toves. Did gyre and gimble in the wabe: All mimsy\
    \ were the borogoves, And the mome raths outgrabe.\n# Beware the Jabberwock, my\
    \ son! The jaws that bite, the claws that catch! Beware the Jubjub bird, and shun\
    \ The frumious Bandersnatch! Fruitcake marzipan toffee. Cupcake gummi bears tart\
    \ dessert ice cream chupa chups cupcake chocolate bar sesame snaps. Croissant\
    \ halvah cookie jujubes powder macaroon. Fruitcake bear claw bonbon jelly beans\
    \ oat cake pie muffin Fruitcake marzipan toffee.\\x1b[1G\\x1b[2K\\x1b[1A\\x1b[1G\\\
    x1b[2K 2/50 [>]   4% He took his vorpal sword in hand; Long time the manxome foe\
    \ he sought\u2014 So rested he by the Tumtum tree And stood awhile in thought.\n\
    # And, as in uffish thought he stood, The Jabberwock, with eyes of flame, Came\
    \ whiffling through the tulgey wood, And burbled as it came! Fruitcake marzipan\
    \ toffee. Cupcake gummi bears tart dessert ice cream chupa chups cupcake chocolate\
    \ bar sesame snaps. Croissant halvah cookie jujubes powder macaroon. Fruitcake\
    \ bear claw bonbon jelly beans oat cake pie muffin Fruitcake marzipan toffee.\"\
    ,\n# stream_get_contents($output->getStream())\n# );\n# }\n# \n# public function\
    \ testOverwriteWithSectionOutputWithNewlinesInMessage()\n# {\n# $sections = [];\n\
    # $stream = $this->getOutputStream(true);\n# $output = new ConsoleSectionOutput($stream->getStream(),\
    \ $sections, $stream->getVerbosity(), $stream->isDecorated(), new OutputFormatter());\n\
    # \n# ProgressBar::setFormatDefinition('test', '%current%/%max% [%bar%] %percent:3s%%\
    \ %message% Fruitcake marzipan toffee. Cupcake gummi bears tart dessert ice cream\
    \ chupa chups cupcake chocolate bar sesame snaps. Croissant halvah cookie jujubes\
    \ powder macaroon. Fruitcake bear claw bonbon jelly beans oat cake pie muffin\
    \ Fruitcake marzipan toffee.');\n# \n# $bar = new ProgressBar($output, 50, 0);\n\
    # $bar->setFormat('test');\n# $bar->start();\n# $bar->display();\n# $bar->setMessage(\"\
    Twas brillig, and the slithy toves. Did gyre and gimble in the wabe: All mimsy\
    \ were the borogoves, And the mome raths outgrabe.\\nBeware the Jabberwock, my\
    \ son! The jaws that bite, the claws that catch! Beware the Jubjub bird, and shun\
    \ The frumious Bandersnatch!\");\n# $bar->advance();\n# $bar->setMessage(\"He\
    \ took his vorpal sword in hand; Long time the manxome foe he sought\u2014 So\
    \ rested he by the Tumtum tree And stood awhile in thought.\\nAnd, as in uffish\
    \ thought he stood, The Jabberwock, with eyes of flame, Came whiffling through\
    \ the tulgey wood, And burbled as it came!\");\n# $bar->advance();\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# ' 0/50 [>]   0% %message% Fruitcake marzipan toffee.\
    \ Cupcake gummi bears tart dessert ice cream chupa chups cupcake chocolate bar\
    \ sesame snaps. Croissant halvah cookie jujubes powder macaroon. Fruitcake bear\
    \ claw bonbon jelly beans oat cake pie muffin Fruitcake marzipan toffee.'.\\PHP_EOL.\n\
    # \"\\x1b[3A\\x1b[0J 1/50 [>]   2% Twas brillig, and the slithy toves. Did gyre\
    \ and gimble in the wabe: All mimsy were the borogoves, And the mome raths outgrabe.\n\
    # Beware the Jabberwock, my son! The jaws that bite, the claws that catch! Beware\
    \ the Jubjub bird, and shun The frumious Bandersnatch! Fruitcake marzipan toffee.\
    \ Cupcake gummi bears tart dessert ice cream chupa chups cupcake chocolate bar\
    \ sesame snaps. Croissant halvah cookie jujubes powder macaroon. Fruitcake bear\
    \ claw bonbon jelly beans oat cake pie muffin Fruitcake marzipan toffee.\".\\\
    PHP_EOL.\n# \"\\x1b[6A\\x1b[0J 2/50 [>]   4% He took his vorpal sword in hand;\
    \ Long time the manxome foe he sought\u2014 So rested he by the Tumtum tree And\
    \ stood awhile in thought.\n# And, as in uffish thought he stood, The Jabberwock,\
    \ with eyes of flame, Came whiffling through the tulgey wood, And burbled as it\
    \ came! Fruitcake marzipan toffee. Cupcake gummi bears tart dessert ice cream\
    \ chupa chups cupcake chocolate bar sesame snaps. Croissant halvah cookie jujubes\
    \ powder macaroon. Fruitcake bear claw bonbon jelly beans oat cake pie muffin\
    \ Fruitcake marzipan toffee.\".\\PHP_EOL,\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testMultipleSectionsWithCustomFormat()\n# {\n\
    # $sections = [];\n# $stream = $this->getOutputStream(true);\n# $output1 = new\
    \ ConsoleSectionOutput($stream->getStream(), $sections, $stream->getVerbosity(),\
    \ $stream->isDecorated(), new OutputFormatter());\n# $output2 = new ConsoleSectionOutput($stream->getStream(),\
    \ $sections, $stream->getVerbosity(), $stream->isDecorated(), new OutputFormatter());\n\
    # \n# ProgressBar::setFormatDefinition('test', '%current%/%max% [%bar%] %percent:3s%%\
    \ Fruitcake marzipan toffee. Cupcake gummi bears tart dessert ice cream chupa\
    \ chups cupcake chocolate bar sesame snaps. Croissant halvah cookie jujubes powder\
    \ macaroon. Fruitcake bear claw bonbon jelly beans oat cake pie muffin Fruitcake\
    \ marzipan toffee.');\n# \n# $progress = new ProgressBar($output1, 50, 0);\n#\
    \ $progress2 = new ProgressBar($output2, 50, 0);\n# $progress2->setFormat('test');\n\
    # \n# $progress->start();\n# $progress2->start();\n# \n# $progress->advance();\n\
    # $progress2->advance();\n# \n# rewind($stream->getStream());\n# \n# $this->assertEquals('\
    \  0/50 [>---------------------------]   0%'.\\PHP_EOL.\n# ' 0/50 [>]   0% Fruitcake\
    \ marzipan toffee. Cupcake gummi bears tart dessert ice cream chupa chups cupcake\
    \ chocolate bar sesame snaps. Croissant halvah cookie jujubes powder macaroon.\
    \ Fruitcake bear claw bonbon jelly beans oat cake pie muffin Fruitcake marzipan\
    \ toffee.'.\\PHP_EOL.\n# \"\\x1b[4A\\x1b[0J\".' 0/50 [>]   0% Fruitcake marzipan\
    \ toffee. Cupcake gummi bears tart dessert ice cream chupa chups cupcake chocolate\
    \ bar sesame snaps. Croissant halvah cookie jujubes powder macaroon. Fruitcake\
    \ bear claw bonbon jelly beans oat cake pie muffin Fruitcake marzipan toffee.'.\\\
    PHP_EOL.\n# \"\\x1b[3A\\x1b[0J\".'  1/50 [>---------------------------]   2%'.\\\
    PHP_EOL.\n# ' 0/50 [>]   0% Fruitcake marzipan toffee. Cupcake gummi bears tart\
    \ dessert ice cream chupa chups cupcake chocolate bar sesame snaps. Croissant\
    \ halvah cookie jujubes powder macaroon. Fruitcake bear claw bonbon jelly beans\
    \ oat cake pie muffin Fruitcake marzipan toffee.'.\\PHP_EOL.\n# \"\\x1b[3A\\x1b[0J\"\
    .' 1/50 [>]   2% Fruitcake marzipan toffee. Cupcake gummi bears tart dessert ice\
    \ cream chupa chups cupcake chocolate bar sesame snaps. Croissant halvah cookie\
    \ jujubes powder macaroon. Fruitcake bear claw bonbon jelly beans oat cake pie\
    \ muffin Fruitcake marzipan toffee.'.\\PHP_EOL,\n# stream_get_contents($stream->getStream())\n\
    # );\n# }\n# \n# public function testStartWithMax()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 0, 0);\n# $bar->setFormat('%current%/%max% [%bar%]');\n\
    # $bar->start(50);\n# $bar->advance();\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# ' 0/50 [>---------------------------]'.\n# $this->generateOutput('\
    \ 1/50 [>---------------------------]'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testSetCurrentProgress()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 50, 0);\n# $bar->start();\n# $bar->display();\n\
    # $bar->advance();\n# $bar->setProgress(15);\n# $bar->setProgress(25);\n# \n#\
    \ rewind($output->getStream());\n# $this->assertEquals(\n# '  0/50 [>---------------------------]\
    \   0%'.\n# $this->generateOutput('  1/50 [>---------------------------]   2%').\n\
    # $this->generateOutput(' 15/50 [========>-------------------]  30%').\n# $this->generateOutput('\
    \ 25/50 [==============>-------------]  50%'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testSetCurrentBeforeStarting()\n# {\n# $bar =\
    \ new ProgressBar($this->getOutputStream(), 0, 0);\n# $bar->setProgress(15);\n\
    # $this->assertNotNull($bar->getStartTime());\n# }\n# \n# public function testRedrawFrequency()\n\
    # {\n# $bar = new ProgressBar($output = $this->getOutputStream(), 6, 0);\n# $bar->setRedrawFrequency(2);\n\
    # $bar->start();\n# $bar->setProgress(1);\n# $bar->advance(2);\n# $bar->advance(2);\n\
    # $bar->advance(1);\n# \n# rewind($output->getStream());\n# $this->assertEquals(\n\
    # ' 0/6 [>---------------------------]   0%'.\n# $this->generateOutput(' 3/6 [==============>-------------]\
    \  50%').\n# $this->generateOutput(' 5/6 [=======================>----]  83%').\n\
    # $this->generateOutput(' 6/6 [============================] 100%'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testRedrawFrequencyIsAtLeastOneIfZeroGiven()\n\
    # {\n# $bar = new ProgressBar($output = $this->getOutputStream(), 0, 0);\n# $bar->setRedrawFrequency(0);\n\
    # $bar->start();\n# $bar->advance();\n# \n# rewind($output->getStream());\n# $this->assertEquals(\n\
    # '    0 [>---------------------------]'.\n# $this->generateOutput('    1 [->--------------------------]'),\n\
    # stream_get_contents($output->getStream())\n# );\n# }\n# \n# public function\
    \ testRedrawFrequencyIsAtLeastOneIfSmallerOneGiven()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 0, 0);\n# $bar->setRedrawFrequency(0);\n# $bar->start();\n\
    # $bar->advance();\n# \n# rewind($output->getStream());\n# $this->assertEquals(\n\
    # '    0 [>---------------------------]'.\n# $this->generateOutput('    1 [->--------------------------]'),\n\
    # stream_get_contents($output->getStream())\n# );\n# }\n# \n# public function\
    \ testMultiByteSupport()\n# {\n# $bar = new ProgressBar($output = $this->getOutputStream(),\
    \ 0, 0);\n# $bar->start();\n# $bar->setBarCharacter('\u25A0');\n# $bar->advance(3);\n\
    # \n# rewind($output->getStream());\n# $this->assertEquals(\n# '    0 [>---------------------------]'.\n\
    # $this->generateOutput('    3 [\u25A0\u25A0\u25A0>------------------------]'),\n\
    # stream_get_contents($output->getStream())\n# );\n# }\n# \n# public function\
    \ testClear()\n# {\n# $bar = new ProgressBar($output = $this->getOutputStream(),\
    \ 50, 0);\n# $bar->start();\n# $bar->setProgress(25);\n# $bar->clear();\n# \n\
    # rewind($output->getStream());\n# $this->assertEquals(\n# '  0/50 [>---------------------------]\
    \   0%'.\n# $this->generateOutput(' 25/50 [==============>-------------]  50%').\n\
    # $this->generateOutput(''),\n# stream_get_contents($output->getStream())\n# );\n\
    # }\n# \n# public function testPercentNotHundredBeforeComplete()\n# {\n# $bar\
    \ = new ProgressBar($output = $this->getOutputStream(), 200, 0);\n# $bar->start();\n\
    # $bar->display();\n# $bar->advance(199);\n# $bar->advance();\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# '   0/200 [>---------------------------]   0%'.\n# $this->generateOutput('\
    \ 199/200 [===========================>]  99%').\n# $this->generateOutput(' 200/200\
    \ [============================] 100%'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testNonDecoratedOutput()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(false), 200, 0);\n# $bar->start();\n# \n# for ($i =\
    \ 0; $i < 200; ++$i) {\n# $bar->advance();\n# }\n# \n# $bar->finish();\n# \n#\
    \ rewind($output->getStream());\n# $this->assertEquals(\n# '   0/200 [>---------------------------]\
    \   0%'.\\PHP_EOL.\n# '  20/200 [==>-------------------------]  10%'.\\PHP_EOL.\n\
    # '  40/200 [=====>----------------------]  20%'.\\PHP_EOL.\n# '  60/200 [========>-------------------]\
    \  30%'.\\PHP_EOL.\n# '  80/200 [===========>----------------]  40%'.\\PHP_EOL.\n\
    # ' 100/200 [==============>-------------]  50%'.\\PHP_EOL.\n# ' 120/200 [================>-----------]\
    \  60%'.\\PHP_EOL.\n# ' 140/200 [===================>--------]  70%'.\\PHP_EOL.\n\
    # ' 160/200 [======================>-----]  80%'.\\PHP_EOL.\n# ' 180/200 [=========================>--]\
    \  90%'.\\PHP_EOL.\n# ' 200/200 [============================] 100%',\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testNonDecoratedOutputWithClear()\n# {\n# $bar\
    \ = new ProgressBar($output = $this->getOutputStream(false), 50, 0);\n# $bar->start();\n\
    # $bar->setProgress(25);\n# $bar->clear();\n# $bar->setProgress(50);\n# $bar->finish();\n\
    # \n# rewind($output->getStream());\n# $this->assertEquals(\n# '  0/50 [>---------------------------]\
    \   0%'.\\PHP_EOL.\n# ' 25/50 [==============>-------------]  50%'.\\PHP_EOL.\n\
    # ' 50/50 [============================] 100%',\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testNonDecoratedOutputWithoutMax()\n# {\n# $bar\
    \ = new ProgressBar($output = $this->getOutputStream(false), 0, 0);\n# $bar->start();\n\
    # $bar->advance();\n# \n# rewind($output->getStream());\n# $this->assertEquals(\n\
    # '    0 [>---------------------------]'.\\PHP_EOL.\n# '    1 [->--------------------------]',\n\
    # stream_get_contents($output->getStream())\n# );\n# }\n# \n# public function\
    \ testParallelBars()\n# {\n# $output = $this->getOutputStream();\n# $bar1 = new\
    \ ProgressBar($output, 2, 0);\n# $bar2 = new ProgressBar($output, 3, 0);\n# $bar2->setProgressCharacter('#');\n\
    # $bar3 = new ProgressBar($output, 0, 0);\n# \n# $bar1->start();\n# $output->write(\"\
    \\n\");\n# $bar2->start();\n# $output->write(\"\\n\");\n# $bar3->start();\n# \n\
    # for ($i = 1; $i <= 3; ++$i) {\n# // up two lines\n# $output->write(\"\\033[2A\"\
    );\n# if ($i <= 2) {\n# $bar1->advance();\n# }\n# $output->write(\"\\n\");\n#\
    \ $bar2->advance();\n# $output->write(\"\\n\");\n# $bar3->advance();\n# }\n# $output->write(\"\
    \\033[2A\");\n# $output->write(\"\\n\");\n# $output->write(\"\\n\");\n# $bar3->finish();\n\
    # \n# rewind($output->getStream());\n# $this->assertEquals(\n# ' 0/2 [>---------------------------]\
    \   0%'.\"\\n\".\n# ' 0/3 [#---------------------------]   0%'.\"\\n\".\n# rtrim('\
    \    0 [>---------------------------]').\n# \n# \"\\033[2A\".\n# $this->generateOutput('\
    \ 1/2 [==============>-------------]  50%').\"\\n\".\n# $this->generateOutput('\
    \ 1/3 [=========#------------------]  33%').\"\\n\".\n# rtrim($this->generateOutput('\
    \    1 [->--------------------------]')).\n# \n# \"\\033[2A\".\n# $this->generateOutput('\
    \ 2/2 [============================] 100%').\"\\n\".\n# $this->generateOutput('\
    \ 2/3 [==================#---------]  66%').\"\\n\".\n# rtrim($this->generateOutput('\
    \    2 [-->-------------------------]')).\n# \n# \"\\033[2A\".\n# \"\\n\".\n#\
    \ $this->generateOutput(' 3/3 [============================] 100%').\"\\n\".\n\
    # rtrim($this->generateOutput('    3 [--->------------------------]')).\n# \n\
    # \"\\033[2A\".\n# \"\\n\".\n# \"\\n\".\n# rtrim($this->generateOutput('    3\
    \ [============================]')),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testWithoutMax()\n# {\n# $output = $this->getOutputStream();\n\
    # \n# $bar = new ProgressBar($output, 0, 0);\n# $bar->start();\n# $bar->advance();\n\
    # $bar->advance();\n# $bar->advance();\n# $bar->finish();\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# rtrim('    0 [>---------------------------]').\n# rtrim($this->generateOutput('\
    \    1 [->--------------------------]')).\n# rtrim($this->generateOutput('   \
    \ 2 [-->-------------------------]')).\n# rtrim($this->generateOutput('    3 [--->------------------------]')).\n\
    # rtrim($this->generateOutput('    3 [============================]')),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testSettingMaxStepsDuringProgressing()\n# {\n\
    # $output = $this->getOutputStream();\n# $bar = new ProgressBar($output, 0, 0);\n\
    # $bar->start();\n# $bar->setProgress(2);\n# $bar->setMaxSteps(10);\n# $bar->setProgress(5);\n\
    # $bar->setMaxSteps(100);\n# $bar->setProgress(10);\n# $bar->finish();\n# \n#\
    \ rewind($output->getStream());\n# $this->assertEquals(\n# rtrim('    0 [>---------------------------]').\n\
    # rtrim($this->generateOutput('    2 [-->-------------------------]')).\n# rtrim($this->generateOutput('\
    \  5/10 [==============>-------------]  50%')).\n# rtrim($this->generateOutput('\
    \  10/100 [==>-------------------------]  10%')).\n# rtrim($this->generateOutput('\
    \ 100/100 [============================] 100%')),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testWithSmallScreen()\n# {\n# $output = $this->getOutputStream();\n\
    # \n# $bar = new ProgressBar($output, 0, 0);\n# putenv('COLUMNS=12');\n# $bar->start();\n\
    # $bar->advance();\n# putenv('COLUMNS=120');\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# '    0 [>---]'.\n# $this->generateOutput('    1 [->--]'),\n\
    # stream_get_contents($output->getStream())\n# );\n# }\n# \n# public function\
    \ testAddingPlaceholderFormatter()\n# {\n# ProgressBar::setPlaceholderFormatterDefinition('remaining_steps',\
    \ fn (ProgressBar $bar) => $bar->getMaxSteps() - $bar->getProgress());\n# $bar\
    \ = new ProgressBar($output = $this->getOutputStream(), 3, 0);\n# $bar->setFormat('\
    \ %remaining_steps% [%bar%]');\n# \n# $bar->start();\n# $bar->advance();\n# $bar->finish();\n\
    # \n# rewind($output->getStream());\n# $this->assertEquals(\n# ' 3 [>---------------------------]'.\n\
    # $this->generateOutput(' 2 [=========>------------------]').\n# $this->generateOutput('\
    \ 0 [============================]'),\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testAddingInstancePlaceholderFormatter()\n# {\n\
    # $bar = new ProgressBar($output = $this->getOutputStream(), 3, 0);\n# $bar->setFormat('\
    \ %countdown% [%bar%]');\n# $bar->setPlaceholderFormatter('countdown', $function\
    \ = fn (ProgressBar $bar) => $bar->getMaxSteps() - $bar->getProgress());\n# \n\
    # $this->assertSame($function, $bar->getPlaceholderFormatter('countdown'));\n\
    # \n# $bar->start();\n# $bar->advance();\n# $bar->finish();\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# ' 3 [>---------------------------]'.\n# $this->generateOutput('\
    \ 2 [=========>------------------]').\n# $this->generateOutput(' 0 [============================]'),\n\
    # stream_get_contents($output->getStream())\n# );\n# }\n# \n# public function\
    \ testMultilineFormat()\n# {\n# $bar = new ProgressBar($output = $this->getOutputStream(),\
    \ 3, 0);\n# $bar->setFormat(\"%bar%\\nfoobar\");\n# \n# $bar->start();\n# $bar->advance();\n\
    # $bar->clear();\n# $bar->finish();\n# \n# rewind($output->getStream());\n# $this->assertEquals(\n\
    # \">---------------------------\\nfoobar\".\n# $this->generateOutput(\"=========>------------------\\\
    nfoobar\").\n# \"\\x1B[1G\\x1B[2K\\x1B[1A\".\n# $this->generateOutput('').\n#\
    \ $this->generateOutput('============================').\n# \"\\nfoobar\",\n#\
    \ stream_get_contents($output->getStream())\n# );\n# }\n# \n# public function\
    \ testAnsiColorsAndEmojis()\n# {\n# putenv('COLUMNS=156');\n# \n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 15, 0);\n# ProgressBar::setPlaceholderFormatterDefinition('memory',\
    \ function (ProgressBar $bar) {\n# static $i = 0;\n# $mem = 100000 * $i;\n# $colors\
    \ = $i++ ? '41;37' : '44;37';\n# \n# return \"\\033[\".$colors.'m '.Helper::formatMemory($mem).\"\
    \ \\033[0m\";\n# });\n# $bar->setFormat(\" \\033[44;37m %title:-37s% \\033[0m\\\
    n %current%/%max% %bar% %percent:3s%%\\n \U0001F3C1  %remaining:-10s% %memory:37s%\"\
    );\n# $bar->setBarCharacter($done = \"\\033[32m\u25CF\\033[0m\");\n# $bar->setEmptyBarCharacter($empty\
    \ = \"\\033[31m\u25CF\\033[0m\");\n# $bar->setProgressCharacter($progress = \"\
    \\033[32m\u27A4 \\033[0m\");\n# \n# $bar->setMessage('Starting the demo... fingers\
    \ crossed', 'title');\n# $bar->start();\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# \" \\033[44;37m Starting the demo... fingers crossed\
    \  \\033[0m\\n\".\n# '  0/15 '.$progress.str_repeat($empty, 26).\"   0%\\n\".\n\
    # \" \\xf0\\x9f\\x8f\\x81  < 1 sec                        \\033[44;37m 0 B \\\
    033[0m\",\n# stream_get_contents($output->getStream())\n# );\n# ftruncate($output->getStream(),\
    \ 0);\n# rewind($output->getStream());\n# \n# $bar->setMessage('Looks good to\
    \ me...', 'title');\n# $bar->advance(4);\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# $this->generateOutput(\n# \" \\033[44;37m Looks good\
    \ to me...                   \\033[0m\\n\".\n# '  4/15 '.str_repeat($done, 7).$progress.str_repeat($empty,\
    \ 19).\"  26%\\n\".\n# \" \\xf0\\x9f\\x8f\\x81  < 1 sec                     \\\
    033[41;37m 97 KiB \\033[0m\"\n# ),\n# stream_get_contents($output->getStream())\n\
    # );\n# ftruncate($output->getStream(), 0);\n# rewind($output->getStream());\n\
    # \n# $bar->setMessage('Thanks, bye', 'title');\n# $bar->finish();\n# \n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# $this->generateOutput(\n# \" \\033[44;37m Thanks, bye\
    \                           \\033[0m\\n\".\n# ' 15/15 '.str_repeat($done, 28).\"\
    \ 100%\\n\".\n# \" \\xf0\\x9f\\x8f\\x81  < 1 sec                    \\033[41;37m\
    \ 195 KiB \\033[0m\"\n# ),\n# stream_get_contents($output->getStream())\n# );\n\
    # putenv('COLUMNS=120');\n# }\n# \n# public function testSetFormat()\n# {\n# $bar\
    \ = new ProgressBar($output = $this->getOutputStream(), 0, 0);\n# $bar->setFormat(ProgressBar::FORMAT_NORMAL);\n\
    # $bar->start();\n# rewind($output->getStream());\n# $this->assertEquals(\n# '\
    \    0 [>---------------------------]',\n# stream_get_contents($output->getStream())\n\
    # );\n# \n# $bar = new ProgressBar($output = $this->getOutputStream(), 10, 0);\n\
    # $bar->setFormat(ProgressBar::FORMAT_NORMAL);\n# $bar->start();\n# rewind($output->getStream());\n\
    # $this->assertEquals(\n# '  0/10 [>---------------------------]   0%',\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testSetFormatWithTimes()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 15, 0);\n# $bar->setFormat('%current%/%max% [%bar%]\
    \ %percent:3s%% %elapsed:6s%/%estimated:-6s%/%remaining:-6s%');\n# $bar->start();\n\
    # rewind($output->getStream());\n# $this->assertEquals(\n# ' 0/15 [>---------------------------]\
    \   0% < 1 sec/< 1 sec/< 1 sec',\n# stream_get_contents($output->getStream())\n\
    # );\n# }\n# \n# public function testUnicode()\n# {\n# $bar = new ProgressBar($output\
    \ = $this->getOutputStream(), 10, 0);\n# ProgressBar::setFormatDefinition('test',\
    \ '%current%/%max% [%bar%] %percent:3s%% %message% Fruitcake marzipan toffee.\
    \ Cupcake gummi bears tart dessert ice cream chupa chups cupcake chocolate bar\
    \ sesame snaps. Croissant halvah cookie jujubes powder macaroon. Fruitcake bear\
    \ claw bonbon jelly beans oat cake pie muffin Fruitcake marzipan toffee.');\n\
    # $bar->setFormat('test');\n# $bar->setProgressCharacter('\U0001F4A7');\n# $bar->start();\n\
    # rewind($output->getStream());\n# $this->assertStringContainsString(\n# ' 0/10\
    \ [\U0001F4A7]   0%',\n# stream_get_contents($output->getStream())\n# );\n# $bar->finish();\n\
    # }\n# \n# /**\n# * @dataProvider provideFormat"
- name: provideFormat
  visibility: public
  parameters: []
  comment: '# * Provides each defined format.'
- name: testIterate
  visibility: public
  parameters: []
  comment: null
- name: testIterateUncountable
  visibility: public
  parameters: []
  comment: null
- name: testEmptyInputWithDebugFormat
  visibility: public
  parameters: []
  comment: null
- name: getOutputStream
  visibility: protected
  parameters:
  - name: decorated
    default: 'true'
  - name: verbosity
    default: StreamOutput::VERBOSITY_NORMAL
  comment: null
- name: generateOutput
  visibility: protected
  parameters:
  - name: expected
  comment: null
- name: testBarWidthWithMultilineFormat
  visibility: public
  parameters: []
  comment: null
- name: testMinAndMaxSecondsBetweenRedraws
  visibility: public
  parameters: []
  comment: null
- name: testMaxSecondsBetweenRedraws
  visibility: public
  parameters: []
  comment: null
- name: testMinSecondsBetweenRedraws
  visibility: public
  parameters: []
  comment: null
- name: testNoWriteWhenMessageIsSame
  visibility: public
  parameters: []
  comment: null
- name: testMultiLineFormatIsFullyCleared
  visibility: public
  parameters: []
  comment: null
- name: testMultiLineFormatIsFullyCorrectlyWithManuallyCleanup
  visibility: public
  parameters: []
  comment: null
- name: testGetNotSetMessage
  visibility: public
  parameters: []
  comment: null
traits:
- PHPUnit\Framework\TestCase
- Symfony\Component\Console\Formatter\OutputFormatter
- Symfony\Component\Console\Helper\Helper
- Symfony\Component\Console\Helper\ProgressBar
- Symfony\Component\Console\Output\ConsoleSectionOutput
- Symfony\Component\Console\Output\StreamOutput
interfaces: []