Explorar o código

[Process] added tests for Process and PhpExecutableFinder

digitalkaoz %!s(int64=14) %!d(string=hai) anos
pai
achega
0ed7285828

+ 1 - 0
.gitignore

@@ -1,3 +1,4 @@
 phpunit.xml
 autoload.php
 /vendor/
+/nbproject/private/

+ 2 - 2
src/Symfony/Component/Process/PhpExecutableFinder.php

@@ -42,14 +42,14 @@ class PhpExecutableFinder
 
             return $php;
         }
-
+        
         $suffixes = DIRECTORY_SEPARATOR == '\\' ? (getenv('PATHEXT') ? explode(PATH_SEPARATOR, getenv('PATHEXT')) : array('.exe', '.bat', '.cmd', '.com')) : array('');
         foreach ($suffixes as $suffix) {
             if (is_executable($php = PHP_BINDIR.DIRECTORY_SEPARATOR.'php'.$suffix)) {
                 return $php;
             }
         }
-
+        
         if ($php = getenv('PHP_PEAR_PHP_BIN')) {
             if (is_executable($php)) {
                 return $php;

+ 76 - 0
tests/Symfony/Tests/Component/Process/PhpExecutableFinderTest.php

@@ -0,0 +1,76 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Tests\Component\Process;
+
+use Symfony\Component\Process\PhpExecutableFinder;
+
+/**
+ * @author Robert Schönthal <seroscho@googlemail.com>
+ */
+class PhpExecutableFinderTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * tests find() with the env var PHP_PATH
+     */
+    public function testFindWithPHP_PATH()
+    {
+        $f = new PhpExecutableFinder();
+
+        $current = $f->find();
+        
+        //not executable PHP_PATH
+        putenv('PHP_PATH=/not/executable/php');
+        $this->assertFalse($f->find(),'::find() returns false for not executable php');
+        
+        //executable PHP_PATH
+        putenv('PHP_PATH='.$current); 
+        $this->assertEquals($f->find(),$current,'::find() returns the executable php');
+    }
+
+    /**
+     * tests find() with default executable
+     */
+    public function testFindWithSuffix()
+    {
+        putenv('PHP_PATH=');
+        putenv('PHP_PEAR_PHP_BIN=');
+        $f = new PhpExecutableFinder();
+
+        $current = $f->find();
+        
+        //TODO maybe php executable is custom or even windows
+        $this->assertEquals($f->find(),PHP_BINDIR.DIRECTORY_SEPARATOR.'php','::find() returns the executable php with suffixes');
+    }
+    
+    /**
+     * tests find() with env var PHP_BINDIR
+     */
+    public function testFindWithPHP_PEAR_PHP_BIN()
+    {
+        //TODO the code for suffixes in PHP_BINDIR always catches, so the rest cant be tested
+        //maybe remove the code or move the PHP_PEAR_PHP_BIN code above
+        
+        $this->markTestIncomplete();
+        
+        $f = new PhpExecutableFinder();
+
+        $current = $f->find();
+        
+        //not executable PHP_PEAR_PHP_BIN
+        putenv('PHP_PEAR_PHP_BIN=/not/executable/php');
+        $this->assertFalse($f->find(),'::find() returns false for not executable php');
+        
+        //executable PHP_PEAR_PHP_BIN
+        putenv('PHP_PEAR_PHP_BIN='.$current); 
+        $this->assertEquals($f->find(),$current,'::find() returns the executable php');
+    }
+}

+ 78 - 0
tests/Symfony/Tests/Component/Process/ProcessTest.php

@@ -0,0 +1,78 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Tests\Component\Process;
+
+use Symfony\Component\Process\Process;
+
+/**
+ * @author Robert Schönthal <seroscho@googlemail.com>
+ */
+class ProcessTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * tests getter/setter
+     * 
+     * @dataProvider methodProvider
+     */
+    public function testDefaultGetterSetter($fn)
+    {
+        $p = new Process('php');
+        
+        $setter = 'set'.$fn;
+        $getter = 'get'.$fn;
+
+        $this->assertNull($p->$setter(array('foo')));
+
+        $this->assertSame(array('foo'), $p->$getter(array('foo')));
+    }
+    
+    /**
+     * tests results from sub processes
+     * 
+     * @dataProvider codeProvider
+     */
+    public function testProcessResponses($expected,$getter,$code)
+    {
+        $p = new Process(sprintf('php -r "%s"',$code));
+        $p->run();
+        
+        $this->assertSame($expected, $p->$getter());
+    }
+    
+    public function codeProvider()
+    {
+        return array(
+            //expected output / getter / code to execute
+            //array(1,'getExitCode','exit(1);'),
+            //array(true,'isSuccessful','exit();'),
+            array('output','getOutput','echo \"output\";'),
+        );
+    }
+    
+    /**
+     * provides default method names for simple getter/setter
+     */
+    public function methodProvider()
+    {
+        $defaults = array(
+            array('CommandLine'),
+            array('Timeout'),
+            array('WorkingDirectory'),
+            array('Env'),
+            array('Stdin'),
+            array('Options')
+        );
+        
+        return $defaults;
+    }
+
+}