zoe                                      Tue, 28 Jul 2009 20:48:15 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=286467

Log:
code to use an external memory checker (valgrind)
framework to add others

Changed paths:
    U   php/phpruntests/trunk/src/configuration/rtCommandLineOptions.php
    A   php/phpruntests/trunk/src/configuration/rtExternalTool.php
    U   php/phpruntests/trunk/src/configuration/rtRuntestsConfiguration.php
    A   php/phpruntests/trunk/src/configuration/tools/
    A   php/phpruntests/trunk/src/configuration/tools/rtValgrind.php
    U   php/phpruntests/trunk/src/rtClassMap.php
    U   php/phpruntests/trunk/src/testcase/rtTestConfiguration.php
    U   
php/phpruntests/trunk/src/testcase/sections/executablesections/rtFileSection.php
    A   php/phpruntests/trunk/tests/configuration/rtExternalToolTest.php

Modified: php/phpruntests/trunk/src/configuration/rtCommandLineOptions.php
===================================================================
--- php/phpruntests/trunk/src/configuration/rtCommandLineOptions.php	2009-07-28 20:35:06 UTC (rev 286466)
+++ php/phpruntests/trunk/src/configuration/rtCommandLineOptions.php	2009-07-28 20:48:15 UTC (rev 286467)
@@ -74,6 +74,7 @@
         'temp-source',
         'temp-target',
         'set-timeout',
+        'mopts',
     );

     /**

Added: php/phpruntests/trunk/src/configuration/rtExternalTool.php
===================================================================
--- php/phpruntests/trunk/src/configuration/rtExternalTool.php	                        (rev 0)
+++ php/phpruntests/trunk/src/configuration/rtExternalTool.php	2009-07-28 20:48:15 UTC (rev 286467)
@@ -0,0 +1,45 @@
+<?php
+/**
+ * rtExternalTool
+ *
+ * Class to handle using an external tool (default is valgrind)
+ *
+ * @category   Testing
+ * @package    RUNTESTS
+ * @author     Zoe Slattery <z...@php.net>
+ * @author     Stefan Priebsch <sprieb...@php.net>
+ * @copyright  2009 The PHP Group
+ * @license    http://www.php.net/license/3_01.txt  PHP License 3.01
+ * @link       http://qa.php.net/
+ *
+ */
+
+class rtExternalTool
+{
+    protected $command;
+    protected $options;
+    protected $version;
+
+    public static function getInstance($configuration)
+    {
+        if($configuration->hasCommandLineOption('m')) {
+            return new rtValgrind();
+        } else {
+            $name = 'rt' . $configuration->getCommandLineOption('mtool');
+            return new $name();
+        }
+    }
+
+    public function init(rtRuntestsConfiguration $configuration) {
+        $this->setVersion();
+        $this->setCommand($configuration);
+        $this->setOptions($configuration);
+    }
+
+    public function getCommand() {
+        return $this->command;
+    }
+
+
+}
+?>
\ No newline at end of file

Modified: php/phpruntests/trunk/src/configuration/rtRuntestsConfiguration.php
===================================================================
--- php/phpruntests/trunk/src/configuration/rtRuntestsConfiguration.php	2009-07-28 20:35:06 UTC (rev 286466)
+++ php/phpruntests/trunk/src/configuration/rtRuntestsConfiguration.php	2009-07-28 20:48:15 UTC (rev 286467)
@@ -22,6 +22,8 @@
     private $settings;
     private $environmentVariables;
     private $commandLine;
