pictcode / lib / Cake / TestSuite / CakeTestRunner.php @ 3bf0e002
履歴 | 表示 | アノテート | ダウンロード (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 | } |