$loader)); } $this->arguments['loader'] = $loader; $this->arguments['test'] = $params['case']; $this->arguments['testFile'] = $params; $this->_params = $params; $this->longOptions['fixture='] = 'handleFixture'; $this->longOptions['output='] = 'handleReporter'; } /** * Ugly hack to get around PHPUnit having a hard coded class name for the Runner. :( * * @param array $argv The command arguments * @param bool $exit The exit mode. * @return void */ public function run(array $argv, $exit = true) { $this->handleArguments($argv); $runner = $this->getRunner($this->arguments['loader']); if (is_object($this->arguments['test']) && $this->arguments['test'] instanceof PHPUnit_Framework_Test) { $suite = $this->arguments['test']; } else { $suite = $runner->getTest( $this->arguments['test'], $this->arguments['testFile'] ); } if ($this->arguments['listGroups']) { PHPUnit_TextUI_TestRunner::printVersionString(); print "Available test group(s):\n"; $groups = $suite->getGroups(); sort($groups); foreach ($groups as $group) { print " - $group\n"; } exit(PHPUnit_TextUI_TestRunner::SUCCESS_EXIT); } unset($this->arguments['test']); unset($this->arguments['testFile']); try { $result = $runner->doRun($suite, $this->arguments, false); } catch (PHPUnit_Framework_Exception $e) { print $e->getMessage() . "\n"; } if ($exit) { if (isset($result) && $result->wasSuccessful()) { exit(PHPUnit_TextUI_TestRunner::SUCCESS_EXIT); } elseif (!isset($result) || $result->errorCount() > 0) { exit(PHPUnit_TextUI_TestRunner::EXCEPTION_EXIT); } exit(PHPUnit_TextUI_TestRunner::FAILURE_EXIT); } } /** * Create a runner for the command. * * @param mixed $loader The loader to be used for the test run. * @return CakeTestRunner */ public function getRunner($loader) { return new CakeTestRunner($loader, $this->_params); } /** * Handler for customizing the FixtureManager class/ * * @param string $class Name of the class that will be the fixture manager * @return void */ public function handleFixture($class) { $this->arguments['fixtureManager'] = $class; } /** * Handles output flag used to change printing on webrunner. * * @param string $reporter The reporter class to use. * @return void */ public function handleReporter($reporter) { $object = null; $reporter = ucwords($reporter); $coreClass = 'Cake' . $reporter . 'Reporter'; App::uses($coreClass, 'TestSuite/Reporter'); $appClass = $reporter . 'Reporter'; App::uses($appClass, 'TestSuite/Reporter'); if (!class_exists($appClass)) { $object = new $coreClass(null, $this->_params); } else { $object = new $appClass(null, $this->_params); } return $this->arguments['printer'] = $object; } }