From 103624d4ed7da1719f8204f11f97147108e1e975 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Sat, 5 Nov 2016 21:18:18 -0700 Subject: [PATCH] Remove usage of echo when executing Composer script --- src/Composer/Util/ProcessExecutor.php | 12 +++++++++++- .../Test/EventDispatcher/EventDispatcherTest.php | 8 +++++--- tests/Composer/Test/Util/ProcessExecutorTest.php | 11 +++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/Composer/Util/ProcessExecutor.php b/src/Composer/Util/ProcessExecutor.php index ec1b9a3db..506d3e966 100644 --- a/src/Composer/Util/ProcessExecutor.php +++ b/src/Composer/Util/ProcessExecutor.php @@ -99,7 +99,17 @@ class ProcessExecutor return; } - echo $buffer; + if (null === $this->io) { + echo $buffer; + + return; + } + + if (Process::ERR === $type) { + $this->io->writeError($buffer); + } else { + $this->io->write($buffer); + } } public static function getTimeout() diff --git a/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php b/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php index 468c5d0e9..114d14b8b 100644 --- a/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php +++ b/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php @@ -340,7 +340,7 @@ class EventDispatcherTest extends TestCase ->setConstructorArgs(array( $this->createComposerInstance(), $io = $this->getMock('Composer\IO\IOInterface'), - new ProcessExecutor, + new ProcessExecutor($io), )) ->setMethods(array('getListeners')) ->getMock(); @@ -354,9 +354,11 @@ class EventDispatcherTest extends TestCase ->method('writeError') ->with($this->equalTo('> echo foo')); - ob_start(); + $io->expects($this->once()) + ->method('write') + ->with($this->equalTo('foo'.PHP_EOL)); + $dispatcher->dispatchScript(ScriptEvents::POST_INSTALL_CMD, false); - $this->assertEquals('foo', trim(ob_get_clean())); } public function testDispatcherOutputsErrorOnFailedCommand() diff --git a/tests/Composer/Test/Util/ProcessExecutorTest.php b/tests/Composer/Test/Util/ProcessExecutorTest.php index 101b0b710..ba114eae5 100644 --- a/tests/Composer/Test/Util/ProcessExecutorTest.php +++ b/tests/Composer/Test/Util/ProcessExecutorTest.php @@ -35,6 +35,17 @@ class ProcessExecutorTest extends TestCase $this->assertEquals("foo".PHP_EOL, $output); } + public function testUseIOIsNotNullAndIfNotCaptured() + { + $io = $this->getMock('Composer\IO\IOInterface'); + $io->expects($this->once()) + ->method('write') + ->with($this->equalTo('foo'.PHP_EOL)); + + $process = new ProcessExecutor($io); + $process->execute('echo foo'); + } + public function testExecuteCapturesStderr() { $process = new ProcessExecutor;