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

Reply via email to