*/
private $cliArgs = [];
+ /**
+ * Holds a list of services that were overridden with setService(). Used for printing an error
+ * if overrideMwServices() overrides a service that was previously set.
+ * @var string[]
+ */
+ private $overriddenServices = [];
+
/**
* Table name prefixes. Oracle likes it shorter.
*/
parent::run( $result );
+ // We don't mind if we override already-overridden services during cleanup
+ $this->overriddenServices = [];
+
if ( $needsResetDB ) {
$this->resetDB( $this->db, $this->tablesUsed );
}
$this->phpErrorLevel = intval( ini_get( 'error_reporting' ) );
+ $this->overriddenServices = [];
+
// Cleaning up temporary files
foreach ( $this->tmpFiles as $fileName ) {
if ( is_file( $fileName ) || ( is_link( $fileName ) ) ) {
. 'instance has been replaced by test code.' );
}
+ $this->overriddenServices[] = $name;
+
$this->localServices->disableService( $name );
$this->localServices->redefineService(
$name,
protected function overrideMwServices(
Config $configOverrides = null, array $services = []
) {
+ if ( $this->overriddenServices ) {
+ throw new MWException(
+ 'The following services were set and are now being unset by overrideMwServices: ' .
+ implode( ', ', $this->overriddenServices )
+ );
+ }
$newInstance = self::installMockMwServices( $configOverrides );
if ( $this->localServices ) {
*/
public function setContentLang( $lang ) {
if ( $lang instanceof Language ) {
- $langCode = $lang->getCode();
- $langObj = $lang;
+ $this->setMwGlobals( 'wgLanguageCode', $lang->getCode() );
+ // Set to the exact object requested
+ $this->setService( 'ContentLanguage', $lang );
} else {
- $langCode = $lang;
- $langObj = Language::factory( $langCode );
+ $this->setMwGlobals( 'wgLanguageCode', $lang );
+ // Let the service handler make up the object. Avoid calling setService(), because if
+ // we do, overrideMwServices() will complain if it's called later on.
+ $services = MediaWikiServices::getInstance();
+ $services->resetServiceForTesting( 'ContentLanguage' );
+ $this->doSetMwGlobals( [ 'wgContLang' => $services->getContentLanguage() ] );
}
- $this->setMwGlobals( 'wgLanguageCode', $langCode );
- $this->setService( 'ContentLanguage', $langObj );
}
/**