Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** base include file for SimpleTest* @package SimpleTest* @subpackage UnitTester* @version $Id: unit_tester.php 1398 2006-09-08 19:31:03Z xue $*//**#@+* 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);}/*** 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);}/*** 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*/function assertNoErrors($message = "%s") {$queue = &SimpleErrorQueue::instance();return $this->assertTrue($queue->isEmpty(),sprintf($message, "Should be no errors"));}/*** 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*/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);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");}/*** 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;}return new EqualExpectation($expected);}/*** @deprecated*/function assertErrorPattern($pattern, $message = "%s") {return $this->assertError(new PatternExpectation($pattern), $message);}}?>