getCollectCodeCoverageInformation() 공개 메소드

Returns whether code coverage information should be collected.
public getCollectCodeCoverageInformation ( ) : boolean
리턴 boolean If code coverage should be collected
예제 #1
0
 /**
  * Makes the processChildResult inherited method public.
  *
  * @param \PHPUnit_Framework_Test $test
  * @param \PHPUnit_Framework_TestResult $result
  * @param string $stdout
  * @param string $stderr
  * @return void
  */
 public function processChildResult(\PHPUnit_Framework_Test $test, \PHPUnit_Framework_TestResult $result, $stdout, $stderr)
 {
     $time = 0;
     if (!empty($stderr)) {
         $result->addError($test, new \PHPUnit_Framework_Exception(trim($stderr)), $time);
     } else {
         set_error_handler(function ($errno, $errstr, $errfile, $errline) {
             throw new \ErrorException($errstr, $errno, $errno, $errfile, $errline);
         });
         try {
             if (strpos($stdout, "#!/usr/bin/env php\n") === 0) {
                 $stdout = substr($stdout, 19);
             }
             $childResult = unserialize(str_replace("#!/usr/bin/env php\n", '', $stdout));
             restore_error_handler();
         } catch (\ErrorException $e) {
             restore_error_handler();
             $childResult = false;
             $result->addError($test, new \PHPUnit_Framework_Exception(trim($stdout), 0, $e), $time);
         }
         if ($childResult !== false) {
             if (!empty($childResult['output'])) {
                 print $childResult['output'];
             }
             $test->setResult($childResult['testResult']);
             $test->addToAssertionCount($childResult['numAssertions']);
             $childResult = $childResult['result'];
             if ($result->getCollectCodeCoverageInformation()) {
                 $result->getCodeCoverage()->merge($childResult->getCodeCoverage());
             }
             $time = $childResult->time();
             $notImplemented = $childResult->notImplemented();
             $risky = $childResult->risky();
             $skipped = $childResult->skipped();
             $errors = $childResult->errors();
             $failures = $childResult->failures();
             if (!empty($notImplemented)) {
                 $result->addError($test, $this->getException($notImplemented[0]), $time);
             } elseif (!empty($risky)) {
                 $result->addError($test, $this->getException($risky[0]), $time);
             } elseif (!empty($skipped)) {
                 $result->addError($test, $this->getException($skipped[0]), $time);
             } elseif (!empty($errors)) {
                 foreach ($errors as $error) {
                     $result->addError($test, $this->getException($error), $time);
                 }
             } elseif (!empty($failures)) {
                 foreach ($failures as $failure) {
                     $result->addFailure($test, $this->getException($failure), $time);
                 }
             }
         }
     }
     $result->endTest($test, $time);
 }
예제 #2
0
파일: runner.php 프로젝트: laiello/ko3
 /**
  * Calcualtes stats for each file covered by the code testing
  *
  * Each member of the returned array is formatted like so:
  *
  * <code>
  * array(
  *     'coverage'      => $coverage_percent_for_file,
  *     'loc'           => $lines_of_code,
  *     'locExecutable' => $lines_of_executable_code,
  *     'locExecuted'   => $lines_of_code_executed
  *   );
  * </code>
  *
  * @return array Statistics for code coverage of each file
  */
 public function calculate_cc()
 {
     if ($this->result->getCollectCodeCoverageInformation()) {
         $coverage = $this->result->getCodeCoverageInformation();
         $coverage_summary = PHPUnit_Util_CodeCoverage::getSummary($coverage);
         $stats = array();
         foreach ($coverage_summary as $file => $_lines) {
             $stats[$file] = PHPUnit_Util_CodeCoverage::getStatistics($coverage_summary, $file);
         }
         return $stats;
     }
     return FALSE;
 }
