You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
3.3 KiB

<?php
/**
* @copyright NetMonsters <team@netmonsters.ru>
* @link http://netmonsters.ru
* @package Majestic
* @subpackage Tests app
* @since 10.07.12
*
*/
require_once __DIR__ . '/../../util/profiler/Profiler.php';
require_once __DIR__ . '/../../exception/GeneralException.php';
require_once __DIR__ . '/../../exception/Error404Exception.php';
require_once __DIR__ . '/../../exception/ErrorHandler.php';
require_once __DIR__ . '/../../app/CliController.php';
require_once __DIR__ . '/../../Registry.php';
require_once __DIR__ . '/../../Config.php';
require_once __DIR__ . '/../../app/iCli.php';
/**
* @desc CliController tests
* @author Aleksandr Demidov
*/
class CliControllerTest extends PHPUnit_Framework_TestCase
{
protected $stream;
public function testGetInstance()
{
$instance = CliController::getInstance();
$this->assertInstanceOf('CliController', $instance);
}
public function testExecute()
{
Config::set('PROFILER', false);
$cli_class = $this->getMockForAbstractClass('iCli', array(), '', '', '', '', array('run'));
$cli_class->expects($this->once())
->method('run')
->with();
CliController::getInstance()->execute($cli_class);
}
public function testExecuteWithProfiler()
{
ob_start();
Config::set('PROFILER', true);
$cli_class = $this->getMockForAbstractClass('iCli', array(), '', '', '', '', array('run'));
$cli_class->expects($this->once())
->method('run')
->with();
CliController::getInstance()->execute($cli_class);
$output = ob_get_clean();
$this->assertContains('Elapsed time:', $output);
}
/**
* @runInSeparateProcess
*/
public function testExecuteImplementError()
{
$cli_class = new StdClass();
$cli_controller = CliController::getInstance();
$error_stream_prop = new ReflectionProperty($cli_controller, 'error_stream');
$this->stream = fopen('php://memory', 'rw');
$error_stream_prop->setAccessible(true);
$error_stream_prop->setValue($cli_controller, $this->stream);
$cli_controller->execute($cli_class);
rewind($this->stream);
$this->assertContains('Runner "' . get_class($cli_class) . '" need implement of "iCli" interface.', stream_get_contents($this->stream));
}
/**
* @runInSeparateProcess
*/
public function testExecuteWithRunThrowError()
{
Config::set('PROFILER', false);
$cli_class = $this->getMockForAbstractClass('iCli', array(), '', '', '', '', array('run'));
$cli_class->expects($this->once())
->method('run')
->with()
->will($this->returnCallback(array($this, 'callbackWithThrow')));
$cli_controller = CliController::getInstance();
$error_stream_prop = new ReflectionProperty($cli_controller, 'error_stream');
$this->stream = fopen('php://memory', 'rw');
$error_stream_prop->setAccessible(true);
$error_stream_prop->setValue($cli_controller, $this->stream);
$cli_controller->execute($cli_class);
rewind($this->stream);
$this->assertContains('Error from callback.', stream_get_contents($this->stream));
}
public function callbackWithThrow()
{
throw new ErrorException('Error from callback.');
}
}