Skip to content

Commit cd16345

Browse files
authored
Merge pull request #2 from Aeliot-Tm/baseline_builder
Baseline builder
2 parents 696e6ee + 8fa9e3c commit cd16345

File tree

7 files changed

+142
-35
lines changed

7 files changed

+142
-35
lines changed

bin/include_autoloader.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
if (isset($GLOBALS['_composer_autoload_path'])) {
6+
define('PHPUNIT_CCB_COMPOSER_AUTOLOAD_PATH', $GLOBALS['_composer_autoload_path']);
7+
unset($GLOBALS['_composer_autoload_path']);
8+
} else {
9+
$paths = [
10+
__DIR__ . '/../../autoload.php',
11+
__DIR__ . '/../vendor/autoload.php',
12+
__DIR__ . '/vendor/autoload.php',
13+
];
14+
foreach ($paths as $file) {
15+
if (file_exists($file)) {
16+
define('PHPUNIT_CCB_COMPOSER_AUTOLOAD_PATH', $file);
17+
break;
18+
}
19+
}
20+
unset($paths, $file);
21+
}
22+
23+
if (!defined('PHPUNIT_CCB_COMPOSER_AUTOLOAD_PATH')) {
24+
fwrite(
25+
STDERR,
26+
'You need to set up the project dependencies using Composer:' . PHP_EOL . PHP_EOL .
27+
' composer install' . PHP_EOL . PHP_EOL .
28+
'You can learn all about Composer on https://getcomposer.org/.' . PHP_EOL
29+
);
30+
die(1);
31+
}
32+
33+
require PHPUNIT_CCB_COMPOSER_AUTOLOAD_PATH;

bin/pccb_clover_build_baseline

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#!/usr/bin/env php
2+
<?php
3+
4+
declare(strict_types=1);
5+
6+
use Aeliot\PHPUnitCodeCoverageBaseline\BaselineBuilder;
7+
use Aeliot\PHPUnitCodeCoverageBaseline\Console\GetOpt;
8+
use Aeliot\PHPUnitCodeCoverageBaseline\Console\OptionsConfig;
9+
use Aeliot\PHPUnitCodeCoverageBaseline\Console\OptionsReader;
10+
use Aeliot\PHPUnitCodeCoverageBaseline\Reader\CloverReader;
11+
use Aeliot\PHPUnitCodeCoverageBaseline\Writer\BaselineWriter;
12+
13+
require __DIR__ . '/include_autoloader.php';
14+
15+
$optionsConfig = new OptionsConfig();
16+
$optionsConfig->add('baseline', 'b', 'phpunit.clover.baseline.json');
17+
$optionsConfig->add('clover', 'c', 'build/coverage/clover.xml');
18+
19+
/** @var array{ baseline: string, clover: string } $options */
20+
$options = (new OptionsReader($optionsConfig, new GetOpt()))->read();
21+
22+
try {
23+
$builder = new BaselineBuilder(new BaselineWriter($options['baseline']), new CloverReader($options['clover']));
24+
$builder->build();
25+
} catch (\Exception $exception) {
26+
echo sprintf('[ERROR] %s%s', $exception->getMessage(), PHP_EOL);
27+
exit(2);
28+
}

bin/phpunit_clover_compare renamed to bin/pccb_clover_compare

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
#!/usr/bin/env php
22
<?php
33

4-
/**
5-
* DISCLAIMER: this is the base implementation of the comparing of Clover report with its baseline.
6-
*
7-
* TODO: add generating/updating of baseline from Clover report
8-
*/
4+
declare(strict_types=1);
95

106
use Aeliot\PHPUnitCodeCoverageBaseline\Comparator;
117
use Aeliot\PHPUnitCodeCoverageBaseline\Console\GetOpt;
@@ -14,35 +10,7 @@ use Aeliot\PHPUnitCodeCoverageBaseline\Console\OptionsReader;
1410
use Aeliot\PHPUnitCodeCoverageBaseline\Reader\BaselineReader;
1511
use Aeliot\PHPUnitCodeCoverageBaseline\Reader\CloverReader;
1612