예제 #3
0
파일: PHP.php 프로젝트: qcodo/qcodo
 /**
  * Processes the TestResult object from an isolated process.
  *
  * @param PHPUnit_Framework_TestCase   $test
  * @param PHPUnit_Framework_TestResult $result
  * @param string                       $stdout
  * @param string                       $stderr
  * @since Method available since Release 3.5.0
  */
 protected function processChildResult(PHPUnit_Framework_Test $test, PHPUnit_Framework_TestResult $result, $stdout, $stderr)
 {
     if (!empty($stderr)) {
         $time = 0;
         $result->addError($test, new RuntimeException(trim($stderr)), $time);
     } else {
         $childResult = @unserialize($stdout);
         if ($childResult !== FALSE) {
             if (!empty($childResult['output'])) {
                 print $childResult['output'];
             }
             $test->setResult($childResult['testResult']);
             $test->addToAssertionCount($childResult['numAssertions']);
             $childResult = $childResult['result'];
             if ($result->getCollectCodeCoverageInformation()) {
                 $codeCoverageInformation = $childResult->getRawCodeCoverageInformation();
                 if (isset($codeCoverageInformation[0]) && is_array($codeCoverageInformation[0])) {
                     $result->getCodeCoverage()->append($codeCoverageInformation[0], $test);
                 }
             }
             $time = $childResult->time();
             $notImplemented = $childResult->notImplemented();
             $skipped = $childResult->skipped();
             $errors = $childResult->errors();
             $failures = $childResult->failures();
             if (!empty($notImplemented)) {
                 $result->addError($test, $notImplemented[0]->thrownException(), $time);
             } else {
                 if (!empty($skipped)) {
                     $result->addError($test, $skipped[0]->thrownException(), $time);
                 } else {
                     if (!empty($errors)) {
                         $result->addError($test, $errors[0]->thrownException(), $time);
                     } else {
                         if (!empty($failures)) {
                             $result->addFailure($test, $failures[0]->thrownException(), $time);
                         }
                     }
                 }
             }
         } else {
             $time = 0;
             $result->addError($test, new RuntimeException(trim($stdout)), $time);
         }
     }
     $result->endTest($test, $time);
 }
예제 #4
0
 /**
  * Runs a test and collects its result in a TestResult instance.
  *
  * @param  PHPUnit_Framework_TestResult $result
  * @param  array                        $options
  * @return PHPUnit_Framework_TestResult
  */
 public function run(PHPUnit_Framework_TestResult $result = NULL, array $options = array())
 {
     if (!class_exists('PEAR_RunTest', FALSE)) {
         throw new PHPUnit_Framework_Exception('Class PEAR_RunTest not found.');
     }
     if (isset($GLOBALS['_PEAR_destructor_object_list']) && is_array($GLOBALS['_PEAR_destructor_object_list']) && !empty($GLOBALS['_PEAR_destructor_object_list'])) {
         $pearDestructorObjectListCount = count($GLOBALS['_PEAR_destructor_object_list']);
     } else {
         $pearDestructorObjectListCount = 0;
     }
     if ($result === NULL) {
         $result = new PHPUnit_Framework_TestResult();
     }
     $coverage = $result->getCollectCodeCoverageInformation();
     $options = array_merge($options, $this->options);
     if (!isset($options['include_path'])) {
         $options['include_path'] = get_include_path();
     }
     if ($coverage) {
         $options['coverage'] = TRUE;
     } else {
         $options['coverage'] = FALSE;
     }
     $currentErrorReporting = error_reporting(E_ERROR | E_WARNING | E_PARSE);
     $runner = new PEAR_RunTest(new PHPUnit_Extensions_PhptTestCase_Logger(), $options);
     if ($coverage) {
         $runner->xdebug_loaded = TRUE;
     } else {
         $runner->xdebug_loaded = FALSE;
     }
     $result->startTest($this);
     PHP_Timer::start();
     $buffer = $runner->run($this->filename, $options);
     $time = PHP_Timer::stop();
     error_reporting($currentErrorReporting);
     $base = basename($this->filename);
     $path = dirname($this->filename);
     $coverageFile = $path . DIRECTORY_SEPARATOR . str_replace('.phpt', '.xdebug', $base);
     $diffFile = $path . DIRECTORY_SEPARATOR . str_replace('.phpt', '.diff', $base);
     $expFile = $path . DIRECTORY_SEPARATOR . str_replace('.phpt', '.exp', $base);
     $logFile = $path . DIRECTORY_SEPARATOR . str_replace('.phpt', '.log', $base);
     $outFile = $path . DIRECTORY_SEPARATOR . str_replace('.phpt', '.out', $base);
     $phpFile = $path . DIRECTORY_SEPARATOR . str_replace('.phpt', '.php', $base);
     if (is_object($buffer) && $buffer instanceof PEAR_Error) {
         $result->addError($this, new PHPUnit_Framework_Exception($buffer->getMessage()), $time);
     } else {
         if ($buffer == 'SKIPPED') {
             $result->addFailure($this, new PHPUnit_Framework_SkippedTestError(), 0);
         } else {
             if ($buffer != 'PASSED') {
                 $expContent = file_get_contents($expFile);
                 $outContent = file_get_contents($outFile);
                 $result->addFailure($this, new PHPUnit_Framework_ComparisonFailure($expContent, $outContent, $expContent, $outContent), $time);
             }
         }
     }
     foreach (array($diffFile, $expFile, $logFile, $phpFile, $outFile) as $file) {
         if (file_exists($file)) {
             unlink($file);
         }
     }
     if ($coverage && file_exists($coverageFile)) {
         eval('$coverageData = ' . file_get_contents($coverageFile) . ';');
         unset($coverageData[$phpFile]);
         $result->getCodeCoverage()->append($coverageData, $this);
         unlink($coverageFile);
     }
     $result->endTest($this, $time);
     // Do not invoke PEAR's destructor mechanism for PHP 4
     // as it raises an E_STRICT.
     if ($pearDestructorObjectListCount == 0) {
         unset($GLOBALS['_PEAR_destructor_object_list']);
     } else {
         $count = count($GLOBALS['_PEAR_destructor_object_list']) - $pearDestructorObjectListCount;
         for ($i = 0; $i < $count; $i++) {
             array_pop($GLOBALS['_PEAR_destructor_object_list']);
         }
     }
     return $result;
 }
