/** * Loads a bootstrap file. * * @param string $filename * @param boolean $syntaxCheck * @see PHPUnit_TextUI_Command::handleBootstrap() * @since Method available since Release 2.16.0 */ protected function handleBootstrap($filename, $syntaxCheck = false) { try { PHPUnit_Util_Fileloader::checkAndLoad($filename, $syntaxCheck); } catch (RuntimeException $e) { PHPUnit_TextUI_TestRunner::showError($e->getMessage()); } }
/** * Handles the loading of the PHPUnit_Runner_TestSuiteLoader implementation. * * @param string $loaderClass * @param string $loaderFile */ protected function handleLoader($loaderClass, $loaderFile = '') { if (!class_exists($loaderClass, FALSE)) { if ($loaderFile == '') { $loaderFile = PHPUnit_Util_Filesystem::classNameToFilename($loaderClass); } $loaderFile = PHPUnit_Util_Filesystem::fileExistsInIncludePath($loaderFile); if ($loaderFile !== FALSE) { require $loaderFile; } } if (class_exists($loaderClass, FALSE)) { $class = new ReflectionClass($loaderClass); if ($class->implementsInterface('PHPUnit_Runner_TestSuiteLoader') && $class->isInstantiable()) { $loader = $class->newInstance(); } } if (!isset($loader)) { PHPUnit_TextUI_TestRunner::showError(sprintf('Could not use "%s" as loader.', $loaderClass)); } return $loader; }
/** * Loads a bootstrap file. * * @param string $filename */ protected function handleBootstrap($filename) { try { PHPUnit_Util_Fileloader::checkAndLoad($filename); } catch (PHPUnit_Framework_Exception $e) { PHPUnit_TextUI_TestRunner::showError($e->getMessage()); } }
/** * This function is cut&paste from PHPUnit_TextUI_Command::handleArguments * Removed the need for a required unnamed command option ( 'test') **/ protected function handleArguments(array $argv) { try { $this->options = PHPUnit_Util_Getopt::getopt( $argv, 'd:c:', array_keys($this->longOptions) ); } catch (RuntimeException $e) { PHPUnit_TextUI_TestRunner::showError($e->getMessage()); } $skeletonClass = FALSE; $skeletonTest = FALSE; foreach ($this->options[0] as $option) { switch ($option[0]) { case '--colors': { $this->arguments['colors'] = TRUE; } break; case '--bootstrap': { $this->arguments['bootstrap'] = $option[1]; } break; case 'c': case '--configuration': { $this->arguments['configuration'] = $option[1]; } break; case '--coverage-clover': { if (extension_loaded('tokenizer') && extension_loaded('xdebug')) { $this->arguments['coverageClover'] = $option[1]; } else { if (!extension_loaded('tokenizer')) { $this->showMessage( 'The tokenizer extension is not loaded.' ); } else { $this->showMessage( 'The Xdebug extension is not loaded.' ); } } } break; case '--coverage-html': { if (extension_loaded('tokenizer') && extension_loaded('xdebug')) { $this->arguments['reportDirectory'] = $option[1]; } else { if (!extension_loaded('tokenizer')) { $this->showMessage( 'The tokenizer extension is not loaded.' ); } else { $this->showMessage( 'The Xdebug extension is not loaded.' ); } } } break; case 'd': { $ini = explode('=', $option[1]); if (isset($ini[0])) { if (isset($ini[1])) { ini_set($ini[0], $ini[1]); } else { ini_set($ini[0], TRUE); } } } break; case '--debug': { $this->arguments['debug'] = TRUE; } break; case '--help': { $this->showHelp(); exit(PHPUnit_TextUI_TestRunner::SUCCESS_EXIT); } break; case '--filter': { $this->arguments['filter'] = $option[1]; } break; case '--group': { $this->arguments['groups'] = explode(',', $option[1]); } break; case '--exclude-group': { $this->arguments['excludeGroups'] = explode( ',', $option[1] ); } break; case '--include-path': { $includePath = $option[1]; } break; case '--list-groups': { $this->arguments['listGroups'] = TRUE; } break; case '--loader': { $this->arguments['loader'] = $option[1]; } break; case '--log-dbus': { $this->arguments['logDbus'] = TRUE; } break; case '--log-json': { $this->arguments['jsonLogfile'] = $option[1]; } break; case '--log-junit': { $this->arguments['junitLogfile'] = $option[1]; } break; case '--log-tap': { $this->arguments['tapLogfile'] = $option[1]; } break; case '--process-isolation': { $this->arguments['processIsolation'] = TRUE; $this->arguments['syntaxCheck'] = FALSE; } break; case '--repeat': { $this->arguments['repeat'] = (int)$option[1]; } break; case '--stderr': { $this->arguments['printer'] = new PHPUnit_TextUI_ResultPrinter( 'php://stderr', isset($this->arguments['verbose']) ? $this->arguments['verbose'] : FALSE ); } break; case '--stop-on-error': { $this->arguments['stopOnError'] = TRUE; } break; case '--stop-on-failure': { $this->arguments['stopOnFailure'] = TRUE; } break; case '--stop-on-incomplete': { $this->arguments['stopOnIncomplete'] = TRUE; } break; case '--stop-on-skipped': { $this->arguments['stopOnSkipped'] = TRUE; } break; case '--skeleton-test': { $skeletonTest = TRUE; $skeletonClass = FALSE; } break; case '--skeleton-class': { $skeletonClass = TRUE; $skeletonTest = FALSE; } break; case '--tap': { $this->arguments['printer'] = new PHPUnit_Util_Log_TAP; } break; case '--story': { $this->showMessage( 'The --story functionality is deprecated and ' . 'will be removed in the future.', FALSE ); $this->arguments['printer'] = new PHPUnit_Extensions_Story_ResultPrinter_Text; } break; case '--story-html': { $this->showMessage( 'The --story-html functionality is deprecated and ' . 'will be removed in the future.', FALSE ); $this->arguments['storyHTMLFile'] = $option[1]; } break; case '--story-text': { $this->showMessage( 'The --story-text functionality is deprecated and ' . 'will be removed in the future.', FALSE ); $this->arguments['storyTextFile'] = $option[1]; } break; case '--syntax-check': { $this->arguments['syntaxCheck'] = TRUE; } break; case '--testdox': { $this->arguments['printer'] = new PHPUnit_Util_TestDox_ResultPrinter_Text; } break; case '--testdox-html': { $this->arguments['testdoxHTMLFile'] = $option[1]; } break; case '--testdox-text': { $this->arguments['testdoxTextFile'] = $option[1]; } break; case '--no-configuration': { $this->arguments['useDefaultConfiguration'] = FALSE; } break; case '--no-globals-backup': { $this->arguments['backupGlobals'] = FALSE; } break; case '--static-backup': { $this->arguments['backupStaticAttributes'] = TRUE; } break; case '--verbose': { $this->arguments['verbose'] = TRUE; } break; case '--version': { PHPUnit_TextUI_TestRunner::printVersionString(); exit(PHPUnit_TextUI_TestRunner::SUCCESS_EXIT); } break; case '--wait': { $this->arguments['wait'] = TRUE; } break; case '--strict': { $this->arguments['strict'] = TRUE; } break; default: { $optionName = str_replace('--', '', $option[0]); if (isset($this->longOptions[$optionName])) { $handler = $this->longOptions[$optionName]; } else if (isset($this->longOptions[$optionName . '='])) { $handler = $this->longOptions[$optionName . '=']; } if (isset($handler) && is_callable(array($this, $handler))) { $this->$handler($option[1]); } } } } if (isset($this->arguments['printer']) && $this->arguments['printer'] instanceof PHPUnit_Extensions_Story_ResultPrinter_Text && isset($this->arguments['processIsolation']) && $this->arguments['processIsolation']) { $this->showMessage( 'The story result printer cannot be used in process isolation.' ); } $this->handleCustomTestSuite(); if (!isset($this->arguments['test'])) { if (isset($this->options[1][0])) { $this->arguments['test'] = $this->options[1][0]; } if (isset($this->options[1][1])) { $this->arguments['testFile'] = $this->options[1][1]; } else { $this->arguments['testFile'] = ''; } if (isset($this->arguments['test']) && is_file($this->arguments['test'])) { $this->arguments['testFile'] = realpath($this->arguments['test']); $this->arguments['test'] = substr($this->arguments['test'], 0, strrpos($this->arguments['test'], '.')); } } if (isset($includePath)) { ini_set( 'include_path', $includePath . PATH_SEPARATOR . ini_get('include_path') ); } if (isset($this->arguments['bootstrap'])) { $this->handleBootstrap($this->arguments['bootstrap'], $this->arguments['syntaxCheck']); } if ($this->arguments['loader'] !== NULL) { $this->arguments['loader'] = $this->handleLoader($this->arguments['loader']); } if (isset($this->arguments['configuration']) && is_dir($this->arguments['configuration'])) { $configurationFile = $this->arguments['configuration'] . '/phpunit.xml'; if (file_exists($configurationFile)) { $this->arguments['configuration'] = realpath( $configurationFile ); } else if (file_exists($configurationFile . '.dist')) { $this->arguments['configuration'] = realpath( $configurationFile . '.dist' ); } } else if (!isset($this->arguments['configuration']) && $this->arguments['useDefaultConfiguration']) { if (file_exists('phpunit.xml')) { $this->arguments['configuration'] = realpath('phpunit.xml'); } else if (file_exists('phpunit.xml.dist')) { $this->arguments['configuration'] = realpath( 'phpunit.xml.dist' ); } } if (isset($this->arguments['configuration'])) { try { $configuration = PHPUnit_Util_Configuration::getInstance( $this->arguments['configuration'] ); } catch (Exception $e) { print $e->getMessage() . "\n"; exit(PHPUnit_TextUI_TestRunner::FAILURE_EXIT); } $phpunit = $configuration->getPHPUnitConfiguration(); if (isset($phpunit['syntaxCheck'])) { $this->arguments['syntaxCheck'] = $phpunit['syntaxCheck']; } if (isset($phpunit['testSuiteLoaderClass'])) { if (isset($phpunit['testSuiteLoaderFile'])) { $file = $phpunit['testSuiteLoaderFile']; } else { $file = ''; } $this->arguments['loader'] = $this->handleLoader( $phpunit['testSuiteLoaderClass'], $file ); } $configuration->handlePHPConfiguration(); if (!isset($this->arguments['bootstrap'])) { $phpunitConfiguration = $configuration->getPHPUnitConfiguration(); if (isset($phpunitConfiguration['bootstrap'])) { $this->handleBootstrap($phpunitConfiguration['bootstrap'], $this->arguments['syntaxCheck']); } } $browsers = $configuration->getSeleniumBrowserConfiguration(); if (!empty($browsers)) { PHPUnit_Extensions_SeleniumTestCase::$browsers = $browsers; } if (!isset($this->arguments['test'])) { $testSuite = $configuration->getTestSuiteConfiguration( $this->arguments['syntaxCheck'] ); if ($testSuite !== NULL) { $this->arguments['test'] = $testSuite; } } } if (isset($this->arguments['test']) && is_string($this->arguments['test']) && substr($this->arguments['test'], -5, 5) == '.phpt') { $test = new PHPUnit_Extensions_PhptTestCase($this->arguments['test']); $this->arguments['test'] = new PHPUnit_Framework_TestSuite; $this->arguments['test']->addTest($test); } // *** BEGIN ezp custom code BEGIN *** // Commented out this stuff /* if (!isset($this->arguments['test']) || (isset($this->arguments['testDatabaseLogRevision']) && !isset($this->arguments['testDatabaseDSN']))) { $this->showHelp(); exit(PHPUnit_TextUI_TestRunner::EXCEPTION_EXIT); }*/ // *** END ezp custom code END *** if (!isset($this->arguments['syntaxCheck'])) { $this->arguments['syntaxCheck'] = FALSE; } if ($skeletonClass || $skeletonTest) { if (isset($this->arguments['test']) && $this->arguments['test'] !== FALSE) { PHPUnit_TextUI_TestRunner::printVersionString(); if ($skeletonClass) { $class = 'PHPUnit_Util_Skeleton_Class'; } else { $class = 'PHPUnit_Util_Skeleton_Test'; } try { $args = array(); $reflector = new ReflectionClass($class); for ($i = 0; $i <= 3; $i++) { if (isset($this->options[1][$i])) { $args[] = $this->options[1][$i]; } } $skeleton = $reflector->newInstanceArgs($args); $skeleton->write(); } catch (Exception $e) { print $e->getMessage() . "\n"; exit(PHPUnit_TextUI_TestRunner::FAILURE_EXIT); } printf( 'Wrote skeleton for "%s" to "%s".' . "\n", $skeleton->getOutClassName(), $skeleton->getOutSourceFile() ); exit(PHPUnit_TextUI_TestRunner::SUCCESS_EXIT); } else { $this->showHelp(); exit(PHPUnit_TextUI_TestRunner::EXCEPTION_EXIT); } } }
/** * @param string $loaderName */ protected static function handleLoader($loaderName) { if (!class_exists($loaderName, FALSE)) { PHPUnit_Util_Fileloader::checkAndLoad(str_replace('_', '/', $loaderName) . '.php'); } if (class_exists($loaderName, FALSE)) { $class = new ReflectionClass($loaderName); if ($class->implementsInterface('PHPUnit_Runner_TestSuiteLoader') && $class->isInstantiable()) { $loader = $class->newInstance(); } } if (!isset($loader)) { PHPUnit_TextUI_TestRunner::showError(sprintf('Could not use "%s" as loader.', $loaderName)); } PHPUnit_TextUI_TestRunner::setLoader($loader); }
/** * Whitelists all kernel, lib and extension classes for code coverage * * @return PHP_CodeCoverage_Filter */ protected function createCodeCoverageFilter() { $filter = new PHP_CodeCoverage_Filter(); // Add kernel classes to whitelist $kernelClassFiles = (require 'autoload/ezp_kernel.php'); $filter->addFilesToWhitelist($kernelClassFiles); // Add extension classes to whitelist if (!is_file('var/autoload/ezp_extension.php')) { PHPUnit_TextUI_TestRunner::showError("Please generate the extension autoloads first.\n" . "You can generate them using php bin/php/ezpgenerateautoloads.php -e"); } $extensionClassFiles = (require 'var/autoload/ezp_extension.php'); $filter->addFilesToWhitelist($extensionClassFiles); return $filter; }
/** * Handles the commandline arguments passed. * * @return array the commandline arguments * * @author Felix Gilcher <*****@*****.**> * @since 1.0.0 */ public static function processCommandlineOptions() { $longOptions = array('coverage-html=', 'coverage-clover=', 'coverage-source=', 'coverage-xml=', 'report=', 'environment=', 'help', 'log-graphviz=', 'log-json=', 'log-metrics=', 'log-pmd=', 'log-tap=', 'log-xml=', 'include-suite=', 'exclude-suite='); try { $options = PHPUnit_Util_Getopt::getopt($_SERVER['argv'], 'd:', $longOptions); } catch (RuntimeException $e) { PHPUnit_TextUI_TestRunner::showError($e->getMessage()); } $arguments = array(); foreach ($options[0] as $option) { switch ($option[0]) { case '--coverage-clover': case '--coverage-xml': if (self::checkCodeCoverageDeps()) { $arguments['coverageClover'] = $option[1]; } break; case '--coverage-source': if (self::checkCodeCoverageDeps()) { $arguments['coverageSource'] = $option[1]; } break; case '--coverage-html': case '--report': if (self::checkCodeCoverageDeps()) { $arguments['reportDirectory'] = $option[1]; } break; case '--environment': $arguments['environment'] = $option[1]; break; case '--help': self::showHelp(); exit(PHPUnit_TextUI_TestRunner::SUCCESS_EXIT); break; case '--log-json': $arguments['jsonLogfile'] = $option[1]; break; case '--log-graphviz': if (PHPUnit_Util_Filesystem::fileExistsInIncludePath('Image/GraphViz.php')) { $arguments['graphvizLogfile'] = $option[1]; } else { throw new AgaviException('The Image_GraphViz package is not installed.'); } break; case '--log-tap': $arguments['tapLogfile'] = $option[1]; break; case '--log-xml': $arguments['xmlLogfile'] = $option[1]; break; case '--log-pmd': if (self::checkCodeCoverageDeps()) { $arguments['pmdXML'] = $option[1]; } break; case '--log-metrics': if (self::checkCodeCoverageDeps()) { $arguments['metricsXML'] = $option[1]; } break; case '--include-suite': $arguments['include-suite'] = $option[1]; break; case '--exclude-suite': $arguments['exclude-suite'] = $option[1]; break; } } return $arguments; }
/** * Read PHPUnit options */ protected function readOptions() { try { $reader = new Core_FileReader(); $options = \PHPUnit_Util_Getopt::getopt($_SERVER['argv'], 'd:c:hv', array_keys($reader->getLongOptions())); } catch (\PHPUnit_Framework_Exception $e) { \PHPUnit_TextUI_TestRunner::showError($e->getMessage()); } foreach ($options[0] as $option) { $this->options[$option[0]] = isset($option[1]) ? $option[1] : true; } }
/** * @access protected * @static */ protected static function _initArguments() { $arguments['suite_filter'] = array(); $arguments['runner_parameters'] = array(); $longOptions = array('list-suites', 'new-suite=', 'suite-filter=', 'test-filter=', 'help', 'verbose', 'version'); try { $options = PHPUnit_Util_Getopt::getopt($_SERVER['argv'], 'd:', $longOptions); } catch (RuntimeException $e) { PHPUnit_TextUI_TestRunner::showError($e->getMessage()); } foreach ($options[0] as $option) { switch ($option[0]) { case 'd': $ini = explode('=', $option[1]); if (isset($ini[0])) { if (isset($ini[1])) { ini_set($ini[0], $ini[1]); } else { ini_set($ini[0], TRUE); } } break; case '--list-suites': self::_listSuites(); exit(PHPUnit_TextUI_TestRunner::SUCCESS_EXIT); break; case '--new-suite': self::_createNewSuite($option[1]); exit(PHPUnit_TextUI_TestRunner::SUCCESS_EXIT); break; case '--suite-filter': $arguments['suite_filter'] = explode(",", $option[1]); break; case '--test-filter': $arguments['runner_parameters']['filter'] = "/" . $option[1] . "/i"; break; case '--help': self::_showHelp(); exit(PHPUnit_TextUI_TestRunner::SUCCESS_EXIT); break; case '--verbose': $arguments['runner_parameters']['verbose'] = true; break; case '--version': self::_printVersionString(); exit(PHPUnit_TextUI_TestRunner::SUCCESS_EXIT); break; } } self::$_arguments = $arguments; return true; }