*/
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;
}
/**
class ConfigFactoryTest extends MediaWikiTestCase {
+ public function tearDown() {
+ // Reset this since we mess with it a bit
+ ConfigFactory::destroyDefaultInstance();
+ parent::tearDown();
+ }
+
/**
* @covers ConfigFactory::register
*/
$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' );
+ }
}