pictcode / lib / Cake / TestSuite / CakeTestRunner.php @ 787484d2
履歴 | 表示 | アノテート | ダウンロード (3.275 KB)
| 1 | 635eef61 | spyder1211 | <?php
 | 
|---|---|---|---|
| 2 | /**
 | ||
| 3 |  * TestRunner for CakePHP Test suite.
 | ||
| 4 |  *
 | ||
| 5 |  * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 | ||
| 6 |  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | ||
| 7 |  *
 | ||
| 8 |  * Licensed under The MIT License
 | ||
| 9 |  * For full copyright and license information, please see the LICENSE.txt
 | ||
| 10 |  * Redistributions of files must retain the above copyright notice.
 | ||
| 11 |  *
 | ||
| 12 |  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | ||
| 13 |  * @link          http://cakephp.org CakePHP(tm) Project
 | ||
| 14 |  * @since         CakePHP(tm) v 2.0
 | ||
| 15 |  * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 | ||
| 16 |  */
 | ||
| 17 | |||
| 18 | if (!defined('__PHPUNIT_PHAR__')) { | ||
| 19 | require_once 'PHPUnit/TextUI/TestRunner.php'; | ||
| 20 | } | ||
| 21 | |||
| 22 | App::uses('CakeFixtureManager', 'TestSuite/Fixture'); | ||
| 23 | |||
| 24 | /**
 | ||
| 25 |  * A custom test runner for CakePHP's use of PHPUnit.
 | ||
| 26 |  *
 | ||
| 27 |  * @package       Cake.TestSuite
 | ||
| 28 |  */
 | ||
| 29 | class CakeTestRunner extends PHPUnit_TextUI_TestRunner { | ||
| 30 | |||
| 31 | /**
 | ||
| 32 |  * Lets us pass in some options needed for CakePHP's webrunner.
 | ||
| 33 |  *
 | ||
| 34 |  * @param mixed $loader The test suite loader
 | ||
| 35 |  * @param array $params list of options to be used for this run
 | ||
| 36 |  */
 | ||
| 37 | public function __construct($loader, $params) { | ||
| 38 | parent::__construct($loader); | ||
| 39 | $this->_params = $params; | ||
| 40 | } | ||
| 41 | |||
| 42 | /**
 | ||
| 43 |  * Actually run a suite of tests. Cake initializes fixtures here using the chosen fixture manager
 | ||
| 44 |  *
 | ||
| 45 |  * @param PHPUnit_Framework_Test $suite The test suite to run
 | ||
| 46 |  * @param array $arguments The CLI arguments
 | ||
| 47 |  * @return void
 | ||
| 48 |  */
 | ||
| 49 | public function doRun(PHPUnit_Framework_Test $suite, array $arguments = array()) { | ||
| 50 | if (isset($arguments['printer'])) { | ||
| 51 | static::$versionStringPrinted = true; | ||
| 52 | } | ||
| 53 | |||
| 54 | $fixture = $this->_getFixtureManager($arguments); | ||
| 55 | foreach ($suite->getIterator() as $test) { | ||
| 56 | if ($test instanceof CakeTestCase) { | ||
| 57 | $fixture->fixturize($test); | ||
| 58 | $test->fixtureManager = $fixture; | ||
| 59 | } | ||
| 60 | } | ||
| 61 | |||
| 62 | $return = parent::doRun($suite, $arguments); | ||
| 63 |                 $fixture->shutdown();
 | ||
| 64 | return $return; | ||
| 65 | } | ||
| 66 | |||
| 67 | // @codingStandardsIgnoreStart PHPUnit overrides don't match CakePHP
 | ||
| 68 | /**
 | ||
| 69 |  * Create the test result and splice on our code coverage reports.
 | ||
| 70 |  *
 | ||
| 71 |  * @return PHPUnit_Framework_TestResult
 | ||
| 72 |  */
 | ||
| 73 | protected function createTestResult() { | ||
| 74 | $result = new PHPUnit_Framework_TestResult; | ||
| 75 | if (!empty($this->_params['codeCoverage'])) { | ||
| 76 | if (method_exists($result, 'collectCodeCoverageInformation')) { | ||
| 77 | $result->collectCodeCoverageInformation(true); | ||
| 78 | } | ||
| 79 | if (method_exists($result, 'setCodeCoverage')) { | ||
| 80 | $result->setCodeCoverage(new PHP_CodeCoverage()); | ||
| 81 | } | ||
| 82 | } | ||
| 83 | return $result; | ||
| 84 | } | ||
| 85 | // @codingStandardsIgnoreEnd
 | ||
| 86 | |||
| 87 | /**
 | ||
| 88 |  * Get the fixture manager class specified or use the default one.
 | ||
| 89 |  *
 | ||
| 90 |  * @param array $arguments The CLI arguments.
 | ||
| 91 |  * @return mixed instance of a fixture manager.
 | ||
| 92 |  * @throws RuntimeException When fixture manager class cannot be loaded.
 | ||
| 93 |  */
 | ||
| 94 | protected function _getFixtureManager($arguments) { | ||
| 95 | if (isset($arguments['fixtureManager'])) { | ||
| 96 | App::uses($arguments['fixtureManager'], 'TestSuite'); | ||
| 97 | if (class_exists($arguments['fixtureManager'])) { | ||
| 98 | return new $arguments['fixtureManager']; | ||
| 99 | } | ||
| 100 | throw new RuntimeException(__d('cake_dev', 'Could not find fixture manager %s.', $arguments['fixtureManager'])); | ||
| 101 | } | ||
| 102 | App::uses('AppFixtureManager', 'TestSuite'); | ||
| 103 | if (class_exists('AppFixtureManager')) { | ||
| 104 | return new AppFixtureManager(); | ||
| 105 | } | ||
| 106 | return new CakeFixtureManager(); | ||
| 107 | } | ||
| 108 | |||
| 109 | } |