1
0
Fork 0
MySQLDumper/library/Zend/Test/PHPUnit/ControllerTestCase.php
2011-06-10 21:55:32 +00:00

1217 Zeilen
39 KiB
PHP

<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Test
* @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id$
*/
/** @see PHPUnit_Runner_Version */
require_once 'PHPUnit/Runner/Version.php';
/**
* Depending on version, include the proper PHPUnit support
* @see PHPUnit_Autoload
*/
require_once (version_compare(PHPUnit_Runner_Version::id(), '3.5.0', '>=')) ? 'PHPUnit/Autoload.php' : 'PHPUnit/Framework.php';
/** @see Zend_Controller_Front */
require_once 'Zend/Controller/Front.php';
/** @see Zend_Controller_Action_HelperBroker */
require_once 'Zend/Controller/Action/HelperBroker.php';
/** @see Zend_Layout */
require_once 'Zend/Layout.php';
/** @see Zend_Session */
require_once 'Zend/Session.php';
/** @see Zend_Registry */
require_once 'Zend/Registry.php';
/**
* Functional testing scaffold for MVC applications
*
* @uses PHPUnit_Framework_TestCase
* @category Zend
* @package Zend_Test
* @subpackage PHPUnit
* @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
abstract class Zend_Test_PHPUnit_ControllerTestCase extends PHPUnit_Framework_TestCase
{
/**
* @var mixed Bootstrap file path or callback
*/
public $bootstrap;
/**
* @var Zend_Controller_Front
*/
protected $_frontController;
/**
* @var Zend_Dom_Query
*/
protected $_query;
/**
* @var Zend_Controller_Request_Abstract
*/
protected $_request;
/**
* @var Zend_Controller_Response_Abstract
*/
protected $_response;
/**
* XPath namespaces
* @var array
*/
protected $_xpathNamespaces = array();
/**
* Overloading: prevent overloading to special properties
*
* @param string $name
* @param mixed $value
* @return void
*/
public function __set($name, $value)
{
if (in_array($name, array('request', 'response', 'frontController'))) {
require_once 'Zend/Exception.php';
throw new Zend_Exception(sprintf('Setting %s object manually is not allowed', $name));
}
$this->$name = $value;
}
/**
* Overloading for common properties
*
* Provides overloading for request, response, and frontController objects.
*
* @param mixed $name
* @return void
*/
public function __get($name)
{
switch ($name) {
case 'request':
return $this->getRequest();
case 'response':
return $this->getResponse();
case 'frontController':
return $this->getFrontController();
}
return null;
}
/**
* Set up MVC app
*
* Calls {@link bootstrap()} by default
*
* @return void
*/
protected function setUp()
{
$this->bootstrap();
}
/**
* Bootstrap the front controller
*
* Resets the front controller, and then bootstraps it.
*
* If {@link $bootstrap} is a callback, executes it; if it is a file, it include's
* it. When done, sets the test case request and response objects into the
* front controller.
*
* @return void
*/
final public function bootstrap()
{
$this->reset();
if (null !== $this->bootstrap) {
if ($this->bootstrap instanceof Zend_Application) {
$this->bootstrap->bootstrap();
$this->_frontController = $this->bootstrap->getBootstrap()->getResource('frontcontroller');
} elseif (is_callable($this->bootstrap)) {
call_user_func($this->bootstrap);
} elseif (is_string($this->bootstrap)) {
require_once 'Zend/Loader.php';
if (Zend_Loader::isReadable($this->bootstrap)) {
include $this->bootstrap;
}
}
}
$this->frontController
->setRequest($this->getRequest())
->setResponse($this->getResponse());
}
/**
* Dispatch the MVC
*
* If a URL is provided, sets it as the request URI in the request object.
* Then sets test case request and response objects in front controller,
* disables throwing exceptions, and disables returning the response.
* Finally, dispatches the front controller.
*
* @param string|null $url
* @return void
*/
public function dispatch($url = null)
{
// redirector should not exit
$redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$redirector->setExit(false);
// json helper should not exit
$json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
$json->suppressExit = true;
$request = $this->getRequest();
if (null !== $url) {
$request->setRequestUri($url);
}
$request->setPathInfo(null);
$controller = $this->getFrontController();
$this->frontController
->setRequest($request)
->setResponse($this->getResponse())
->throwExceptions(false)
->returnResponse(false);
if ($this->bootstrap instanceof Zend_Application) {
$this->bootstrap->run();
} else {
$this->frontController->dispatch();
}
}
/**
* Reset MVC state
*
* Creates new request/response objects, resets the front controller
* instance, and resets the action helper broker.
*
* @todo Need to update Zend_Layout to add a resetInstance() method
* @return void
*/
public function reset()
{
$_SESSION = array();
$_GET = array();
$_POST = array();
$_COOKIE = array();
$this->resetRequest();
$this->resetResponse();
Zend_Layout::resetMvcInstance();
Zend_Controller_Action_HelperBroker::resetHelpers();
$this->frontController->resetInstance();
Zend_Session::$_unitTestEnabled = true;
}
/**
* Rest all view placeholders
*
* @return void
*/
protected function _resetPlaceholders()
{
$registry = Zend_Registry::getInstance();
$remove = array();
foreach ($registry as $key => $value) {
if (strstr($key, '_View_')) {
$remove[] = $key;
}
}
foreach ($remove as $key) {
unset($registry[$key]);
}
}
/**
* Reset the request object
*
* Useful for test cases that need to test multiple trips to the server.
*
* @return Zend_Test_PHPUnit_ControllerTestCase
*/
public function resetRequest()
{
if ($this->_request instanceof Zend_Controller_Request_HttpTestCase) {
$this->_request->clearQuery()
->clearPost();
}
$this->_request = null;
return $this;
}
/**
* Reset the response object
*
* Useful for test cases that need to test multiple trips to the server.
*
* @return Zend_Test_PHPUnit_ControllerTestCase
*/
public function resetResponse()
{
$this->_response = null;
$this->_resetPlaceholders();
return $this;
}
/**
* Assert against DOM selection
*
* @param string $path CSS selector path
* @param string $message
* @return void
*/
public function assertQuery($path, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against DOM selection
*
* @param string $path CSS selector path
* @param string $message
* @return void
*/
public function assertNotQuery($path, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against DOM selection; node should contain content
*
* @param string $path CSS selector path
* @param string $match content that should be contained in matched nodes
* @param string $message
* @return void
*/
public function assertQueryContentContains($path, $match, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $match)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against DOM selection; node should NOT contain content
*
* @param string $path CSS selector path
* @param string $match content that should NOT be contained in matched nodes
* @param string $message
* @return void
*/
public function assertNotQueryContentContains($path, $match, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $match)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against DOM selection; node should match content
*
* @param string $path CSS selector path
* @param string $pattern Pattern that should be contained in matched nodes
* @param string $message
* @return void
*/
public function assertQueryContentRegex($path, $pattern, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $pattern)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against DOM selection; node should NOT match content
*
* @param string $path CSS selector path
* @param string $pattern pattern that should NOT be contained in matched nodes
* @param string $message
* @return void
*/
public function assertNotQueryContentRegex($path, $pattern, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $pattern)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against DOM selection; should contain exact number of nodes
*
* @param string $path CSS selector path
* @param string $count Number of nodes that should match
* @param string $message
* @return void
*/
public function assertQueryCount($path, $count, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $count)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against DOM selection; should NOT contain exact number of nodes
*
* @param string $path CSS selector path
* @param string $count Number of nodes that should NOT match
* @param string $message
* @return void
*/
public function assertNotQueryCount($path, $count, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $count)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against DOM selection; should contain at least this number of nodes
*
* @param string $path CSS selector path
* @param string $count Minimum number of nodes that should match
* @param string $message
* @return void
*/
public function assertQueryCountMin($path, $count, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $count)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against DOM selection; should contain no more than this number of nodes
*
* @param string $path CSS selector path
* @param string $count Maximum number of nodes that should match
* @param string $message
* @return void
*/
public function assertQueryCountMax($path, $count, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $count)) {
$constraint->fail($path, $message);
}
}
/**
* Register XPath namespaces
*
* @param array $xpathNamespaces
* @return void
*/
public function registerXpathNamespaces($xpathNamespaces)
{
$this->_xpathNamespaces = $xpathNamespaces;
}
/**
* Assert against XPath selection
*
* @param string $path XPath path
* @param string $message
* @return void
*/
public function assertXpath($path, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$constraint->registerXpathNamespaces($this->_xpathNamespaces);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against XPath selection
*
* @param string $path XPath path
* @param string $message
* @return void
*/
public function assertNotXpath($path, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$constraint->registerXpathNamespaces($this->_xpathNamespaces);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against XPath selection; node should contain content
*
* @param string $path XPath path
* @param string $match content that should be contained in matched nodes
* @param string $message
* @return void
*/
public function assertXpathContentContains($path, $match, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$constraint->registerXpathNamespaces($this->_xpathNamespaces);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $match)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against XPath selection; node should NOT contain content
*
* @param string $path XPath path
* @param string $match content that should NOT be contained in matched nodes
* @param string $message
* @return void
*/
public function assertNotXpathContentContains($path, $match, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$constraint->registerXpathNamespaces($this->_xpathNamespaces);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $match)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against XPath selection; node should match content
*
* @param string $path XPath path
* @param string $pattern Pattern that should be contained in matched nodes
* @param string $message
* @return void
*/
public function assertXpathContentRegex($path, $pattern, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$constraint->registerXpathNamespaces($this->_xpathNamespaces);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $pattern)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against XPath selection; node should NOT match content
*
* @param string $path XPath path
* @param string $pattern pattern that should NOT be contained in matched nodes
* @param string $message
* @return void
*/
public function assertNotXpathContentRegex($path, $pattern, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$constraint->registerXpathNamespaces($this->_xpathNamespaces);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $pattern)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against XPath selection; should contain exact number of nodes
*
* @param string $path XPath path
* @param string $count Number of nodes that should match
* @param string $message
* @return void
*/
public function assertXpathCount($path, $count, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$constraint->registerXpathNamespaces($this->_xpathNamespaces);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $count)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against XPath selection; should NOT contain exact number of nodes
*
* @param string $path XPath path
* @param string $count Number of nodes that should NOT match
* @param string $message
* @return void
*/
public function assertNotXpathCount($path, $count, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$constraint->registerXpathNamespaces($this->_xpathNamespaces);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $count)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against XPath selection; should contain at least this number of nodes
*
* @param string $path XPath path
* @param string $count Minimum number of nodes that should match
* @param string $message
* @return void
*/
public function assertXpathCountMin($path, $count, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$constraint->registerXpathNamespaces($this->_xpathNamespaces);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $count)) {
$constraint->fail($path, $message);
}
}
/**
* Assert against XPath selection; should contain no more than this number of nodes
*
* @param string $path XPath path
* @param string $count Maximum number of nodes that should match
* @param string $message
* @return void
*/
public function assertXpathCountMax($path, $count, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/DomQuery.php';
$constraint = new Zend_Test_PHPUnit_Constraint_DomQuery($path);
$constraint->registerXpathNamespaces($this->_xpathNamespaces);
$content = $this->response->outputBody();
if (!$constraint->evaluate($content, __FUNCTION__, $count)) {
$constraint->fail($path, $message);
}
}
/**
* Assert that response is a redirect
*
* @param string $message
* @return void
*/
public function assertRedirect($message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php';
$constraint = new Zend_Test_PHPUnit_Constraint_Redirect();
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__)) {
$constraint->fail($response, $message);
}
}
/**
* Assert that response is NOT a redirect
*
* @param string $message
* @return void
*/
public function assertNotRedirect($message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php';
$constraint = new Zend_Test_PHPUnit_Constraint_Redirect();
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__)) {
$constraint->fail($response, $message);
}
}
/**
* Assert that response redirects to given URL
*
* @param string $url
* @param string $message
* @return void
*/
public function assertRedirectTo($url, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php';
$constraint = new Zend_Test_PHPUnit_Constraint_Redirect();
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__, $url)) {
$constraint->fail($response, $message);
}
}
/**
* Assert that response does not redirect to given URL
*
* @param string $url
* @param string $message
* @return void
*/
public function assertNotRedirectTo($url, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php';
$constraint = new Zend_Test_PHPUnit_Constraint_Redirect();
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__, $url)) {
$constraint->fail($response, $message);
}
}
/**
* Assert that redirect location matches pattern
*
* @param string $pattern
* @param string $message
* @return void
*/
public function assertRedirectRegex($pattern, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php';
$constraint = new Zend_Test_PHPUnit_Constraint_Redirect();
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__, $pattern)) {
$constraint->fail($response, $message);
}
}
/**
* Assert that redirect location does not match pattern
*
* @param string $pattern
* @param string $message
* @return void
*/
public function assertNotRedirectRegex($pattern, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/Redirect.php';
$constraint = new Zend_Test_PHPUnit_Constraint_Redirect();
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__, $pattern)) {
$constraint->fail($response, $message);
}
}
/**
* Assert response code
*
* @param int $code
* @param string $message
* @return void
*/
public function assertResponseCode($code, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php';
$constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader();
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__, $code)) {
$constraint->fail($response, $message);
}
}
/**
* Assert response code
*
* @param int $code
* @param string $message
* @return void
*/
public function assertNotResponseCode($code, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php';
$constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader();
$constraint->setNegate(true);
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__, $code)) {
$constraint->fail($response, $message);
}
}
/**
* Assert response header exists
*
* @param string $header
* @param string $message
* @return void
*/
public function assertHeader($header, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php';
$constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader();
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__, $header)) {
$constraint->fail($response, $message);
}
}
/**
* Assert response header does not exist
*
* @param string $header
* @param string $message
* @return void
*/
public function assertNotHeader($header, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php';
$constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader();
$constraint->setNegate(true);
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__, $header)) {
$constraint->fail($response, $message);
}
}
/**
* Assert response header exists and contains the given string
*
* @param string $header
* @param string $match
* @param string $message
* @return void
*/
public function assertHeaderContains($header, $match, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php';
$constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader();
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__, $header, $match)) {
$constraint->fail($response, $message);
}
}
/**
* Assert response header does not exist and/or does not contain the given string
*
* @param string $header
* @param string $match
* @param string $message
* @return void
*/
public function assertNotHeaderContains($header, $match, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php';
$constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader();
$constraint->setNegate(true);
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__, $header, $match)) {
$constraint->fail($response, $message);
}
}
/**
* Assert response header exists and matches the given pattern
*
* @param string $header
* @param string $pattern
* @param string $message
* @return void
*/
public function assertHeaderRegex($header, $pattern, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php';
$constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader();
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__, $header, $pattern)) {
$constraint->fail($response, $message);
}
}
/**
* Assert response header does not exist and/or does not match the given regex
*
* @param string $header
* @param string $pattern
* @param string $message
* @return void
*/
public function assertNotHeaderRegex($header, $pattern, $message = '')
{
$this->_incrementAssertionCount();
require_once 'Zend/Test/PHPUnit/Constraint/ResponseHeader.php';
$constraint = new Zend_Test_PHPUnit_Constraint_ResponseHeader();
$constraint->setNegate(true);
$response = $this->response;
if (!$constraint->evaluate($response, __FUNCTION__, $header, $pattern)) {
$constraint->fail($response, $message);
}
}
/**
* Assert that the last handled request used the given module
*
* @param string $module
* @param string $message
* @return void
*/
public function assertModule($module, $message = '')
{
$this->_incrementAssertionCount();
if ($module != $this->request->getModuleName()) {
$msg = sprintf('Failed asserting last module used <"%s"> was "%s"',
$this->request->getModuleName(),
$module
);
if (!empty($message)) {
$msg = $message . "\n" . $msg;
}
$this->fail($msg);
}
}
/**
* Assert that the last handled request did NOT use the given module
*
* @param string $module
* @param string $message
* @return void
*/
public function assertNotModule($module, $message = '')
{
$this->_incrementAssertionCount();
if ($module == $this->request->getModuleName()) {
$msg = sprintf('Failed asserting last module used was NOT "%s"', $module);
if (!empty($message)) {
$msg = $message . "\n" . $msg;
}
$this->fail($msg);
}
}
/**
* Assert that the last handled request used the given controller
*
* @param string $controller
* @param string $message
* @return void
*/
public function assertController($controller, $message = '')
{
$this->_incrementAssertionCount();
if ($controller != $this->request->getControllerName()) {
$msg = sprintf('Failed asserting last controller used <"%s"> was "%s"',
$this->request->getControllerName(),
$controller
);
if (!empty($message)) {
$msg = $message . "\n" . $msg;
}
$this->fail($msg);
}
}
/**
* Assert that the last handled request did NOT use the given controller
*
* @param string $controller
* @param string $message
* @return void
*/
public function assertNotController($controller, $message = '')
{
$this->_incrementAssertionCount();
if ($controller == $this->request->getControllerName()) {
$msg = sprintf('Failed asserting last controller used <"%s"> was NOT "%s"',
$this->request->getControllerName(),
$controller
);
if (!empty($message)) {
$msg = $message . "\n" . $msg;
}
$this->fail($msg);
}
}
/**
* Assert that the last handled request used the given action
*
* @param string $action
* @param string $message
* @return void
*/
public function assertAction($action, $message = '')
{
$this->_incrementAssertionCount();
if ($action != $this->request->getActionName()) {
$msg = sprintf('Failed asserting last action used <"%s"> was "%s"', $this->request->getActionName(), $action);
if (!empty($message)) {
$msg = $message . "\n" . $msg;
}
$this->fail($msg);
}
}
/**
* Assert that the last handled request did NOT use the given action
*
* @param string $action
* @param string $message
* @return void
*/
public function assertNotAction($action, $message = '')
{
$this->_incrementAssertionCount();
if ($action == $this->request->getActionName()) {
$msg = sprintf('Failed asserting last action used <"%s"> was NOT "%s"', $this->request->getActionName(), $action);
if (!empty($message)) {
$msg = $message . "\n" . $msg;
}
$this->fail($msg);
}
}
/**
* Assert that the specified route was used
*
* @param string $route
* @param string $message
* @return void
*/
public function assertRoute($route, $message = '')
{
$this->_incrementAssertionCount();
$router = $this->frontController->getRouter();
if ($route != $router->getCurrentRouteName()) {
$msg = sprintf('Failed asserting matched route was "%s", actual route is %s',
$route,
$router->getCurrentRouteName()
);
if (!empty($message)) {
$msg = $message . "\n" . $msg;
}
$this->fail($msg);
}
}
/**
* Assert that the route matched is NOT as specified
*
* @param string $route
* @param string $message
* @return void
*/
public function assertNotRoute($route, $message = '')
{
$this->_incrementAssertionCount();
$router = $this->frontController->getRouter();
if ($route == $router->getCurrentRouteName()) {
$msg = sprintf('Failed asserting route matched was NOT "%s"', $route);
if (!empty($message)) {
$msg = $message . "\n" . $msg;
}
$this->fail($msg);
}
}
/**
* Retrieve front controller instance
*
* @return Zend_Controller_Front
*/
public function getFrontController()
{
if (null === $this->_frontController) {
$this->_frontController = Zend_Controller_Front::getInstance();
}
return $this->_frontController;
}
/**
* Retrieve test case request object
*
* @return Zend_Controller_Request_Abstract
*/
public function getRequest()
{
if (null === $this->_request) {
require_once 'Zend/Controller/Request/HttpTestCase.php';
$this->_request = new Zend_Controller_Request_HttpTestCase;
}
return $this->_request;
}
/**
* Retrieve test case response object
*
* @return Zend_Controller_Response_Abstract
*/
public function getResponse()
{
if (null === $this->_response) {
require_once 'Zend/Controller/Response/HttpTestCase.php';
$this->_response = new Zend_Controller_Response_HttpTestCase;
}
return $this->_response;
}
/**
* Retrieve DOM query object
*
* @return Zend_Dom_Query
*/
public function getQuery()
{
if (null === $this->_query) {
require_once 'Zend/Dom/Query.php';
$this->_query = new Zend_Dom_Query;
}
return $this->_query;
}
/**
* URL Helper
*
* @param array $urlOptions
* @param string $name
* @param bool $reset
* @param bool $encode
*/
public function url($urlOptions = array(), $name = null, $reset = false, $encode = true)
{
$frontController = $this->getFrontController();
$router = $frontController->getRouter();
if (!$router instanceof Zend_Controller_Router_Rewrite) {
throw new Exception('This url helper utility function only works when the router is of type Zend_Controller_Router_Rewrite');
}
if (count($router->getRoutes()) == 0) {
$router->addDefaultRoutes();
}
return $router->assemble($urlOptions, $name, $reset, $encode);
}
public function urlizeOptions($urlOptions, $actionControllerModuleOnly = true)
{
$ccToDash = new Zend_Filter_Word_CamelCaseToDash();
foreach ($urlOptions as $n => $v) {
if (in_array($n, array('action', 'controller', 'module'))) {
$urlOptions[$n] = $ccToDash->filter($v);
}
}
return $urlOptions;
}
/**
* Increment assertion count
*
* @return void
*/
protected function _incrementAssertionCount()
{
$stack = debug_backtrace();
foreach (debug_backtrace() as $step) {
if (isset($step['object'])
&& $step['object'] instanceof PHPUnit_Framework_TestCase
) {
if (version_compare(PHPUnit_Runner_Version::id(), '3.3.0', 'lt')) {
break;
} elseif (version_compare(PHPUnit_Runner_Version::id(), '3.3.3', 'lt')) {
$step['object']->incrementAssertionCounter();
} else {
$step['object']->addToAssertionCount(1);
}
break;
}
}
}
}