Skip to content

Commit 7f49f17

Browse files
Implement PHPUnit notices
1 parent e5138ca commit 7f49f17

32 files changed

+812
-18
lines changed

phpunit.xsd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@
180180
<xs:attribute name="processIsolation" type="xs:boolean" default="false"/>
181181
<xs:attribute name="failOnDeprecation" type="xs:boolean" default="false"/>
182182
<xs:attribute name="failOnPhpunitDeprecation" type="xs:boolean" default="false"/>
183+
<xs:attribute name="failOnPhpunitNotice" type="xs:boolean" default="false"/>
183184
<xs:attribute name="failOnEmptyTestSuite" type="xs:boolean" default="false"/>
184185
<xs:attribute name="failOnIncomplete" type="xs:boolean" default="false"/>
185186
<xs:attribute name="failOnNotice" type="xs:boolean" default="false"/>
@@ -216,6 +217,7 @@
216217
<xs:attribute name="displayDetailsOnSkippedTests" type="xs:boolean" default="false"/>
217218
<xs:attribute name="displayDetailsOnTestsThatTriggerDeprecations" type="xs:boolean" default="false"/>
218219
<xs:attribute name="displayDetailsOnPhpunitDeprecations" type="xs:boolean" default="false"/>
220+
<xs:attribute name="displayDetailsOnPhpunitNotices" type="xs:boolean" default="false"/>
219221
<xs:attribute name="displayDetailsOnTestsThatTriggerErrors" type="xs:boolean" default="false"/>
220222
<xs:attribute name="displayDetailsOnTestsThatTriggerNotices" type="xs:boolean" default="false"/>
221223
<xs:attribute name="displayDetailsOnTestsThatTriggerWarnings" type="xs:boolean" default="false"/>

src/Event/Emitter/DispatchingEmitter.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,28 @@ public function testTriggeredPhpunitDeprecation(?Code\Test $test, string $messag
717717
);
718718
}
719719

720+
/**
721+
* @param non-empty-string $message
722+
*
723+
* @throws InvalidArgumentException
724+
* @throws NoTestCaseObjectOnCallStackException
725+
* @throws UnknownEventTypeException
726+
*/
727+
public function testTriggeredPhpunitNotice(?Code\Test $test, string $message): void
728+
{
729+
if ($test === null) {
730+
$test = TestMethodBuilder::fromCallStack();
731+
}
732+
733+
$this->dispatcher->dispatch(
734+
new Test\PhpunitNoticeTriggered(
735+
$this->telemetryInfo(),
736+
$test,
737+
$message,
738+
),
739+
);
740+
}
741+
720742
/**
721743
* @param non-empty-string $message
722744
* @param non-empty-string $file
@@ -1155,6 +1177,22 @@ public function testRunnerTriggeredPhpunitDeprecation(string $message): void
11551177
);
11561178
}
11571179

1180+
/**
1181+
* @param non-empty-string $message
1182+
*
1183+
* @throws InvalidArgumentException
1184+
* @throws UnknownEventTypeException
1185+
*/
1186+
public function testRunnerTriggeredPhpunitNotice(string $message): void
1187+
{
1188+
$this->dispatcher->dispatch(
1189+
new TestRunner\NoticeTriggered(
1190+
$this->telemetryInfo(),
1191+
$message,
1192+
),
1193+
);
1194+
}
1195+
11581196
/**
11591197
* @param non-empty-string $message
11601198
*

src/Event/Emitter/Emitter.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ public function testSkipped(Code\Test $test, string $message): void;
159159
*/
160160
public function testTriggeredPhpunitDeprecation(?Code\Test $test, string $message): void;
161161

