Improve ExtensionRegistry test coverage
authorKunal Mehta <legoktm@member.fsf.org>
Sat, 10 Feb 2018 08:03:19 +0000 (00:03 -0800)
committerKunal Mehta <legoktm@member.fsf.org>
Tue, 13 Feb 2018 04:36:50 +0000 (20:36 -0800)
Change-Id: I7f7445952f057995a3e3215145803affa5aceede

includes/registration/ExtensionRegistry.php
tests/phpunit/includes/registration/ExtensionRegistryTest.php

index d14a5ee..1876645 100644 (file)
@@ -82,6 +82,7 @@ class ExtensionRegistry {
        private static $instance;
 
        /**
+        * @codeCoverageIgnore
         * @return ExtensionRegistry
         */
        public static function getInstance() {
@@ -105,9 +106,11 @@ class ExtensionRegistry {
                        } else {
                                throw new Exception( "$path does not exist!" );
                        }
+                       // @codeCoverageIgnoreStart
                        if ( !$mtime ) {
                                $err = error_get_last();
                                throw new Exception( "Couldn't stat $path: {$err['message']}" );
+                               // @codeCoverageIgnoreEnd
                        }
                }
                $this->queued[$path] = $mtime;
index a6f69b6..67bc088 100644 (file)
@@ -1,9 +1,57 @@
 <?php
 
+/**
+ * @covers ExtensionRegistry
+ */
 class ExtensionRegistryTest extends MediaWikiTestCase {
 
+       private $dataDir;
+
+       public function setUp() {
+               parent::setUp();
+               $this->dataDir = __DIR__ . '/../../data/registration';
+       }
+
+       public function testQueue_invalid() {
+               $registry = new ExtensionRegistry();
+               $path = __DIR__ . '/doesnotexist.json';
+               $this->setExpectedException(
+                       Exception::class,
+                       "$path does not exist!"
+               );
+               $registry->queue( $path );
+       }
+
+       public function testQueue() {
+               $registry = new ExtensionRegistry();
+               $path = "{$this->dataDir}/good.json";
+               $registry->queue( $path );
+               $this->assertArrayHasKey(
+                       $path,
+                       $registry->getQueue()
+               );
+               $registry->clearQueue();
+               $this->assertEmpty( $registry->getQueue() );
+       }
+
+       public function testLoadFromQueue_empty() {
+               $registry = new ExtensionRegistry();
+               $registry->loadFromQueue();
+               $this->assertEmpty( $registry->getAllThings() );
+       }
+
+       public function testLoadFromQueue_late() {
+               $registry = new ExtensionRegistry();
+               $registry->finish();
+               $registry->queue( "{$this->dataDir}/good.json" );
+               $this->setExpectedException(
+                       MWException::class,
+                       "The following paths tried to load late: {$this->dataDir}/good.json"
+               );
+               $registry->loadFromQueue();
+       }
+
        /**
-        * @covers ExtensionRegistry::exportExtractedData
         * @dataProvider provideExportExtractedDataGlobals
         */
        public function testExportExtractedDataGlobals( $desc, $before, $globals, $expected ) {