From: Aaron Schulz Date: Sat, 2 Jun 2018 23:25:01 +0000 (-0700) Subject: Avoid "unittest_imagelinks" already exists error in tests X-Git-Tag: 1.34.0-rc.0~5176^2 X-Git-Url: http://git.cyclocoop.org/data/Fool?a=commitdiff_plain;h=b1eaf294e1bb067ee2b53b40ca336974d2f53ec1;p=lhc%2Fweb%2Fwiklou.git Avoid "unittest_imagelinks" already exists error in tests This occured in MediaWikiTestCase::setUpSchema if the original wiki prefix was not empty. Change-Id: I6b0a21473986334bcfbb85ef416759aed44f79a3 --- diff --git a/tests/phpunit/MediaWikiTestCase.php b/tests/phpunit/MediaWikiTestCase.php index da5cfb1527..3cb15694be 100644 --- a/tests/phpunit/MediaWikiTestCase.php +++ b/tests/phpunit/MediaWikiTestCase.php @@ -1373,7 +1373,7 @@ abstract class MediaWikiTestCase extends PHPUnit\Framework\TestCase { } /** - * Undoes the dpecified schema overrides.. + * Undoes the specified schema overrides.. * Called once per test class, just before addDataOnce(). * * @param IMaintainableDatabase $db @@ -1383,7 +1383,7 @@ abstract class MediaWikiTestCase extends PHPUnit\Framework\TestCase { $this->ensureMockDatabaseConnection( $db ); $oldOverrides = $oldOverrides + self::$schemaOverrideDefaults; - $originalTables = $this->listOriginalTables( $db ); + $originalTables = $this->listOriginalTables( $db, 'unprefixed' ); // Drop tables that need to be restored or removed. $tablesToDrop = array_merge( $oldOverrides['create'], $oldOverrides['alter'] ); @@ -1444,7 +1444,7 @@ abstract class MediaWikiTestCase extends PHPUnit\Framework\TestCase { $this->ensureMockDatabaseConnection( $db ); // Drop the tables that will be created by the schema scripts. - $originalTables = $this->listOriginalTables( $db ); + $originalTables = $this->listOriginalTables( $db, 'unprefixed' ); $tablesToDrop = array_intersect( $originalTables, $overrides['create'] ); if ( $tablesToDrop ) { @@ -1498,14 +1498,25 @@ abstract class MediaWikiTestCase extends PHPUnit\Framework\TestCase { * Lists all tables in the live database schema. * * @param IMaintainableDatabase $db + * @param string $prefix Either 'prefixed' or 'unprefixed' * @return array */ - private function listOriginalTables( IMaintainableDatabase $db ) { + private function listOriginalTables( IMaintainableDatabase $db, $prefix = 'prefixed' ) { if ( !isset( $db->_originalTablePrefix ) ) { throw new LogicException( 'No original table prefix know, cannot list tables!' ); } $originalTables = $db->listTables( $db->_originalTablePrefix, __METHOD__ ); + if ( $prefix === 'unprefixed' ) { + $originalPrefixRegex = '/^' . preg_quote( $db->_originalTablePrefix ) . '/'; + $originalTables = array_map( + function ( $pt ) use ( $originalPrefixRegex ) { + return preg_replace( $originalPrefixRegex, '', $pt ); + }, + $originalTables + ); + } + return $originalTables; } @@ -1524,7 +1535,7 @@ abstract class MediaWikiTestCase extends PHPUnit\Framework\TestCase { throw new LogicException( 'No original table prefix know, cannot restore tables!' ); } - $originalTables = $this->listOriginalTables( $db ); + $originalTables = $this->listOriginalTables( $db, 'unprefixed' ); $tables = array_intersect( $tables, $originalTables ); $dbClone = new CloneDatabase( $db, $tables, $db->tablePrefix(), $db->_originalTablePrefix );