162+
/**
163+
* @param non-empty-string $message
164+
*/
165+
public function testTriggeredPhpunitNotice(?Code\Test $test, string $message): void;
166+
162167
/**
163168
* @param non-empty-string $message
164169
* @param non-empty-string $file
@@ -275,6 +280,11 @@ public function testRunnerFinishedStaticAnalysisForCodeCoverage(int $cacheHits,
275280
*/
276281
public function testRunnerTriggeredPhpunitDeprecation(string $message): void;
277282

283+
/**
284+
* @param non-empty-string $message
285+
*/
286+
public function testRunnerTriggeredPhpunitNotice(string $message): void;
287+
278288
/**
279289
* @param non-empty-string $message
280290
*/
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<?php declare(strict_types=1);
2+
/*
3+
* This file is part of PHPUnit.
4+
*
5+
* (c) Sebastian Bergmann <[email protected]>
6+
*
7+
* For the full copyright and license information, please view the LICENSE
8+
* file that was distributed with this source code.
9+
*/
10+
namespace PHPUnit\Event\Test;
11+
12+
use const PHP_EOL;
13+
use function sprintf;
14+
use function trim;
15+
use PHPUnit\Event\Code\Test;
16+
use PHPUnit\Event\Event;
17+
use PHPUnit\Event\Telemetry;
18+
19+
/**
20+
* @immutable
21+
*
22+
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
23+
*/
24+
final readonly class PhpunitNoticeTriggered implements Event
25+
{
26+
private Telemetry\Info $telemetryInfo;
27+
private Test $test;
28+
29+
/**
30+
* @var non-empty-string
31+
*/
32+
private string $message;
33+
34+
/**
35+
* @param non-empty-string $message
36+
*/
37+
public function __construct(Telemetry\Info $telemetryInfo, Test $test, string $message)
38+
{
39+
$this->telemetryInfo = $telemetryInfo;
40+
$this->test = $test;
41+
$this->message = $message;
42+
}
43+
44+
public function telemetryInfo(): Telemetry\Info
45+
{
46+
return $this->telemetryInfo;
47+
}
48+
49+
public function test(): Test
50+
{
51+
return $this->test;
52+
}
53+
54+
/**
55+
* @return non-empty-string
56+
*/
57+
public function message(): string
58+
{
59+
return $this->message;
60+
}
61+
62+
/**
63+
* @return non-empty-string
64+
*/
65+
public function asString(): string
66+
{
67+
$message = trim($this->message);
68+
69+
if ($message !== '') {
70+
$message = PHP_EOL . $message;
71+
}
72+
73+
return sprintf(
74+
'Test Triggered PHPUnit Notice (%s)%s',
75+
$this->test->id(),
76+
$message,
77+
);
78+
}
79+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php declare(strict_types=1);
2+
/*
3+
* This file is part of PHPUnit.
4+
*
5+
* (c) Sebastian Bergmann <[email protected]>
6+
*
7+
* For the full copyright and license information, please view the LICENSE
8+
* file that was distributed with this source code.
9+
*/
10+
namespace PHPUnit\Event\Test;
11+
12+
use PHPUnit\Event\Subscriber;
13+
14+
/**
15+
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
16+
*/
17+
interface PhpunitNoticeTriggeredSubscriber extends Subscriber
18+
{
19+
public function notify(PhpunitNoticeTriggered $event): void;
20+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php declare(strict_types=1);
2+
/*
3+
* This file is part of PHPUnit.
4+
*
5+
* (c) Sebastian Bergmann <[email protected]>
6+
*
7+
* For the full copyright and license information, please view the LICENSE
8+
* file that was distributed with this source code.
9+
*/
10+
namespace PHPUnit\Event\TestRunner;
11+
12+
use function sprintf;
13+
use PHPUnit\Event\Event;
14+
use PHPUnit\Event\Telemetry;
15+
16+
/**
17+
* @immutable
18+
*
19+
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
20+
*/
21+
final readonly class NoticeTriggered implements Event
22+
{
23+
private Telemetry\Info $telemetryInfo;
24+
private string $message;
25+
26+
public function __construct(Telemetry\Info $telemetryInfo, string $message)
27+
{
28+
$this->telemetryInfo = $telemetryInfo;
29+
$this->message = $message;
30+
}
31+
32+
public function telemetryInfo(): Telemetry\Info
33+
{
34+
return $this->telemetryInfo;
35+
}
36+
37+
public function message(): string
38+
{
39+
return $this->message;
40+
}
41+
42+
/**
43+
* @return non-empty-string
44+
*/
45+
public function asString(): string
46+
{
47+
return sprintf(
48+
'Test Runner Triggered Notice (%s)',
49+
$this->message,
50+
);
51+
}
52+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php declare(strict_types=1);
2+
/*
3+
* This file is part of PHPUnit.
4+
*
5+
* (c) Sebastian Bergmann <[email protected]>
6+
*
7+
* For the full copyright and license information, please view the LICENSE
8+
* file that was distributed with this source code.
9+
*/
10+
namespace PHPUnit\Event\TestRunner;
11+
12+
use PHPUnit\Event\Subscriber;
13+
14+
/**
15+
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
16+
*/
17+
interface NoticeTriggeredSubscriber extends Subscriber
18+
{
19+
public function notify(NoticeTriggered $event): void;
20+
}

src/Event/Facade.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ private function registerDefaultTypes(TypeMap $typeMap): void
197197
Test\PhpDeprecationTriggered::class,
198198
Test\PhpNoticeTriggered::class,
199199
Test\PhpunitDeprecationTriggered::class,
200+
Test\PhpunitNoticeTriggered::class,
200201
Test\PhpunitErrorTriggered::class,
201202
Test\PhpunitWarningTriggered::class,
202203
Test\PhpWarningTriggered::class,
@@ -230,6 +231,7 @@ private function registerDefaultTypes(TypeMap $typeMap): void
230231
TestRunner\Finished::class,
231232
TestRunner\Started::class,
232233
TestRunner\DeprecationTriggered::class,
234+
TestRunner\NoticeTriggered::class,
233235
TestRunner\WarningTriggered::class,
234236
TestRunner\GarbageCollectionDisabled::class,
235237
TestRunner\GarbageCollectionTriggered::class,

src/Runner/TestResult/Collector.php

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@
3030
use PHPUnit\Event\Test\PhpNoticeTriggered;
3131
use PHPUnit\Event\Test\PhpunitDeprecationTriggered;
3232
use PHPUnit\Event\Test\PhpunitErrorTriggered;
33+
use PHPUnit\Event\Test\PhpunitNoticeTriggered;
3334
use PHPUnit\Event\Test\PhpunitWarningTriggered;
3435
use PHPUnit\Event\Test\PhpWarningTriggered;
3536
use PHPUnit\Event\Test\Skipped as TestSkipped;
3637
use PHPUnit\Event\Test\WarningTriggered;
3738
use PHPUnit\Event\TestRunner\DeprecationTriggered as TestRunnerDeprecationTriggered;
3839
use PHPUnit\Event\TestRunner\ExecutionStarted;
40+
use PHPUnit\Event\TestRunner\NoticeTriggered as TestRunnerNoticeTriggered;
3941
use PHPUnit\Event\TestRunner\WarningTriggered as TestRunnerWarningTriggered;
4042
use PHPUnit\Event\TestSuite\Finished as TestSuiteFinished;
4143
use PHPUnit\Event\TestSuite\Skipped as TestSuiteSkipped;
@@ -106,20 +108,30 @@ final class Collector
106108
private array $testTriggeredPhpunitErrorEvents = [];
107109

108110
/**
109-
* @var array<string,list<PhpunitWarningTriggered>>
111+
* @var array<string,list<PhpunitNoticeTriggered>>
110112
*/
111-
private array $testTriggeredPhpunitWarningEvents = [];
113+
private array $testTriggeredPhpunitNoticeEvents = [];
112114

113115
/**
114-
* @var list<TestRunnerWarningTriggered>
116+
* @var array<string,list<PhpunitWarningTriggered>>
115117
*/
116-
private array $testRunnerTriggeredWarningEvents = [];
118+
private array $testTriggeredPhpunitWarningEvents = [];
117119

118120
/**
119121
* @var list<TestRunnerDeprecationTriggered>
120122
*/
121123
private array $testRunnerTriggeredDeprecationEvents = [];
122124

125+
/**
126+
* @var list<TestRunnerNoticeTriggered>
127+
*/
128+
private array $testRunnerTriggeredNoticeEvents = [];
129+
130+
/**
131+
* @var list<TestRunnerWarningTriggered>
132+
*/
133+
private array $testRunnerTriggeredWarningEvents = [];
134+
123135
/**
124136
* @var array<non-empty-string, Issue>
125137
*/
@@ -182,10 +194,12 @@ public function __construct(Facade $facade, IssueFilter $issueFilter)
182194
new TestTriggeredPhpNoticeSubscriber($this),
183195
new TestTriggeredPhpunitDeprecationSubscriber($this),
184196
new TestTriggeredPhpunitErrorSubscriber($this),
197+
new TestTriggeredPhpunitNoticeSubscriber($this),
185198
new TestTriggeredPhpunitWarningSubscriber($this),
186199
new TestTriggeredPhpWarningSubscriber($this),
187200
new TestTriggeredWarningSubscriber($this),
188201
new TestRunnerTriggeredDeprecationSubscriber($this),
202+
new TestRunnerTriggeredNoticeSubscriber($this),
189203
new TestRunnerTriggeredWarningSubscriber($this),
190204
);
191205

@@ -206,8 +220,10 @@ public function result(): TestResult
206220
$this->testMarkedIncompleteEvents,
207221
$this->testTriggeredPhpunitDeprecationEvents,
208222
$this->testTriggeredPhpunitErrorEvents,
223+
$this->testTriggeredPhpunitNoticeEvents,
209224
$this->testTriggeredPhpunitWarningEvents,
210225
$this->testRunnerTriggeredDeprecationEvents,
226+
$this->testRunnerTriggeredNoticeEvents,
211227
$this->testRunnerTriggeredWarningEvents,
212228
array_values($this->errors),
213229
array_values($this->deprecations),
@@ -416,6 +432,15 @@ public function testTriggeredPhpunitDeprecation(PhpunitDeprecationTriggered $eve
416432
$this->testTriggeredPhpunitDeprecationEvents[$event->test()->id()][] = $event;
417433
}
418434

435+
public function testTriggeredPhpunitNotice(PhpunitNoticeTriggered $event): void
436+
{
437+
if (!isset($this->testTriggeredPhpunitNoticeEvents[$event->test()->id()])) {
438+
$this->testTriggeredPhpunitNoticeEvents[$event->test()->id()] = [];
439+
}
440+
441+
$this->testTriggeredPhpunitNoticeEvents[$event->test()->id()][] = $event;
442+
}
443+
419444
public function testTriggeredError(ErrorTriggered $event): void
420445
{
421446
if (!$this->issueFilter->shouldBeProcessed($event)) {
@@ -573,6 +598,11 @@ public function testRunnerTriggeredDeprecation(TestRunnerDeprecationTriggered $e
573598
$this->testRunnerTriggeredDeprecationEvents[] = $event;
574599
}
575600

601+
public function testRunnerTriggeredNotice(TestRunnerNoticeTriggered $event): void
602+
{
603+
$this->testRunnerTriggeredNoticeEvents[] = $event;
604+
}
605+
576606
public function testRunnerTriggeredWarning(TestRunnerWarningTriggered $event): void
577607
{
578608
$this->testRunnerTriggeredWarningEvents[] = $event;

0 commit comments

Comments
 (0)