예제 #5
0
파일: PHP.php 프로젝트: samurailens/sop
 /**
  * Processes the TestResult object from an isolated process.
  *
  * @param PHPUnit_Framework_TestCase   $test
  * @param PHPUnit_Framework_TestResult $result
  * @param string                       $stdout
  * @param string                       $stderr
  * @since Method available since Release 3.5.0
  */
 protected function processChildResult(PHPUnit_Framework_Test $test, PHPUnit_Framework_TestResult $result, $stdout, $stderr)
 {
     $time = 0;
     if (!empty($stderr)) {
         $result->addError($test, new PHPUnit_Framework_Exception(trim($stderr)), $time);
     } else {
         set_error_handler(function ($errno, $errstr, $errfile, $errline) {
             throw new ErrorException($errstr, $errno, $errno, $errfile, $errline);
         });
         try {
             $childResult = unserialize($stdout);
             restore_error_handler();
         } catch (ErrorException $e) {
             restore_error_handler();
             $childResult = FALSE;
             $result->addError($test, new PHPUnit_Framework_Exception(trim($stdout), 0, $e), $time);
         }
         if ($childResult !== FALSE) {
             if (!empty($childResult['output'])) {
                 print $childResult['output'];
             }
             $test->setResult($childResult['testResult']);
             $test->addToAssertionCount($childResult['numAssertions']);
             $childResult = $childResult['result'];
             if ($result->getCollectCodeCoverageInformation()) {
                 $result->getCodeCoverage()->merge($childResult->getCodeCoverage());
             }
             $time = $childResult->time();
             $notImplemented = $childResult->notImplemented();
             $skipped = $childResult->skipped();
             $errors = $childResult->errors();
             $failures = $childResult->failures();
             if (!empty($notImplemented)) {
                 $result->addError($test, $this->getException($notImplemented[0]), $time);
             } else {
                 if (!empty($skipped)) {
                     $result->addError($test, $this->getException($skipped[0]), $time);
                 } else {
                     if (!empty($errors)) {
                         $result->addError($test, $this->getException($errors[0]), $time);
                     } else {
                         if (!empty($failures)) {
                             $result->addFailure($test, $this->getException($failures[0]), $time);
                         }
                     }
                 }
             }
         }
     }
     $result->endTest($test, $time);
 }
 /**
  * Runs a test and collects its result in a TestResult instance.
  *
  * @param  PHPUnit_Framework_TestResult $result
  * @param  array $options Array with ini settings for the php instance run,
  *                        key being the name if the setting, value the ini value.
  * @return PHPUnit_Framework_TestResult
  * @access public
  */
 public function run(PHPUnit_Framework_TestResult $result = NULL, $options = array())
 {
     if (!class_exists('PEAR_RunTest', FALSE)) {
         throw new RuntimeException('Class PEAR_RunTest not found.');
     }
     if ($result === NULL) {
         $result = new PHPUnit_Framework_TestResult();
     }
     if (!is_array($options)) {
         throw new InvalidArgumentException();
     }
     $options = array_merge($options, $this->options);
     $coverage = $result->getCollectCodeCoverageInformation();
     if ($coverage) {
         $options = array('coverage' => TRUE);
     } else {
         $options = array();
     }
     $runner = new PEAR_RunTest(new PHPUnit_Extensions_PhptTestCase_Logger(), $options);
     if ($coverage) {
         $runner->xdebug_loaded = TRUE;
     } else {
         $runner->xdebug_loaded = FALSE;
     }
     $result->startTest($this);
     PHPUnit_Util_Timer::start();
     $buffer = $runner->run($this->filename, $options);
     $time = PHPUnit_Util_Timer::stop();
     $base = basename($this->filename);
     $path = dirname($this->filename);
     $coverageFile = $path . DIRECTORY_SEPARATOR . str_replace('.phpt', '.xdebug', $base);
     $diffFile = $path . DIRECTORY_SEPARATOR . str_replace('.phpt', '.diff', $base);
     $expFile = $path . DIRECTORY_SEPARATOR . str_replace('.phpt', '.exp', $base);
     $logFile = $path . DIRECTORY_SEPARATOR . str_replace('.phpt', '.log', $base);
     $outFile = $path . DIRECTORY_SEPARATOR . str_replace('.phpt', '.out', $base);
     $phpFile = $path . DIRECTORY_SEPARATOR . str_replace('.phpt', '.php', $base);
     if (is_object($buffer) && $buffer instanceof PEAR_Error) {
         $result->addError($this, new RuntimeException($buffer->getMessage()), $time);
     } else {
         if ($buffer == 'SKIPPED') {
             $result->addFailure($this, new PHPUnit_Framework_SkippedTestError(), 0);
         } else {
             if ($buffer != 'PASSED') {
                 $result->addFailure($this, PHPUnit_Framework_ComparisonFailure::diffEqual(file_get_contents($expFile), file_get_contents($outFile), FALSE, $this->getName()), $time);
             }
         }
     }
     foreach (array($diffFile, $expFile, $logFile, $phpFile, $outFile) as $file) {
         if (file_exists($file)) {
             unlink($file);
         }
     }
     if ($coverage) {
         eval('$coverageData = ' . file_get_contents($coverageFile) . ';');
         unset($coverageData[$phpFile]);
         $codeCoverageInformation = array('test' => $this, 'files' => $coverageData);
         $result->appendCodeCoverageInformation($this, $codeCoverageInformation);
         unlink($coverageFile);
     }
     $result->endTest($this, $time);
     return $result;
 }
