This commit is contained in:
nuno maduro
2026-07-18 02:28:29 +01:00
parent 820fa08313
commit 1ef680c75d
7 changed files with 166 additions and 9 deletions
+14 -1
View File
@@ -1821,6 +1821,11 @@
✓ output format → it returns a 32-character hex xxh128 hash
✓ output format → it returns a stable hash for empty content
PASS Tests\Unit\Plugins\Tia\Graph
✓ markKnownTestFiles() → it makes a test file with no edges known
✓ markKnownTestFiles() → it does not clobber edges of an already-known test file
✓ markKnownTestFiles() → it ignores paths outside the project root
PASS Tests\Unit\Plugins\Tia\IsEnabledForRun
✓ does not throw when an integer --random-order-seed is passed as a separate argv element
✓ still detects --tia when an integer argument is present
@@ -1836,6 +1841,14 @@
✓ it detects an added or removed non-platform dependency
✓ it is independent of package ordering
PASS Tests\Unit\Plugins\Tia\TestPaths
✓ isTestFile() → it matches a standard test file under a configured directory
✓ isTestFile() → it does not match a non-test file that shares the directory
✓ isTestFile() → it does not match files outside the configured directories
✓ isTestFile() → it matches an explicitly listed file
✓ isTestFile() → it honours a bare .php suffix
✓ isTestFile() → it does not require a dot before the suffix
PASS Tests\Unit\Plugins\Tia\ViteDepsHelper
✓ it strips JSONC down to something JSON.parse accepts with ('plain-object')
✓ it strips JSONC down to something JSON.parse accepts with ('plain-array')
@@ -2084,4 +2097,4 @@
✓ pass with dataset with ('my-datas-set-value')
✓ within describe → pass with dataset with ('my-datas-set-value')
Tests: 1 deprecated, 4 warnings, 5 incomplete, 2 notices, 40 todos, 35 skipped, 1462 passed (3220 assertions)
Tests: 1 deprecated, 4 warnings, 5 incomplete, 2 notices, 40 todos, 35 skipped, 1471 passed (3232 assertions)
+37
View File
@@ -0,0 +1,37 @@
<?php
declare(strict_types=1);
use Pest\Plugins\Tia\Graph;
describe('markKnownTestFiles()', function (): void {
it('makes a test file with no edges known', function (): void {
$graph = new Graph(sys_get_temp_dir());
expect($graph->knowsTest('tests/Unit/ExampleTest.php'))->toBeFalse();
$graph->markKnownTestFiles(['tests/Unit/ExampleTest.php']);
expect($graph->knowsTest('tests/Unit/ExampleTest.php'))->toBeTrue();
});
it('does not clobber edges of an already-known test file', function (): void {
$graph = new Graph(sys_get_temp_dir());
$graph->link('tests/Feature/UserTest.php', 'app/Models/User.php');
$graph->markKnownTestFiles(['tests/Feature/UserTest.php']);
// The pre-existing edge survives — the test still depends on the source file.
$affected = $graph->affected(['app/Models/User.php']);
expect($affected)->toContain('tests/Feature/UserTest.php');
});
it('ignores paths outside the project root', function (): void {
$graph = new Graph(sys_get_temp_dir());
$graph->markKnownTestFiles(['/somewhere/else/tests/FooTest.php']);
expect($graph->knowsTest('/somewhere/else/tests/FooTest.php'))->toBeFalse();
});
});
+72
View File
@@ -0,0 +1,72 @@
<?php
declare(strict_types=1);
use Pest\Plugins\Tia\TestPaths;
describe('isTestFile()', function (): void {
it('matches a standard test file under a configured directory', function (): void {
$paths = new TestPaths(
directories: ['tests/Unit', 'tests/Feature'],
files: [],
suffixes: ['Test.php'],
);
expect($paths->isTestFile('tests/Unit/ExampleTest.php'))->toBeTrue()
->and($paths->isTestFile('tests/Feature/UserTest.php'))->toBeTrue();
});
it('does not match a non-test file that shares the directory', function (): void {
$paths = new TestPaths(
directories: ['tests/Unit'],
files: [],
suffixes: ['Test.php'],
);
expect($paths->isTestFile('tests/Unit/Helper.php'))->toBeFalse();
});
it('does not match files outside the configured directories', function (): void {
$paths = new TestPaths(
directories: ['tests/Unit'],
files: [],
suffixes: ['Test.php'],
);
expect($paths->isTestFile('app/Models/UserTest.php'))->toBeFalse();
});
it('matches an explicitly listed file', function (): void {
$paths = new TestPaths(
directories: [],
files: ['tests/Pest.php'],
suffixes: ['Test.php'],
);
expect($paths->isTestFile('tests/Pest.php'))->toBeTrue();
});
it('honours a bare .php suffix', function (): void {
$paths = new TestPaths(
directories: ['tests'],
files: [],
suffixes: ['.php'],
);
expect($paths->isTestFile('tests/Unit/ExampleTest.php'))->toBeTrue()
->and($paths->isTestFile('tests/Unit/Helper.php'))->toBeTrue();
});
// Regression: a suffix of "Test.php" must match "ExampleTest.php". A previous
// normalisation prepended a dot (".Test.php"), which matched nothing and left
// edited tests looking unchanged to TIA, replaying stale results.
it('does not require a dot before the suffix', function (): void {
$paths = new TestPaths(
directories: ['tests/Unit'],
files: [],
suffixes: ['.Test.php'],
);
expect($paths->isTestFile('tests/Unit/ExampleTest.php'))->toBeFalse();
});
});
+2 -2
View File
@@ -24,13 +24,13 @@ test('parallel', function () use ($run): void {
$file = file_get_contents(__FILE__);
$file = preg_replace(
'/\$expected = \'.*?\';/',
"\$expected = '1 deprecated, 4 warnings, 5 incomplete, 3 notices, 40 todos, 27 skipped, 1445 passed (3167 assertions)';",
"\$expected = '1 deprecated, 4 warnings, 5 incomplete, 3 notices, 40 todos, 27 skipped, 1454 passed (3179 assertions)';",
$file,
);
file_put_contents(__FILE__, $file);
}
$expected = '1 deprecated, 4 warnings, 5 incomplete, 3 notices, 40 todos, 27 skipped, 1445 passed (3167 assertions)';
$expected = '1 deprecated, 4 warnings, 5 incomplete, 3 notices, 40 todos, 27 skipped, 1454 passed (3179 assertions)';
expect($output)
->toContain("Tests: {$expected}")