Skip to content
Permalink
Browse files

Fix overwrite() not replacing longer content.

When overwriting content with shorter content, we need to pad out to the
longest content that was recently output. This allows countdown timers
to be built properly.

Refs #10858
  • Loading branch information...
markstory committed Jul 5, 2017
1 parent 4bc6a54 commit 938fba08c9135d2e7974a07e2c77dc9652e826e1
Showing with 58 additions and 0 deletions.
  1. +7 −0 src/Console/ConsoleIo.php
  2. +51 −0 tests/TestCase/Console/ConsoleIoTest.php
@@ -205,6 +205,13 @@ public function overwrite($message, $newlines = 1, $size = null)
if ($newlines) {
$this->out($this->nl($newlines), 0);
}
// Store length of content + fill so if the new content
// is shorter than the old content the next overwrite
// will work.
if ($fill > 0) {
$this->_lastWritten = $newBytes + $fill;
}
}
/**
@@ -332,6 +332,57 @@ public function testOverwrite()
$this->io->overwrite('Less text');
}
/**
* Test overwriting content with shorter content
*
* @return void
*/
public function testOverwriteShorterContent()
{
$number = strlen('12345');
$this->out->expects($this->at(0))
->method('write')
->with('12345')
->will($this->returnValue($number));
// Backspaces
$this->out->expects($this->at(1))
->method('write')
->with(str_repeat("\x08", $number), 0)
->will($this->returnValue($number));
$this->out->expects($this->at(2))
->method('write')
->with('123', 0)
->will($this->returnValue(3));
// 2 spaces output to pad up to 5 bytes
$this->out->expects($this->at(3))
->method('write')
->with(str_repeat(' ', $number - 3), 0)
->will($this->returnValue($number - 3));
// Backspaces
$this->out->expects($this->at(4))
->method('write')
->with(str_repeat("\x08", $number), 0)
->will($this->returnValue($number));
$this->out->expects($this->at(5))
->method('write')
->with('12', 0)
->will($this->returnValue(2));
$this->out->expects($this->at(6))
->method('write')
->with(str_repeat(' ', $number - 2), 0);
$this->io->out('12345');
$this->io->overwrite('123', 0);
$this->io->overwrite('12', 0);
}
/**
* Tests that setLoggers works properly
*

0 comments on commit 938fba0

Please sign in to comment.
You can’t perform that action at this time.