| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 | 
							- <?php
 - /**
 -  *  base include file for SimpleTest
 -  *  @package    SimpleTest
 -  *  @subpackage UnitTester
 -  *  @version    $Id: exceptions.php 1769 2008-04-19 14:39:00Z pp11 $
 -  */
 - 
 - /**#@+
 -  * Include required SimpleTest files 
 -  */
 - require_once dirname(__FILE__) . '/invoker.php';
 - require_once dirname(__FILE__) . '/expectation.php';
 - /**#@-*/
 - 
 - /**
 -  *    Extension that traps exceptions and turns them into
 -  *    an error message. PHP5 only.
 -  *    @package SimpleTest
 -  *    @subpackage UnitTester
 -  */
 - class SimpleExceptionTrappingInvoker extends SimpleInvokerDecorator {
 - 
 -     /**
 -      *    Stores the invoker to be wrapped.
 -      *    @param SimpleInvoker $invoker   Test method runner.
 -      */
 -     function __construct($invoker) {
 -         parent::__construct($invoker);
 -     }
 - 
 -     /**
 -      *    Invokes a test method whilst trapping expected
 -      *    exceptions. Any left over unthrown exceptions
 -      *    are then reported as failures.
 -      *    @param string $method    Test method to call.
 -      */
 -     function invoke($method) {
 -         $trap = SimpleTest::getContext()->get('SimpleExceptionTrap');
 -         $trap->clear();
 -         try {
 -             $has_thrown = false;
 -             parent::invoke($method);
 -         } catch (Exception $exception) {
 -             $has_thrown = true;
 -             if (! $trap->isExpected($this->getTestCase(), $exception)) {
 -                 $this->getTestCase()->exception($exception);
 -             }
 -             $trap->clear();
 -         }
 -         if ($message = $trap->getOutstanding()) {
 -             $this->getTestCase()->fail($message);
 -         }
 -         if ($has_thrown) {
 -             try {
 -                 parent::getTestCase()->tearDown();
 -             } catch (Exception $e) { }
 -         }
 -     }
 - }
 - 
 - /**
 -  *    Tests exceptions either by type or the exact
 -  *    exception. This could be improved to accept
 -  *    a pattern expectation to test the error
 -  *    message, but that will have to come later.
 -  *    @package SimpleTest
 -  *    @subpackage UnitTester
 -  */
 - class ExceptionExpectation extends SimpleExpectation {
 -     private $expected;
 - 
 -     /**
 -      *    Sets up the conditions to test against.
 -      *    If the expected value is a string, then
 -      *    it will act as a test of the class name.
 -      *    An exception as the comparison will
 -      *    trigger an identical match. Writing this
 -      *    down now makes it look doubly dumb. I hope
 -      *    come up with a better scheme later.
 -      *    @param mixed $expected   A class name or an actual
 -      *                             exception to compare with.
 -      *    @param string $message   Message to display.
 -      */
 -     function __construct($expected, $message = '%s') {
 -         $this->expected = $expected;
 -         parent::__construct($message);
 -     }
 - 
 -     /**
 -      *    Carry out the test.
 -      *    @param Exception $compare    Value to check.
 -      *    @return boolean              True if matched.
 -      */
 -     function test($compare) {
 -         if (is_string($this->expected)) {
 -             return ($compare instanceof $this->expected);
 -         }
 -         if (get_class($compare) != get_class($this->expected)) {
 -             return false;
 -         }
 -         return $compare->getMessage() == $this->expected->getMessage();
 -     }
 - 
 -     /**
 -      *    Create the message to display describing the test.
 -      *    @param Exception $compare     Exception to match.
 -      *    @return string                Final message.
 -      */
 -     function testMessage($compare) {
 -         if (is_string($this->expected)) {
 -             return "Exception [" . $this->describeException($compare) .
 -                     "] should be type [" . $this->expected . "]";
 -         }
 -         return "Exception [" . $this->describeException($compare) .
 -                 "] should match [" .
 -                 $this->describeException($this->expected) . "]";
 -     }
 - 
 -     /**
 -      *    Summary of an Exception object.
 -      *    @param Exception $compare     Exception to describe.
 -      *    @return string                Text description.
 -      */
 -     protected function describeException($exception) {
 -         return get_class($exception) . ": " . $exception->getMessage();
 -     }
 - }
 - 
 - /**
 -  *    Stores expected exceptions for when they
 -  *    get thrown. Saves the irritating try...catch
 -  *    block.
 -  *    @package  SimpleTest
 -  *    @subpackage   UnitTester
 -  */
 - class SimpleExceptionTrap {
 -     private $expected;
 -     private $message;
 - 
 -     /**
 -      *    Clears down the queue ready for action.
 -      */
 -     function __construct() {
 -         $this->clear();
 -     }
 - 
 -     /**
 -      *    Sets up an expectation of an exception.
 -      *    This has the effect of intercepting an
 -      *    exception that matches.
 -      *    @param SimpleExpectation $expected    Expected exception to match.
 -      *    @param string $message                Message to display.
 -      *    @access public
 -      */
 -     function expectException($expected = false, $message = '%s') {
 -         if ($expected === false) {
 -             $expected = new AnythingExpectation();
 -         }
 -         if (! SimpleExpectation::isExpectation($expected)) {
 -             $expected = new ExceptionExpectation($expected);
 -         }
 -         $this->expected = $expected;
 -         $this->message = $message;
 -     }
 - 
 -     /**
 -      *    Compares the expected exception with any
 -      *    in the queue. Issues a pass or fail and
 -      *    returns the state of the test.
 -      *    @param SimpleTestCase $test    Test case to send messages to.
 -      *    @param Exception $exception    Exception to compare.
 -      *    @return boolean                False on no match.
 -      */
 -     function isExpected($test, $exception) {
 -         if ($this->expected) {
 -             return $test->assert($this->expected, $exception, $this->message);
 -         }
 -         return false;
 -     }
 - 
 -     /**
 -      *    Tests for any left over exception.
 -      *    @return string/false     The failure message or false if none.
 -      */
 -     function getOutstanding() {
 -         return sprintf($this->message, 'Failed to trap exception');
 -     }
 - 
 -     /**
 -      *    Discards the contents of the error queue.
 -      */
 -     function clear() {
 -         $this->expected = false;
 -         $this->message = false;
 -     }
 - }
 - ?>
 
 
  |