* Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Script; use Composer\Test\TestCase; use Composer\Script\Event; use Composer\Script\EventDispatcher; class EventDispatcherTest extends TestCase { /** * @expectedException RuntimeException */ public function testListenerExceptionsAreCaught() { $io = $this->getMock('Composer\IO\IOInterface'); $dispatcher = $this->getDispatcherStubForListenersTest(array( "Composer\Test\Script\EventDispatcherTest::call" ), $io); $io->expects($this->once()) ->method('write') ->with('Script Composer\Test\Script\EventDispatcherTest::call handling the post-install-cmd event terminated with an exception'); $dispatcher->dispatchCommandEvent("post-install-cmd"); } /** * @dataProvider getValidCommands * @param string $command */ public function testDispatcherCanExecuteSingleCommandLineScript($command) { $process = $this->getMock('Composer\Util\ProcessExecutor'); $dispatcher = $this->getMockBuilder('Composer\Script\EventDispatcher') ->setConstructorArgs(array( $this->getMock('Composer\Composer'), $this->getMock('Composer\IO\IOInterface'), $process, )) ->setMethods(array('getListeners')) ->getMock(); $listener = array($command); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') ->will($this->returnValue($listener)); $process->expects($this->once()) ->method('execute') ->with($command); $dispatcher->dispatchCommandEvent("post-install-cmd"); } private function getDispatcherStubForListenersTest($listeners, $io) { $dispatcher = $this->getMockBuilder('Composer\Script\EventDispatcher') ->setConstructorArgs(array( $this->getMock('Composer\Composer'), $io, )) ->setMethods(array('getListeners')) ->getMock(); $dispatcher->expects($this->atLeastOnce()) ->method('getListeners') ->will($this->returnValue($listeners)); return $dispatcher; } public function getValidCommands() { return array( array('phpunit'), array('echo foo'), array('echo -n foo'), ); } public static function call() { throw new \RuntimeException(); } }