Fixes --dirty integration

This commit is contained in:
Luke Downing
2023-02-10 10:22:49 +00:00
committed by Nuno Maduro
parent 17cda168e1
commit aff11486b2

View File

@ -54,22 +54,22 @@ final class TestRepository
*/ */
public function getFilenames(): array public function getFilenames(): array
{ {
$testCases = array_filter($this->testCases, static fn (TestCaseFactory $testCase): bool => $testCase->methodsUsingOnly() !== []); $testCases = array_filter($this->testCases, static fn(TestCaseFactory $testCase): bool => $testCase->methodsUsingOnly() !== []);
if ($testCases === []) { if ($testCases === []) {
$testCases = $this->testCases; $testCases = $this->testCases;
} }
return array_values(array_map(static fn (TestCaseFactory $factory): string => $factory->filename, $testCases)); return array_values(array_map(static fn(TestCaseFactory $factory): string => $factory->filename, $testCases));
} }
/** /**
* Uses the given `$testCaseClass` on the given `$paths`. * Uses the given `$testCaseClass` on the given `$paths`.
* *
* @param array<int, string> $classOrTraits * @param array<int, string> $classOrTraits
* @param array<int, string> $groups * @param array<int, string> $groups
* @param array<int, string> $paths * @param array<int, string> $paths
* @param array<int, Closure> $hooks * @param array<int, Closure> $hooks
*/ */
public function use(array $classOrTraits, array $groups, array $paths, array $hooks): void public function use(array $classOrTraits, array $groups, array $paths, array $hooks): void
{ {
@ -125,13 +125,19 @@ final class TestRepository
*/ */
public function set(TestCaseMethodFactory $method): void public function set(TestCaseMethodFactory $method): void
{ {
foreach ($this->testCaseMethodFilters as $filter) { foreach ($this->testCaseFilters as $filter) {
if (! $filter->accept($method)) { if (!$filter->accept($method->filename)) {
return; return;
} }
} }
if (! array_key_exists($method->filename, $this->testCases)) { foreach ($this->testCaseMethodFilters as $filter) {
if (!$filter->accept($method)) {
return;
}
}
if (!array_key_exists($method->filename, $this->testCases)) {
$this->testCases[$method->filename] = new TestCaseFactory($method->filename); $this->testCases[$method->filename] = new TestCaseFactory($method->filename);
} }
@ -143,19 +149,17 @@ final class TestRepository
*/ */
public function makeIfNeeded(string $filename): void public function makeIfNeeded(string $filename): void
{ {
if (! array_key_exists($filename, $this->testCases)) { if (!array_key_exists($filename, $this->testCases)) {
return; return;
} }
$accepted = array_reduce( foreach ($this->testCaseFilters as $filter) {
$this->testCaseFilters, if (!$filter->accept($filename)) {
fn (bool $carry, TestCaseFilter $filter): bool => $carry && $filter->accept($filename), return;
true, }
);
if ($accepted) {
$this->make($this->testCases[$filename]);
} }
$this->make($this->testCases[$filename]);
} }
/** /**
@ -163,12 +167,12 @@ final class TestRepository
*/ */
private function make(TestCaseFactory $testCase): void private function make(TestCaseFactory $testCase): void
{ {
$startsWith = static fn (string $target, string $directory): bool => Str::startsWith($target, $directory.DIRECTORY_SEPARATOR); $startsWith = static fn(string $target, string $directory): bool => Str::startsWith($target, $directory . DIRECTORY_SEPARATOR);
foreach ($this->uses as $path => $uses) { foreach ($this->uses as $path => $uses) {
[$classOrTraits, $groups, $hooks] = $uses; [$classOrTraits, $groups, $hooks] = $uses;
if ((! is_dir($path) && $testCase->filename === $path) || (is_dir($path) && $startsWith($testCase->filename, $path))) { if ((!is_dir($path) && $testCase->filename === $path) || (is_dir($path) && $startsWith($testCase->filename, $path))) {
foreach ($classOrTraits as $class) { foreach ($classOrTraits as $class) {
/** @var string $class */ /** @var string $class */
if (class_exists($class)) { if (class_exists($class)) {