17-
if (isset($GLOBALS['_composer_autoload_path'])) {
18-
define('PHPUNIT_CCB_COMPOSER_AUTOLOAD_PATH', $GLOBALS['_composer_autoload_path']);
19-
unset($GLOBALS['_composer_autoload_path']);
20-
} else {
21-
$paths = [
22-
__DIR__ . '/../../autoload.php',
23-
__DIR__ . '/../vendor/autoload.php',
24-
__DIR__ . '/vendor/autoload.php',
25-
];
26-
foreach ($paths as $file) {
27-
if (file_exists($file)) {
28-
define('PHPUNIT_CCB_COMPOSER_AUTOLOAD_PATH', $file);
29-
break;
30-
}
31-
}
32-
unset($paths, $file);
33-
}
34-
35-
if (!defined('PHPUNIT_CCB_COMPOSER_AUTOLOAD_PATH')) {
36-
fwrite(
37-
STDERR,
38-
'You need to set up the project dependencies using Composer:' . PHP_EOL . PHP_EOL .
39-
' composer install' . PHP_EOL . PHP_EOL .
40-
'You can learn all about Composer on https://getcomposer.org/.' . PHP_EOL
41-
);
42-
die(1);
43-
}
44-
45-
require PHPUNIT_CCB_COMPOSER_AUTOLOAD_PATH;
13+
require __DIR__ . '/include_autoloader.php';
4614

4715
$optionsConfig = new OptionsConfig();
4816
$optionsConfig->add('baseline', 'b', 'phpunit.clover.baseline.json');

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@
2424
}
2525
},
2626
"bin": [
27-
"bin/phpunit_clover_compare"
27+
"bin/pccb_clover_compare"
2828
]
2929
}

src/BaselineBuilder.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Aeliot\PHPUnitCodeCoverageBaseline;
6+
7+
use Aeliot\PHPUnitCodeCoverageBaseline\Reader\CloverReader;
8+
use Aeliot\PHPUnitCodeCoverageBaseline\Writer\BaselineWriter;
9+
10+
final class BaselineBuilder
11+
{
12+
private BaselineWriter $baselineWriter;
13+
private CloverReader $cloverReader;
14+
15+
public function __construct(BaselineWriter $baselineWriter, CloverReader $cloverReader)
16+
{
17+
$this->baselineWriter = $baselineWriter;
18+
$this->cloverReader = $cloverReader;
19+
}
20+
21+
public function build(): void
22+
{
23+
$baseline = $this->cloverReader->read();
24+
$this->baselineWriter->write($baseline);
25+
}
26+
}

src/Writer/BaselineWriter.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Aeliot\PHPUnitCodeCoverageBaseline\Writer;
6+
7+
/**
8+
* @codeCoverageIgnore
9+
*/
10+
final class BaselineWriter
11+
{
12+
private string $path;
13+
14+
public function __construct(string $path)
15+
{
16+
$this->path = $path;
17+
}
18+
19+
/**
20+
* @param array<string,int> $baseline
21+
*/
22+
public function write(array $baseline): void
23+
{
24+
file_put_contents($this->path, json_encode($baseline, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT));
25+
}
26+
}

tests/Unit/BaselineBuilderTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Aeliot\PHPUnitCodeCoverageBaseline\Test\Unit;
6+
7+
use Aeliot\PHPUnitCodeCoverageBaseline\BaselineBuilder;
8+
use Aeliot\PHPUnitCodeCoverageBaseline\Reader\CloverReader;
9+
use Aeliot\PHPUnitCodeCoverageBaseline\Writer\BaselineWriter;
10+
use PHPUnit\Framework\TestCase;
11+
12+
final class BaselineBuilderTest extends TestCase
13+
{
14+
public function testPositiveFlow(): void
15+
{
16+
$data = ['a' => 1, 'b' => 2];
17+
18+
$baselineWriter = $this->createMock(BaselineWriter::class);
19+
$baselineWriter->expects($this->once())->method('write')->with($data);
20+
21+
$cloverReader = $this->createMock(CloverReader::class);
22+
$cloverReader->expects($this->once())->method('read')->willReturn($data);
23+
24+
(new BaselineBuilder($baselineWriter, $cloverReader))->build();
25+
}
26+
}

0 commit comments

Comments
 (0)