// 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";
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.',
// cookies to show up in a FauxRequest somewhere.
$wgSessionProviders = [
[
- 'class' => 'MediaWiki\\Session\\CookieSessionProvider',
+ 'class' => MediaWiki\Session\CookieSessionProvider::class,
'args' => [ [
'priority' => 30,
'callUserSetCookiesHook' => true,
// 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() {
[ '--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] );
$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();