unit_tester.php.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 420 行

SVN-BASE
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);    }}?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?