wiki.techinc.nl/tests/phpunit/phpunit.php
Daimona Eaytoy a184478c14 phpunit: delete MediaWikiTestResult and TestRunner
These were made final in PHPUnit8. Since there seems to be no easy way
to work around that, partially revert
Ibcaf9ca81c8dc63cce6dc6f6fb1fffee19f8804e and start using static
properties again (cfr. T192167#5550034).

Split from Ic14f5debc53e55d67146dc96279d26dfd52b4000.

Bug: T192167
Change-Id: I3fe163738662ae41eb275a0327cb33187290a70f
2019-11-17 15:02:54 +01:00

127 lines
3.5 KiB
PHP
Executable file

#!/usr/bin/env php
<?php
/**
* Bootstrapping for MediaWiki PHPUnit tests
*
* @file
*/
// 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
require_once dirname( dirname( __DIR__ ) ) . "/maintenance/Maintenance.php";
class PHPUnitMaintClass extends Maintenance {
/**
* @fixme This is an awful hack.
*/
public static $additionalOptions = [
'use-filebackend' => false,
'use-bagostuff' => false,
'use-jobqueue' => false,
'use-normal-tables' => false,
'reuse-db' => false,
];
public function __construct() {
parent::__construct();
$this->setAllowUnregisteredOptions( true );
$this->addOption(
'debug-tests',
'Log testing activity to the PHPUnitCommand log channel (deprecated, always on).',
false, # not required
false # no arg needed
);
$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( '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 setup() {
parent::setup();
require_once __DIR__ . '/../common/TestSetup.php';
TestSetup::snapshotGlobals();
}
public function finalSetup() {
parent::finalSetup();
// Inject test autoloader
self::requireTestsAutoloader();
TestSetup::applyInitialConfig();
}
public function execute() {
// 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
// doMaintenance.php includes Setup.php, which calls MWExceptionHandler::installHandle().
restore_error_handler();
$this->forceFormatServerArgv();
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 );
}
fwrite( STDERR, 'Using PHP ' . PHP_VERSION . "\n" );
foreach ( self::$additionalOptions as $option => $default ) {
self::$additionalOptions[$option] = $this->getOption( $option );
}
$command = new MediaWikiPHPUnitCommand();
$command->run( $_SERVER['argv'], true );
}
public function getDbType() {
return Maintenance::DB_ADMIN;
}
protected function addOption( $name, $description, $required = false,
$withArg = false, $shortName = false, $multiOccurrence = false
) {
// ignore --quiet which does not really make sense for unit tests
if ( $name !== 'quiet' ) {
parent::addOption( $name, $description, $required, $withArg, $shortName, $multiOccurrence );
}
}
/**
* 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 = [];
foreach ( $_SERVER['argv'] as $key => $arg ) {
if ( $key === 0 ) {
$argv[0] = $arg;
} else {
$parts = explode( '=', $arg, 2 );
$arg = preg_replace( '/^--/', '', $parts[0] );
// Avoid confusing PHPUnit with MediaWiki-specific parameters
if ( isset( $this->mParams[$arg] ) ) {
continue;
}
$argv = array_merge( $argv, $parts );
}
}
$_SERVER['argv'] = $argv;
}
}
$maintClass = 'PHPUnitMaintClass';
require RUN_MAINTENANCE_IF_MAIN;