예제 #7
0
 /**
  * Render job template for test case
  *
  * @param \PHPUnit_Framework_Test $testcase
  * @param \PHPUnit_Framework_TestResult $result
  * @param array $params
  * @param Environment $environment
  * @return string
  */
 private function generateTestCaseJob(\PHPUnit_Framework_Test $testcase, \PHPUnit_Framework_TestResult $result, array $params, Environment $environment)
 {
     if ($result === null) {
         $result = new \PHPUnit_Framework_TestResult();
     }
     $configFile = false;
     if (isset($_SERVER['argv']['--configuration'])) {
         for ($index = 0; $index <= count($_SERVER['argv']); $index++) {
             if ($_SERVER['argv'][$index] == '--configuration') {
                 $configFile = $_SERVER['argv'][$index + 1];
                 break;
             }
         }
     } else {
         $phpunitPath = MTF_BP . '/phpunit.xml';
         if (file_exists($phpunitPath)) {
             $configFile = realpath($phpunitPath);
         } else {
             if (file_exists($phpunitPath . '.dist')) {
                 $configFile = realpath($phpunitPath . '.dist');
             }
         }
     }
     if (!$configFile) {
         throw new \Exception('Cannot define phpunit configuration path');
     }
     $configuration = \PHPUnit_Util_Configuration::getInstance($configFile);
     $listenerConfiguration = var_export(serialize($configuration->getListenerConfiguration()), true);
     $class = new \ReflectionClass($testcase);
     $template = new \Text_Template(sprintf('%s%sTestCaseRun.tpl', __DIR__, DIRECTORY_SEPARATOR));
     if ($result->getCollectCodeCoverageInformation()) {
         $coverage = 'TRUE';
     } else {
         $coverage = 'FALSE';
     }
     if (defined('MTF_BOOT_FILE')) {
         $bootstrap = var_export(MTF_BOOT_FILE, true);
     } else {
         if (defined('PHPUNIT_COMPOSER_INSTALL')) {
             $bootstrap = var_export(PHPUNIT_COMPOSER_INSTALL, true);
         } else {
             $bootstrap = '\'\'';
         }
     }
     if (defined('__PHPUNIT_PHAR__')) {
         $phar = var_export(__PHPUNIT_PHAR__, true);
     } else {
         $phar = '\'\'';
     }
     if ($testcase instanceof \Mtf\TestCase\Injectable) {
         $filePath = $testcase->getFilePath();
     } else {
         $filePath = false;
     }
     $data = var_export(serialize($params['data']), true);
     $includePath = var_export(get_include_path(), true);
     $env = var_export(serialize($environment->getEnvironmentVariables()), true);
     // must do these fixes because TestCaseMethod.tpl has unserialize('{data}') in it, and we can't break BC
     // the lines above used to use addcslashes() rather than var_export(), which breaks null byte escape sequences
     $data = "'." . $data . ".'";
     $includePath = "'." . $includePath . ".'";
     $env = "'." . $env . ".'";
     $listenerConfiguration = "'." . $listenerConfiguration . ".'";
     $template->setVar(array('bootstrap' => $bootstrap, 'phar' => $phar, 'filename' => $class->getFileName(), 'className' => $class->getName(), 'methodName' => $params['name'], 'collectCodeCoverageInformation' => $coverage, 'data' => $data, 'dataName' => $params['dataName'], 'include_path' => $includePath, 'env' => $env, 'filePath' => $filePath, 'listenerConfiguration' => $listenerConfiguration));
     return $template->render();
 }