Merge branch 'new_error_layout'
This commit is contained in:
@ -41,8 +41,10 @@ class FrontController
|
||||
/**
|
||||
* Refuse cloning
|
||||
*/
|
||||
private function __clone(){}
|
||||
|
||||
private function __clone()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @return FrontController
|
||||
*/
|
||||
@ -126,14 +128,20 @@ class FrontController
|
||||
}
|
||||
}
|
||||
return $html;
|
||||
} catch(Exception $e) {
|
||||
} catch (Exception $e) {
|
||||
if (DEBUG == true) {
|
||||
if (!headers_sent()) {
|
||||
header('HTTP/1.0 500 Internal Server Error');
|
||||
}
|
||||
return ErrorHandler::showDebug($e);
|
||||
}
|
||||
$layout = new ErrorLayout();
|
||||
$layout_class = $this->getRouter()->getErrorLayout();
|
||||
|
||||
/**
|
||||
* @var ErrorLayout $layout
|
||||
*/
|
||||
$layout = new $layout_class();
|
||||
$layout->setException($e);
|
||||
return $layout->fetch(new ErrorAction($e));
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,8 @@ class Router
|
||||
|
||||
protected $default_layout = 'Default';
|
||||
|
||||
protected $error_layout = 'Error';
|
||||
|
||||
/**
|
||||
* @var Route
|
||||
*/
|
||||
@ -51,6 +53,24 @@ class Router
|
||||
$this->default_layout = $layout;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the name of error page layout
|
||||
* @param string $layout
|
||||
*/
|
||||
public function setErrorLayout($layout = 'Error')
|
||||
{
|
||||
$this->error_layout = $layout;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns error layout name
|
||||
* @return string Error layout name
|
||||
*/
|
||||
public function getErrorLayout()
|
||||
{
|
||||
return $this->error_layout . 'Layout';
|
||||
}
|
||||
|
||||
public function getRouteName()
|
||||
{
|
||||
return $this->route_name;
|
||||
|
@ -11,5 +11,20 @@
|
||||
|
||||
class ErrorLayout extends Layout
|
||||
{
|
||||
protected function execute(){}
|
||||
/**
|
||||
* @var GeneralException
|
||||
*/
|
||||
protected $exception;
|
||||
|
||||
protected function execute()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @param GeneralException $exception
|
||||
*/
|
||||
public function setException(GeneralException $exception)
|
||||
{
|
||||
$this->exception = $exception;
|
||||
}
|
||||
}
|
@ -44,7 +44,7 @@ class FrontControllerTest extends PHPUnit_Framework_TestCase
|
||||
$this->getMock('View');
|
||||
}
|
||||
if (!class_exists('ErrorLayout')) {
|
||||
$this->getMock('ErrorLayout', array('fetch'), array(), 'ErrorLayoutMock');
|
||||
$this->getMock('ErrorLayout', array('fetch', 'setException'), array(), 'ErrorLayoutMock');
|
||||
}
|
||||
if (!class_exists('ErrorActionMock')) {
|
||||
$this->getMock('ErrorAction', array(), array(), 'ErrorActionMock', false);
|
||||
@ -190,7 +190,7 @@ class FrontControllerTest extends PHPUnit_Framework_TestCase
|
||||
$router = $controller->getRouter();
|
||||
$router->add('user', 'user/account/:id', 'user');
|
||||
$result = $controller->execute();
|
||||
$this->assertEmpty($result);
|
||||
$this->assertNull($result);
|
||||
}
|
||||
/**
|
||||
* @runInSeparateProcess
|
||||
@ -205,7 +205,7 @@ class FrontControllerTest extends PHPUnit_Framework_TestCase
|
||||
$router = $controller->getRouter();
|
||||
$router->add('user', 'user/account/:id', 'NewAjax');
|
||||
$result = $controller->execute();
|
||||
$this->assertEmpty($result);
|
||||
$this->assertNull($result);
|
||||
}
|
||||
|
||||
private function setConstants($val = false)
|
||||
@ -227,8 +227,6 @@ class FrontControllerTest extends PHPUnit_Framework_TestCase
|
||||
return 'PHPViewMock';
|
||||
case 'DefaultLayout':
|
||||
return 'DefaultLayoutMock';
|
||||
case 'userAction':
|
||||
return 'userAction';
|
||||
case 'ErrorAction':
|
||||
return 'ErrorActionMock';
|
||||
case 'ErrorLayout':
|
||||
|
@ -106,4 +106,17 @@ class RouterTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertTrue($router->routeIsExists($name));
|
||||
$this->assertFalse($router->routeIsExists($name_is_not_exists));
|
||||
}
|
||||
|
||||
public function testGetDefaultErrorLayout()
|
||||
{
|
||||
$router = new Router();
|
||||
$this->assertSame('ErrorLayout', $router->getErrorLayout());
|
||||
}
|
||||
|
||||
public function testSetErrorLayout()
|
||||
{
|
||||
$router = new Router();
|
||||
$router->setErrorLayout('CustomError');
|
||||
$this->assertSame('CustomErrorLayout', $router->getErrorLayout());
|
||||
}
|
||||
}
|
||||
|
82
tests/layout/ErrorLayoutTest.php
Normal file
82
tests/layout/ErrorLayoutTest.php
Normal file
@ -0,0 +1,82 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright NetMonsters <team@netmonsters.ru>
|
||||
* @link http://netmonsters.ru
|
||||
* @package Majestic
|
||||
* @subpackage UnitTests
|
||||
* @since 04-06-2012
|
||||
* @user: agrebnev
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../exception/ErrorHandler.php';
|
||||
require_once dirname(__FILE__) . '/../../exception/GeneralException.php';
|
||||
require_once dirname(__FILE__) . '/../../app/FrontController.php';
|
||||
require_once dirname(__FILE__) . '/../../layout/Layout.php';
|
||||
require_once dirname(__FILE__) . '/../../layout/Error.layout.php';
|
||||
|
||||
/**
|
||||
* @runTestsInSeparateProcesses
|
||||
*/
|
||||
class ErrorLayoutTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
|
||||
public function run(PHPUnit_Framework_TestResult $result = NULL)
|
||||
{
|
||||
$this->setPreserveGlobalState(false);
|
||||
return parent::run($result);
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
if (!class_exists('RouterMock')) {
|
||||
$this->getMock('Router', array(), array(), 'RouterMock', false);
|
||||
}
|
||||
if (!class_exists('PHPViewMock')) {
|
||||
$this->getMock('PHPView', array('fetch', 'append', 'prepend', 'assign', 'getTemplate'), array(), 'PHPViewMock', false);
|
||||
}
|
||||
|
||||
set_new_overload(array($this, 'newCallback'));
|
||||
}
|
||||
|
||||
public function testSetException()
|
||||
{
|
||||
if (!defined('DEBUG')) {
|
||||
define('DEBUG', false);
|
||||
}
|
||||
$layout = new ErrorLayout();
|
||||
$layout->setException(new GeneralException());
|
||||
$this->assertAttributeInstanceOf('GeneralException', 'exception', $layout);
|
||||
}
|
||||
|
||||
public function testExecute()
|
||||
{
|
||||
if (!defined('DEBUG')) {
|
||||
define('DEBUG', false);
|
||||
}
|
||||
$action = $this->getMock('Action', array('fetch'));
|
||||
$action->expects($this->once())
|
||||
->method('fetch')
|
||||
->will($this->returnValue('this is the result of Action::fetch()'));
|
||||
|
||||
$layout = new ErrorLayout();
|
||||
$layout->fetch($action);
|
||||
}
|
||||
|
||||
|
||||
protected function newCallback($className)
|
||||
{
|
||||
switch ($className) {
|
||||
case 'Router':
|
||||
return 'RouterMock';
|
||||
case 'PHPView':
|
||||
return 'PHPViewMock';
|
||||
default:
|
||||
return $className;
|
||||
}
|
||||
}
|
||||
|
||||
public function tearDown()
|
||||
{
|
||||
unset_new_overload();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user