Paladox has uploaded a new change for review. https://gerrit.wikimedia.org/r/276498
Change subject: Backport Ibac9b36bbb9614d990c697a091947a64c8987d1d ...................................................................... Backport Ibac9b36bbb9614d990c697a091947a64c8987d1d This may fix this error 16:09:21 PHP Warning: require_once(PHPUnit/Runner/Version.php): failed to open stream: No such file or directory in /mnt/jenkins-workspace/workspace/mwext-testextension-php53-composer/src/tests/phpunit/phpunit.php on line 105 Change-Id: Ibb9ce2def36f0f34d3b575dd60d7b78f2526addf --- M .gitignore M tests/phpunit/phpunit.php 2 files changed, 130 insertions(+), 24 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core refs/changes/98/276498/1 diff --git a/.gitignore b/.gitignore index 0351cf5..93c429f 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,7 @@ # Building & testing node_modules/ +/tests/phpunit/phpunit.phar # Composer /vendor diff --git a/tests/phpunit/phpunit.php b/tests/phpunit/phpunit.php index 8e2bc03..114bb0f 100755 --- a/tests/phpunit/phpunit.php +++ b/tests/phpunit/phpunit.php @@ -6,7 +6,8 @@ * @file */ -// Set a flag which can be used to detect when other scripts have been entered through this entry point or not +// Set a flag which can be used to detect when other scripts have been entered +// through this entry point or not. define( 'MW_PHPUNIT_TEST', true ); // Start up MediaWiki in command-line mode @@ -14,13 +15,41 @@ class PHPUnitMaintClass extends Maintenance { + public static $additionalOptions = array( + 'regex' => false, + 'file' => false, + 'use-filebackend' => false, + 'use-bagostuff' => false, + 'use-jobqueue' => false, + 'keep-uploads' => false, + 'use-normal-tables' => false, + 'reuse-db' => false, + 'wiki' => false, + ); + public function __construct() { parent::__construct(); - $this->addOption( 'with-phpunitdir', - 'Directory to include PHPUnit from, for example when using a git fetchout from upstream. Path will be prepended to PHP `include_path`.', + $this->addOption( + 'with-phpunitdir', + 'Directory to include PHPUnit from, for example when using a git ' + . 'fetchout from upstream. Path will be prepended to PHP `include_path`.', false, # not required true # need arg ); + $this->addOption( + 'debug-tests', + 'Log testing activity to the PHPUnitCommand log channel.', + false, # not required + false # no arg needed + ); + $this->addOption( 'regex', 'Only run parser tests that match the given regex.', false, true ); + $this->addOption( 'file', 'File describing parser tests.', false, true ); + $this->addOption( 'use-filebackend', 'Use filebackend', false, true ); + $this->addOption( 'use-bagostuff', 'Use bagostuff', false, true ); + $this->addOption( 'use-jobqueue', 'Use jobqueue', false, true ); + $this->addOption( 'keep-uploads', 'Re-use the same upload directory for each test, don\'t delete it.', false, false ); + $this->addOption( 'use-normal-tables', 'Use normal DB tables.', false, false ); + $this->addOption( 'reuse-db', 'Init DB only if tables are missing and keep after finish.', false, false ); } public function finalSetup() { @@ -57,10 +86,14 @@ return false; } ); + // xdebug's default of 100 is too low for MediaWiki + ini_set( 'xdebug.max_nesting_level', 1000 ); } public function execute() { global $IP; + + $this->forceFormatServerArgv(); # Make sure we have --configuration or PHPUnit might complain if ( !in_array( '--configuration', $_SERVER['argv'] ) ) { @@ -70,17 +103,12 @@ } # --with-phpunitdir let us override the default PHPUnit version + # Can use with either or phpunit.phar in the directory or the + # full PHPUnit code base. if ( $this->hasOption( 'with-phpunitdir' ) ) { $phpunitDir = $this->getOption( 'with-phpunitdir' ); - # Sanity checks - if ( !is_dir( $phpunitDir ) ) { - $this->error( "--with-phpunitdir should be set to an existing directory", 1 ); - } - if ( !is_readable( $phpunitDir . "/PHPUnit/Runner/Version.php" ) ) { - $this->error( "No usable PHPUnit installation in $phpunitDir.\nAborting.\n", 1 ); - } - # Now prepends provided PHPUnit directory + # prepends provided PHPUnit directory or phar $this->output( "Will attempt loading PHPUnit from `$phpunitDir`\n" ); set_include_path( $phpunitDir . PATH_SEPARATOR . get_include_path() ); @@ -91,38 +119,115 @@ unset( $_SERVER['argv'][$key + 1] ); // its value $_SERVER['argv'] = array_values( $_SERVER['argv'] ); } + + if ( !wfIsWindows() ) { + # If we are not running on windows then we can enable phpunit colors + # Windows does not come anymore with ANSI.SYS loaded by default + # PHPUnit uses the suite.xml parameters to enable/disable colors + # which can be then forced to be enabled with --colors. + # The below code injects a parameter just like if the user called + # Probably fix bug 29226 + $key = array_search( '--colors', $_SERVER['argv'] ); + if ( $key === false ) { + array_splice( $_SERVER['argv'], 1, 0, '--colors' ); + } + } + + # Makes MediaWiki PHPUnit directory includable so the PHPUnit will + # be able to resolve relative files inclusion such as suites/* + # PHPUnit uses stream_resolve_include_path() internally + # See bug 32022 + $key = array_search( '--include-path', $_SERVER['argv'] ); + if ( $key === false ) { + array_splice( $_SERVER['argv'], 1, 0, + __DIR__ + . PATH_SEPARATOR + . get_include_path() + ); + array_splice( $_SERVER['argv'], 1, 0, '--include-path' ); + } + + $key = array_search( '--debug-tests', $_SERVER['argv'] ); + if( $key !== false && array_search( '--printer', $_SERVER['argv'] ) === false ) { + unset( $_SERVER['argv'][$key] ); + array_splice( $_SERVER['argv'], 1, 0, 'MediaWikiPHPUnitTestListener' ); + array_splice( $_SERVER['argv'], 1, 0, '--printer' ); + } + + foreach( self::$additionalOptions as $option => $default ) { + $key = array_search( '--' . $option, $_SERVER['argv'] ); + if( $key !== false ) { + unset( $_SERVER['argv'][$key] ); + if( $this->mParams[$option]['withArg'] ) { + self::$additionalOptions[$option] = $_SERVER['argv'][$key + 1]; + unset( $_SERVER['argv'][$key + 1] ); + } else { + self::$additionalOptions[$option] = true; + } + } + } + } public function getDbType() { return Maintenance::DB_ADMIN; } + + /** + * Force the format of elements in $_SERVER['argv'] + * - Split args such as "wiki=enwiki" into two separate arg elements "wiki" and "enwiki" + */ + private function forceFormatServerArgv() { + $argv = array(); + foreach( $_SERVER['argv'] as $key => $arg ) { + if( $key === 0 ) { + $argv[0] = $arg; + } elseif ( strstr( $arg, '=' ) ) { + foreach( explode( '=', $arg, 2 ) as $argPart ) { + $argv[] = $argPart; + } + } else { + $argv[] = $arg; + } + } + $_SERVER['argv'] = $argv; + } + } $maintClass = 'PHPUnitMaintClass'; require RUN_MAINTENANCE_IF_MAIN; -if ( !class_exists( 'PHPUnit_Runner_Version' ) ) { +$pharFile = stream_resolve_include_path( 'phpunit.phar' ); +$isValidPhar = Phar::isValidPharFilename( $pharFile ); + +if ( !$isValidPhar && !class_exists( 'PHPUnit_Runner_Version' ) ) { + // try loading phpunit via PEAR require_once 'PHPUnit/Runner/Version.php'; -} - -if ( PHPUnit_Runner_Version::id() !== '@package_version@' - && version_compare( PHPUnit_Runner_Version::id(), '3.7.0', '<' ) -) { - die( 'PHPUnit 3.7.0 or later required, you have ' . PHPUnit_Runner_Version::id() . ".\n" ); -} - -if ( !class_exists( 'PHPUnit_TextUI_Command' ) ) { - require_once 'PHPUnit/Autoload.php'; } // Prevent segfault when we have lots of unit tests (bug 62623) if ( version_compare( PHP_VERSION, '5.4.0', '<' ) && version_compare( PHP_VERSION, '5.3.0', '>=' ) ) { - register_shutdown_function( function() { + register_shutdown_function( function () { gc_collect_cycles(); gc_disable(); } ); } -MediaWikiPHPUnitCommand::main(); +if ( $isValidPhar ) { + require $pharFile; +} else { + if ( PHPUnit_Runner_Version::id() !== '@package_version@' + && version_compare( PHPUnit_Runner_Version::id(), '3.7.0', '<' ) + ) { + die( 'PHPUnit 3.7.0 or later required, you have ' . PHPUnit_Runner_Version::id() . ".\n" ); + } + + if ( !class_exists( 'PHPUnit_TextUI_Command' ) ) { + require_once 'PHPUnit/Autoload.php'; + } + + PHPUnit_TextUI_Command::main(); +} -- To view, visit https://gerrit.wikimedia.org/r/276498 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ibb9ce2def36f0f34d3b575dd60d7b78f2526addf Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/core Gerrit-Branch: REL1_23 Gerrit-Owner: Paladox <thomasmulhall...@yahoo.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits