cakephp2-php8/lib/Cake/TestSuite/CakeTestSuiteCommand.php

158 lines
4.3 KiB
PHP
Raw Normal View History

<?php
/**
* TestRunner for CakePHP Test suite.
*
2017-06-10 21:33:55 +00:00
* CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
2017-06-10 21:33:55 +00:00
* @link https://cakephp.org CakePHP(tm) Project
* @package Cake.TestSuite
* @since CakePHP(tm) v 2.0
* @license https://opensource.org/licenses/mit-license.php MIT License
*/
if (!class_exists('PHPUnit_TextUI_Command')) {
require_once 'PHPUnit/TextUI/Command.php';
}
2011-02-14 04:26:41 +00:00
App::uses('CakeTestRunner', 'TestSuite');
App::uses('CakeTestLoader', 'TestSuite');
App::uses('CakeTestSuite', 'TestSuite');
App::uses('CakeTestCase', 'TestSuite');
App::uses('ControllerTestCase', 'TestSuite');
App::uses('CakeTestModel', 'TestSuite/Fixture');
/**
* Class to customize loading of test suites from CLI
*
* @package Cake.TestSuite
*/
class CakeTestSuiteCommand extends PHPUnit_TextUI_Command {
/**
* Construct method
*
2014-06-06 17:57:48 +00:00
* @param mixed $loader The loader instance to use.
* @param array $params list of options to be used for this run
* @throws MissingTestLoaderException When a loader class could not be found.
*/
public function __construct($loader, $params = array()) {
if ($loader && !class_exists($loader)) {
2011-12-15 06:54:03 +00:00
throw new MissingTestLoaderException(array('class' => $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';
}
2011-02-13 04:09:47 +00:00
/**
2013-10-23 02:59:50 +00:00
* Ugly hack to get around PHPUnit having a hard coded class name for the Runner. :(
2011-02-13 04:09:47 +00:00
*
2014-06-06 17:57:48 +00:00
* @param array $argv The command arguments
* @param bool $exit The exit mode.
2014-04-02 01:09:42 +00:00
* @return void
2011-02-13 04:09:47 +00:00
*/
public function run(array $argv, $exit = true) {
2011-02-12 22:39:42 +00:00
$this->handleArguments($argv);
$runner = $this->getRunner($this->arguments['loader']);
2011-02-12 22:39:42 +00:00
if (is_object($this->arguments['test']) &&
$this->arguments['test'] instanceof PHPUnit_Framework_Test) {
$suite = $this->arguments['test'];
} else {
$suite = $runner->getTest(
2011-12-15 06:54:03 +00:00
$this->arguments['test'],
$this->arguments['testFile']
2011-02-12 22:39:42 +00:00
);
}
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);
2011-12-15 06:54:03 +00:00
} catch (PHPUnit_Framework_Exception $e) {
2011-02-12 22:39:42 +00:00
print $e->getMessage() . "\n";
}
if ($exit) {
if (isset($result) && $result->wasSuccessful()) {
exit(PHPUnit_TextUI_TestRunner::SUCCESS_EXIT);
2012-02-23 13:38:02 +00:00
} elseif (!isset($result) || $result->errorCount() > 0) {
2011-02-12 22:39:42 +00:00
exit(PHPUnit_TextUI_TestRunner::EXCEPTION_EXIT);
}
2013-07-02 23:14:41 +00:00
exit(PHPUnit_TextUI_TestRunner::FAILURE_EXIT);
2011-02-12 22:39:42 +00:00
}
}
/**
* Create a runner for the command.
*
2012-11-28 22:30:47 +00:00
* @param mixed $loader The loader to be used for the test run.
* @return CakeTestRunner
*/
public function getRunner($loader) {
2012-11-21 14:39:03 +00:00
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.
*
2014-06-06 17:57:48 +00:00
* @param string $reporter The reporter class to use.
* @return void
*/
public function handleReporter($reporter) {
$object = null;
$reporter = ucwords($reporter);
$coreClass = 'Cake' . $reporter . 'Reporter';
2011-02-14 04:26:41 +00:00
App::uses($coreClass, 'TestSuite/Reporter');
$appClass = $reporter . 'Reporter';
2011-02-14 04:26:41 +00:00
App::uses($appClass, 'TestSuite/Reporter');
if (!class_exists($appClass)) {
$object = new $coreClass(null, $this->_params);
2011-02-14 04:26:41 +00:00
} else {
$object = new $appClass(null, $this->_params);
}
2011-02-13 03:32:16 +00:00
return $this->arguments['printer'] = $object;
}
}