Skip to content

Commit a58e175

Browse files
Merge branch '10.5' into 11.5
2 parents ab4e40f + 378e5ee commit a58e175

File tree

7 files changed

+47
-22
lines changed

7 files changed

+47
-22
lines changed

ChangeLog-11.5.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ All notable changes of the PHPUnit 11.5 release series are documented in this fi
1313

1414
* [#6103](https://github.com/sebastianbergmann/phpunit/issues/6103): Output from test run in separate process is printed twice
1515
* [#6109](https://github.com/sebastianbergmann/phpunit/issues/6109): Skipping a test in a before-class method crashes JUnit XML logger
16+
* [#6111](https://github.com/sebastianbergmann/phpunit/issues/6111): Deprecations cause `SourceMapper` to scan all `<source/>` files
1617

1718
## [11.5.3] - 2025-01-13
1819

src/Runner/Baseline/Generator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public function testTriggeredIssue(DeprecationTriggered|NoticeTriggered|PhpDepre
6666
return;
6767
}
6868

69-
if ($this->restrict($event) && !(new SourceFilter)->includes($this->source, $event->file())) {
69+
if ($this->restrict($event) && !SourceFilter::instance()->includes($event->file())) {
7070
return;
7171
}
7272

src/Runner/ErrorHandler.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ final class ErrorHandler
5858
private bool $enabled = false;
5959
private ?int $originalErrorReportingLevel = null;
6060
private readonly Source $source;
61-
private readonly SourceFilter $sourceFilter;
6261

6362
/**
6463
* @var ?array{functions: list<non-empty-string>, methods: list<array{className: class-string, methodName: non-empty-string}>}
@@ -72,8 +71,7 @@ public static function instance(): self
7271

7372
private function __construct(Source $source)
7473
{
75-
$this->source = $source;
76-
$this->sourceFilter = new SourceFilter;
74+
$this->source = $source;
7775
}
7876

7977
/**
@@ -276,14 +274,14 @@ private function trigger(TestMethod $test, bool $filterTrigger): IssueTrigger
276274
return IssueTrigger::test();
277275
}
278276

279-
if ($this->sourceFilter->includes($this->source, $trace[0]['file'])) {
277+
if (SourceFilter::instance()->includes($trace[0]['file'])) {
280278
$triggeredInFirstPartyCode = true;
281279
}
282280
}
283281

284282
if (isset($trace[1]['file']) &&
285283
($trace[1]['file'] === $test->file() ||
286-
$this->sourceFilter->includes($this->source, $trace[1]['file']))) {
284+
SourceFilter::instance()->includes($trace[1]['file']))) {
287285
$triggerCalledFromFirstPartyCode = true;
288286
}
289287

src/Runner/IssueFilter.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public function shouldBeProcessed(DeprecationTriggered|ErrorTriggered|NoticeTrig
6161
return false;
6262
}
6363

64-
if ($this->source->restrictDeprecations() && !(new SourceFilter)->includes($this->source, $event->file())) {
64+
if ($this->source->restrictDeprecations() && !SourceFilter::instance()->includes($event->file())) {
6565
return false;
6666
}
6767
}
@@ -71,7 +71,7 @@ public function shouldBeProcessed(DeprecationTriggered|ErrorTriggered|NoticeTrig
7171
return false;
7272
}
7373

74-
if ($this->source->restrictNotices() && !(new SourceFilter)->includes($this->source, $event->file())) {
74+
if ($this->source->restrictNotices() && !SourceFilter::instance()->includes($event->file())) {
7575
return false;
7676
}
7777
}
@@ -81,7 +81,7 @@ public function shouldBeProcessed(DeprecationTriggered|ErrorTriggered|NoticeTrig
8181
return false;
8282
}
8383

84-
if ($this->source->restrictNotices() && !(new SourceFilter)->includes($this->source, $event->file())) {
84+
if ($this->source->restrictNotices() && !SourceFilter::instance()->includes($event->file())) {
8585
return false;
8686
}
8787
}
@@ -91,7 +91,7 @@ public function shouldBeProcessed(DeprecationTriggered|ErrorTriggered|NoticeTrig
9191
return false;
9292
}
9393

94-
if ($this->source->restrictWarnings() && !(new SourceFilter)->includes($this->source, $event->file())) {
94+
if ($this->source->restrictWarnings() && !SourceFilter::instance()->includes($event->file())) {
9595
return false;
9696
}
9797
}
@@ -101,7 +101,7 @@ public function shouldBeProcessed(DeprecationTriggered|ErrorTriggered|NoticeTrig
101101
return false;
102102
}
103103

104-
if ($this->source->restrictWarnings() && !(new SourceFilter)->includes($this->source, $event->file())) {
104+
if ($this->source->restrictWarnings() && !SourceFilter::instance()->includes($event->file())) {
105105
return false;
106106
}
107107
}

src/TextUI/Configuration/SourceFilter.php

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,38 @@
1414
*
1515
* @internal This class is not covered by the backward compatibility promise for PHPUnit
1616
*/
17-
final readonly class SourceFilter
17+
final class SourceFilter
1818
{
19-
public function includes(Source $source, string $path): bool
19+
private static ?self $instance = null;
20+
21+
/**
22+
* @psalm-var array<non-empty-string, true>
23+
*/
24+
private readonly array $map;
25+
26+
public static function instance(): self
27+
{
28+
if (self::$instance === null) {
29+
self::$instance = new self(
30+
(new SourceMapper)->map(
31+
Registry::get()->source(),
32+
),
33+
);
34+
}
35+
36+
return self::$instance;
37+
}
38+
39+
/**
40+
* @psalm-param array<non-empty-string, true> $map
41+
*/
42+
public function __construct(array $map)
2043
{
21-
$files = (new SourceMapper)->map($source);
44+
$this->map = $map;
45+
}
2246

23-
return isset($files[$path]);
47+
public function includes(string $path): bool
48+
{
49+
return isset($this->map[$path]);
2450
}
2551
}

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public function testTriggeredNotice(NoticeTriggered $event): void
106106
}
107107

108108
if ($this->source->restrictNotices() &&
109-
!(new SourceFilter)->includes($this->source, $event->file())) {
109+
!SourceFilter::instance()->includes($event->file())) {
110110
return;
111111
}
112112

@@ -124,7 +124,7 @@ public function testTriggeredPhpNotice(PhpNoticeTriggered $event): void
124124
}
125125

126126
if ($this->source->restrictNotices() &&
127-
!(new SourceFilter)->includes($this->source, $event->file())) {
127+
!SourceFilter::instance()->includes($event->file())) {
128128
return;
129129
}
130130

@@ -155,7 +155,7 @@ public function testTriggeredDeprecation(DeprecationTriggered $event): void
155155
}
156156

157157
if ($this->source->restrictDeprecations() &&
158-
!(new SourceFilter)->includes($this->source, $event->file())) {
158+
!SourceFilter::instance()->includes($event->file())) {
159159
return;
160160
}
161161

@@ -186,7 +186,7 @@ public function testTriggeredPhpDeprecation(PhpDeprecationTriggered $event): voi
186186
}
187187

