2005-06-18 23:26:35 +00:00
|
|
|
<?php
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* base include file for SimpleTest
|
|
|
|
* @package SimpleTest
|
|
|
|
* @subpackage UnitTester
|
|
|
|
* @version $Id$
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**#@+
|
|
|
|
* include other SimpleTest class files
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
require_once(dirname(__FILE__) . '/simple_test.php');
|
|
|
|
require_once(dirname(__FILE__) . '/errors.php');
|
|
|
|
require_once(dirname(__FILE__) . '/dumper.php');
|
2005-07-30 02:26:59 +00:00
|
|
|
/**#@-*/
|
2005-06-18 23:26:35 +00:00
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* Standard unit test class for day to day testing
|
|
|
|
* of PHP code XP style. Adds some useful standard
|
|
|
|
* assertions.
|
|
|
|
* @package SimpleTest
|
|
|
|
* @subpackage UnitTester
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
class UnitTestCase extends SimpleTestCase {
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
function UnitTestCase($label = false) {
|
|
|
|
if (! $label) {
|
|
|
|
$label = get_class($this);
|
|
|
|
}
|
|
|
|
$this->SimpleTestCase($label);
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
function assertNull($value, $message = "%s") {
|
|
|
|
$dumper = &new SimpleDumper();
|
|
|
|
$message = sprintf(
|
|
|
|
$message,
|
|
|
|
"[" . $dumper->describeValue($value) . "] should be null");
|
|
|
|
return $this->assertTrue(! isset($value), $message);
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
function assertNotNull($value, $message = "%s") {
|
|
|
|
$dumper = &new SimpleDumper();
|
|
|
|
$message = sprintf(
|
|
|
|
$message,
|
|
|
|
"[" . $dumper->describeValue($value) . "] should not be null");
|
|
|
|
return $this->assertTrue(isset($value), $message);
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
function assertIsA($object, $type, $message = "%s") {
|
2005-07-30 02:26:59 +00:00
|
|
|
return $this->assert(
|
2005-06-18 23:26:35 +00:00
|
|
|
new IsAExpectation($type),
|
|
|
|
$object,
|
|
|
|
$message);
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
function assertNotA($object, $type, $message = "%s") {
|
2005-07-30 02:26:59 +00:00
|
|
|
return $this->assert(
|
2005-06-18 23:26:35 +00:00
|
|
|
new NotAExpectation($type),
|
|
|
|
$object,
|
|
|
|
$message);
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
function assertEqual($first, $second, $message = "%s") {
|
2005-07-30 02:26:59 +00:00
|
|
|
return $this->assert(
|
2005-06-18 23:26:35 +00:00
|
|
|
new EqualExpectation($first),
|
|
|
|
$second,
|
|
|
|
$message);
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
function assertNotEqual($first, $second, $message = "%s") {
|
2005-07-30 02:26:59 +00:00
|
|
|
return $this->assert(
|
2005-06-18 23:26:35 +00:00
|
|
|
new NotEqualExpectation($first),
|
|
|
|
$second,
|
|
|
|
$message);
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
function assertIdentical($first, $second, $message = "%s") {
|
2005-07-30 02:26:59 +00:00
|
|
|
return $this->assert(
|
2005-06-18 23:26:35 +00:00
|
|
|
new IdenticalExpectation($first),
|
|
|
|
$second,
|
|
|
|
$message);
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
function assertNotIdentical($first, $second, $message = "%s") {
|
2005-07-30 02:26:59 +00:00
|
|
|
return $this->assert(
|
2005-06-18 23:26:35 +00:00
|
|
|
new NotIdenticalExpectation($first),
|
|
|
|
$second,
|
|
|
|
$message);
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* Will trigger a pass if both parameters refer
|
|
|
|
* to different objects. Fail otherwise.
|
|
|
|
* @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
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* 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),
|
2005-06-18 23:26:35 +00:00
|
|
|
$subject,
|
|
|
|
$message);
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* @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),
|
2005-06-18 23:26:35 +00:00
|
|
|
$subject,
|
|
|
|
$message);
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* @deprecated
|
|
|
|
*/
|
|
|
|
function assertNoUnwantedPattern($pattern, $subject, $message = "%s") {
|
|
|
|
return $this->assertNoPattern($pattern, $subject, $message);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Confirms that no errors have occoured so
|
|
|
|
* far in the test method.
|
|
|
|
* @param string $message Message to display.
|
|
|
|
* @return boolean True on pass
|
|
|
|
* @access public
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
function assertNoErrors($message = "%s") {
|
|
|
|
$queue = &SimpleErrorQueue::instance();
|
|
|
|
return $this->assertTrue(
|
|
|
|
$queue->isEmpty(),
|
|
|
|
sprintf($message, "Should be no errors"));
|
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* Confirms that an error has occoured and
|
|
|
|
* optionally that the error text matches exactly.
|
|
|
|
* @param string $expected Expected error text or
|
|
|
|
* false for no check.
|
|
|
|
* @param string $message Message to display.
|
|
|
|
* @return boolean True on pass
|
|
|
|
* @access public
|
|
|
|
*/
|
2005-06-18 23:26:35 +00:00
|
|
|
function assertError($expected = false, $message = "%s") {
|
|
|
|
$queue = &SimpleErrorQueue::instance();
|
|
|
|
if ($queue->isEmpty()) {
|
|
|
|
$this->fail(sprintf($message, "Expected error not found"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
list($severity, $content, $file, $line, $globals) = $queue->extract();
|
|
|
|
$severity = SimpleErrorQueue::getSeverityAsString($severity);
|
2005-07-30 02:26:59 +00:00
|
|
|
if (! $expected) {
|
|
|
|
return $this->pass(
|
|
|
|
"Captured a PHP error of [$content] severity [$severity] in [$file] line [$line] -> %s");
|
|
|
|
}
|
|
|
|
$expected = $this->_coerceToExpectation($expected);
|
|
|
|
return $this->assert(
|
|
|
|
$expected,
|
|
|
|
$content,
|
|
|
|
"Expected PHP error [$content] severity [$severity] in [$file] line [$line] -> %s");
|
2005-06-18 23:26:35 +00:00
|
|
|
}
|
|
|
|
|
2005-07-30 02:26:59 +00:00
|
|
|
/**
|
|
|
|
* 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 _coerceToExpectation($expected) {
|
|
|
|
if (SimpleTestCompatibility::isA($expected, 'SimpleExpectation')) {
|
|
|
|
return $expected;
|
2005-06-18 23:26:35 +00:00
|
|
|
}
|
2005-07-30 02:26:59 +00:00
|
|
|
return new EqualExpectation($expected);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @deprecated
|
|
|
|
*/
|
|
|
|
function assertErrorPattern($pattern, $message = "%s") {
|
|
|
|
return $this->assertError(new PatternExpectation($pattern), $message);
|
2005-06-18 23:26:35 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
?>
|