+
+    private $externalTool = null;

     private $settingNames = array (

@@ -67,6 +69,15 @@
         //extend test command line using TEST_PHP_ARGS
         $options = new rtAddToCommandLine();
         $options->parseAdditionalOptions($this->commandLine, $this->environmentVariables);
+
+        //if there is an external tool - configure it
+
+        if($this->commandLine->hasOption('m') || $this->commandLine->hasOption('mtool')) {
+            $this->externalTool = rtExternalTool::getInstance($this);
+            $this->externalTool->checkAvailable($this);
+            $this->externalTool->init($this);
+
+        }

         //set configuration
         foreach ($this->settingNames as $name => $className) {
@@ -144,5 +155,17 @@
     public function getUserEnvironment() {
         $this->environmentVariables->getUserSuppliedVariables();
     }
+
+    public function hasExternalTool() {
+        if($this->externalTool != null) {
+            return true;
+        }
+        return false;
+    }
+
+    public function getExternalToolCommand() {
+        return $this->externalTool->getCommand();
+    }
+
 }
 ?>

Added: php/phpruntests/trunk/src/configuration/tools/rtValgrind.php
===================================================================
--- php/phpruntests/trunk/src/configuration/tools/rtValgrind.php	                        (rev 0)
+++ php/phpruntests/trunk/src/configuration/tools/rtValgrind.php	2009-07-28 20:48:15 UTC (rev 286467)
@@ -0,0 +1,52 @@
+<?php
+/**
+ * rtvalgrind
+ *
+ * Class to handle using an external tool (default is valgrind)
+ *
+ * @category   Testing
+ * @package    RUNTESTS
+ * @author     Zoe Slattery <z...@php.net>
+ * @author     Stefan Priebsch <sprieb...@php.net>
+ * @copyright  2009 The PHP Group
+ * @license    http://www.php.net/license/3_01.txt  PHP License 3.01
+ * @link       http://qa.php.net/
+ *
+ */
+
+
+class rtValgrind extends rtExternalTool
+{
+    public function checkAvailable($configuration)
+    {
+        $p = new rtIsValgrindAvailable();
+        if(!$p->check($configuration)) {
+            throw new rtException($p->getMessage());
+        }
+    }
+
+
+    public function setVersion() {
+        $phpRunner = new rtPhpRunner('valgrind --version');
+        $valgrindheader = $phpRunner->runPHP();
+        $this->version =  preg_replace("/valgrind-([0-9])\.([0-9])\.([0-9]+)([.-]\w+)?(\s+)/", '$1$2$3', $valgrindheader, 1, $replace_count);
+    }
+
+    public function setCommand() {
+            $this->command = "valgrind -q --tool=memcheck --trace-children=yes";
+    }
+
+    public function setOptions($configuration) {
+        $options = "";
+        if($configuration->hasCommandLineOption('mopts')) {
+            $options = preg_replace('/\"/', '', $configuration->getCommandLineOption('mopts'));
+        }
+
+        if($this->version >= 330) {
+            $this->command .= " " . $options . " --log-file=";
+        } else {
+             $this->command .= " " . $options . " --log-file-exactly=";
+        }
+    }
+}
+?>
\ No newline at end of file

Modified: php/phpruntests/trunk/src/rtClassMap.php
===================================================================
--- php/phpruntests/trunk/src/rtClassMap.php	2009-07-28 20:35:06 UTC (rev 286466)
+++ php/phpruntests/trunk/src/rtClassMap.php	2009-07-28 20:48:15 UTC (rev 286467)
@@ -23,6 +23,7 @@
     'rtAddToCommandLine'                       => 'configuration/rtAddToCommandLine.php',
     'rtCommandLineOptions'                     => 'configuration/rtCommandLineOptions.php',
     'rtEnvironmentVariables'                   => 'configuration/rtEnvironmentVariables.php',
+    'rtExternalTool'                           => 'configuration/rtExternalTool.php',
     'rtIniAsCommandLineArgs'                   => 'configuration/rtIniAsCommandLineArgs.php',
     'rtPreCondition'                           => 'configuration/rtPreCondition.php',
     'rtPreConditionList'                       => 'configuration/rtPreConditionList.php',
@@ -36,6 +37,7 @@
     'rtTestDirectorySetting'                   => 'configuration/settings/rtTestDirectorySetting.php',
     'rtTestFileSetting'                        => 'configuration/settings/rtTestFileSetting.php',
     'rtWorkingDirectorySetting'                => 'configuration/settings/rtWorkingDirectorySetting.php',
+    'rtValgrind'                               => 'configuration/tools/rtValgrind.php',
     'rtUnixConfiguration'                      => 'configuration/unix/rtUnixConfiguration.php',
     'rtUnixEnvironmentVariables'               => 'configuration/unix/rtUnixEnvironmentVariables.php',
     'rtUnixPreConditionList'                   => 'configuration/unix/rtUnixPreConditionList.php',

Modified: php/phpruntests/trunk/src/testcase/rtTestConfiguration.php
===================================================================
--- php/phpruntests/trunk/src/testcase/rtTestConfiguration.php	2009-07-28 20:35:06 UTC (rev 286466)
+++ php/phpruntests/trunk/src/testcase/rtTestConfiguration.php	2009-07-28 20:48:15 UTC (rev 286467)
@@ -109,7 +109,7 @@
     }

     private function setPhpExecutable($runConfiguration, $sectionHeadings)
