Merge "resourceloader: Add @covers for stripBom and makeModuleResponse tests"
[lhc/web/wiklou.git] / tests / phpunit / includes / resourceloader / ResourceLoaderTest.php
index e0a82d0..f00253b 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 class ResourceLoaderTest extends ResourceLoaderTestCase {
 
        protected function setUp() {
@@ -49,13 +51,26 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
         * @covers ResourceLoader::register
         * @covers ResourceLoader::getModule
         */
-       public function testRegisterValid() {
+       public function testRegisterValidObject() {
                $module = new ResourceLoaderTestModule();
                $resourceLoader = new EmptyResourceLoader();
                $resourceLoader->register( 'test', $module );
                $this->assertEquals( $module, $resourceLoader->getModule( 'test' ) );
        }
 
+       /**
+        * @covers ResourceLoader::register
+        * @covers ResourceLoader::getModule
+        */
+       public function testRegisterValidArray() {
+               $module = new ResourceLoaderTestModule();
+               $resourceLoader = new EmptyResourceLoader();
+               // Covers case of register() setting $rl->moduleInfos,
+               // but $rl->modules lazy-populated by getModule()
+               $resourceLoader->register( 'test', [ 'object' => $module ] );
+               $this->assertEquals( $module, $resourceLoader->getModule( 'test' ) );
+       }
+
        /**
         * @covers ResourceLoader::register
         */
@@ -98,6 +113,58 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                );
        }
 
+       public function provideTestIsFileModule() {
+               $fileModuleObj = $this->getMockBuilder( ResourceLoaderFileModule::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               return [
+                       'object' => [ false,
+                               new ResourceLoaderTestModule()
+                       ],
+                       'FileModule object' => [ false,
+                               $fileModuleObj
+                       ],
+                       'simple empty' => [ true,
+                               []
+                       ],
+                       'simple scripts' => [ true,
+                               [ 'scripts' => 'example.js' ]
+                       ],
+                       'simple scripts, raw and targets' => [ true, [
+                               'scripts' => [ 'a.js', 'b.js' ],
+                               'raw' => true,
+                               'targets' => [ 'desktop', 'mobile' ],
+                       ] ],
+                       'FileModule' => [ true,
+                               [ 'class' => ResourceLoaderFileModule::class, 'scripts' => 'example.js' ]
+                       ],
+                       'TestModule' => [ false,
+                               [ 'class' => ResourceLoaderTestModule::class, 'scripts' => 'example.js' ]
+                       ],
+                       'SkinModule (FileModule subclass)' => [ true,
+                               [ 'class' => ResourceLoaderSkinModule::class, 'scripts' => 'example.js' ]
+                       ],
+                       'JqueryMsgModule (FileModule subclass)' => [ true, [
+                               'class' => ResourceLoaderJqueryMsgModule::class,
+                               'scripts' => 'example.js',
+                       ] ],
+                       'WikiModule' => [ false, [
+                               'class' => ResourceLoaderWikiModule::class,
+                               'scripts' => [ 'MediaWiki:Example.js' ],
+                       ] ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideTestIsFileModule
+        * @covers ResourceLoader::isFileModule
+        */
+       public function testIsFileModule( $expected, $module ) {
+               $rl = TestingAccessWrapper::newFromObject( new EmptyResourceLoader() );
+               $rl->register( 'test', $module );
+               $this->assertSame( $expected, $rl->isFileModule( 'test' ) );
+       }
+
        /**
         * @covers ResourceLoader::isModuleRegistered
         */
@@ -128,6 +195,23 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                );
        }
 
+       /**
+        * @covers ResourceLoader::getModule
+        */
+       public function testGetModuleFactory() {
+               $factory = function ( array $info ) {
+                       $this->assertArrayHasKey( 'kitten', $info );
+                       return new ResourceLoaderTestModule( $info );
+               };
+
+               $rl = new EmptyResourceLoader();
+               $rl->register( 'test', [ 'factory' => $factory, 'kitten' => 'little ball of fur' ] );
+               $this->assertInstanceOf(
+                       ResourceLoaderTestModule::class,
+                       $rl->getModule( 'test' )
+               );
+       }
+
        /**
         * @covers ResourceLoader::getModule
         */
@@ -384,6 +468,33 @@ mw.example();
                );
        }
 
+       /**
+        * @covers ResourceLoader::makeLoaderRegisterScript
+        */
+       public function testMakeLoaderRegisterScript() {
+               $this->assertEquals(
+                       'mw.loader.register( [
+    [
+        "test.name",
+        "1234567"
+    ]
+] );',
+                       ResourceLoader::makeLoaderRegisterScript( [
+                               [ 'test.name', '1234567' ],
+                       ] ),
+                       'Nested array parameter'
+               );
+
+               $this->assertEquals(
+                       'mw.loader.register( "test.name", "1234567" );',
+                       ResourceLoader::makeLoaderRegisterScript(
+                               'test.name',
+                               '1234567'
+                       ),
+                       'Variadic parameters'
+               );
+       }
+
        /**
         * @covers ResourceLoader::makeLoaderSourcesScript
         */
@@ -496,6 +607,8 @@ mw.example();
         * Verify that when building module content in a load.php response,
         * an exception from one module will not break script output from
         * other modules.
+        *
+        * @covers ResourceLoader::makeModuleResponse
         */
        public function testMakeModuleResponseError() {
                $modules = [
@@ -532,6 +645,8 @@ mw.example();
         * Verify that when building the startup module response,
         * an exception from one module class will not break the entire
         * startup module response. See T152266.
+        *
+        * @covers ResourceLoader::makeModuleResponse
         */
        public function testMakeModuleResponseStartupError() {
                $rl = new EmptyResourceLoader();