cakephp2-php8/lib/Cake/Test/Case/Console/Helper/ProgressHelperTest.php
2015-12-01 12:03:09 +00:00

217 lines
No EOL
6.4 KiB
PHP

<?php
App::uses("ProgressHelper", "Console/Helper");
App::uses("ConsoleOutputStub", "TestSuite/Stub");
/**
* ProgressHelper test.
* @property ConsoleOutputStub $consoleOutput
* @property ProgressHelper $helper
*/
class ProgressHelperTest extends CakeTestCase
{
/**
* setUp method
*
* @return void
*/
public function setUp()
{
parent::setUp();
$this->consoleOutput = new ConsoleOutputStub();
$this->helper = new ProgressHelper($this->consoleOutput);
}
/**
* Test that a callback is required.*
* @expectedException \RuntimeException
*/
public function testOutputFailure()
{
$this->helper->output(['not a callback']);
}
/**
* Test that the callback is invoked until 100 is reached.
*
* @return void
*/
public function testOutputSuccess()
{
$this->helper->output([function ($progress) {
$progress->increment(20);
}]);
$expected = [
'',
'==============> 20%',
'',
'=============================> 40%',
'',
'============================================> 60%',
'',
'===========================================================> 80%',
'',
'==========================================================================> 100%',
'',
];
$this->assertEquals($expected, $this->consoleOutput->messages());
}
/**
* Test output with options
*
* @return void
*/
public function testOutputSuccessOptions()
{
$this->helper->output([
'total' => 10,
'width' => 20,
'callback' => function ($progress) {
$progress->increment(2);
}
]);
$expected = [
'',
'==> 20%',
'',
'=====> 40%',
'',
'========> 60%',
'',
'===========> 80%',
'',
'==============> 100%',
'',
];
$this->assertEquals($expected, $this->consoleOutput->messages());
}
/**
* Test using the helper manually.
*
* @return void
*/
public function testIncrementAndRender()
{
$this->helper->init();
$this->helper->increment(20);
$this->helper->draw();
$this->helper->increment(40);
$this->helper->draw();
$this->helper->increment(40);
$this->helper->draw();
$expected = [
'',
'==============> 20%',
'',
'============================================> 60%',
'',
'==========================================================================> 100%',
];
$this->assertEquals($expected, $this->consoleOutput->messages());
}
/**
* Test negative numbers
*
* @return void
*/
public function testIncrementWithNegatives()
{
$this->helper->init();
$this->helper->increment(40);
$this->helper->draw();
$this->helper->increment(-60);
$this->helper->draw();
$this->helper->increment(80);
$this->helper->draw();
$expected = [
'',
'=============================> 40%',
'',
' 0%',
'',
'===========================================================> 80%',
];
$this->assertEquals($expected, $this->consoleOutput->messages());
}
/**
* Test increment and draw with options
*
* @return void
*/
public function testIncrementWithOptions()
{
$this->helper->init([
'total' => 10,
'width' => 20,
]);
$this->helper->increment(4);
$this->helper->draw();
$this->helper->increment(4);
$this->helper->draw();
$this->helper->increment(4);
$this->helper->draw();
$expected = [
'',
'=====> 40%',
'',
'===========> 80%',
'',
'==============> 100%',
];
$this->assertEquals($expected, $this->consoleOutput->messages());
}
/**
* Test increment and draw with value that makes the pad
* be a float
*
* @return void
*/
public function testIncrementFloatPad()
{
$this->helper->init([
'total' => 50
]);
$this->helper->increment(7);
$this->helper->draw();
$this->helper->increment(7);
$this->helper->draw();
$this->helper->increment(7);
$this->helper->draw();
$this->helper->increment(7);
$this->helper->draw();
$this->helper->increment(7);
$this->helper->draw();
$this->helper->increment(3);
$this->helper->draw();
$this->helper->increment(4);
$this->helper->draw();
$this->helper->increment(8);
$this->helper->draw();
$expected = [
'',
'=========> 14%',
'',
'====================> 28%',
'',
'==============================> 42%',
'',
'=========================================> 56%',
'',
'===================================================> 70%',
'',
'========================================================> 76%',
'',
'==============================================================> 84%',
'',
'==========================================================================> 100%',
];
$this->assertEquals($expected, $this->consoleOutput->messages());
}
}