From d9b8b3611b7ed4e52f77f3f74f6257c0b79cf0a7 Mon Sep 17 00:00:00 2001 From: Rob Date: Fri, 12 Dec 2014 22:33:04 +0100 Subject: [PATCH] fixes composer/composer#3546 --- .../EventDispatcher/EventDispatcher.php | 8 ++++++- .../EventDispatcher/EventDispatcherTest.php | 21 ++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/Composer/EventDispatcher/EventDispatcher.php b/src/Composer/EventDispatcher/EventDispatcher.php index 22a5f7133..83e96d622 100644 --- a/src/Composer/EventDispatcher/EventDispatcher.php +++ b/src/Composer/EventDispatcher/EventDispatcher.php @@ -223,7 +223,13 @@ class EventDispatcher return $event; } - $expected = $reflected->getClass()->name; + $typehint = $reflected->getClass(); + + if (!$typehint instanceof \ReflectionClass) { + return $event; + } + + $expected = $typehint->getName(); if (!$event instanceof $expected && $expected === 'Composer\Script\CommandEvent') { $event = new CommandEvent($event->getName(), $event->getComposer(), $event->getIO(), $event->isDevMode(), $event->getArguments()); diff --git a/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php b/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php index c90c948ee..aaf8b6267 100644 --- a/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php +++ b/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php @@ -29,7 +29,7 @@ class EventDispatcherTest extends TestCase { $io = $this->getMock('Composer\IO\IOInterface'); $dispatcher = $this->getDispatcherStubForListenersTest(array( - "Composer\Test\EventDispatcher\EventDispatcherTest::call" + 'Composer\Test\EventDispatcher\EventDispatcherTest::call' ), $io); $io->expects($this->once()) @@ -43,7 +43,17 @@ class EventDispatcherTest extends TestCase { $io = $this->getMock('Composer\IO\IOInterface'); $dispatcher = $this->getDispatcherStubForListenersTest(array( - "Composer\Test\EventDispatcher\EventDispatcherTest::convertEvent" + 'Composer\Test\EventDispatcher\EventDispatcherTest::expectsCommandEvent' + ), $io); + + $this->assertEquals(1, $dispatcher->dispatchScript(ScriptEvents::POST_INSTALL_CMD, false)); + } + + public function testDispatcherDoesNotAttemptConversionForListenerWithoutTypehint() + { + $io = $this->getMock('Composer\IO\IOInterface'); + $dispatcher = $this->getDispatcherStubForListenersTest(array( + 'Composer\Test\EventDispatcher\EventDispatcherTest::expectsVariableEvent' ), $io); $this->assertEquals(1, $dispatcher->dispatchScript(ScriptEvents::POST_INSTALL_CMD, false)); @@ -216,7 +226,12 @@ class EventDispatcherTest extends TestCase throw new \RuntimeException(); } - public static function convertEvent(CommandEvent $event) + public static function expectsCommandEvent(CommandEvent $event) + { + return false; + } + + public static function expectsVariableEvent($event) { return false; }