Skip to content

Commit 8791071

Browse files
committed
adapt to PhpUnit 10+
1 parent 8f4c226 commit 8791071

File tree

6 files changed

+173
-148
lines changed

6 files changed

+173
-148
lines changed

composer.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,16 @@
6363
"require-dev": {
6464
"codeception/codeception": "^5.0",
6565
"maglnet/composer-require-checker": "^4.2",
66-
"phpunit/phpunit": "^9.6 || ^10.0",
66+
"phpunit/phpunit": "10 - 12",
6767
"rector/rector": "^2.1.1",
6868
"roave/infection-static-analysis-plugin": "^1.16",
6969
"spatie/phpunit-watcher": "^1.23",
7070
"vimeo/psalm": "^5.22 || ^6.12",
7171
"yiisoft/active-record": "dev-master",
7272
"yiisoft/assets": "^4.0",
7373
"yiisoft/csrf": "^2.0",
74-
"yiisoft/db": "1.3 as dev-master",
75-
"yiisoft/db-sqlite": "^1.0",
74+
"yiisoft/db": "dev-master as 2.0.0 || ^1.2.0",
75+
"yiisoft/db-sqlite": "dev-master as 2.0.0 || ^1.2.0",
7676
"yiisoft/psr-dummy-provider": "^1.0",
7777
"yiisoft/router-fastroute": "^4.0",
7878
"yiisoft/test-support": "^3.0",

config/params.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
declare(strict_types=1);
44

55
use Codeception\Extension;
6+
use PHPUnit\Framework\Test;
67
use Yiisoft\Yii\Debug\Api\Debug\Middleware\DebugHeaders;
78
use Yiisoft\Yii\Debug\Api\Inspector\Command\CodeceptionCommand;
89
use Yiisoft\Yii\Debug\Api\Inspector\Command\PHPUnitCommand;
910
use Yiisoft\Yii\Debug\Api\Inspector\Command\PsalmCommand;
1011

1112
$testCommands = [];
12-
if (class_exists(PHPUnit\Framework\Test::class)) {
13+
if (interface_exists(Test::class)) {
1314
$testCommands[PHPUnitCommand::COMMAND_NAME] = PHPUnitCommand::class;
1415
}
1516
if (class_exists(Extension::class)) {

src/Inspector/Command/PHPUnitCommand.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use Yiisoft\Aliases\Aliases;
99
use Yiisoft\Yii\Debug\Api\Inspector\CommandInterface;
1010
use Yiisoft\Yii\Debug\Api\Inspector\CommandResponse;
11-
use Yiisoft\Yii\Debug\Api\Inspector\Test\PHPUnitJSONReporter;
11+
use Yiisoft\Yii\Debug\Api\Inspector\Test\PHPUnitCollectorExtension;
1212

1313
class PHPUnitCommand implements CommandInterface
1414
{
@@ -33,24 +33,24 @@ public function run(): CommandResponse
3333
$projectDirectory = $this->aliases->get('@root');
3434
$debugDirectory = $this->aliases->get('@runtime/debug');
3535

36-
$extension = PHPUnitJSONReporter::class;
36+
$extension = PHPUnitCollectorExtension::class;
3737
$params = [
3838
'vendor/bin/phpunit',
39-
'--printer',
39+
'--extension',
4040
$extension,
41-
'-vvv',
41+
'--no-coverage -vvv',
4242
];
4343

4444
$process = new Process($params);
4545

4646
$process
47-
->setEnv([PHPUnitJSONReporter::ENVIRONMENT_VARIABLE_DIRECTORY_NAME => $debugDirectory])
47+
->setEnv([PHPUnitCollectorExtension::ENVIRONMENT_VARIABLE_DIRECTORY_NAME => $debugDirectory])
4848
->setWorkingDirectory($projectDirectory)
4949
->setTimeout(null)
5050
->run();
5151

5252
$processOutput = json_decode(
53-
file_get_contents($debugDirectory . DIRECTORY_SEPARATOR . PHPUnitJSONReporter::FILENAME),
53+
file_get_contents($debugDirectory . DIRECTORY_SEPARATOR . PHPUnitCollectorExtension::FILENAME),
5454
true,
5555
512,
5656
JSON_THROW_ON_ERROR
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Yiisoft\Yii\Debug\Api\Inspector\Test;
6+
7+
use PHPUnit\Event\Event;
8+
use PHPUnit\Event\Test\ConsideredRisky;
9+
use PHPUnit\Event\Test\Errored;
10+
use PHPUnit\Event\Test\ErrorTriggered;
11+
use PHPUnit\Event\Test\Failed;
12+
use PHPUnit\Event\Test\Finished;
13+
use PHPUnit\Event\Test\MarkedIncomplete;
14+
use PHPUnit\Event\Test\NoticeTriggered;
15+
use PHPUnit\Event\Test\Passed;
16+
use PHPUnit\Event\Test\PhpNoticeTriggered;
17+
use PHPUnit\Event\Test\PhpunitErrorTriggered;
18+
use PHPUnit\Event\Test\PhpunitNoticeTriggered;
19+
use PHPUnit\Event\Test\PhpunitWarningTriggered;
20+
use PHPUnit\Event\Test\PhpWarningTriggered;
21+
use PHPUnit\Event\Test\Skipped;
22+
use PHPUnit\Event\Test\WarningTriggered;
23+
use PHPUnit\Runner\Extension\Extension;
24+
use PHPUnit\Runner\Extension\Facade;
25+
use PHPUnit\Runner\Extension\ParameterCollection;
26+
use PHPUnit\TextUI\Configuration\Configuration;
27+
28+
class PHPUnitCollectorExtension implements Extension
29+
{
30+
public const FILENAME = 'phpunit-report.json';
31+
public const ENVIRONMENT_VARIABLE_DIRECTORY_NAME = 'REPORTER_OUTPUT_PATH';
32+
33+
private array $data = [];
34+
35+
public function __construct()
36+
{
37+
}
38+
39+
public function bootstrap(
40+
Configuration $configuration,
41+
Facade $facade,
42+
ParameterCollection $parameters
43+
): void
44+
{
45+
$facade->registerTracer(new PHPUnitTracer($this));
46+
}
47+
48+
public function __destruct()
49+
{
50+
$this->saveResult();
51+
}
52+
53+
public function saveResult(): void
54+
{
55+
$path = getenv(self::ENVIRONMENT_VARIABLE_DIRECTORY_NAME) ?: getcwd();
56+
ksort($this->data);
57+
58+
file_put_contents(
59+
$path . DIRECTORY_SEPARATOR . self::FILENAME,
60+
json_encode(array_values($this->data), JSON_THROW_ON_ERROR)
61+
);
62+
}
63+
64+
public function logPassed(Passed|Finished $event): void
65+
{
66+
$parsedName = $event->test()->id();
67+
if (array_key_exists($parsedName, $this->data)) {
68+
return;
69+
}
70+
71+
$this->data[$parsedName] = [
72+
'file' => $event->test()->file(),
73+
'test' => $parsedName,
74+
'time' => $event->telemetryInfo()->durationSincePrevious()->asFloat(),
75+
'status' => 'ok',
76+
'stacktrace' => [],
77+
];
78+
}
79+
80+
public function logErrored(Failed|MarkedIncomplete|Errored $event): void
81+
{
82+
$parsedName = $event->test()->id();
83+
if (array_key_exists($parsedName, $this->data)) {
84+
return;
85+
}
86+
87+
$this->data[$parsedName] = [
88+
'file' => $event->test()->file(),
89+
'test' => $parsedName,
90+
'time' => $event->telemetryInfo()->durationSincePrevious()->asFloat(),
91+
'status' => $event->throwable()->message(),
92+
'stacktrace' => $event->throwable()->stackTrace(),
93+
];
94+
}
95+
96+
public function logMessage(WarningTriggered|PhpWarningTriggered|PhpunitWarningTriggered|NoticeTriggered|PhpNoticeTriggered|PhpunitNoticeTriggered|ErrorTriggered|PhpunitErrorTriggered|Skipped|ConsideredRisky $event): void
97+
{
98+
$parsedName = $event->test()->id();
99+
if (array_key_exists($parsedName, $this->data)) {
100+
return;
101+
}
102+
103+
$this->data[$parsedName] = [
104+
'file' => $event->test()->file(),
105+
'test' => $parsedName,
106+
'time' => $event->telemetryInfo()->durationSincePrevious()->asFloat(),
107+
'status' => $event->message(),
108+
'stacktrace' => [],
109+
];
110+
}
111+
112+
public function log(Event $event)
113+
{
114+
if ($event instanceof Passed
115+
|| $event instanceof Finished
116+
) {
117+
$this->logPassed($event);
118+
} elseif ($event instanceof Failed
119+
|| $event instanceof Errored
120+
|| $event instanceof MarkedIncomplete
121+
) {
122+
$this->logErrored($event);
123+
} elseif (
124+
$event instanceof WarningTriggered
125+
|| $event instanceof PhpWarningTriggered
126+
|| $event instanceof PhpunitWarningTriggered
127+
|| $event instanceof NoticeTriggered
128+
|| $event instanceof PhpNoticeTriggered
129+
|| $event instanceof PhpunitNoticeTriggered
130+
|| $event instanceof ErrorTriggered
131+
|| $event instanceof PhpunitErrorTriggered
132+
|| $event instanceof Skipped
133+
|| $event instanceof ConsideredRisky
134+
) {
135+
$this->logMessage($event);
136+
}
137+
}
138+
}

src/Inspector/Test/PHPUnitJSONReporter.php

Lines changed: 0 additions & 138 deletions
This file was deleted.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Yiisoft\Yii\Debug\Api\Inspector\Test;
6+
7+
use PHPUnit\Event\Event;
8+
use PHPUnit\Event\Tracer\Tracer;
9+
10+
/**
11+
* @psalm-suppress InternalClass, InternalMethod
12+
*/
13+
class PHPUnitTracer implements Tracer
14+
{
15+
public function __construct(private readonly PHPUnitCollectorExtension $reporter)
16+
{
17+
}
18+
19+
public function trace(Event $event): void
20+
{
21+
$this->reporter->log($event);
22+
23+
}
24+
}

0 commit comments

Comments
 (0)