Merge "Selenium: replace UserLoginPage with BlankPage where possible"
[lhc/web/wiklou.git] / tests / phpunit / phpunit.php
index d83dedb..6544544 100755 (executable)
@@ -14,35 +14,15 @@ define( 'MW_PHPUNIT_TEST', true );
 require_once dirname( dirname( __DIR__ ) ) . "/maintenance/Maintenance.php";
 
 class PHPUnitMaintClass extends Maintenance {
-
-       public static $additionalOptions = [
-               'file' => false,
-               'use-filebackend' => false,
-               'use-bagostuff' => false,
-               'use-jobqueue' => false,
-               'use-normal-tables' => false,
-               'mwdebug' => false,
-               'reuse-db' => false,
-               'wiki' => false,
-               'profiler' => false,
-       ];
-
        public function __construct() {
                parent::__construct();
                $this->setAllowUnregisteredOptions( true );
-               $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.',
+                       'Log testing activity to the PHPUnitCommand log channel (deprecated, always on).',
                        false, # not required
                        false # no arg needed
                );
-               $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 );
@@ -64,8 +44,6 @@ class PHPUnitMaintClass extends Maintenance {
        }
 
        public function execute() {
-               global $IP;
-
                // Deregister handler from MWExceptionHandler::installHandle so that PHPUnit's own handler
                // stays in tact.
                // Has to in execute() instead of finalSetup(), because finalSetup() runs before
@@ -74,65 +52,42 @@ class PHPUnitMaintClass extends Maintenance {
 
                $this->forceFormatServerArgv();
 
-               # Make sure we have --configuration or PHPUnit might complain
-               if ( !in_array( '--configuration', $_SERVER['argv'] ) ) {
-                       // Hack to eliminate the need to use the Makefile (which sucks ATM)
-                       array_splice( $_SERVER['argv'], 1, 0,
-                               [ '--configuration', $IP . '/tests/phpunit/suite.xml' ] );
-               }
-
-               $phpUnitClass = PHPUnit_TextUI_Command::class;
-
-               if ( $this->hasOption( 'with-phpunitclass' ) ) {
-                       $phpUnitClass = $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] );
-                       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;
-                               }
-                       }
-               }
-
                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( $phpUnitClass ) ) {
-                       echo "PHPUnit entry point '" . $phpUnitClass . "' 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' ) ?
+               fwrite( STDERR, defined( 'HHVM_VERSION' ) ?
                        'Using HHVM ' . HHVM_VERSION . ' (' . PHP_VERSION . ")\n" :
-                       'Using PHP ' . PHP_VERSION . "\n";
+                       'Using PHP ' . PHP_VERSION . "\n" );
+
+               // Tell PHPUnit to ignore options meant for MediaWiki
+               $ignore = [];
+               foreach ( $this->mParams as $name => $param ) {
+                       if ( empty( $param['withArg'] ) ) {
+                               $ignore[] = $name;
+                       } else {
+                               $ignore[] = "$name=";
+                       }
+               }
 
-               // Prepare global services for unit tests.
-               MediaWikiTestCase::prepareServices( new GlobalVarConfig() );
+               // Pass through certain options to MediaWikiTestCase
+               $cliArgs = [];
+               foreach (
+                       [
+                               'use-filebackend',
+                               'use-bagostuff',
+                               'use-jobqueue',
+                               'use-normal-tables',
+                               'reuse-db'
+                       ] as $name
+               ) {
+                       $cliArgs[$name] = $this->getOption( $name );
+               }
 
-               $phpUnitClass::main();
+               $command = new MediaWikiPHPUnitCommand( $ignore, $cliArgs );
+               $command->run( $_SERVER['argv'], true );
        }
 
        public function getDbType() {