Browse Source

Disable overwrites when no-ansi is present, fixes #3612

Jordi Boggiano 10 years ago
parent
commit
e0d36e19eb
2 changed files with 19 additions and 5 deletions
  1. 8 0
      src/Composer/IO/ConsoleIO.php
  2. 11 5
      tests/Composer/Test/IO/ConsoleIOTest.php

+ 8 - 0
src/Composer/IO/ConsoleIO.php

@@ -113,6 +113,14 @@ class ConsoleIO extends BaseIO
      */
     public function overwrite($messages, $newline = true, $size = null)
     {
+        if (!$this->output->isDecorated()) {
+            if (!$messages) {
+                return;
+            }
+
+            return $this->write($messages, count($messages) === 1 || $newline);
+        }
+
         // messages can be an array, let's convert it to string anyway
         $messages = join($newline ? "\n" : '', (array) $messages);
 

+ 11 - 5
tests/Composer/Test/IO/ConsoleIOTest.php

@@ -58,21 +58,27 @@ class ConsoleIOTest extends TestCase
             ->method('write')
             ->with($this->equalTo('something (<question>strlen = 23</question>)'));
         $outputMock->expects($this->at(1))
+            ->method('isDecorated')
+            ->willReturn(true);
+        $outputMock->expects($this->at(2))
             ->method('write')
             ->with($this->equalTo(str_repeat("\x08", 23)), $this->equalTo(false));
-        $outputMock->expects($this->at(2))
+        $outputMock->expects($this->at(3))
             ->method('write')
             ->with($this->equalTo('shorter (<comment>12</comment>)'), $this->equalTo(false));
-        $outputMock->expects($this->at(3))
+        $outputMock->expects($this->at(4))
             ->method('write')
             ->with($this->equalTo(str_repeat(' ', 11)), $this->equalTo(false));
-        $outputMock->expects($this->at(4))
+        $outputMock->expects($this->at(5))
             ->method('write')
             ->with($this->equalTo(str_repeat("\x08", 11)), $this->equalTo(false));
-        $outputMock->expects($this->at(5))
+        $outputMock->expects($this->at(6))
+            ->method('isDecorated')
+            ->willReturn(true);
+        $outputMock->expects($this->at(7))
             ->method('write')
             ->with($this->equalTo(str_repeat("\x08", 12)), $this->equalTo(false));
-        $outputMock->expects($this->at(6))
+        $outputMock->expects($this->at(8))
             ->method('write')
             ->with($this->equalTo('something longer than initial (<info>34</info>)'));