123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- <?php
- /**
- * TestLoader for CakePHP Test suite.
- *
- * Turns partial paths used on the testsuite console and web UI into full file paths.
- *
- * PHP 5
- *
- * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
- * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
- *
- * Licensed under The MIT License
- * Redistributions of files must retain the above copyright notice.
- *
- * @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
- * @link http://cakephp.org CakePHP(tm) Project
- * @since CakePHP(tm) v 2.0
- * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
- * @package Cake.TestSuite
- */
- /**
- * TestLoader for CakePHP Test suite.
- *
- * Turns partial paths used on the testsuite console and web UI into full file paths.
- *
- * @package Cake.TestSuite
- */
- class CakeTestLoader extends PHPUnit_Runner_StandardTestSuiteLoader {
- /**
- * Load a file and find the first test case / suite in that file.
- *
- * @param string $filePath
- * @param string $params
- * @return ReflectionClass
- */
- public function load($filePath, $params = '') {
- $file = $this->_resolveTestFile($filePath, $params);
- return parent::load('', $file);
- }
- /**
- * Convert path fragments used by Cake's test runner to absolute paths that can be fed to PHPUnit.
- *
- * @param string $filePath
- * @param string $params
- * @return void
- */
- protected function _resolveTestFile($filePath, $params) {
- $basePath = $this->_basePath($params) . DS . $filePath;
- $ending = 'Test.php';
- return (strpos($basePath, $ending) === (strlen($basePath) - strlen($ending))) ? $basePath : $basePath . $ending;
- }
- /**
- * Generates the base path to a set of tests based on the parameters.
- *
- * @param array $params
- * @return string The base path.
- */
- protected static function _basePath($params) {
- $result = null;
- if (!empty($params['core'])) {
- $result = CORE_TEST_CASES;
- } elseif (!empty($params['plugin'])) {
- if (!CakePlugin::loaded($params['plugin'])) {
- try {
- CakePlugin::load($params['plugin']);
- $result = CakePlugin::path($params['plugin']) . 'Test' . DS . 'Case';
- } catch (MissingPluginException $e) {
- }
- } else {
- $result = CakePlugin::path($params['plugin']) . 'Test' . DS . 'Case';
- }
- } elseif (!empty($params['app'])) {
- $result = APP_TEST_CASES;
- }
- return $result;
- }
- /**
- * Get the list of files for the test listing.
- *
- * @param string $params
- * @return array
- */
- public static function generateTestList($params) {
- $directory = self::_basePath($params);
- $fileList = self::_getRecursiveFileList($directory);
- $testCases = array();
- foreach ($fileList as $testCaseFile) {
- $case = str_replace($directory . DS, '', $testCaseFile);
- $case = str_replace('Test.php', '', $case);
- $testCases[$testCaseFile] = $case;
- }
- sort($testCases);
- return $testCases;
- }
- /**
- * Gets a recursive list of files from a given directory and matches then against
- * a given fileTestFunction, like isTestCaseFile()
- *
- * @param string $directory The directory to scan for files.
- * @return array
- */
- protected static function _getRecursiveFileList($directory = '.') {
- $fileList = array();
- if (!is_dir($directory)) {
- return $fileList;
- }
- $files = new RegexIterator(
- new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)),
- '/.*Test.php$/'
- );
- foreach ($files as $file) {
- $fileList[] = $file->getPathname();
- }
- return $fileList;
- }
- }
|