More SQL command (drop table, drop database)
delete, select & insert upgraded More utility function (node to array, arrayToNode) XMLDB special move command PHP Unit Test
This commit is contained in:
420
simpletest/unit_tester.php
Normal file
420
simpletest/unit_tester.php
Normal file
@@ -0,0 +1,420 @@
|
||||
<?php
|
||||
/**
|
||||
* base include file for SimpleTest
|
||||
* @package SimpleTest
|
||||
* @subpackage UnitTester
|
||||
* @version $Id: unit_tester.php 1723 2008-04-08 00:34:10Z lastcraft $
|
||||
*/
|
||||
|
||||
/**#@+
|
||||
* include other SimpleTest class files
|
||||
*/
|
||||
require_once(dirname(__FILE__) . '/test_case.php');
|
||||
require_once(dirname(__FILE__) . '/dumper.php');
|
||||
/**#@-*/
|
||||
|
||||
/**
|
||||
* Standard unit test class for day to day testing
|
||||
* of PHP code XP style. Adds some useful standard
|
||||
* assertions.
|
||||
* @package SimpleTest
|
||||
* @subpackage UnitTester
|
||||
*/
|
||||
class UnitTestCase extends SimpleTestCase {
|
||||
|
||||
/**
|
||||
* Creates an empty test case. Should be subclassed
|
||||
* with test methods for a functional test case.
|
||||
* @param string $label Name of test case. Will use
|
||||
* the class name if none specified.
|
||||
* @access public
|
||||
*/
|
||||
function UnitTestCase($label = false) {
|
||||
if (! $label) {
|
||||
$label = get_class($this);
|
||||
}
|
||||
$this->SimpleTestCase($label);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called from within the test methods to register
|
||||
* passes and failures.
|
||||
* @param boolean $result Pass on true.
|
||||
* @param string $message Message to display describing
|
||||
* the test state.
|
||||
* @return boolean True on pass
|
||||
* @access public
|
||||
*/
|
||||
function assertTrue($result, $message = false) {
|
||||
return $this->assert(new TrueExpectation(), $result, $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will be true on false and vice versa. False
|
||||
* is the PHP definition of false, so that null,
|
||||
* empty strings, zero and an empty array all count
|
||||
* as false.
|
||||
* @param boolean $result Pass on false.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass
|
||||
* @access public
|
||||
*/
|
||||
function assertFalse($result, $message = '%s') {
|
||||
return $this->assert(new FalseExpectation(), $result, $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will be true if the value is null.
|
||||
* @param null $value Supposedly null value.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass
|
||||
* @access public
|
||||
*/
|
||||
function assertNull($value, $message = '%s') {
|
||||
$dumper = &new SimpleDumper();
|
||||
$message = sprintf(
|
||||
$message,
|
||||
'[' . $dumper->describeValue($value) . '] should be null');
|
||||
return $this->assertTrue(! isset($value), $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will be true if the value is set.
|
||||
* @param mixed $value Supposedly set value.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass.
|
||||
* @access public
|
||||
*/
|
||||
function assertNotNull($value, $message = '%s') {
|
||||
$dumper = &new SimpleDumper();
|
||||
$message = sprintf(
|
||||
$message,
|
||||
'[' . $dumper->describeValue($value) . '] should not be null');
|
||||
return $this->assertTrue(isset($value), $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Type and class test. Will pass if class
|
||||
* matches the type name or is a subclass or
|
||||
* if not an object, but the type is correct.
|
||||
* @param mixed $object Object to test.
|
||||
* @param string $type Type name as string.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass.
|
||||
* @access public
|
||||
*/
|
||||
function assertIsA($object, $type, $message = '%s') {
|
||||
return $this->assert(
|
||||
new IsAExpectation($type),
|
||||
$object,
|
||||
$message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Type and class mismatch test. Will pass if class
|
||||
* name or underling type does not match the one
|
||||
* specified.
|
||||
* @param mixed $object Object to test.
|
||||
* @param string $type Type name as string.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass.
|
||||
* @access public
|
||||
*/
|
||||
function assertNotA($object, $type, $message = '%s') {
|
||||
return $this->assert(
|
||||
new NotAExpectation($type),
|
||||
$object,
|
||||
$message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will trigger a pass if the two parameters have
|
||||
* the same value only. Otherwise a fail.
|
||||
* @param mixed $first Value to compare.
|
||||
* @param mixed $second Value to compare.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass
|
||||
* @access public
|
||||
*/
|
||||
function assertEqual($first, $second, $message = '%s') {
|
||||
return $this->assert(
|
||||
new EqualExpectation($first),
|
||||
$second,
|
||||
$message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will trigger a pass if the two parameters have
|
||||
* a different value. Otherwise a fail.
|
||||
* @param mixed $first Value to compare.
|
||||
* @param mixed $second Value to compare.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass
|
||||
* @access public
|
||||
*/
|
||||
function assertNotEqual($first, $second, $message = '%s') {
|
||||
return $this->assert(
|
||||
new NotEqualExpectation($first),
|
||||
$second,
|
||||
$message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will trigger a pass if the if the first parameter
|
||||
* is near enough to the second by the margin.
|
||||
* @param mixed $first Value to compare.
|
||||
* @param mixed $second Value to compare.
|
||||
* @param mixed $margin Fuzziness of match.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass
|
||||
* @access public
|
||||
*/
|
||||
function assertWithinMargin($first, $second, $margin, $message = '%s') {
|
||||
return $this->assert(
|
||||
new WithinMarginExpectation($first, $margin),
|
||||
$second,
|
||||
$message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will trigger a pass if the two parameters differ
|
||||
* by more than the margin.
|
||||
* @param mixed $first Value to compare.
|
||||
* @param mixed $second Value to compare.
|
||||
* @param mixed $margin Fuzziness of match.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass
|
||||
* @access public
|
||||
*/
|
||||
function assertOutsideMargin($first, $second, $margin, $message = '%s') {
|
||||
return $this->assert(
|
||||
new OutsideMarginExpectation($first, $margin),
|
||||
$second,
|
||||
$message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will trigger a pass if the two parameters have
|
||||
* the same value and same type. Otherwise a fail.
|
||||
* @param mixed $first Value to compare.
|
||||
* @param mixed $second Value to compare.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass
|
||||
* @access public
|
||||
*/
|
||||
function assertIdentical($first, $second, $message = '%s') {
|
||||
return $this->assert(
|
||||
new IdenticalExpectation($first),
|
||||
$second,
|
||||
$message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will trigger a pass if the two parameters have
|
||||
* the different value or different type.
|
||||
* @param mixed $first Value to compare.
|
||||
* @param mixed $second Value to compare.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass
|
||||
* @access public
|
||||
*/
|
||||
function assertNotIdentical($first, $second, $message = '%s') {
|
||||
return $this->assert(
|
||||
new NotIdenticalExpectation($first),
|
||||
$second,
|
||||
$message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will trigger a pass if both parameters refer
|
||||
* to the same object. Fail otherwise.
|
||||
* @param mixed $first Object reference to check.
|
||||
* @param mixed $second Hopefully the same object.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass
|
||||
* @access public
|
||||
*/
|
||||
function assertReference(&$first, &$second, $message = '%s') {
|
||||
$dumper = &new SimpleDumper();
|
||||
$message = sprintf(
|
||||
$message,
|
||||
'[' . $dumper->describeValue($first) .
|
||||
'] and [' . $dumper->describeValue($second) .
|
||||
'] should reference the same object');
|
||||
return $this->assertTrue(
|
||||
SimpleTestCompatibility::isReference($first, $second),
|
||||
$message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will trigger a pass if both parameters refer
|
||||
* to different objects. Fail otherwise. The objects
|
||||
* have to be identical though.
|
||||
* @param mixed $first Object reference to check.
|
||||
* @param mixed $second Hopefully not the same object.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass
|
||||
* @access public
|
||||
*/
|
||||
function assertClone(&$first, &$second, $message = '%s') {
|
||||
$dumper = &new SimpleDumper();
|
||||
$message = sprintf(
|
||||
$message,
|
||||
'[' . $dumper->describeValue($first) .
|
||||
'] and [' . $dumper->describeValue($second) .
|
||||
'] should not be the same object');
|
||||
$identical = &new IdenticalExpectation($first);
|
||||
return $this->assertTrue(
|
||||
$identical->test($second) &&
|
||||
! SimpleTestCompatibility::isReference($first, $second),
|
||||
$message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
function assertCopy(&$first, &$second, $message = "%s") {
|
||||
$dumper = &new SimpleDumper();
|
||||
$message = sprintf(
|
||||
$message,
|
||||
"[" . $dumper->describeValue($first) .
|
||||
"] and [" . $dumper->describeValue($second) .
|
||||
"] should not be the same object");
|
||||
return $this->assertFalse(
|
||||
SimpleTestCompatibility::isReference($first, $second),
|
||||
$message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will trigger a pass if the Perl regex pattern
|
||||
* is found in the subject. Fail otherwise.
|
||||
* @param string $pattern Perl regex to look for including
|
||||
* the regex delimiters.
|
||||
* @param string $subject String to search in.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass
|
||||
* @access public
|
||||
*/
|
||||
function assertPattern($pattern, $subject, $message = '%s') {
|
||||
return $this->assert(
|
||||
new PatternExpectation($pattern),
|
||||
$subject,
|
||||
$message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
function assertWantedPattern($pattern, $subject, $message = '%s') {
|
||||
return $this->assertPattern($pattern, $subject, $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will trigger a pass if the perl regex pattern
|
||||
* is not present in subject. Fail if found.
|
||||
* @param string $pattern Perl regex to look for including
|
||||
* the regex delimiters.
|
||||
* @param string $subject String to search in.
|
||||
* @param string $message Message to display.
|
||||
* @return boolean True on pass
|
||||
* @access public
|
||||
*/
|
||||
function assertNoPattern($pattern, $subject, $message = '%s') {
|
||||
return $this->assert(
|
||||
new NoPatternExpectation($pattern),
|
||||
$subject,
|
||||
$message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
function assertNoUnwantedPattern($pattern, $subject, $message = '%s') {
|
||||
return $this->assertNoPattern($pattern, $subject, $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
function swallowErrors() {
|
||||
$context = &SimpleTest::getContext();
|
||||
$queue = &$context->get('SimpleErrorQueue');
|
||||
$queue->clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
function assertNoErrors($message = '%s') {
|
||||
$context = &SimpleTest::getContext();
|
||||
$queue = &$context->get('SimpleErrorQueue');
|
||||
return $queue->assertNoErrors($message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
function assertError($expected = false, $message = '%s') {
|
||||
$context = &SimpleTest::getContext();
|
||||
$queue = &$context->get('SimpleErrorQueue');
|
||||
return $queue->assertError($this->_coerceExpectation($expected), $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares for an error. If the error mismatches it
|
||||
* passes through, otherwise it is swallowed. Any
|
||||
* left over errors trigger failures.
|
||||
* @param SimpleExpectation/string $expected The error to match.
|
||||
* @param string $message Message on failure.
|
||||
* @access public
|
||||
*/
|
||||
function expectError($expected = false, $message = '%s') {
|
||||
$context = &SimpleTest::getContext();
|
||||
$queue = &$context->get('SimpleErrorQueue');
|
||||
$queue->expectError($this->_coerceExpectation($expected), $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares for an exception. If the error mismatches it
|
||||
* passes through, otherwise it is swallowed. Any
|
||||
* left over errors trigger failures.
|
||||
* @param SimpleExpectation/Exception $expected The error to match.
|
||||
* @param string $message Message on failure.
|
||||
* @access public
|
||||
*/
|
||||
function expectException($expected = false, $message = '%s') {
|
||||
$context = &SimpleTest::getContext();
|
||||
$queue = &$context->get('SimpleExceptionTrap');
|
||||
// :HACK: Directly substituting in seems to cause a segfault with
|
||||
// Zend Optimizer on some systems
|
||||
$line = $this->getAssertionLine();
|
||||
$queue->expectException($expected, $message . $line);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an equality expectation if the
|
||||
* object/value is not already some type
|
||||
* of expectation.
|
||||
* @param mixed $expected Expected value.
|
||||
* @return SimpleExpectation Expectation object.
|
||||
* @access private
|
||||
*/
|
||||
function _coerceExpectation($expected) {
|
||||
if ($expected == false) {
|
||||
return new TrueExpectation();
|
||||
}
|
||||
if (SimpleTestCompatibility::isA($expected, 'SimpleExpectation')) {
|
||||
return $expected;
|
||||
}
|
||||
return new EqualExpectation(
|
||||
is_string($expected) ? str_replace('%', '%%', $expected) : $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
function assertErrorPattern($pattern, $message = '%s') {
|
||||
return $this->assertError(new PatternExpectation($pattern), $message);
|
||||
}
|
||||
}
|
||||
?>
|
Reference in New Issue
Block a user