Skip to content

Commit 4db30b1

Browse files
Always emit Test\PhpunitWarningTriggered event
1 parent 732f668 commit 4db30b1

File tree

9 files changed

+66
-15
lines changed

9 files changed

+66
-15
lines changed

src/Event/Emitter/DispatchingEmitter.php

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
namespace PHPUnit\Event;
1111

1212
use function assert;
13-
use function class_exists;
1413
use function memory_reset_peak_usage;
1514
use PHPUnit\Event\Code\ClassMethod;
1615
use PHPUnit\Event\Code\ComparisonFailure;
@@ -1011,22 +1010,28 @@ public function testTriggeredPhpunitError(Code\Test $test, string $message): voi
10111010
*/
10121011
public function testTriggeredPhpunitWarning(Code\Test $test, string $message): void
10131012
{
1014-
if (
1015-
$test->isTestMethod() &&
1016-
class_exists($test->className()) &&
1017-
($metadata = Registry::parser()->forMethod($test->className(), $test->methodName())->isIgnorePhpunitWarnings())->isNotEmpty() &&
1018-
($ignoreWarnings = $metadata->asArray()[0] ?? null) !== null &&
1019-
$ignoreWarnings instanceof IgnorePhpunitWarnings &&
1020-
$ignoreWarnings->shouldIgnore($message)
1021-
) {
1022-
return;
1013+
$ignoredByTest = false;
1014+
1015+
if ($test->isTestMethod()) {
1016+
assert($test instanceof TestMethod);
1017+
1018+
$metadata = Registry::parser()->forMethod($test->className(), $test->methodName())->isIgnorePhpunitWarnings()->asArray();
1019+
1020+
if (isset($metadata[0])) {
1021+
assert($metadata[0] instanceof IgnorePhpunitWarnings);
1022+
1023+
if ($metadata[0]->shouldIgnore($message)) {
1024+
$ignoredByTest = true;
1025+
}
1026+
}
10231027
}
10241028

10251029
$this->dispatcher->dispatch(
10261030
new Test\PhpunitWarningTriggered(
10271031
$this->telemetryInfo(),
10281032
$test,
10291033
$message,
1034+
$ignoredByTest,
10301035
),
10311036
);
10321037
}

src/Event/Events/Test/Issue/PhpunitWarningTriggered.php

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
namespace PHPUnit\Event\Test;
1111

1212
use const PHP_EOL;
13+
use function implode;
1314
use function sprintf;
1415
use PHPUnit\Event\Code\Test;
1516
use PHPUnit\Event\Event;
@@ -29,15 +30,17 @@
2930
* @var non-empty-string
3031
*/
3132
private string $message;
33+
private bool $ignoredByTest;
3234

3335
/**
3436
* @param non-empty-string $message
3537
*/
36-
public function __construct(Telemetry\Info $telemetryInfo, Test $test, string $message)
38+
public function __construct(Telemetry\Info $telemetryInfo, Test $test, string $message, bool $ignoredByTest)
3739
{
3840
$this->telemetryInfo = $telemetryInfo;
3941
$this->test = $test;
4042
$this->message = $message;
43+
$this->ignoredByTest = $ignoredByTest;
4144
}
4245

4346
public function telemetryInfo(): Telemetry\Info
@@ -58,6 +61,11 @@ public function message(): string
5861
return $this->message;
5962
}
6063

64+
public function ignoredByTest(): bool
65+
{
66+
return $this->ignoredByTest;
67+
}
68+
6169
/**
6270
* @return non-empty-string
6371
*/
@@ -69,9 +77,15 @@ public function asString(): string
6977
$message = PHP_EOL . $message;
7078
}
7179

80+
$details = [$this->test->id()];
81+
82+
if ($this->ignoredByTest) {
83+
$details[] = 'ignored by test';
84+
}
85+
7286
return sprintf(
7387
'Test Triggered PHPUnit Warning (%s)%s',
74-
$this->test->id(),
88+
implode(', ', $details),
7589
$message,
7690
);
7791
}

src/Logging/TestDox/TestResult/TestResultCollector.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,10 @@ public function testTriggeredPhpunitWarning(PhpunitWarningTriggered $event): voi
308308
return;
309309
}
310310

311+
if ($event->ignoredByTest()) {
312+
return;
313+
}
314+
311315
$this->updateTestStatus(TestStatus::warning());
312316
}
313317

src/Runner/TestResult/Collector.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,10 @@ public function testTriggeredPhpunitError(PhpunitErrorTriggered $event): void
593593

