@ -171,6 +171,49 @@ class EventDispatcherTest extends TestCase
return $rm;
}
public function testDispatcherRemoveListener()
{
$composer = $this->createComposerInstance();
$composer->setRepositoryManager($this->getRepositoryManagerMockForDevModePassingTest());
$composer->setInstallationManager($this->getMockBuilder('Composer\Installer\InstallationManager')->disableOriginalConstructor()->getMock());
$dispatcher = new EventDispatcher(
$composer,
$io = new BufferIO('', OutputInterface::VERBOSITY_VERBOSE),
$this->getMockBuilder('Composer\Util\ProcessExecutor')->getMock()
);
$listener = array($this, 'someMethod');
$listener2 = array($this, 'someMethod2');
$listener3 = 'Composer\\Test\\EventDispatcher\\EventDispatcherTest::someMethod';
$dispatcher->addListener('ev1', $listener, 0);
$dispatcher->addListener('ev1', $listener, 1);
$dispatcher->addListener('ev1', $listener2, 1);
$dispatcher->addListener('ev1', $listener3);
$dispatcher->addListener('ev2', $listener3);
$dispatcher->addListener('ev2', $listener);
$dispatcher->dispatch('ev1');
$dispatcher->dispatch('ev2');
$expected = '> ev1: Composer\Test\EventDispatcher\EventDispatcherTest->someMethod'.PHP_EOL
.'> ev1: Composer\Test\EventDispatcher\EventDispatcherTest->someMethod2'.PHP_EOL
.'> ev1: Composer\Test\EventDispatcher\EventDispatcherTest->someMethod'.PHP_EOL
.'> ev1: Composer\Test\EventDispatcher\EventDispatcherTest::someMethod'.PHP_EOL
.'> ev2: Composer\Test\EventDispatcher\EventDispatcherTest::someMethod'.PHP_EOL
.'> ev2: Composer\Test\EventDispatcher\EventDispatcherTest->someMethod'.PHP_EOL;
$this->assertEquals($expected, $io->getOutput());
$dispatcher->removeListener($this);
$dispatcher->dispatch('ev1');
$dispatcher->dispatch('ev2');
$expected .= '> ev1: Composer\Test\EventDispatcher\EventDispatcherTest::someMethod'.PHP_EOL
.'> ev2: Composer\Test\EventDispatcher\EventDispatcherTest::someMethod'.PHP_EOL;
$this->assertEquals($expected, $io->getOutput());
}
public function testDispatcherCanExecuteCliAndPhpInSameEventScriptStack()
{
$process = $this->getMockBuilder('Composer\Util\ProcessExecutor')->getMock();
@ -446,6 +489,11 @@ class EventDispatcherTest extends TestCase
return true;
}
public static function someMethod2()
{
return true;
}
private function createComposerInstance()
{
$composer = new Composer;