# tests/phpunit
'MediaWikiTestCase' => "$testDir/phpunit/MediaWikiTestCase.php",
- 'MediaWikiPHPUnitCommand' => "$testDir/phpunit/MediaWikiPHPUnitCommand.php",
'MediaWikiPHPUnitTestListener' => "$testDir/phpunit/MediaWikiPHPUnitTestListener.php",
'MediaWikiLangTestCase' => "$testDir/phpunit/MediaWikiLangTestCase.php",
'MediaWikiPasswordTestCase' => "$testDir/phpunit/MediaWikiPasswordTestCase.php",
+++ /dev/null
-<?php
-
-class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
-
- 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() {
- foreach ( self::$additionalOptions as $option => $default ) {
- $this->longOptions[$option] = $option . 'Handler';
- }
- }
-
- public static function main( $exit = true ) {
- $command = new self;
- $command->run( $_SERVER['argv'], $exit );
- }
-
- public function __call( $func, $args ) {
-
- if ( substr( $func, -7 ) == 'Handler' ) {
- if ( is_null( $args[0] ) ) {
- $args[0] = true;
- } //Booleans
- self::$additionalOptions[substr( $func, 0, -7 )] = $args[0];
- }
- }
-
- public function showHelp() {
- parent::showHelp();
-
- print <<<EOT
-
-ParserTest-specific options:
- --regex="<regex>" Only run parser tests that match the given regex
- --file="<filename>" File describing parser tests
- --keep-uploads Re-use the same upload directory for each test, don't delete it
-
-Database options:
- --use-normal-tables Use normal DB tables.
- --reuse-db Init DB only if tables are missing and keep after finish.
-
-EOT;
- }
-}
* @return mixed
*/
public function getCliArg( $offset ) {
- if ( isset( MediaWikiPHPUnitCommand::$additionalOptions[$offset] ) ) {
- return MediaWikiPHPUnitCommand::$additionalOptions[$offset];
+ if ( isset( PHPUnitMaintClass::$additionalOptions[$offset] ) ) {
+ return PHPUnitMaintClass::$additionalOptions[$offset];
}
}
* @param mixed $value
*/
public function setCliArg( $offset, $value ) {
- MediaWikiPHPUnitCommand::$additionalOptions[$offset] = $value;
+ PHPUnitMaintClass::$additionalOptions[$offset] = $value;
}
/**
parent::setUp();
$uniqueId = time() . '-' . mt_rand();
$tmpPrefix = wfTempDir() . '/filebackend-unittest-' . $uniqueId;
- if ( $this->getCliArg( 'use-filebackend=' ) ) {
+ if ( $this->getCliArg( 'use-filebackend' ) ) {
if ( self::$backendToUse ) {
$this->singleBackend = self::$backendToUse;
} else {
- $name = $this->getCliArg( 'use-filebackend=' );
+ $name = $this->getCliArg( 'use-filebackend' );
$useConfig = array();
foreach ( $wgFileBackends as $conf ) {
if ( $conf['name'] == $name ) {
# Forge a FSRepo object to not have to rely on local wiki settings
$tmpPrefix = wfTempDir() . '/storebatch-test-' . time() . '-' . mt_rand();
- if ( $this->getCliArg( 'use-filebackend=' ) ) {
- $name = $this->getCliArg( 'use-filebackend=' );
+ if ( $this->getCliArg( 'use-filebackend' ) ) {
+ $name = $this->getCliArg( 'use-filebackend' );
$useConfig = array();
foreach ( $wgFileBackends as $conf ) {
if ( $conf['name'] == $name ) {
$this->setMwGlobals( 'wgMemc', new HashBagOStuff() );
- if ( $this->getCliArg( 'use-jobqueue=' ) ) {
- $name = $this->getCliArg( 'use-jobqueue=' );
+ if ( $this->getCliArg( 'use-jobqueue' ) ) {
+ $name = $this->getCliArg( 'use-jobqueue' );
if ( !isset( $wgJobTypeConf[$name] ) ) {
throw new MWException( "No \$wgJobTypeConf entry for '$name'." );
}
parent::setUp();
// type defined through parameter
- if ( $this->getCliArg( 'use-bagostuff=' ) ) {
- $name = $this->getCliArg( 'use-bagostuff=' );
+ if ( $this->getCliArg( 'use-bagostuff' ) ) {
+ $name = $this->getCliArg( 'use-bagostuff' );
$this->cache = ObjectCache::newFromId( $name );
} else {
* - pcntl_fork is supported by the system
* - cache type will correctly support calls over forks
*/
- $fork = (bool)$this->getCliArg( 'use-bagostuff=' );
+ $fork = (bool)$this->getCliArg( 'use-bagostuff' );
$fork &= function_exists( 'pcntl_fork' );
$fork &= !$this->cache instanceof HashBagOStuff;
$fork &= !$this->cache instanceof EmptyBagOStuff;
parent::setUp();
//Setup CLI arguments
- if ( $this->getCliArg( 'regex=' ) ) {
- $this->regex = $this->getCliArg( 'regex=' );
+ if ( $this->getCliArg( 'regex' ) ) {
+ $this->regex = $this->getCliArg( 'regex' );
} else {
# Matches anything
$this->regex = '';
self::getOptionValue( 'wgLinkHolderBatchSize', $opts, 1000 );
$uploadDir = $this->getUploadDir();
- if ( $this->getCliArg( 'use-filebackend=' ) ) {
+ if ( $this->getCliArg( 'use-filebackend' ) ) {
if ( self::$backendToUse ) {
$backend = self::$backendToUse;
} else {
- $name = $this->getCliArg( 'use-filebackend=' );
+ $name = $this->getCliArg( 'use-filebackend' );
$useConfig = array();
foreach ( $wgFileBackends as $conf ) {
if ( $conf['name'] == $name ) {
$files = $wgParserTestFiles;
- if ( $this->getCliArg( 'file=' ) ) {
- $files = array( $this->getCliArg( 'file=' ) );
+ if ( $this->getCliArg( 'file' ) ) {
+ $files = array( $this->getCliArg( 'file' ) );
}
$dict = $this->getFuzzInput( $files );
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(
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() {
public function execute() {
global $IP;
+ $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, '--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';
} );
}
-MediaWikiPHPUnitCommand::main();
+PHPUnit_TextUI_Command::main();