diff --git a/src/Listener/ModuleResolverListener.php b/src/Listener/ModuleResolverListener.php index b058796..5f79508 100644 --- a/src/Listener/ModuleResolverListener.php +++ b/src/Listener/ModuleResolverListener.php @@ -23,6 +23,10 @@ class ModuleResolverListener extends AbstractListener public function __invoke(ModuleEvent $e) { $moduleName = $e->getModuleName(); + if (class_exists($moduleName)) { + return new $moduleName; + } + $class = $moduleName . '\Module'; if (!class_exists($class)) { diff --git a/test/Listener/ModuleResolverListenerTest.php b/test/Listener/ModuleResolverListenerTest.php index 9aff440..8e3ab03 100644 --- a/test/Listener/ModuleResolverListenerTest.php +++ b/test/Listener/ModuleResolverListenerTest.php @@ -9,6 +9,7 @@ namespace ZendTest\ModuleManager\Listener; +use ListenerTestModule; use PHPUnit_Framework_TestCase as TestCase; use Zend\Loader\AutoloaderFactory; use Zend\Loader\ModuleAutoloader; @@ -54,13 +55,32 @@ public function tearDown() set_include_path($this->includePath); } - public function testModuleResolverListenerCanResolveModuleClasses() + /** + * @dataProvider validModuleNameProvider + */ + public function testModuleResolverListenerCanResolveModuleClasses($moduleName, $expectedInstanceOf) { $moduleResolver = new ModuleResolverListener; $e = new ModuleEvent; - $e->setModuleName('ListenerTestModule'); - $this->assertInstanceOf('ListenerTestModule\Module', $moduleResolver($e)); + $e->setModuleName($moduleName); + $this->assertInstanceOf($expectedInstanceOf, $moduleResolver($e)); + } + + public function validModuleNameProvider() + { + return [ + // Description => [module name, expectedInstanceOf] + 'Append Module' => ['ListenerTestModule', ListenerTestModule\Module::class], + 'FQCN Module' => [ListenerTestModule\Module::class, ListenerTestModule\Module::class], + 'FQCN Arbitrary' => [ListenerTestModule\FooModule::class, ListenerTestModule\FooModule::class], + ]; + } + + public function testModuleResolverListenerReturnFalseIfCannotResolveModuleClasses() + { + $moduleResolver = new ModuleResolverListener; + $e = new ModuleEvent; $e->setModuleName('DoesNotExist'); $this->assertFalse($moduleResolver($e)); diff --git a/test/TestAsset/ListenerTestModule/FooModule.php b/test/TestAsset/ListenerTestModule/FooModule.php new file mode 100644 index 0000000..02b73ce --- /dev/null +++ b/test/TestAsset/ListenerTestModule/FooModule.php @@ -0,0 +1,7 @@ +