Merge "Introduce mediawiki.router for handling hash fragment navigation"
[lhc/web/wiklou.git] / tests / phpunit / phpunit.php
index 02d1a1d..d876c45 100755 (executable)
@@ -10,6 +10,8 @@
 // through this entry point or not.
 define( 'MW_PHPUNIT_TEST', true );
 
+$wgPhpUnitClass = 'PHPUnit_TextUI_Command';
+
 // Start up MediaWiki in command-line mode
 require_once dirname( dirname( __DIR__ ) ) . "/maintenance/Maintenance.php";
 
@@ -29,6 +31,12 @@ class PHPUnitMaintClass extends Maintenance {
 
        public function __construct() {
                parent::__construct();
+               $this->addOption(
+                       'with-phpunitclass',
+                       'Class name of the PHPUnit entry point to use',
+                       false,
+                       true
+               );
                $this->addOption(
                        'debug-tests',
                        'Log testing activity to the PHPUnitCommand log channel.',
@@ -108,7 +116,7 @@ class PHPUnitMaintClass extends Maintenance {
                // cookies to show up in a FauxRequest somewhere.
                $wgSessionProviders = [
                        [
-                               'class' => 'MediaWiki\\Session\\CookieSessionProvider',
+                               'class' => MediaWiki\Session\CookieSessionProvider::class,
                                'args' => [ [
                                        'priority' => 30,
                                        'callUserSetCookiesHook' => true,
@@ -131,6 +139,10 @@ class PHPUnitMaintClass extends Maintenance {
                // may break testing against floating point values
                // treated with PHP's serialize()
                ini_set( 'serialize_precision', 17 );
+
+               // TODO: we should call MediaWikiTestCase::prepareServices( new GlobalVarConfig() ) here.
+               // But PHPUnit may not be loaded yet, so we have to wait until just
+               // before PHPUnit_TextUI_Command::main() is executed at the end of this file.
        }
 
        public function execute() {
@@ -151,6 +163,18 @@ class PHPUnitMaintClass extends Maintenance {
                                [ '--configuration', $IP . '/tests/phpunit/suite.xml' ] );
                }
 
+               if ( $this->hasOption( 'with-phpunitclass' ) ) {
+                       global $wgPhpUnitClass;
+                       $wgPhpUnitClass = $this->getOption( 'with-phpunitclass' );
+
+                       # Cleanup $args array so the option and its value do not
+                       # pollute PHPUnit
+                       $key = array_search( '--with-phpunitclass', $_SERVER['argv'] );
+                       unset( $_SERVER['argv'][$key] ); // the option
+                       unset( $_SERVER['argv'][$key + 1] ); // its value
+                       $_SERVER['argv'] = array_values( $_SERVER['argv'] );
+               }
+
                $key = array_search( '--debug-tests', $_SERVER['argv'] );
                if ( $key !== false && array_search( '--printer', $_SERVER['argv'] ) === false ) {
                        unset( $_SERVER['argv'][$key] );
@@ -202,14 +226,24 @@ class PHPUnitMaintClass extends Maintenance {
 $maintClass = 'PHPUnitMaintClass';
 require RUN_MAINTENANCE_IF_MAIN;
 
-if ( !class_exists( 'PHPUnit_TextUI_Command' ) ) {
+if ( !class_exists( 'PHPUnit_Framework_TestCase' ) ) {
        echo "PHPUnit not found. Please install it and other dev dependencies by
 running `composer install` in MediaWiki root directory.\n";
        exit( 1 );
 }
+if ( !class_exists( $wgPhpUnitClass ) ) {
+       echo "PHPUnit entry point '" . $wgPhpUnitClass . "' not found. Please make sure you installed
+the containing component and check the spelling of the class name.\n";
+       exit( 1 );
+}
 
 echo defined( 'HHVM_VERSION' ) ?
        'Using HHVM ' . HHVM_VERSION . ' (' . PHP_VERSION . ")\n" :
        'Using PHP ' . PHP_VERSION . "\n";
 
-PHPUnit_TextUI_Command::main();
+// Prepare global services for unit tests.
+// FIXME: this should be done in the finalSetup() method,
+// but PHPUnit may not have been loaded at that point.
+MediaWikiTestCase::prepareServices( new GlobalVarConfig() );
+
+$wgPhpUnitClass::main();