From 20050dd9844191304967ed2b667facb82d9412f3 Mon Sep 17 00:00:00 2001 From: "Alexander M. Turek" Date: Wed, 19 Apr 2017 17:24:47 +0200 Subject: [PATCH] Remove console formatting as well. --- .../Installer/SuggestedPackagesReporter.php | 16 ++++++++++++++-- .../Installer/SuggestedPackagesReporterTest.php | 11 ++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/Composer/Installer/SuggestedPackagesReporter.php b/src/Composer/Installer/SuggestedPackagesReporter.php index e9d66f6a6..7f4230017 100644 --- a/src/Composer/Installer/SuggestedPackagesReporter.php +++ b/src/Composer/Installer/SuggestedPackagesReporter.php @@ -15,6 +15,7 @@ namespace Composer\Installer; use Composer\IO\IOInterface; use Composer\Package\PackageInterface; use Composer\Repository\RepositoryInterface; +use Symfony\Component\Console\Formatter\OutputFormatter; /** * Add suggested packages from different places to output them in the end. @@ -116,14 +117,25 @@ class SuggestedPackagesReporter $this->io->writeError(sprintf( '%s suggests installing %s (%s)', $suggestion['source'], - $this->removeControlCharacters($suggestion['target']), - $this->removeControlCharacters($suggestion['reason']) + $this->escapeOutput($suggestion['target']), + $this->escapeOutput($suggestion['reason']) )); } return $this; } + /** + * @param string $string + * @return string + */ + private function escapeOutput($string) + { + return OutputFormatter::escape( + $this->removeControlCharacters($string) + ); + } + /** * @param string $string * @return string diff --git a/tests/Composer/Test/Installer/SuggestedPackagesReporterTest.php b/tests/Composer/Test/Installer/SuggestedPackagesReporterTest.php index fb88ec840..0edb1b2a4 100644 --- a/tests/Composer/Test/Installer/SuggestedPackagesReporterTest.php +++ b/tests/Composer/Test/Installer/SuggestedPackagesReporterTest.php @@ -149,11 +149,16 @@ class SuggestedPackagesReporterTest extends \PHPUnit_Framework_TestCase */ public function testOutputIgnoresFormatting() { - $this->suggestedPackagesReporter->addPackage('source', 'target', "\x1b[1;37;42m Like us\r\non Facebook \x1b[0m"); + $this->suggestedPackagesReporter->addPackage('source', 'target1', "\x1b[1;37;42m Like us\r\non Facebook \x1b[0m"); + $this->suggestedPackagesReporter->addPackage('source', 'target2', "Like us on Facebook"); - $this->io->expects($this->once()) + $this->io->expects($this->at(0)) ->method('writeError') - ->with("source suggests installing target ([1;37;42m Like us on Facebook [0m)"); + ->with("source suggests installing target1 ([1;37;42m Like us on Facebook [0m)"); + + $this->io->expects($this->at(1)) + ->method('writeError') + ->with('source suggests installing target2 (\\Like us on Facebook\\)'); $this->suggestedPackagesReporter->output(); }