Skip to content

Commit f7e6fad

Browse files
committed
Match basename
1 parent dc4c51e commit f7e6fad

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

src/TextUI/Configuration/SourceFilter.php

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
use Webmozart\Glob\Glob;
1313
use function array_map;
14+
use PHPUnit\Util\FileMatcherRegex;
1415

1516
/**
1617
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
@@ -23,12 +24,12 @@ final class SourceFilter
2324
private Source $source;
2425

2526
/**
26-
* @var list<string>
27+
* @var list<FileMatcherRegex>
2728
*/
2829
private array $includeDirectoryRegexes;
2930

3031
/**
31-
* @var list<string>
32+
* @var list<FileMatcherRegex>
3233
*/
3334
private array $excludeDirectoryRegexes;
3435

@@ -49,11 +50,11 @@ public function __construct(Source $source)
4950
$this->source = $source;
5051
$this->includeDirectoryRegexes = array_map(static function (FilterDirectory $directory)
5152
{
52-
return Glob::toRegEx(self::toGlob($directory));
53+
return [$directory, Glob::toRegEx(self::toGlob($directory))];
5354
}, $source->includeDirectories()->asArray());
5455
$this->excludeDirectoryRegexes = array_map(static function (FilterDirectory $directory)
5556
{
56-
return Glob::toRegEx(self::toGlob($directory));
57+
return [$directory, Glob::toRegEx(self::toGlob($directory))];
5758
}, $source->excludeDirectories()->asArray());
5859
}
5960

@@ -63,14 +64,16 @@ public function __construct(Source $source)
6364
public function includes(string $path): bool
6465
{
6566
$included = false;
67+
$dirPath = dirname($path) . '/';
68+
$filename = basename($path);
6669
foreach ($this->source->includeFiles() as $file) {
6770
if ($file->path() === $path) {
6871
$included = true;
6972
}
7073
}
7174

72-
foreach ($this->includeDirectoryRegexes as $directoryRegex) {
73-
if (preg_match($directoryRegex, $path)) {
75+
foreach ($this->includeDirectoryRegexes as [$directory, $directoryRegex]) {
76+
if (preg_match($directoryRegex, $dirPath) && self::filenameMatches($directory, $filename)) {
7477
$included = true;
7578
}
7679
}
@@ -81,8 +84,8 @@ public function includes(string $path): bool
8184
}
8285
}
8386

84-
foreach ($this->excludeDirectoryRegexes as $directoryRegex) {
85-
if (preg_match($directoryRegex, $path)) {
87+
foreach ($this->excludeDirectoryRegexes as [$directory, $directoryRegex]) {
88+
if (preg_match($directoryRegex, $dirPath) && self::filenameMatches($directory, $filename)) {
8689
$included = false;
8790
}
8891
}
@@ -92,7 +95,12 @@ public function includes(string $path): bool
9295

9396
public static function toGlob(FilterDirectory $directory): string
9497
{
95-
$glob = sprintf('%s/**/%s*%s', $directory->path(), $directory->prefix(),$directory->suffix());
98+
$glob = sprintf('%s/**/*', $directory->path());
9699
return $glob;
97100
}
101+
102+
private static function filenameMatches(FilterDirectory $directory, string $filename): bool
103+
{
104+
return str_starts_with($filename, $directory->prefix()) && str_ends_with($filename, $directory->suffix());
105+
}
98106
}

0 commit comments

Comments
 (0)