* @file
* @ingroup Testing
*/
+
use Wikimedia\Rdbms\IDatabase;
use MediaWiki\MediaWikiServices;
use MediaWiki\Tidy\TidyDriverBase;
*/
private $keepUploads;
+ /** @var Title */
+ private $defaultTitle;
+
/**
* @param TestRecorder $recorder
* @param array $options
if ( isset( $options['upload-dir'] ) ) {
$this->uploadDir = $options['upload-dir'];
}
+
+ $this->defaultTitle = Title::newFromText( 'Parser test' );
}
/**
$setup['wgNoFollowDomainExceptions'] = [ 'no-nofollow.org' ];
$setup['wgExternalLinkTarget'] = false;
$setup['wgLocaltimezone'] = 'UTC';
- $setup['wgHtml5'] = true;
$setup['wgDisableLangConversion'] = false;
$setup['wgDisableTitleConversion'] = false;
$options->setTidy( true );
}
- if ( isset( $opts['title'] ) ) {
- $titleText = $opts['title'];
- } else {
- $titleText = 'Parser test';
+ $revId = 1337; // see Parser::getRevisionId()
+ $title = isset( $opts['title'] )
+ ? Title::newFromText( $opts['title'] )
+ : $this->defaultTitle;
+
+ if ( isset( $opts['lastsavedrevision'] ) ) {
+ $content = new WikitextContent( $test['input'] );
+ $title = Title::newFromRow( (object)[
+ 'page_id' => 187,
+ 'page_len' => $content->getSize(),
+ 'page_latest' => 1337,
+ 'page_namespace' => $title->getNamespace(),
+ 'page_title' => $title->getDBkey(),
+ 'page_is_redirect' => 0
+ ] );
+ $rev = new Revision(
+ [
+ 'id' => $title->getLatestRevID(),
+ 'page' => $title->getArticleID(),
+ 'user' => $user,
+ 'content' => $content,
+ 'timestamp' => $this->getFakeTimestamp(),
+ 'title' => $title
+ ],
+ Revision::READ_LATEST,
+ $title
+ );
+ $oldCallback = $options->getCurrentRevisionCallback();
+ $options->setCurrentRevisionCallback(
+ function ( Title $t, $parser ) use ( $title, $rev, $oldCallback ) {
+ if ( $t->equals( $title ) ) {
+ return $rev;
+ } else {
+ return call_user_func( $oldCallback, $t, $parser );
+ }
+ }
+ );
}
if ( isset( $opts['maxincludesize'] ) ) {
$local = isset( $opts['local'] );
$preprocessor = $opts['preprocessor'] ?? null;
$parser = $this->getParser( $preprocessor );
- $title = Title::newFromText( $titleText );
if ( isset( $opts['styletag'] ) ) {
// For testing the behavior of <style> (including those deduplicated
} elseif ( isset( $opts['preload'] ) ) {
$out = $parser->getPreloadText( $test['input'], $title, $options );
} else {
- $output = $parser->parse( $test['input'], $title, $options, true, true, 1337 );
+ $output = $parser->parse( $test['input'], $title, $options, true, true, $revId );
$out = $output->getText( [
'allowTOC' => !isset( $opts['notoc'] ),
'unwrap' => !isset( $opts['wrap'] ),
$tables[] = 'revision_actor_temp';
}
- if ( in_array( $this->db->getType(), [ 'mysql', 'sqlite', 'oracle' ] ) ) {
+ if ( in_array( $this->db->getType(), [ 'mysql', 'sqlite' ] ) ) {
array_push( $tables, 'searchindex' );
}
public function setupDatabase( $nextTeardown = null ) {
global $wgDBprefix;
- $this->db = wfGetDB( DB_MASTER );
+ $this->db = MediaWikiServices::getInstance()->getDBLoadBalancer()->getConnection( DB_MASTER );
$dbType = $this->db->getType();
- if ( $dbType == 'oracle' ) {
- $suspiciousPrefixes = [ 'pt_', MediaWikiTestCase::ORA_DB_PREFIX ];
- } else {
- $suspiciousPrefixes = [ 'parsertest_', MediaWikiTestCase::DB_PREFIX ];
- }
+ $suspiciousPrefixes = [ 'parsertest_', MediaWikiTestCase::DB_PREFIX ];
if ( in_array( $wgDBprefix, $suspiciousPrefixes ) ) {
throw new MWException( "\$wgDBprefix=$wgDBprefix suggests DB setup is already done" );
}
}
$temporary = $this->useTemporaryTables || $dbType == 'postgres';
- $prefix = $dbType != 'oracle' ? 'parsertest_' : 'pt_';
+ $prefix = 'parsertest_';
$this->dbClone = new CloneDatabase( $this->db, $this->listTables(), $prefix );
$this->dbClone->useTemporaryTables( $temporary );
$this->dbClone->cloneTableStructure();
CloneDatabase::changePrefix( $prefix );
- if ( $dbType == 'oracle' ) {
- $this->db->query( 'BEGIN FILL_WIKI_INFO; END;' );
- # Insert 0 user to prevent FK violations
-
- # Anonymous user
- $this->db->insert( 'user', [
- 'user_id' => 0,
- 'user_name' => 'Anonymous' ] );
- }
-
$teardown[] = function () {
$this->teardownDatabase();
};
$tables = $this->listTables();
foreach ( $tables as $table ) {
- if ( $this->db->getType() == 'oracle' ) {
- $this->db->query( "DROP TABLE pt_$table DROP CONSTRAINTS" );
- } else {
- $this->db->query( "DROP TABLE `parsertest_$table`" );
- }
- }
-
- if ( $this->db->getType() == 'oracle' ) {
- $this->db->query( 'BEGIN FILL_WIKI_INFO; END;' );
+ $this->db->query( "DROP TABLE `parsertest_$table`" );
}
}
// Wipe WANObjectCache process cache, which is invalidated by article insertion
// due to T144706
- ObjectCache::getMainWANInstance()->clearProcessCache();
+ MediaWikiServices::getInstance()->getMainWANObjectCache()->clearProcessCache();
$this->executeSetupSnippets( $teardown );
}