[Console] ProgressBar clears too many lines on update
This commit is contained in:
parent
bbf786c3db
commit
2aa3df0c74
@ -441,7 +441,7 @@ final class ProgressBar
|
|||||||
if ($this->overwrite) {
|
if ($this->overwrite) {
|
||||||
if (null !== $this->previousMessage) {
|
if (null !== $this->previousMessage) {
|
||||||
if ($this->output instanceof ConsoleSectionOutput) {
|
if ($this->output instanceof ConsoleSectionOutput) {
|
||||||
$lines = floor(Helper::strlen($message) / $this->terminal->getWidth()) + $this->formatLineCount + 1;
|
$lines = floor(Helper::strlenWithoutDecoration($this->output->getFormatter(), $message) / $this->terminal->getWidth()) + $this->formatLineCount + 1;
|
||||||
$this->output->clear($lines);
|
$this->output->clear($lines);
|
||||||
} else {
|
} else {
|
||||||
// Erase previous lines
|
// Erase previous lines
|
||||||
|
@ -343,6 +343,31 @@ class ProgressBarTest extends TestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testOverwriteWithAnsiSectionOutput()
|
||||||
|
{
|
||||||
|
// output has 43 visible characters plus 2 invisible ANSI characters
|
||||||
|
putenv('COLUMNS=43');
|
||||||
|
$sections = [];
|
||||||
|
$stream = $this->getOutputStream(true);
|
||||||
|
$output = new ConsoleSectionOutput($stream->getStream(), $sections, $stream->getVerbosity(), $stream->isDecorated(), new OutputFormatter());
|
||||||
|
|
||||||
|
$bar = new ProgressBar($output, 50, 0);
|
||||||
|
$bar->setFormat(" \033[44;37m%current%/%max%\033[0m [%bar%] %percent:3s%%");
|
||||||
|
$bar->start();
|
||||||
|
$bar->display();
|
||||||
|
$bar->advance();
|
||||||
|
$bar->advance();
|
||||||
|
|
||||||
|
rewind($output->getStream());
|
||||||
|
$this->assertSame(
|
||||||
|
" \033[44;37m 0/50\033[0m [>---------------------------] 0%".\PHP_EOL.
|
||||||
|
"\x1b[1A\x1b[0J"." \033[44;37m 1/50\033[0m [>---------------------------] 2%".\PHP_EOL.
|
||||||
|
"\x1b[1A\x1b[0J"." \033[44;37m 2/50\033[0m [=>--------------------------] 4%".\PHP_EOL,
|
||||||
|
stream_get_contents($output->getStream())
|
||||||
|
);
|
||||||
|
putenv('COLUMNS=120');
|
||||||
|
}
|
||||||
|
|
||||||
public function testOverwriteMultipleProgressBarsWithSectionOutputs()
|
public function testOverwriteMultipleProgressBarsWithSectionOutputs()
|
||||||
{
|
{
|
||||||
$sections = [];
|
$sections = [];
|
||||||
|
Reference in New Issue
Block a user