mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 19:38:26 +00:00
da79dff7d7
- Dispatcher sets a Controller::here variable with the real URL used to access the page, so that tag generators can that use an url (linkTo and formTag for example) use the real url, not guess it from the controller and action names which often fails - Log class works more reliably and a LogError() shortcut function was added - Nstring class added, to store string-related functions (there are just four yet, including a random password generator and an string-to-array splitter - SimpleTest library (with Rephlux) included in /vendors; I've tweaked SimpleScorer::inCli() function, because it didn't work on my setup, it should work everywhere now (it checks for empty REQUEST_METHOD, which should only be empty in CLI) git-svn-id: https://svn.cakephp.org/repo/trunk/cake@248 3807eeeb-6ff5-0310-8944-8be069107fe0
300 lines
9.5 KiB
PHP
300 lines
9.5 KiB
PHP
<?php
|
|
/**
|
|
* Base include file for SimpleTest
|
|
* @package SimpleTest
|
|
* @subpackage UnitTester
|
|
* @version $Id$
|
|
*/
|
|
|
|
/**#@+
|
|
* Includes SimpleTest files and defined the root constant
|
|
* for dependent libraries.
|
|
*/
|
|
require_once(dirname(__FILE__) . '/errors.php');
|
|
require_once(dirname(__FILE__) . '/options.php');
|
|
require_once(dirname(__FILE__) . '/scorer.php');
|
|
require_once(dirname(__FILE__) . '/expectation.php');
|
|
require_once(dirname(__FILE__) . '/dumper.php');
|
|
if (! defined('SIMPLE_TEST')) {
|
|
define('SIMPLE_TEST', dirname(__FILE__) . '/');
|
|
}
|
|
/**#@-*/
|
|
|
|
/**
|
|
* This is called by the class runner to run a
|
|
* single test method. Will also run the setUp()
|
|
* and tearDown() methods.
|
|
* @package SimpleTest
|
|
* @subpackage UnitTester
|
|
*/
|
|
class SimpleInvoker {
|
|
var $_test_case;
|
|
|
|
/**
|
|
* Stashes the test case for later.
|
|
* @param SimpleTestCase $test_case Test case to run.
|
|
*/
|
|
function SimpleInvoker(&$test_case) {
|
|
$this->_test_case = &$test_case;
|
|
}
|
|
|
|
/**
|
|
* Accessor for test case being run.
|
|
* @return SimpleTestCase Test case.
|
|
* @access public
|
|
*/
|
|
function &getTestCase() {
|
|
return $this->_test_case;
|
|
}
|
|
|
|
/**
|
|
* Invokes a test method and buffered with setUp()
|
|
* and tearDown() calls.
|
|
* @param string $method Test method to call.
|
|
* @access public
|
|
*/
|
|
function invoke($method) {
|
|
$this->_test_case->setUp();
|
|
$this->_test_case->$method();
|
|
$this->_test_case->tearDown();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Do nothing decorator. Just passes the invocation
|
|
* straight through.
|
|
* @package SimpleTest
|
|
* @subpackage UnitTester
|
|
*/
|
|
class SimpleInvokerDecorator {
|
|
var $_invoker;
|
|
|
|
/**
|
|
* Stores the invoker to wrap.
|
|
* @param SimpleInvoker $invoker Test method runner.
|
|
*/
|
|
function SimpleInvokerDecorator(&$invoker) {
|
|
$this->_invoker = &$invoker;
|
|
}
|
|
|
|
/**
|
|
* Accessor for test case being run.
|
|
* @return SimpleTestCase Test case.
|
|
* @access public
|
|
*/
|
|
function &getTestCase() {
|
|
return $this->_invoker->getTestCase();
|
|
}
|
|
|
|
/**
|
|
* Invokes a test method and buffered with setUp()
|
|
* and tearDown() calls.
|
|
* @param string $method Test method to call.
|
|
* @access public
|
|
*/
|
|
function invoke($method) {
|
|
$this->_invoker->invoke($method);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Extension that traps errors into an error queue.
|
|
* @package SimpleTest
|
|
* @subpackage UnitTester
|
|
*/
|
|
class SimpleErrorTrappingInvoker extends SimpleInvokerDecorator {
|
|
|
|
/**
|
|
/**
|
|
* Stores the invoker to wrap.
|
|
* @param SimpleInvoker $invoker Test method runner.
|
|
*/
|
|
function SimpleErrorTrappingInvoker(&$invoker) {
|
|
$this->SimpleInvokerDecorator($invoker);
|
|
}
|
|
|
|
/**
|
|
* Invokes a test method and dispatches any
|
|
* untrapped errors. Called back from
|
|
* the visiting runner.
|
|
* @param string $method Test method to call.
|
|
* @access public
|
|
*/
|
|
function invoke($method) {
|
|
set_error_handler('simpleTestErrorHandler');
|
|
parent::invoke($method);
|
|
$queue = &SimpleErrorQueue::instance();
|
|
while (list($severity, $message, $file, $line, $globals) = $queue->extract()) {
|
|
$test_case = &$this->getTestCase();
|
|
$test_case->error($severity, $message, $file, $line, $globals);
|
|
}
|
|
restore_error_handler();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The standard runner. Will run every method starting
|
|
* with test Basically the
|
|
* Mediator pattern.
|
|
* @package SimpleTest
|
|
* @subpackage UnitTester
|
|
*/
|
|
class SimpleRunner {
|
|
var $_test_case;
|
|
var $_scorer;
|
|
|
|
/**
|
|
* Takes in the test case and reporter to mediate between.
|
|
* @param SimpleTestCase $test_case Test case to run.
|
|
* @param SimpleScorer $scorer Reporter to receive events.
|
|
*/
|
|
function SimpleRunner(&$test_case, &$scorer) {
|
|
$this->_test_case = &$test_case;
|
|
$this->_scorer = &$scorer;
|
|
}
|
|
|
|
/**
|
|
* Accessor for test case being run.
|
|
* @return SimpleTestCase Test case.
|
|
* @access public
|
|
*/
|
|
function &getTestCase() {
|
|
return $this->_test_case;
|
|
}
|
|
|
|
/**
|
|
* Runs the test methods in the test case.
|
|
* @param SimpleTest $test_case Test case to run test on.
|
|
* @param string $method Name of test method.
|
|
* @access public
|
|
*/
|
|
function run() {
|
|
$methods = get_class_methods(get_class($this->_test_case));
|
|
$invoker = &$this->_test_case->createInvoker();
|
|
foreach ($methods as $method) {
|
|
if (! $this->_isTest($method)) {
|
|
continue;
|
|
}
|
|
if ($this->_isConstructor($method)) {
|
|
continue;
|
|
}
|
|
$this->_scorer->paintMethodStart($method);
|
|
if ($this->_scorer->shouldInvoke($this->_test_case->getLabel(), $method)) {
|
|
$invoker->invoke($method);
|
|
}
|
|
$this->_scorer->paintMethodEnd($method);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Tests to see if the method is the constructor and
|
|
* so should be ignored.
|
|
* @param string $method Method name to try.
|
|
* @return boolean True if constructor.
|
|
* @access protected
|
|
*/
|
|
function _isConstructor($method) {
|
|
return SimpleTestCompatibility::isA(
|
|
$this->_test_case,
|
|
strtolower($method));
|
|
}
|
|
|
|
/**
|
|
* Tests to see if the method is a test that should
|
|
* be run. Currently any method that starts with 'test'
|
|
* is a candidate.
|
|
* @param string $method Method name to try.
|
|
* @return boolean True if test method.
|
|
* @access protected
|
|
*/
|
|
function _isTest($method) {
|
|
return strtolower(substr($method, 0, 4)) == 'test';
|
|
}
|
|
|
|
/**
|
|
* Paints the start of a test method.
|
|
* @param string $test_name Name of test or other label.
|
|
* @access public
|
|
*/
|
|
function paintMethodStart($test_name) {
|
|
$this->_scorer->paintMethodStart($test_name);
|
|
}
|
|
|
|
/**
|
|
* Paints the end of a test method.
|
|
* @param string $test_name Name of test or other label.
|
|
* @access public
|
|
*/
|
|
function paintMethodEnd($test_name) {
|
|
$this->_scorer->paintMethodEnd($test_name);
|
|
}
|
|
|
|
/**
|
|
* Chains to the wrapped reporter.
|
|
* @param string $message Message is ignored.
|
|
* @access public
|
|
*/
|
|
function paintPass($message) {
|
|
$this->_scorer->paintPass($message);
|
|
}
|
|
|
|
/**
|
|
* Chains to the wrapped reporter.
|
|
* @param string $message Message is ignored.
|
|
* @access public
|
|
*/
|
|
function paintFail($message) {
|
|
$this->_scorer->paintFail($message);
|
|
}
|
|
|
|
/**
|
|
* Chains to the wrapped reporter.
|
|
* @param string $message Text of error formatted by
|
|
* the test case.
|
|
* @access public
|
|
*/
|
|
function paintError($message) {
|
|
$this->_scorer->paintError($message);
|
|
}
|
|
|
|
/**
|
|
* Chains to the wrapped reporter.
|
|
* @param Exception $exception Object thrown.
|
|
* @access public
|
|
*/
|
|
function paintException($exception) {
|
|
$this->_scorer->paintException($exception);
|
|
}
|
|
|
|
/**
|
|
* Chains to the wrapped reporter.
|
|
* @param string $message Text to display.
|
|
* @access public
|
|
*/
|
|
function paintMessage($message) {
|
|
$this->_scorer->paintMessage($message);
|
|
}
|
|
|
|
/**
|
|
* Chains to the wrapped reporter.
|
|
* @param string $message Text to display.
|
|
* @access public
|
|
*/
|
|
function paintFormattedMessage($message) {
|
|
$this->_scorer->paintFormattedMessage($message);
|
|
}
|
|
|
|
/**
|
|
* Chains to the wrapped reporter.
|
|
* @param string $type Event type as text.
|
|
* @param mixed $payload Message or object.
|
|
* @return boolean Should return false if this
|
|
* type of signal should fail the
|
|
* test suite.
|
|
* @access public
|
|
*/
|
|
function paintSignal($type, &$payload) {
|
|
$this->_scorer->paintSignal($type, $payload);
|
|
}
|
|
}
|
|
?>
|