188188
if ($this->source->restrictDeprecations() &&
189-
!(new SourceFilter)->includes($this->source, $event->file())) {
189+
!SourceFilter::instance()->includes($event->file())) {
190190
return;
191191
}
192192

@@ -214,7 +214,7 @@ public function testTriggeredWarning(WarningTriggered $event): void
214214
}
215215

216216
if ($this->source->restrictWarnings() &&
217-
!(new SourceFilter)->includes($this->source, $event->file())) {
217+
!SourceFilter::instance()->includes($event->file())) {
218218
return;
219219
}
220220

@@ -232,7 +232,7 @@ public function testTriggeredPhpWarning(PhpWarningTriggered $event): void
232232
}
233233

234234
if ($this->source->restrictWarnings() &&
235-
!(new SourceFilter)->includes($this->source, $event->file())) {
235+
!SourceFilter::instance()->includes($event->file())) {
236236
return;
237237
}
238238

tests/unit/TextUI/SourceFilterTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,6 @@ public static function provider(): array
265265
#[DataProvider('provider')]
266266
public function testDeterminesWhetherFileIsIncluded(bool $expected, string $file, Source $source): void
267267
{
268-
$this->assertSame($expected, (new SourceFilter)->includes($source, $file));
268+
$this->assertSame($expected, (new SourceFilter((new SourceMapper)->map($source)))->includes($file));
269269
}
270270
}

0 commit comments

Comments
 (0)