[ Index ] |
|
Code source de Symfony 1.0.0 |
1 <?php 2 /** 3 * $Id: PHPUnit2Task.php 3076 2006-12-18 08:52:12Z fabien $ 4 * 5 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 6 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 7 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 8 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 9 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 10 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 11 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 12 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 13 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 14 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 15 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 16 * 17 * This software consists of voluntary contributions made by many individuals 18 * and is licensed under the LGPL. For more information please see 19 * <http://phing.info>. 20 */ 21 22 require_once 'phing/Task.php'; 23 require_once 'phing/system/io/PhingFile.php'; 24 require_once 'phing/system/io/Writer.php'; 25 require_once 'phing/util/LogWriter.php'; 26 27 /** 28 * Runs PHPUnit2 tests. 29 * 30 * @author Michiel Rook <michiel.rook@gmail.com> 31 * @version $Id: PHPUnit2Task.php 3076 2006-12-18 08:52:12Z fabien $ 32 * @package phing.tasks.ext.phpunit2 33 * @see BatchTest 34 * @since 2.1.0 35 */ 36 class PHPUnit2Task extends Task 37 { 38 private $batchtests = array(); 39 private $formatters = array(); 40 private $haltonerror = false; 41 private $haltonfailure = false; 42 private $failureproperty; 43 private $errorproperty; 44 private $printsummary = false; 45 private $testfailed = false; 46 private $codecoverage = false; 47 48 /** 49 * Initialize Task. 50 * This method includes any necessary PHPUnit2 libraries and triggers 51 * appropriate error if they cannot be found. This is not done in header 52 * because we may want this class to be loaded w/o triggering an error. 53 */ 54 function init() { 55 include_once 'PHPUnit2/Util/Filter.php'; 56 if (!class_exists('PHPUnit2_Util_Filter')) { 57 throw new BuildException("PHPUnit2Task depends on PEAR PHPUnit2 package being installed.", $this->getLocation()); 58 } 59 60 if (version_compare(PHP_VERSION, '5.0.3') < 0) { 61 throw new BuildException("PHPUnit2Task requires PHP version >= 5.0.3.", $this->getLocation()); 62 } 63 64 // other dependencies that should only be loaded when class is actually used. 65 require_once 'phing/tasks/ext/phpunit2/PHPUnit2TestRunner.php'; 66 require_once 'phing/tasks/ext/phpunit2/BatchTest.php'; 67 require_once 'phing/tasks/ext/phpunit2/FormatterElement.php'; 68 require_once 'phing/tasks/ext/phpunit2/SummaryPHPUnit2ResultFormatter.php'; 69 70 // add some defaults to the PHPUnit2 Filter 71 PHPUnit2_Util_Filter::addFileToFilter('PHPUnit2Task.php'); 72 PHPUnit2_Util_Filter::addFileToFilter('PHPUnit2TestRunner.php'); 73 PHPUnit2_Util_Filter::addFileToFilter('phing/Task.php'); 74 PHPUnit2_Util_Filter::addFileToFilter('phing/Target.php'); 75 PHPUnit2_Util_Filter::addFileToFilter('phing/Project.php'); 76 PHPUnit2_Util_Filter::addFileToFilter('phing/Phing.php'); 77 PHPUnit2_Util_Filter::addFileToFilter('phing.php'); 78 79 } 80 81 function setFailureproperty($value) 82 { 83 $this->failureproperty = $value; 84 } 85 86 function setErrorproperty($value) 87 { 88 $this->errorproperty = $value; 89 } 90 91 function setHaltonerror($value) 92 { 93 $this->haltonerror = $value; 94 } 95 96 function setHaltonfailure($value) 97 { 98 $this->haltonfailure = $value; 99 } 100 101 function setPrintsummary($printsummary) 102 { 103 $this->printsummary = $printsummary; 104 } 105 106 function setCodecoverage($codecoverage) 107 { 108 $this->codecoverage = $codecoverage; 109 } 110 111 /** 112 * Add a new formatter to all tests of this task. 113 * 114 * @param FormatterElement formatter element 115 */ 116 function addFormatter(FormatterElement $fe) 117 { 118 $this->formatters[] = $fe; 119 } 120 121 /** 122 * The main entry point 123 * 124 * @throws BuildException 125 */ 126 function main() 127 { 128 $tests = array(); 129 130 if ($this->printsummary) 131 { 132 $fe = new FormatterElement(); 133 $fe->setClassName('SummaryPHPUnit2ResultFormatter'); 134 $fe->setUseFile(false); 135 $this->formatters[] = $fe; 136 } 137 138 foreach ($this->batchtests as $batchtest) 139 { 140 $tests = array_merge($tests, $batchtest->elements()); 141 } 142 143 foreach ($this->formatters as $fe) 144 { 145 $formatter = $fe->getFormatter(); 146 $formatter->setProject($this->getProject()); 147 148 if ($fe->getUseFile()) 149 { 150 $destFile = new PhingFile($fe->getToDir(), $fe->getOutfile()); 151 152 $writer = new FileWriter($destFile->getAbsolutePath()); 153 154 $formatter->setOutput($writer); 155 } 156 else 157 { 158 $formatter->setOutput($this->getDefaultOutput()); 159 } 160 161 $formatter->startTestRun(); 162 } 163 164 foreach ($tests as $test) 165 { 166 $this->execute(new PHPUnit2_Framework_TestSuite(new ReflectionClass($test))); 167 } 168 169 foreach ($this->formatters as $fe) 170 { 171 $formatter = $fe->getFormatter(); 172 $formatter->endTestRun(); 173 } 174 175 if ($this->testfailed) 176 { 177 throw new BuildException("One or more tests failed"); 178 } 179 } 180 181 /** 182 * @throws BuildException 183 */ 184 private function execute($suite) 185 { 186 $runner = new PHPUnit2TestRunner($suite, $this->project); 187 188 $runner->setCodecoverage($this->codecoverage); 189 190 foreach ($this->formatters as $fe) 191 { 192 $formatter = $fe->getFormatter(); 193 194 $runner->addFormatter($formatter); 195 } 196 197 $runner->run(); 198 199 $retcode = $runner->getRetCode(); 200 201 if ($retcode == PHPUnit2TestRunner::ERRORS) { 202 if ($this->errorproperty) { 203 $this->project->setNewProperty($this->errorproperty, true); 204 } 205 if ($this->haltonerror) { 206 $this->testfailed = true; 207 } 208 } elseif ($retcode == PHPUnit2TestRunner::FAILURES) { 209 if ($this->failureproperty) { 210 $this->project->setNewProperty($this->failureproperty, true); 211 } 212 213 if ($this->haltonfailure) { 214 $this->testfailed = true; 215 } 216 } 217 218 } 219 220 private function getDefaultOutput() 221 { 222 return new LogWriter($this); 223 } 224 225 /** 226 * Adds a set of tests based on pattern matching. 227 * 228 * @return BatchTest a new instance of a batch test. 229 */ 230 function createBatchTest() 231 { 232 $batchtest = new BatchTest($this->getProject()); 233 234 $this->batchtests[] = $batchtest; 235 236 return $batchtest; 237 } 238 } 239 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Fri Mar 16 22:42:14 2007 | par Balluche grâce à PHPXref 0.7 |