Browse Source

Fix for Preforce utility does not check if p4 command exists

Fabian Grutschus 11 years ago
parent
commit
5ae5963acd
2 changed files with 23 additions and 2 deletions
  1. 2 2
      src/Composer/Util/Perforce.php
  2. 21 0
      tests/Composer/Test/Util/PerforceTest.php

+ 2 - 2
src/Composer/Util/Perforce.php

@@ -368,9 +368,9 @@ class Perforce
     public static function checkServerExists($url, ProcessExecutor $processExecutor)
     {
         $result = '';
-        $processExecutor->execute('p4 -p ' . $url . ' info -s', $result);
+        $exitCode = $processExecutor->execute('p4 -p ' . $url . ' info -s', $result);
 
-        return false === strpos($result, 'error');
+        return false === strpos($result, 'error') && 127 != $exitCode;
     }
 
     public function getComposerInformation($identifier)

+ 21 - 0
tests/Composer/Test/Util/PerforceTest.php

@@ -631,6 +631,27 @@ class PerforceTest extends \PHPUnit_Framework_TestCase
         $result = $this->perforce->checkServerExists('perforce.does.not.exist:port', $processExecutor);
         $this->assertTrue($result);
     }
+    
+    /**
+     * Test if "p4" command is missing.
+     * 
+     * @covers \Composer\Util\Perforce::checkServerExists
+     * 
+     * @return void
+     */
+    public function testCheckServerExistsWithMissingPerforceClient()
+    {
+        $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
+
+        $expectedCommand = 'p4 -p perforce.does.exist:port info -s';
+        $processExecutor->expects($this->at(0))
+            ->method('execute')
+            //->with($this->equalTo($expectedCommand), $this->equalTo(null))
+            ->will($this->returnValue(127));
+        
+        $result = $this->perforce->checkServerExists('perforce.does.exist:port', $processExecutor);
+        $this->assertFalse($result);
+    }
 
     public static function getComposerJson()
     {