594594
public function testTriggeredPhpunitWarning(PhpunitWarningTriggered $event): void
595595
{
596+
if ($event->ignoredByTest()) {
597+
return;
598+
}
599+
596600
if (!isset($this->testTriggeredPhpunitWarningEvents[$event->test()->id()])) {
597601
$this->testTriggeredPhpunitWarningEvents[$event->test()->id()] = [];
598602
}

src/TextUI/Output/Default/ProgressPrinter/ProgressPrinter.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use PHPUnit\Event\Test\NoticeTriggered;
2121
use PHPUnit\Event\Test\PhpDeprecationTriggered;
2222
use PHPUnit\Event\Test\PhpNoticeTriggered;
23+
use PHPUnit\Event\Test\PhpunitWarningTriggered;
2324
use PHPUnit\Event\Test\PhpWarningTriggered;
2425
use PHPUnit\Event\Test\WarningTriggered;
2526
use PHPUnit\Event\TestRunner\ChildProcessErrored;
@@ -228,8 +229,12 @@ public function testTriggeredPhpWarning(PhpWarningTriggered $event): void
228229
$this->updateTestStatus(TestStatus::warning());
229230
}
230231

231-
public function testTriggeredPhpunitWarning(): void
232+
public function testTriggeredPhpunitWarning(PhpunitWarningTriggered $event): void
232233
{
234+
if ($event->ignoredByTest()) {
235+
return;
236+
}
237+
233238
$this->updateTestStatus(TestStatus::warning());
234239
}
235240

src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitWarningSubscriber.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@
2121
{
2222
public function notify(PhpunitWarningTriggered $event): void
2323
{
24-
$this->printer()->testTriggeredPhpunitWarning();
24+
$this->printer()->testTriggeredPhpunitWarning($event);
2525
}
2626
}

tests/unit/Event/Emitter/DispatchingEmitterTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use PHPUnit\Event\Code\TestCollection;
1616
use PHPUnit\Event\Code\TestDoxBuilder;
1717
use PHPUnit\Event\Code\TestMethod;
18+
use PHPUnit\Event\Code\TestMethodBuilder;
1819
use PHPUnit\Event\Code\ThrowableBuilder;
1920
use PHPUnit\Event\Telemetry\SystemGarbageCollectorStatusProvider;
2021
use PHPUnit\Event\TestData\TestDataCollection;
@@ -2508,7 +2509,7 @@ public function notify(Test\PhpunitWarningTriggered $event): void
25082509
$telemetrySystem,
25092510
);
25102511

2511-
$test = $this->testValueObject();
2512+
$test = TestMethodBuilder::fromTestCase($this);
25122513
$message = 'message';
25132514

25142515
$emitter->testTriggeredPhpunitWarning(
@@ -2523,6 +2524,7 @@ public function notify(Test\PhpunitWarningTriggered $event): void
25232524
$this->assertInstanceOf(Test\PhpunitWarningTriggered::class, $event);
25242525
$this->assertSame($test, $event->test());
25252526
$this->assertSame($message, $event->message());
2527+
$this->assertFalse($event->ignoredByTest());
25262528
}
25272529

25282530
#[TestDox('testPrintedUnexpectedOutput() emits Test\PrintedUnexpectedOutput event')]

tests/unit/Event/Events/Test/Issue/PhpunitWarningTriggeredTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,32 @@ public function testConstructorSetsValues(): void
2323
$telemetryInfo = $this->telemetryInfo();
2424
$test = $this->testValueObject();
2525
$message = 'message';
26+
$ignoredByTest = false;
2627

2728
$event = new PhpunitWarningTriggered(
2829
$telemetryInfo,
2930
$test,
3031
$message,
32+
$ignoredByTest,
3133
);
3234

3335
$this->assertSame($telemetryInfo, $event->telemetryInfo());
3436
$this->assertSame($test, $event->test());
3537
$this->assertSame($message, $event->message());
38+
$this->assertSame($ignoredByTest, $event->ignoredByTest());
3639
$this->assertSame('Test Triggered PHPUnit Warning (FooTest::testBar)' . PHP_EOL . 'message', $event->asString());
3740
}
41+
42+
public function testCanBeIgnoredByTest(): void
43+
{
44+
$event = new PhpunitWarningTriggered(
45+
$this->telemetryInfo(),
46+
$this->testValueObject(),
47+
'message',
48+
true,
49+
);
50+
51+
$this->assertTrue($event->ignoredByTest());
52+
$this->assertSame('Test Triggered PHPUnit Warning (FooTest::testBar, ignored by test)' . PHP_EOL . 'message', $event->asString());
53+
}
3854
}

tests/unit/TextUI/Output/Default/ResultPrinterTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,7 @@ public static function provider(): array
383383
self::telemetryInfo(),
384384
self::testMethod(),
385385
'message',
386+
false,
386387
),
387388
],
388389
],

0 commit comments

Comments
 (0)