From af68030fcf0c266300feb2c100149ecadef7d364 Mon Sep 17 00:00:00 2001 From: xue <> Date: Sun, 16 Jul 2006 01:50:23 +0000 Subject: Merge from 3.0 branch till 1264. --- tests/test_tools/simpletest/unit_tester.php | 182 +++++++++++++++++++--------- 1 file changed, 126 insertions(+), 56 deletions(-) (limited to 'tests/test_tools/simpletest/unit_tester.php') diff --git a/tests/test_tools/simpletest/unit_tester.php b/tests/test_tools/simpletest/unit_tester.php index fa5e28b4..88e10b14 100644 --- a/tests/test_tools/simpletest/unit_tester.php +++ b/tests/test_tools/simpletest/unit_tester.php @@ -3,17 +3,16 @@ * base include file for SimpleTest * @package SimpleTest * @subpackage UnitTester - * @version $Id: unit_tester.php,v 1.24 2005/01/13 01:31:53 lastcraft Exp $ + * @version $Id: unit_tester.php,v 1.31 2006/02/06 06:05:18 lastcraft Exp $ */ /**#@+ * include other SimpleTest class files */ - require_once(dirname(__FILE__) . '/simple_test.php'); - require_once(dirname(__FILE__) . '/errors.php'); + 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 @@ -22,7 +21,7 @@ * @subpackage UnitTester */ class UnitTestCase extends SimpleTestCase { - + /** * Creates an empty test case. Should be subclassed * with test methods for a functional test case. @@ -36,7 +35,7 @@ } $this->SimpleTestCase($label); } - + /** * Will be true if the value is null. * @param null $value Supposedly null value. @@ -51,7 +50,7 @@ "[" . $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. @@ -66,7 +65,7 @@ "[" . $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 @@ -78,12 +77,12 @@ * @access public */ function assertIsA($object, $type, $message = "%s") { - return $this->assertExpectation( + 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 @@ -95,12 +94,12 @@ * @access public */ function assertNotA($object, $type, $message = "%s") { - return $this->assertExpectation( + return $this->assert( new NotAExpectation($type), $object, $message); } - + /** * Will trigger a pass if the two parameters have * the same value only. Otherwise a fail. @@ -111,12 +110,12 @@ * @access public */ function assertEqual($first, $second, $message = "%s") { - return $this->assertExpectation( + return $this->assert( new EqualExpectation($first), $second, $message); } - + /** * Will trigger a pass if the two parameters have * a different value. Otherwise a fail. @@ -127,12 +126,46 @@ * @access public */ function assertNotEqual($first, $second, $message = "%s") { - return $this->assertExpectation( + 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. @@ -143,12 +176,12 @@ * @access public */ function assertIdentical($first, $second, $message = "%s") { - return $this->assertExpectation( + return $this->assert( new IdenticalExpectation($first), $second, $message); } - + /** * Will trigger a pass if the two parameters have * the different value or different type. @@ -159,12 +192,12 @@ * @access public */ function assertNotIdentical($first, $second, $message = "%s") { - return $this->assertExpectation( + return $this->assert( new NotIdenticalExpectation($first), $second, $message); } - + /** * Will trigger a pass if both parameters refer * to the same object. Fail otherwise. @@ -185,16 +218,34 @@ SimpleTestCompatibility::isReference($first, $second), $message); } - + /** * Will trigger a pass if both parameters refer - * to different objects. Fail otherwise. + * 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( @@ -206,7 +257,7 @@ SimpleTestCompatibility::isReference($first, $second), $message); } - + /** * Will trigger a pass if the Perl regex pattern * is found in the subject. Fail otherwise. @@ -217,13 +268,20 @@ * @return boolean True on pass * @access public */ - function assertWantedPattern($pattern, $subject, $message = "%s") { - return $this->assertExpectation( - new WantedPatternExpectation($pattern), + 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. @@ -234,13 +292,20 @@ * @return boolean True on pass * @access public */ - function assertNoUnwantedPattern($pattern, $subject, $message = "%s") { - return $this->assertExpectation( - new UnwantedPatternExpectation($pattern), + 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. @@ -249,12 +314,12 @@ * @access public */ function assertNoErrors($message = "%s") { - $queue =SimpleErrorQueue::instance(); + $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. @@ -265,39 +330,44 @@ * @access public */ function assertError($expected = false, $message = "%s") { - $queue =SimpleErrorQueue::instance(); + $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); - return $this->assertTrue( - ! $expected || ($expected == $content), - "Expected [$expected] in PHP error [$content] severity [$severity] in [$file] line [$line]"); + 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"); } - + /** - * Confirms that an error has occoured and - * that the error text matches a Perl regular - * expression. - * @param string $pattern Perl regular expresion to - * match against. - * @param string $message Message to display. - * @return boolean True on pass - * @access public + * 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 assertErrorPattern($pattern, $message = "%s") { - $queue =SimpleErrorQueue::instance(); - if ($queue->isEmpty()) { - $this->fail(sprintf($message, "Expected error not found")); - return; + function _coerceToExpectation($expected) { + if (SimpleTestCompatibility::isA($expected, 'SimpleExpectation')) { + return $expected; } - list($severity, $content, $file, $line, $globals) = $queue->extract(); - $severity = SimpleErrorQueue::getSeverityAsString($severity); - return $this->assertTrue( - (boolean)preg_match($pattern, $content), - "Expected pattern match [$pattern] in PHP error [$content] severity [$severity] in [$file] line [$line]"); + return new EqualExpectation($expected); + } + + /** + * @deprecated + */ + function assertErrorPattern($pattern, $message = "%s") { + return $this->assertError(new PatternExpectation($pattern), $message); } } ?> -- cgit v1.2.3