Browse Source

Remove console formatting as well.

Alexander M. Turek 8 years ago
parent
commit
20050dd984

+ 14 - 2
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

+ 8 - 3
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', "<bg=green>Like us on Facebook</>");
 
-        $this->io->expects($this->once())
+        $this->io->expects($this->at(0))
+            ->method('writeError')
+            ->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 target ([1;37;42m Like us on Facebook [0m)");
+            ->with('source suggests installing target2 (\\<bg=green>Like us on Facebook\\</>)');
 
         $this->suggestedPackagesReporter->output();
     }