$newInstance->redefineService( $name, $callback );
}
+ self::resetGlobalParser();
+
return $newInstance;
}
);
MediaWikiServices::forceGlobalInstance( $newServices );
+
+ self::resetGlobalParser();
+
return $newServices;
}
MediaWikiServices::forceGlobalInstance( self::$originalServices );
$currentServices->destroy();
+ self::resetGlobalParser();
+
return true;
}
+ /**
+ * If $wgParser has been unstubbed, replace it with a fresh one so it picks up any config
+ * changes. $wgParser is deprecated, but we still support it for now.
+ */
+ private static function resetGlobalParser() {
+ // phpcs:ignore MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgParser
+ global $wgParser;
+ if ( $wgParser instanceof StubObject ) {
+ return;
+ }
+ $wgParser = new StubObject( 'wgParser', function () {
+ return MediaWikiServices::getInstance()->getParser();
+ } );
+ }
+
/**
* @since 1.27
* @param string|Language $lang
* @param string $text Content of the page
* @param string $summary Optional summary string for the revision
* @param int $defaultNs Optional namespace id
+ * @param User|null $user If null, static::getTestSysop()->getUser() is used.
* @return Status Object as returned by WikiPage::doEditContent()
* @throws MWException If this test cases's needsDB() method doesn't return true.
* Test cases can use "@group Database" to enable database test support,
* or list the tables under testing in $this->tablesUsed, or override the
* needsDB() method.
*/
- protected function editPage( $pageName, $text, $summary = '', $defaultNs = NS_MAIN ) {
+ protected function editPage(
+ $pageName,
+ $text,
+ $summary = '',
+ $defaultNs = NS_MAIN,
+ User $user = null
+ ) {
if ( !$this->needsDB() ) {
throw new MWException( 'When testing which pages, the test cases\'s needsDB()' .
' method should return true. Use @group Database or $this->tablesUsed.' );
$title = Title::newFromText( $pageName, $defaultNs );
$page = WikiPage::factory( $title );
- return $page->doEditContent( ContentHandler::makeContent( $text, $title ), $summary );
+ return $page->doEditContent(
+ ContentHandler::makeContent( $text, $title ),
+ $summary,
+ 0,
+ false,
+ $user
+ );
}
/**