-    {
+    {
         if ($this->cgiTest) {
             if($runConfiguration->getSetting('PhpCgiExecutable') != null) {
                 $this->phpExecutable =  $runConfiguration->getSetting('PhpCgiExecutable'). " -C";

Modified: php/phpruntests/trunk/src/testcase/sections/executablesections/rtFileSection.php
===================================================================
--- php/phpruntests/trunk/src/testcase/sections/executablesections/rtFileSection.php	2009-07-28 20:35:06 UTC (rev 286466)
+++ php/phpruntests/trunk/src/testcase/sections/executablesections/rtFileSection.php	2009-07-28 20:48:15 UTC (rev 286467)
@@ -16,10 +16,12 @@
 {
     private $twoBlankLines = '\r?\n\r?\n';
     private $headers;
+    private $memFileName;

     public function setExecutableFileName($testName)
     {
-        $this->fileName = $testName.".php";
+        $this->fileName = $testName . ".php";
+        $this->memFileName = $testName . ".mem";
     }

     protected function init() {
@@ -27,8 +29,16 @@

     public function run(rtPhpTest $testCase, rtRuntestsConfiguration $runConfiguration)
     {
+
         $testStatus = $testCase->getStatus();
         $this->writeExecutableFile();
+
+        $commandPrefix = "";
+        if($runConfiguration->hasExternalTool()) {
+            $commandPrefix = $runConfiguration->getExternalToolCommand();
+            //This assumes that the external tool write its output to a *.mem file
+            $commandPrefix .= $this->memFileName;
+        }

         $phpExecutable = $testCase->testConfiguration->getPhpExecutable();

@@ -40,13 +50,13 @@
         }


-        $phpCommand = $phpExecutable;
+        $phpCommand = $commandPrefix . " " . $phpExecutable;
         $phpCommand .= ' '. $testCase->testConfiguration->getPhpCommandLineArguments();
         $phpCommand .= ' -f '.$this->fileName;
         $phpCommand .= ' '.$testCase->testConfiguration->getTestCommandLineArguments();
         $phpCommand .= ' 2>&1 '.$testCase->testConfiguration->getInputFileString();
-

+
         $PhpRunner = new rtPhpRunner($phpCommand,
         $testCase->testConfiguration->getEnvironmentVariables(),
         $runConfiguration->getSetting('WorkingDirectory'),

Added: php/phpruntests/trunk/tests/configuration/rtExternalToolTest.php
===================================================================
--- php/phpruntests/trunk/tests/configuration/rtExternalToolTest.php	                        (rev 0)
+++ php/phpruntests/trunk/tests/configuration/rtExternalToolTest.php	2009-07-28 20:48:15 UTC (rev 286467)
@@ -0,0 +1,38 @@
+<?php
+require_once 'PHPUnit/Framework.php';
+require_once dirname(__FILE__) . '../../../src/rtAutoload.php';
+
+class rtExternalToolTest extends PHPUnit_Framework_TestCase
+{
+
+
+    public function testCreate()
+    {
+
+        $config = rtRuntestsConfiguration::getInstance(array('run-tests.php', '-m', 'test.phpt'));
+        $this->externalTool = rtExternalTool::getInstance($config);
+        $this->externalTool->checkAvailable($config);
+        $this->externalTool->init($config);
+
+        $string = substr($this->externalTool->getCommand(), 0, 48);
+
+        $this->assertEquals('valgrind -q --tool=memcheck --trace-children=yes', $string);
+
+    }
+
+    public function testCreate2()
+    {
+
+        $config = rtRuntestsConfiguration::getInstance(array('run-tests.php', '-m', '--mopts', '"blah blah"', 'test.phpt'));
+        $this->externalTool = rtExternalTool::getInstance($config);
+        $this->externalTool->checkAvailable($config);
+        $this->externalTool->init($config);
+
+        $string = substr($this->externalTool->getCommand(), 0, 58);
+        $this->assertEquals('valgrind -q --tool=memcheck --trace-children=yes blah blah', $string);
+
+    }
+
+}
+?>
+
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to