1<?php 2/** 3 * PHPUnit 4 * 5 * Copyright (c) 2001-2012, Sebastian Bergmann <sebastian@phpunit.de>. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * * Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 15 * * Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in 17 * the documentation and/or other materials provided with the 18 * distribution. 19 * 20 * * Neither the name of Sebastian Bergmann nor the names of his 21 * contributors may be used to endorse or promote products derived 22 * from this software without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 25 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 26 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 27 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 28 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 29 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 30 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 31 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 34 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 35 * POSSIBILITY OF SUCH DAMAGE. 36 * 37 * @package PHPUnit 38 * @subpackage Extensions 39 * @author Sebastian Bergmann <sebastian@phpunit.de> 40 * @copyright 2001-2012 Sebastian Bergmann <sebastian@phpunit.de> 41 * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License 42 * @link http://www.phpunit.de/ 43 * @since File available since Release 2.0.0 44 */ 45 46/** 47 * A Decorator for Tests. 48 * 49 * Use TestDecorator as the base class for defining new 50 * test decorators. Test decorator subclasses can be introduced 51 * to add behaviour before or after a test is run. 52 * 53 * @package PHPUnit 54 * @subpackage Extensions 55 * @author Sebastian Bergmann <sebastian@phpunit.de> 56 * @copyright 2001-2012 Sebastian Bergmann <sebastian@phpunit.de> 57 * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License 58 * @version Release: @package_version@ 59 * @link http://www.phpunit.de/ 60 * @since Class available since Release 2.0.0 61 */ 62class PHPUnit_Extensions_TestDecorator extends PHPUnit_Framework_Assert implements PHPUnit_Framework_Test, PHPUnit_Framework_SelfDescribing 63{ 64 /** 65 * The Test to be decorated. 66 * 67 * @var object 68 */ 69 protected $test = NULL; 70 71 /** 72 * Constructor. 73 * 74 * @param PHPUnit_Framework_Test $test 75 */ 76 public function __construct(PHPUnit_Framework_Test $test) 77 { 78 $this->test = $test; 79 } 80 81 /** 82 * Returns a string representation of the test. 83 * 84 * @return string 85 */ 86 public function toString() 87 { 88 return $this->test->toString(); 89 } 90 91 /** 92 * Runs the test and collects the 93 * result in a TestResult. 94 * 95 * @param PHPUnit_Framework_TestResult $result 96 */ 97 public function basicRun(PHPUnit_Framework_TestResult $result) 98 { 99 $this->test->run($result); 100 } 101 102 /** 103 * Counts the number of test cases that 104 * will be run by this test. 105 * 106 * @return integer 107 */ 108 public function count() 109 { 110 return count($this->test); 111 } 112 113 /** 114 * Creates a default TestResult object. 115 * 116 * @return PHPUnit_Framework_TestResult 117 */ 118 protected function createResult() 119 { 120 return new PHPUnit_Framework_TestResult; 121 } 122 123 /** 124 * Returns the test to be run. 125 * 126 * @return PHPUnit_Framework_Test 127 */ 128 public function getTest() 129 { 130 return $this->test; 131 } 132 133 /** 134 * Runs the decorated test and collects the 135 * result in a TestResult. 136 * 137 * @param PHPUnit_Framework_TestResult $result 138 * @return PHPUnit_Framework_TestResult 139 */ 140 public function run(PHPUnit_Framework_TestResult $result = NULL) 141 { 142 if ($result === NULL) { 143 $result = $this->createResult(); 144 } 145 146 $this->basicRun($result); 147 148 return $result; 149 } 150} 151