public function testProcessExceptionCatching() { CM_Config::get()->CM_Http_Response_Page->exceptionsToCatch = ['CM_Exception_InvalidParam' => ['errorPage' => 'CM_Page_Error_NotFound', 'log' => null]]; $this->getMock('CM_Layout_Abstract', null, [], 'CM_Layout_Default'); $request = CMTest_TH::createResponsePage('/example')->getRequest(); /** @var CM_Http_Response_Page|\Mocka\AbstractClassTrait $response */ $response = $this->mockObject('CM_Http_Response_Page', [$request, CMTest_TH::getServiceManager()]); $response->mockMethod('_renderPage')->set(function (CM_Page_Abstract $page) { if ($page instanceof CM_Page_Example) { throw new CM_Exception_InvalidParam(); } return '<html>Error</html>'; }); $this->assertSame('/example', $response->getRequest()->getPath()); $response->process(); $this->assertSame('/error/not-found', $response->getRequest()->getPath()); }
public function testProcessExceptionCatching() { CM_Config::get()->CM_Http_Response_Page->exceptionsToCatch = ['CM_Exception_InvalidParam' => ['errorPage' => 'CM_Page_Error_NotFound', 'log' => null]]; $this->getMock('CM_Layout_Abstract', null, [], 'CM_Layout_Default'); $request = CMTest_TH::createResponsePage('/example')->getRequest(); $response = $this->mockObject('CM_Http_Response_Page', [$request, CMTest_TH::getServiceManager()]); $response->mockMethod('_renderPage')->set(function () { static $counter = 0; if ($counter++ === 0) { // don't throw when rendering the error-page the request was redirected to throw new CM_Exception_InvalidParam(); } }); /** @var CM_Http_Response_Page $response */ $this->assertSame('/example', $response->getRequest()->getPath()); $response->process(); $this->assertSame('/error/not-found', $response->getRequest()->getPath()); }