* @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 frdom callback.', stream_get_contents($this->stream)); } public function callbackWithThrow() { throw new ErrorException('Error from callback.'); } }