Add tests for ConfigFactory::getDefaultInstance
authorKunal Mehta <legoktm@gmail.com>
Sun, 3 Aug 2014 21:05:50 +0000 (14:05 -0700)
committerKunal Mehta <legoktm@gmail.com>
Sun, 3 Aug 2014 23:26:56 +0000 (16:26 -0700)
Change-Id: I6d356458dfe0a66f9af12ab58a6b1dcf47b6325a

includes/config/ConfigFactory.php
tests/phpunit/includes/config/ConfigFactoryTest.php

index ff2f403..312d461 100644 (file)
@@ -41,16 +41,33 @@ class ConfigFactory {
         */
        protected $configs = array();
 
+       /**
+        * @var ConfigFactory
+        */
+       private static $self;
+
        public static function getDefaultInstance() {
-               static $self = null;
-               if ( !$self ) {
-                       $self = new self;
+               if ( !self::$self ) {
+                       self::$self = new self;
                        global $wgConfigRegistry;
                        foreach ( $wgConfigRegistry as $name => $callback ) {
-                               $self->register( $name, $callback );
+                               self::$self->register( $name, $callback );
                        }
                }
-               return $self;
+               return self::$self;
+       }
+
+       /**
+        * Destroy the default instance
+        * Should only be called inside unit tests
+        * @throws MWException
+        */
+       public static function destroyDefaultInstance() {
+               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+                       throw new MWException( __METHOD__ . ' was called outside of unit tests' );
+               }
+
+               self::$self = null;
        }
 
        /**
index 611d304..3902858 100644 (file)
@@ -2,6 +2,12 @@
 
 class ConfigFactoryTest extends MediaWikiTestCase {
 
+       public function tearDown() {
+               // Reset this since we mess with it a bit
+               ConfigFactory::destroyDefaultInstance();
+               parent::tearDown();
+       }
+
        /**
         * @covers ConfigFactory::register
         */
@@ -43,4 +49,22 @@ class ConfigFactoryTest extends MediaWikiTestCase {
                $this->setExpectedException( 'UnexpectedValueException' );
                $factory->makeConfig( 'unittest' );
        }
+
+       /**
+        * @covers ConfigFactory::getDefaultInstance
+        */
+       public function testGetDefaultInstance() {
+               // Set $wgConfigRegistry, and check the default
+               // instance read from it
+               $this->setMwGlobals( 'wgConfigRegistry', array(
+                       'conf1' => 'GlobalVarConfig::newInstance',
+                       'conf2' => 'GlobalVarConfig::newInstance',
+               ) );
+               ConfigFactory::destroyDefaultInstance();
+               $factory = ConfigFactory::getDefaultInstance();
+               $this->assertInstanceOf( 'Config', $factory->makeConfig( 'conf1' ) );
+               $this->assertInstanceOf( 'Config', $factory->makeConfig( 'conf2' ) );
+               $this->setExpectedException( 'ConfigException' );
+               $factory->makeConfig( 'conf3' );
+       }
 }