Merge "Make phpunit.php less hackish, and install the listener unconditionally"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 5 Sep 2018 04:32:49 +0000 (04:32 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 5 Sep 2018 04:32:49 +0000 (04:32 +0000)
1  2 
tests/phpunit/MediaWikiTestCase.php

@@@ -107,9 -107,10 +107,10 @@@ abstract class MediaWikiTestCase extend
        private $loggers = [];
  
        /**
-        * @var LoggerInterface
+        * The CLI arguments passed through from phpunit.php
+        * @var array
         */
-       private $testLogger;
+       private $cliArgs = [];
  
        /**
         * Table name prefixes. Oracle likes it shorter.
  
                $this->backupGlobals = false;
                $this->backupStaticAttributes = false;
-               $this->testLogger = self::getTestLogger();
-       }
-       private static function getTestLogger() {
-               return LoggerFactory::getInstance( 'tests-phpunit' );
        }
  
        public function __destruct() {
        }
  
        public function run( PHPUnit_Framework_TestResult $result = null ) {
+               if ( $result instanceof MediaWikiTestResult ) {
+                       $this->cliArgs = $result->getMediaWikiCliArgs();
+               }
                $this->overrideMwServices();
  
                $needsResetDB = false;
                if ( !self::$dbSetup || $this->needsDB() ) {
                        // set up a DB connection for this test to use
-                       $this->testLogger->info( "Setting up DB for " . $this->toString() );
  
                        self::$useTemporaryTables = !$this->getCliArg( 'use-normal-tables' );
                        self::$reuseDB = $this->getCliArg( 'reuse-db' );
                        $needsResetDB = true;
                }
  
-               $this->testLogger->info( "Starting test " . $this->toString() );
                parent::run( $result );
-               $this->testLogger->info( "Finished test " . $this->toString() );
  
                if ( $needsResetDB ) {
-                       $this->testLogger->info( "Resetting DB" );
                        $this->resetDB( $this->db, $this->tablesUsed );
                }
  
         * @since 1.32
         */
        protected function addCoreDBData() {
-               $this->testLogger->info( __METHOD__ );
                if ( $this->db->getType() == 'oracle' ) {
                        # Insert 0 user to prevent FK violations
                        # Anonymous user
         */
        private function resetDB( $db, $tablesUsed ) {
                if ( $db ) {
 -                      // NOTE: Do not reset the slot_roles and content_models tables, but let them
 -                      // leak across tests. Resetting them would require to reset all NamedTableStore
 -                      // instances for these tables, of which there may be several beyond the ones
 -                      // known to MediaWikiServices. See T202641.
                        $userTables = [ 'user', 'user_groups', 'user_properties', 'actor' ];
                        $pageTables = [
                                'page', 'revision', 'ip_changes', 'revision_comment_temp', 'comment', 'archive',
 -                              'revision_actor_temp', 'slots', 'content',
 +                              'revision_actor_temp', 'slots', 'content', 'content_models', 'slot_roles',
                        ];
                        $coreDBDataTables = array_merge( $userTables, $pageTables );
  
                        }
  
                        if ( array_intersect( $tablesUsed, $coreDBDataTables ) ) {
 +                              // Reset services that may contain information relating to the truncated tables
 +                              $this->overrideMwServices();
                                // Re-add core DB data that was deleted
                                $this->addCoreDBData();
                        }
                        $db->delete( $tableName, '*', __METHOD__ );
                }
  
 -              if ( in_array( $db->getType(), [ 'postgres', 'sqlite' ], true ) ) {
 +              if ( $db instanceof DatabasePostgres || $db instanceof DatabaseSqlite ) {
                        // Reset the table's sequence too.
                        $db->resetSequenceForTable( $tableName, __METHOD__ );
                }
 +
 +              // re-initialize site_stats table
 +              if ( $tableName === 'site_stats' ) {
 +                      SiteStatsInit::doPlaceholderInit();
 +              }
        }
  
        private static function unprefixTable( &$tableName, $ind, $prefix ) {
         * @return mixed
         */
        public function getCliArg( $offset ) {
-               if ( isset( PHPUnitMaintClass::$additionalOptions[$offset] ) ) {
-                       return PHPUnitMaintClass::$additionalOptions[$offset];
-               }
-               return null;
+               return $this->cliArgs[$offset] ?? null;
        }
  
        /**
         * @param mixed $value
         */
        public function setCliArg( $offset, $value ) {
-               PHPUnitMaintClass::$additionalOptions[$offset] = $value;
+               $this->cliArgs[$offset] = $value;
        }
  
        /**