use log-junit when log-json is not supported by phpunit

use json as long as available, since junit does not list skipped tests before phpunit 6
This commit is contained in:
SimonHeimberg 2017-07-17 23:09:54 +02:00 committed by Dmitry Khomutov
parent c89a6e979c
commit 173f785d61
No known key found for this signature in database
GPG key ID: 7EB36C9576F9ECB9

View file

@ -8,6 +8,7 @@ use PHPCensor\Model\Build;
use PHPCensor\Model\BuildError;
use PHPCensor\Plugin\Option\PhpUnitOptions;
use PHPCensor\Plugin\Util\PhpUnitResultJson;
use PHPCensor\Plugin\Util\PhpUnitResultJunit;
use PHPCensor\Plugin;
use PHPCensor\ZeroConfigPluginInterface;
@ -79,18 +80,28 @@ class PhpUnit extends Plugin implements ZeroConfigPluginInterface
return false;
}
$cmd = $this->builder->findBinary('phpunit');
// run without logging
$ret = null;
$lastLine = exec($cmd.' --log-json . --version');
if (false !== strpos($lastLine, '--log-json')) {
$logFormat = 'junit'; // --log-json is not supported
} else {
$logFormat = 'json';
}
$success = [];
// Run any directories
if (!empty($directories)) {
foreach ($directories as $directory) {
$success[] = $this->runConfig($directory, null);
$success[] = $this->runConfig($directory, null, $logFormat);
}
} else {
// Run any config files
if (!empty($xmlConfigFiles)) {
foreach ($xmlConfigFiles as $configFile) {
$success[] = $this->runConfig($this->options->getTestsPath(), $configFile);
$success[] = $this->runConfig($this->options->getTestsPath(), $configFile, $logFormat);
}
}
}
@ -103,17 +114,18 @@ class PhpUnit extends Plugin implements ZeroConfigPluginInterface
*
* @param $directory
* @param $configFile
* @param string $logFormat
*
* @return bool|mixed
*/
protected function runConfig($directory, $configFile)
protected function runConfig($directory, $configFile, $logFormat)
{
$options = clone $this->options;
$buildPath = $this->build->getBuildPath() . DIRECTORY_SEPARATOR;
// Save the results into a json file
// Save the results into a log file
$logFile = @tempnam($buildPath, 'jLog_');
$options->addArgument('log-json', $logFile);
$options->addArgument('log-'.$logFormat, $logFile);
// Removes any current configurations files
$options->removeArgument('configuration');
@ -126,7 +138,7 @@ class PhpUnit extends Plugin implements ZeroConfigPluginInterface
$cmd = $this->findBinary('phpunit') . ' %s %s';
$success = $this->builder->executeCommand($cmd, $arguments, $directory);
$this->processResults($logFile);
$this->processResults($logFile, $logFormat);
return $success;
}
@ -134,14 +146,19 @@ class PhpUnit extends Plugin implements ZeroConfigPluginInterface
/**
* Saves the test results
*
* @param string $jsonFile
* @param string $logFile
* @param string $logFormat
*
* @throws \Exception If the failed to parse the JSON file
* @throws \Exception If failed to parse the log file
*/
protected function processResults($jsonFile)
protected function processResults($logFile, $logFormat)
{
if (file_exists($jsonFile)) {
$parser = new PhpUnitResultJson($logFile, $this->build->getBuildPath());
if (file_exists($logFile)) {
if ('json' === $logFormat) {
$parser = new PhpUnitResultJson($logFile, $this->build->getBuildPath());
} else {
$parser = new PhpUnitResultJunit($logFile, $this->build->getBuildPath());
}
$this->build->storeMeta('phpunit-data', $parser->parse()->getResults());
$this->build->storeMeta('phpunit-errors', $parser->getFailures());