Skip to content

Commit e40909d

Browse files
committed
Match PHPUnit test file ownership
1 parent f64b8a3 commit e40909d

2 files changed

Lines changed: 41 additions & 3 deletions

File tree

packages/runtime-playground/src/phpunit-command-handlers.ts

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,32 @@ function phpunitClassHasTestsPhp(functionName: string): string {
367367
}`
368368
}
369369

370+
function phpunitClassesOwnedByTestFilesPhp(functionName: string): string {
371+
return `function ${functionName}(array $class_names): array {
372+
$classes = array();
373+
$owners = array();
374+
foreach ($class_names as $class_name) {
375+
try {
376+
$class = new ReflectionClass($class_name);
377+
$file = $class->getFileName();
378+
if ($file === false) {
379+
continue;
380+
}
381+
$classes[$class_name] = array($class, $file);
382+
if ($class->getShortName() === pathinfo($file, PATHINFO_FILENAME)) {
383+
$owners[$file] = $class_name;
384+
}
385+
} catch (Throwable $e) {
386+
continue;
387+
}
388+
}
389+
return array_values(array_filter(array_keys($classes), static function($class_name) use ($classes, $owners) {
390+
$file = $classes[$class_name][1];
391+
return !isset($owners[$file]) || $owners[$file] === $class_name;
392+
}));
393+
}`
394+
}
395+
370396
export function phpunitRunCode(options: PhpunitRunCodeOptions): string {
371397
return `error_reporting(E_ALL);
372398
ini_set('display_errors', '1');
@@ -1332,7 +1358,8 @@ try {
13321358
}
13331359
$after_classes = get_declared_classes();
13341360
${phpunitClassHasTestsPhp("pg_phpunit_class_has_tests")}
1335-
foreach (array_diff($after_classes, $before_classes) as $class_name) {
1361+
${phpunitClassesOwnedByTestFilesPhp("pg_phpunit_classes_owned_by_test_files")}
1362+
foreach (pg_phpunit_classes_owned_by_test_files(array_diff($after_classes, $before_classes)) as $class_name) {
13361363
try {
13371364
$ref = new ReflectionClass($class_name);
13381365
if (!$ref->isAbstract() && $ref->isSubclassOf('PHPUnit\\Framework\\TestCase') && pg_phpunit_class_has_tests($ref)) {
@@ -1656,7 +1683,8 @@ try {
16561683
}
16571684
$after_classes = get_declared_classes();
16581685
${phpunitClassHasTestsPhp("core_pg_phpunit_class_has_tests")}
1659-
foreach (array_diff($after_classes, $before_classes) as $class_name) {
1686+
${phpunitClassesOwnedByTestFilesPhp("core_pg_phpunit_classes_owned_by_test_files")}
1687+
foreach (core_pg_phpunit_classes_owned_by_test_files(array_diff($after_classes, $before_classes)) as $class_name) {
16601688
try {
16611689
$ref = new ReflectionClass($class_name);
16621690
if (!$ref->isAbstract() && $ref->isSubclassOf('PHPUnit\\Framework\\TestCase') && core_pg_phpunit_class_has_tests($ref)) {

tests/phpunit-project-autoload.test.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ echo "BOUNDARY_OK\n";
313313
function assertDiscoveredTestExecutes(source: string, stagePrefix: "pg" | "core_pg", privateConstructor: boolean): void {
314314
const tempDir = mkdtempSync(join(tmpdir(), `wp-codebox-${stagePrefix}-testsuite-`))
315315
const testFile = join(tempDir, "DiscoveredTest.php")
316+
const legacyTestFile = join(tempDir, "LegacyTest.php")
316317
const scriptPath = join(tempDir, "run-generated-harness.php")
317318
const executionMarker = join(tempDir, "executed.txt")
318319
const stageLog = join(tempDir, "stages.txt")
@@ -337,6 +338,15 @@ class DiscoveredTest extends ProjectTestCase {
337338
file_put_contents(getenv('EXECUTION_MARKER'), 'executed');
338339
}
339340
}
341+
`)
342+
writeFileSync(legacyTestFile, `<?php
343+
class LegacyTest {}
344+
class Legacy_Test extends ProjectTestCase {
345+
public function testLegacy(): void {}
346+
public function run(): void {
347+
throw new RuntimeException('filename-mismatched legacy test was scheduled');
348+
}
349+
}
340350
`)
341351

342352
writeFileSync(scriptPath, `<?php
@@ -381,7 +391,7 @@ final class TestRunner {
381391
}
382392
}
383393
namespace {
384-
$test_files = array(${phpString(testFile)});
394+
$test_files = array(${phpString(testFile)}, ${phpString(legacyTestFile)});
385395
$phpunit_argv = array('phpunit');
386396
$argv = array('phpunit');
387397
function ${stagePrefix}_stage_begin($stage) { file_put_contents(getenv('STAGE_LOG'), 'STAGE_BEGIN:' . $stage . "\\n", FILE_APPEND); }

0 commit comments

Comments
 (0)