Added some content for basic unit tests for ResourceLoader class.
authorTrevor Parscal <tparscal@users.mediawiki.org>
Thu, 30 Sep 2010 06:54:23 +0000 (06:54 +0000)
committerTrevor Parscal <tparscal@users.mediawiki.org>
Thu, 30 Sep 2010 06:54:23 +0000 (06:54 +0000)
maintenance/tests/phpunit/includes/ResourceLoaderTest.php

index 98f5f0a..dbb529b 100644 (file)
@@ -2,15 +2,70 @@
 
 class ResourceLoaderTest extends PHPUnit_Framework_TestCase {
 
-       /* Provider Methods */
+       protected static $resourceLoaderRegisterModulesHook;
+       
+       /* Hook Methods */
+
+       /**
+        * ResourceLoaderRegisterModules hook
+        */
+       public static function resourceLoaderRegisterModules( &$resourceLoader ) {
+               self::$resourceLoaderRegisterModulesHook = true;
+               return true;
+       }
 
-       public function provide() {
+       /* Provider Methods */
 
+       public function provideValidModules() {
+               return array(
+                       array( 'TEST.validModule1', new ResourceLoaderTestModule() ),
+               );
        }
 
        /* Test Methods */
+       
+       /**
+        * Ensures that the ResourceLoaderRegisterModules hook is called when a new ResourceLoader object is constructed
+        * @covers ResourceLoader::__construct
+        */
+       public function testCreatingNewResourceLoaderCallsRegistrationHook() {
+               self::$resourceLoaderRegisterModulesHook = false;
+               $resourceLoader = new ResourceLoader();
+               $this->assertTrue( self::$resourceLoaderRegisterModulesHook );
+               return $resourceLoader;
+       }
 
-       public function test() {
-
+       /**
+        * @dataProvider provideValidModules
+        * @depends testCreatingNewResourceLoaderCallsRegistrationHook
+        * @covers ResourceLoader::register
+        * @covers ResourceLoader::getModule
+        */
+       public function testRegisteredValidModulesAreAccessible(
+               $name, ResourceLoaderModule $module, ResourceLoader $resourceLoader
+       ) {
+               $resourceLoader->register( $name, $module );
+               $this->assertEquals( $module, $resourceLoader->getModule( $name ) );
+       }
+       
+       /**
+        * Allthough ResourceLoader::register uses type hinting to prevent arbitrary information being passed through as a
+        * ResourceLoaderModule object, null can still get through.
+        * 
+        * @depends testCreatingNewResourceLoaderCallsRegistrationHook
+        * @covers ResourceLoader::register
+        * @covers ResourceLoader::getModule
+        * @expectedException MWException
+        */
+       public function testRegisteringNullModuleThrowsAnException( ResourceLoader $resourceLoader ) {
+               $resourceLoader->register( 'TEST.nullModule', null );
        }
 }
+
+/* Stubs */
+
+class ResourceLoaderTestModule extends ResourceLoaderModule { }
+
+/* Hooks */
+
+$wgHooks['ResourceLoaderRegisterModules'][] = 'ResourceLoaderTest::resourceLoaderRegisterModules';
\ No newline at end of file