Browse Source

Merge remote branch 'digitalkaoz/component_process_tests'

* digitalkaoz/component_process_tests:
  fixed code style
  reverted .gitignore and line changes
  [Process] added tests for Process and PhpExecutableFinder
Fabien Potencier 14 years ago
parent
commit
3e00662682

+ 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');
+    }
+}

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

@@ -0,0 +1,77 @@
+<?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;
+    }
+}