From a69a9b916de4c31c548acfa8ae74c0a9de84759c Mon Sep 17 00:00:00 2001 From: David Parry Date: Sat, 14 Mar 2026 14:58:53 +1100 Subject: [PATCH 1/5] feat: Enhance group filtering logic and update help documentation to support AND logic for group combinations --- src/Runner/Filter/GroupFilterIterator.php | 40 +++++++++++++++++-- src/TextUI/Help.php | 4 +- .../_files/output-cli-help-color.txt | 6 ++- tests/end-to-end/_files/output-cli-usage.txt | 4 +- 4 files changed, 45 insertions(+), 9 deletions(-) diff --git a/src/Runner/Filter/GroupFilterIterator.php b/src/Runner/Filter/GroupFilterIterator.php index da45211d752..8648803e830 100644 --- a/src/Runner/Filter/GroupFilterIterator.php +++ b/src/Runner/Filter/GroupFilterIterator.php @@ -9,9 +9,13 @@ */ namespace PHPUnit\Runner\Filter; +use function array_intersect; use function array_merge; use function array_push; +use function array_values; +use function explode; use function in_array; +use function str_contains; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestSuite; @@ -39,16 +43,46 @@ public function __construct(RecursiveIterator $iterator, array $groups, TestSuit { parent::__construct($iterator); - $groupTests = []; + $groupTests = []; + $suiteGroups = $suite->groups(); - foreach ($suite->groups() as $group => $tests) { - if (in_array($group, $groups, true)) { + $simpleGroups = []; + $compoundGroups = []; + + foreach ($groups as $group) { + if (str_contains($group, '+')) { + $compoundGroups[] = explode('+', $group); + } else { + $simpleGroups[] = $group; + } + } + + foreach ($suiteGroups as $group => $tests) { + if (in_array($group, $simpleGroups, true)) { $groupTests = array_merge($groupTests, $tests); array_push($groupTests, ...$groupTests); } } + foreach ($compoundGroups as $constituents) { + $testsInAllGroups = null; + + foreach ($constituents as $part) { + $testsInGroup = $suiteGroups[$part] ?? []; + + if ($testsInAllGroups === null) { + $testsInAllGroups = $testsInGroup; + } else { + $testsInAllGroups = array_values(array_intersect($testsInAllGroups, $testsInGroup)); + } + } + + if ($testsInAllGroups !== null && $testsInAllGroups !== []) { + $groupTests = array_merge($groupTests, $testsInAllGroups); + } + } + $this->groupTests = $groupTests; } diff --git a/src/TextUI/Help.php b/src/TextUI/Help.php index 576855c6847..405d88d9734 100644 --- a/src/TextUI/Help.php +++ b/src/TextUI/Help.php @@ -175,8 +175,8 @@ private function elements(): array ['arg' => '--testsuite ', 'desc' => 'Only run tests from the specified test suite(s)'], ['arg' => '--exclude-testsuite ', 'desc' => 'Exclude tests from the specified test suite(s)'], ['arg' => '--list-groups', 'desc' => 'List available test groups'], - ['arg' => '--group ', 'desc' => 'Only run tests from the specified group(s)'], - ['arg' => '--exclude-group ', 'desc' => 'Exclude tests from the specified group(s)'], + ['arg' => '--group ', 'desc' => 'Only run tests from the specified group(s), use + to combine groups with AND logic (e.g. --group X+Y)'], + ['arg' => '--exclude-group ', 'desc' => 'Exclude tests from the specified group(s), use + to combine groups with AND logic (e.g. --exclude-group X+Y)'], ['arg' => '--covers ', 'desc' => 'Only run tests that intend to cover '], ['arg' => '--uses ', 'desc' => 'Only run tests that intend to use '], ['arg' => '--requires-php-extension ', 'desc' => 'Only run tests that require PHP extension '], diff --git a/tests/end-to-end/_files/output-cli-help-color.txt b/tests/end-to-end/_files/output-cli-help-color.txt index 2b4c03d1893..552e0de4bf0 100644 --- a/tests/end-to-end/_files/output-cli-help-color.txt +++ b/tests/end-to-end/_files/output-cli-help-color.txt @@ -34,9 +34,11 @@ suite(s) --list-groups  List available test groups --group   Only run tests from the specified - group(s) + group(s), use + to combine groups with + AND logic (e.g. --group X+Y) --exclude-group   Exclude tests from the specified - group(s) + group(s), use + to combine groups with + AND logic (e.g. --exclude-group X+Y) --covers   Only run tests that intend to cover --uses   Only run tests that intend to use diff --git a/tests/end-to-end/_files/output-cli-usage.txt b/tests/end-to-end/_files/output-cli-usage.txt index 90409184163..412888b0e0e 100644 --- a/tests/end-to-end/_files/output-cli-usage.txt +++ b/tests/end-to-end/_files/output-cli-usage.txt @@ -26,8 +26,8 @@ Selection: --testsuite Only run tests from the specified test suite(s) --exclude-testsuite Exclude tests from the specified test suite(s) --list-groups List available test groups - --group Only run tests from the specified group(s) - --exclude-group Exclude tests from the specified group(s) + --group Only run tests from the specified group(s), use + to combine groups with AND logic (e.g. --group X+Y) + --exclude-group Exclude tests from the specified group(s), use + to combine groups with AND logic (e.g. --exclude-group X+Y) --covers Only run tests that intend to cover --uses Only run tests that intend to use --requires-php-extension Only run tests that require PHP extension From f9bcb9bf2af671617a794c84c7cb5f64b815d020 Mon Sep 17 00:00:00 2001 From: David Parry Date: Sat, 14 Mar 2026 15:03:14 +1100 Subject: [PATCH 2/5] feat: Add MultiGroupTest and update filter tests to reflect new group logic --- .../_files/groups/tests/MultiGroupTest.php | 49 +++++++++++++++++++ .../filter-class-match-configuration.phpt | 2 +- .../filter-class-nomatch-configuration.phpt | 2 +- .../filter-method-match-configuration.phpt | 2 +- .../filter-method-nomatch-configuration.phpt | 2 +- .../group/exclude-group-configuration.phpt | 36 +++++++++++--- .../cli/group/group-and-argument.phpt | 36 ++++++++++++++ .../cli/group/group-and-or-argument.phpt | 42 ++++++++++++++++ .../cli/group/group-configuration.phpt | 2 +- .../Value/TestSuite/TestSuiteBuilderTest.php | 6 +-- 10 files changed, 164 insertions(+), 15 deletions(-) create mode 100644 tests/end-to-end/_files/groups/tests/MultiGroupTest.php create mode 100644 tests/end-to-end/cli/group/group-and-argument.phpt create mode 100644 tests/end-to-end/cli/group/group-and-or-argument.phpt diff --git a/tests/end-to-end/_files/groups/tests/MultiGroupTest.php b/tests/end-to-end/_files/groups/tests/MultiGroupTest.php new file mode 100644 index 00000000000..d8cacf4089d --- /dev/null +++ b/tests/end-to-end/_files/groups/tests/MultiGroupTest.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TestFixture\Groups; + +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\TestCase; + +final class MultiGroupTest extends TestCase +{ + #[Group('X')] + public function testX(): void + { + $this->assertTrue(true); + } + + #[Group('Y')] + public function testY(): void + { + $this->assertTrue(true); + } + + #[Group('X')] + #[Group('Y')] + public function testXY(): void + { + $this->assertTrue(true); + } + + #[Group('X')] + #[Group('Y')] + #[Group('Z')] + public function testXYZ(): void + { + $this->assertTrue(true); + } + + #[Group('Z')] + public function testZ(): void + { + $this->assertTrue(true); + } +} diff --git a/tests/end-to-end/cli/filter/filter-class-match-configuration.phpt b/tests/end-to-end/cli/filter/filter-class-match-configuration.phpt index 17e98448355..a5dcd56e266 100644 --- a/tests/end-to-end/cli/filter/filter-class-match-configuration.phpt +++ b/tests/end-to-end/cli/filter/filter-class-match-configuration.phpt @@ -16,7 +16,7 @@ require_once __DIR__ . '/../../../bootstrap.php'; PHPUnit Started (PHPUnit %s using %s) Test Runner Configured Event Facade Sealed -Test Suite Loaded (3 tests) +Test Suite Loaded (8 tests) Test Runner Started Test Suite Sorted Test Suite Filtered (3 tests) diff --git a/tests/end-to-end/cli/filter/filter-class-nomatch-configuration.phpt b/tests/end-to-end/cli/filter/filter-class-nomatch-configuration.phpt index 23a7967a205..318a322b92f 100644 --- a/tests/end-to-end/cli/filter/filter-class-nomatch-configuration.phpt +++ b/tests/end-to-end/cli/filter/filter-class-nomatch-configuration.phpt @@ -16,7 +16,7 @@ require_once __DIR__ . '/../../../bootstrap.php'; PHPUnit Started (PHPUnit %s using %s) Test Runner Configured Event Facade Sealed -Test Suite Loaded (3 tests) +Test Suite Loaded (8 tests) Test Runner Started Test Suite Sorted Test Suite Filtered (0 tests) diff --git a/tests/end-to-end/cli/filter/filter-method-match-configuration.phpt b/tests/end-to-end/cli/filter/filter-method-match-configuration.phpt index f74ff0d5d68..9d5596cf397 100644 --- a/tests/end-to-end/cli/filter/filter-method-match-configuration.phpt +++ b/tests/end-to-end/cli/filter/filter-method-match-configuration.phpt @@ -16,7 +16,7 @@ require_once __DIR__ . '/../../../bootstrap.php'; PHPUnit Started (PHPUnit %s using %s) Test Runner Configured Event Facade Sealed -Test Suite Loaded (3 tests) +Test Suite Loaded (8 tests) Test Runner Started Test Suite Sorted Test Suite Filtered (1 test) diff --git a/tests/end-to-end/cli/filter/filter-method-nomatch-configuration.phpt b/tests/end-to-end/cli/filter/filter-method-nomatch-configuration.phpt index f1b8168a91f..28684f047a6 100644 --- a/tests/end-to-end/cli/filter/filter-method-nomatch-configuration.phpt +++ b/tests/end-to-end/cli/filter/filter-method-nomatch-configuration.phpt @@ -16,7 +16,7 @@ require_once __DIR__ . '/../../../bootstrap.php'; PHPUnit Started (PHPUnit %s using %s) Test Runner Configured Event Facade Sealed -Test Suite Loaded (3 tests) +Test Suite Loaded (8 tests) Test Runner Started Test Suite Sorted Test Suite Filtered (0 tests) diff --git a/tests/end-to-end/cli/group/exclude-group-configuration.phpt b/tests/end-to-end/cli/group/exclude-group-configuration.phpt index cd3cb8f911b..1e6515ac0bd 100644 --- a/tests/end-to-end/cli/group/exclude-group-configuration.phpt +++ b/tests/end-to-end/cli/group/exclude-group-configuration.phpt @@ -18,21 +18,43 @@ require_once __DIR__ . '/../../../bootstrap.php'; PHPUnit Started (PHPUnit %s using %s) Test Runner Configured Event Facade Sealed -Test Suite Loaded (3 tests) +Test Suite Loaded (8 tests) Test Runner Started Test Suite Sorted -Test Suite Filtered (1 test) -Test Runner Execution Started (1 test) -Test Suite Started (%s%etests%eend-to-end%e_files%egroups%ephpunit.xml, 1 test) -Test Suite Started (default, 1 test) +Test Suite Filtered (6 tests) +Test Runner Execution Started (6 tests) +Test Suite Started (%s%etests%eend-to-end%e_files%egroups%ephpunit.xml, 6 tests) +Test Suite Started (default, 6 tests) Test Suite Started (PHPUnit\TestFixture\Groups\FooTest, 1 test) Test Preparation Started (PHPUnit\TestFixture\Groups\FooTest::testThree) Test Prepared (PHPUnit\TestFixture\Groups\FooTest::testThree) Test Passed (PHPUnit\TestFixture\Groups\FooTest::testThree) Test Finished (PHPUnit\TestFixture\Groups\FooTest::testThree) Test Suite Finished (PHPUnit\TestFixture\Groups\FooTest, 1 test) -Test Suite Finished (default, 1 test) -Test Suite Finished (%s%etests%eend-to-end%e_files%egroups%ephpunit.xml, 1 test) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 5 tests) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 5 tests) +Test Suite Finished (default, 6 tests) +Test Suite Finished (%s%etests%eend-to-end%e_files%egroups%ephpunit.xml, 6 tests) Test Runner Execution Finished Test Runner Finished PHPUnit Finished (Shell Exit Code: 0) diff --git a/tests/end-to-end/cli/group/group-and-argument.phpt b/tests/end-to-end/cli/group/group-and-argument.phpt new file mode 100644 index 00000000000..dd1a8d1fbbd --- /dev/null +++ b/tests/end-to-end/cli/group/group-and-argument.phpt @@ -0,0 +1,36 @@ +--TEST-- +phpunit --group X+Y tests/MultiGroupTest.php (AND group filter) +--FILE-- +run($_SERVER['argv']); +--EXPECTF-- +PHPUnit Started (PHPUnit %s using %s) +Test Runner Configured +Event Facade Sealed +Test Suite Loaded (5 tests) +Test Runner Started +Test Suite Sorted +Test Suite Filtered (2 tests) +Test Runner Execution Started (2 tests) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 2 tests) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 2 tests) +Test Runner Execution Finished +Test Runner Finished +PHPUnit Finished (Shell Exit Code: 0) diff --git a/tests/end-to-end/cli/group/group-and-or-argument.phpt b/tests/end-to-end/cli/group/group-and-or-argument.phpt new file mode 100644 index 00000000000..7c07bc63963 --- /dev/null +++ b/tests/end-to-end/cli/group/group-and-or-argument.phpt @@ -0,0 +1,42 @@ +--TEST-- +phpunit --group X+Y --group Z tests/MultiGroupTest.php (AND combined with OR) +--FILE-- +run($_SERVER['argv']); +--EXPECTF-- +PHPUnit Started (PHPUnit %s using %s) +Test Runner Configured +Event Facade Sealed +Test Suite Loaded (5 tests) +Test Runner Started +Test Suite Sorted +Test Suite Filtered (3 tests) +Test Runner Execution Started (3 tests) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 3 tests) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 3 tests) +Test Runner Execution Finished +Test Runner Finished +PHPUnit Finished (Shell Exit Code: 0) diff --git a/tests/end-to-end/cli/group/group-configuration.phpt b/tests/end-to-end/cli/group/group-configuration.phpt index f2dfaf744fc..cf73de187a0 100644 --- a/tests/end-to-end/cli/group/group-configuration.phpt +++ b/tests/end-to-end/cli/group/group-configuration.phpt @@ -16,7 +16,7 @@ require_once __DIR__ . '/../../../bootstrap.php'; PHPUnit Started (PHPUnit %s using %s) Test Runner Configured Event Facade Sealed -Test Suite Loaded (3 tests) +Test Suite Loaded (8 tests) Test Runner Started Test Suite Sorted Test Suite Filtered (1 test) diff --git a/tests/unit/Event/Value/TestSuite/TestSuiteBuilderTest.php b/tests/unit/Event/Value/TestSuite/TestSuiteBuilderTest.php index 83ef3d322af..0cfa385b98e 100644 --- a/tests/unit/Event/Value/TestSuite/TestSuiteBuilderTest.php +++ b/tests/unit/Event/Value/TestSuite/TestSuiteBuilderTest.php @@ -32,9 +32,9 @@ public function test_Builds_TestSuite_value_object_for_test_suite_loaded_from_XM $this->assertTrue($testSuite->isWithName()); $this->assertStringEndsWith('phpunit.xml', $testSuite->name()); - $this->assertSame(3, $testSuite->count()); - $this->assertSame(3, $testSuite->tests()->count()); - $this->assertCount(3, $testSuite->tests()); + $this->assertSame(8, $testSuite->count()); + $this->assertSame(8, $testSuite->tests()->count()); + $this->assertCount(8, $testSuite->tests()); } public function testBuildCountWithFilter(): void From 0e36dbf8f57d35e6826bd5ca10a08ca8436f4818 Mon Sep 17 00:00:00 2001 From: David Parry Date: Sat, 14 Mar 2026 15:03:14 +1100 Subject: [PATCH 3/5] feat: Add MultiGroupTest and update filter tests to reflect new group logic --- .../_files/groups/tests/MultiGroupTest.php | 49 +++++++++++++++++++ .../filter-class-match-configuration.phpt | 2 +- .../filter-class-nomatch-configuration.phpt | 2 +- .../filter-method-match-configuration.phpt | 2 +- .../filter-method-nomatch-configuration.phpt | 2 +- .../group/exclude-group-configuration.phpt | 36 +++++++++++--- .../cli/group/group-and-argument.phpt | 36 ++++++++++++++ .../cli/group/group-and-or-argument.phpt | 42 ++++++++++++++++ .../cli/group/group-configuration.phpt | 2 +- .../Value/TestSuite/TestSuiteBuilderTest.php | 6 +-- 10 files changed, 164 insertions(+), 15 deletions(-) create mode 100644 tests/end-to-end/_files/groups/tests/MultiGroupTest.php create mode 100644 tests/end-to-end/cli/group/group-and-argument.phpt create mode 100644 tests/end-to-end/cli/group/group-and-or-argument.phpt diff --git a/tests/end-to-end/_files/groups/tests/MultiGroupTest.php b/tests/end-to-end/_files/groups/tests/MultiGroupTest.php new file mode 100644 index 00000000000..d8cacf4089d --- /dev/null +++ b/tests/end-to-end/_files/groups/tests/MultiGroupTest.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TestFixture\Groups; + +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\TestCase; + +final class MultiGroupTest extends TestCase +{ + #[Group('X')] + public function testX(): void + { + $this->assertTrue(true); + } + + #[Group('Y')] + public function testY(): void + { + $this->assertTrue(true); + } + + #[Group('X')] + #[Group('Y')] + public function testXY(): void + { + $this->assertTrue(true); + } + + #[Group('X')] + #[Group('Y')] + #[Group('Z')] + public function testXYZ(): void + { + $this->assertTrue(true); + } + + #[Group('Z')] + public function testZ(): void + { + $this->assertTrue(true); + } +} diff --git a/tests/end-to-end/cli/filter/filter-class-match-configuration.phpt b/tests/end-to-end/cli/filter/filter-class-match-configuration.phpt index 17e98448355..a5dcd56e266 100644 --- a/tests/end-to-end/cli/filter/filter-class-match-configuration.phpt +++ b/tests/end-to-end/cli/filter/filter-class-match-configuration.phpt @@ -16,7 +16,7 @@ require_once __DIR__ . '/../../../bootstrap.php'; PHPUnit Started (PHPUnit %s using %s) Test Runner Configured Event Facade Sealed -Test Suite Loaded (3 tests) +Test Suite Loaded (8 tests) Test Runner Started Test Suite Sorted Test Suite Filtered (3 tests) diff --git a/tests/end-to-end/cli/filter/filter-class-nomatch-configuration.phpt b/tests/end-to-end/cli/filter/filter-class-nomatch-configuration.phpt index 23a7967a205..318a322b92f 100644 --- a/tests/end-to-end/cli/filter/filter-class-nomatch-configuration.phpt +++ b/tests/end-to-end/cli/filter/filter-class-nomatch-configuration.phpt @@ -16,7 +16,7 @@ require_once __DIR__ . '/../../../bootstrap.php'; PHPUnit Started (PHPUnit %s using %s) Test Runner Configured Event Facade Sealed -Test Suite Loaded (3 tests) +Test Suite Loaded (8 tests) Test Runner Started Test Suite Sorted Test Suite Filtered (0 tests) diff --git a/tests/end-to-end/cli/filter/filter-method-match-configuration.phpt b/tests/end-to-end/cli/filter/filter-method-match-configuration.phpt index f74ff0d5d68..9d5596cf397 100644 --- a/tests/end-to-end/cli/filter/filter-method-match-configuration.phpt +++ b/tests/end-to-end/cli/filter/filter-method-match-configuration.phpt @@ -16,7 +16,7 @@ require_once __DIR__ . '/../../../bootstrap.php'; PHPUnit Started (PHPUnit %s using %s) Test Runner Configured Event Facade Sealed -Test Suite Loaded (3 tests) +Test Suite Loaded (8 tests) Test Runner Started Test Suite Sorted Test Suite Filtered (1 test) diff --git a/tests/end-to-end/cli/filter/filter-method-nomatch-configuration.phpt b/tests/end-to-end/cli/filter/filter-method-nomatch-configuration.phpt index f1b8168a91f..28684f047a6 100644 --- a/tests/end-to-end/cli/filter/filter-method-nomatch-configuration.phpt +++ b/tests/end-to-end/cli/filter/filter-method-nomatch-configuration.phpt @@ -16,7 +16,7 @@ require_once __DIR__ . '/../../../bootstrap.php'; PHPUnit Started (PHPUnit %s using %s) Test Runner Configured Event Facade Sealed -Test Suite Loaded (3 tests) +Test Suite Loaded (8 tests) Test Runner Started Test Suite Sorted Test Suite Filtered (0 tests) diff --git a/tests/end-to-end/cli/group/exclude-group-configuration.phpt b/tests/end-to-end/cli/group/exclude-group-configuration.phpt index cd3cb8f911b..1e6515ac0bd 100644 --- a/tests/end-to-end/cli/group/exclude-group-configuration.phpt +++ b/tests/end-to-end/cli/group/exclude-group-configuration.phpt @@ -18,21 +18,43 @@ require_once __DIR__ . '/../../../bootstrap.php'; PHPUnit Started (PHPUnit %s using %s) Test Runner Configured Event Facade Sealed -Test Suite Loaded (3 tests) +Test Suite Loaded (8 tests) Test Runner Started Test Suite Sorted -Test Suite Filtered (1 test) -Test Runner Execution Started (1 test) -Test Suite Started (%s%etests%eend-to-end%e_files%egroups%ephpunit.xml, 1 test) -Test Suite Started (default, 1 test) +Test Suite Filtered (6 tests) +Test Runner Execution Started (6 tests) +Test Suite Started (%s%etests%eend-to-end%e_files%egroups%ephpunit.xml, 6 tests) +Test Suite Started (default, 6 tests) Test Suite Started (PHPUnit\TestFixture\Groups\FooTest, 1 test) Test Preparation Started (PHPUnit\TestFixture\Groups\FooTest::testThree) Test Prepared (PHPUnit\TestFixture\Groups\FooTest::testThree) Test Passed (PHPUnit\TestFixture\Groups\FooTest::testThree) Test Finished (PHPUnit\TestFixture\Groups\FooTest::testThree) Test Suite Finished (PHPUnit\TestFixture\Groups\FooTest, 1 test) -Test Suite Finished (default, 1 test) -Test Suite Finished (%s%etests%eend-to-end%e_files%egroups%ephpunit.xml, 1 test) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 5 tests) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 5 tests) +Test Suite Finished (default, 6 tests) +Test Suite Finished (%s%etests%eend-to-end%e_files%egroups%ephpunit.xml, 6 tests) Test Runner Execution Finished Test Runner Finished PHPUnit Finished (Shell Exit Code: 0) diff --git a/tests/end-to-end/cli/group/group-and-argument.phpt b/tests/end-to-end/cli/group/group-and-argument.phpt new file mode 100644 index 00000000000..dd1a8d1fbbd --- /dev/null +++ b/tests/end-to-end/cli/group/group-and-argument.phpt @@ -0,0 +1,36 @@ +--TEST-- +phpunit --group X+Y tests/MultiGroupTest.php (AND group filter) +--FILE-- +run($_SERVER['argv']); +--EXPECTF-- +PHPUnit Started (PHPUnit %s using %s) +Test Runner Configured +Event Facade Sealed +Test Suite Loaded (5 tests) +Test Runner Started +Test Suite Sorted +Test Suite Filtered (2 tests) +Test Runner Execution Started (2 tests) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 2 tests) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 2 tests) +Test Runner Execution Finished +Test Runner Finished +PHPUnit Finished (Shell Exit Code: 0) diff --git a/tests/end-to-end/cli/group/group-and-or-argument.phpt b/tests/end-to-end/cli/group/group-and-or-argument.phpt new file mode 100644 index 00000000000..7c07bc63963 --- /dev/null +++ b/tests/end-to-end/cli/group/group-and-or-argument.phpt @@ -0,0 +1,42 @@ +--TEST-- +phpunit --group X+Y --group Z tests/MultiGroupTest.php (AND combined with OR) +--FILE-- +run($_SERVER['argv']); +--EXPECTF-- +PHPUnit Started (PHPUnit %s using %s) +Test Runner Configured +Event Facade Sealed +Test Suite Loaded (5 tests) +Test Runner Started +Test Suite Sorted +Test Suite Filtered (3 tests) +Test Runner Execution Started (3 tests) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 3 tests) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 3 tests) +Test Runner Execution Finished +Test Runner Finished +PHPUnit Finished (Shell Exit Code: 0) diff --git a/tests/end-to-end/cli/group/group-configuration.phpt b/tests/end-to-end/cli/group/group-configuration.phpt index f2dfaf744fc..cf73de187a0 100644 --- a/tests/end-to-end/cli/group/group-configuration.phpt +++ b/tests/end-to-end/cli/group/group-configuration.phpt @@ -16,7 +16,7 @@ require_once __DIR__ . '/../../../bootstrap.php'; PHPUnit Started (PHPUnit %s using %s) Test Runner Configured Event Facade Sealed -Test Suite Loaded (3 tests) +Test Suite Loaded (8 tests) Test Runner Started Test Suite Sorted Test Suite Filtered (1 test) diff --git a/tests/unit/Event/Value/TestSuite/TestSuiteBuilderTest.php b/tests/unit/Event/Value/TestSuite/TestSuiteBuilderTest.php index 83ef3d322af..0cfa385b98e 100644 --- a/tests/unit/Event/Value/TestSuite/TestSuiteBuilderTest.php +++ b/tests/unit/Event/Value/TestSuite/TestSuiteBuilderTest.php @@ -32,9 +32,9 @@ public function test_Builds_TestSuite_value_object_for_test_suite_loaded_from_XM $this->assertTrue($testSuite->isWithName()); $this->assertStringEndsWith('phpunit.xml', $testSuite->name()); - $this->assertSame(3, $testSuite->count()); - $this->assertSame(3, $testSuite->tests()->count()); - $this->assertCount(3, $testSuite->tests()); + $this->assertSame(8, $testSuite->count()); + $this->assertSame(8, $testSuite->tests()->count()); + $this->assertCount(8, $testSuite->tests()); } public function testBuildCountWithFilter(): void From bf53b10bac898f65a62b875545044d92d0d2b993 Mon Sep 17 00:00:00 2001 From: David Parry Date: Sat, 14 Mar 2026 16:44:04 +1100 Subject: [PATCH 4/5] feat: Add end-to-end tests for group exclusion with multiple arguments --- .../cli/group/exclude-group-and-argument.phpt | 40 +++++++++++++++++ .../group/exclude-group-and-or-argument.phpt | 38 ++++++++++++++++ .../exclude-group-and-three-argument.phpt | 44 +++++++++++++++++++ .../cli/group/group-and-three-argument.phpt | 32 ++++++++++++++ 4 files changed, 154 insertions(+) create mode 100644 tests/end-to-end/cli/group/exclude-group-and-argument.phpt create mode 100644 tests/end-to-end/cli/group/exclude-group-and-or-argument.phpt create mode 100644 tests/end-to-end/cli/group/exclude-group-and-three-argument.phpt create mode 100644 tests/end-to-end/cli/group/group-and-three-argument.phpt diff --git a/tests/end-to-end/cli/group/exclude-group-and-argument.phpt b/tests/end-to-end/cli/group/exclude-group-and-argument.phpt new file mode 100644 index 00000000000..db78d75d426 --- /dev/null +++ b/tests/end-to-end/cli/group/exclude-group-and-argument.phpt @@ -0,0 +1,40 @@ +--TEST-- +phpunit --exclude-group X+Y tests/MultiGroupTest.php (AND exclude group filter) +--FILE-- +run($_SERVER['argv']); +--EXPECTF-- +PHPUnit Started (PHPUnit %s using %s) +Test Runner Configured +Event Facade Sealed +Test Suite Loaded (5 tests) +Test Runner Started +Test Suite Sorted +Test Suite Filtered (3 tests) +Test Runner Execution Started (3 tests) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 3 tests) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 3 tests) +Test Runner Execution Finished +Test Runner Finished +PHPUnit Finished (Shell Exit Code: 0) diff --git a/tests/end-to-end/cli/group/exclude-group-and-or-argument.phpt b/tests/end-to-end/cli/group/exclude-group-and-or-argument.phpt new file mode 100644 index 00000000000..7bf44944c28 --- /dev/null +++ b/tests/end-to-end/cli/group/exclude-group-and-or-argument.phpt @@ -0,0 +1,38 @@ +--TEST-- +phpunit --exclude-group X+Y --exclude-group Z tests/MultiGroupTest.php (AND combined with OR exclude group filter) +--FILE-- +run($_SERVER['argv']); +--EXPECTF-- +PHPUnit Started (PHPUnit %s using %s) +Test Runner Configured +Event Facade Sealed +Test Suite Loaded (5 tests) +Test Runner Started +Test Suite Sorted +Test Suite Filtered (2 tests) +Test Runner Execution Started (2 tests) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 2 tests) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 2 tests) +Test Runner Execution Finished +Test Runner Finished +PHPUnit Finished (Shell Exit Code: 0) diff --git a/tests/end-to-end/cli/group/exclude-group-and-three-argument.phpt b/tests/end-to-end/cli/group/exclude-group-and-three-argument.phpt new file mode 100644 index 00000000000..5dc674c306a --- /dev/null +++ b/tests/end-to-end/cli/group/exclude-group-and-three-argument.phpt @@ -0,0 +1,44 @@ +--TEST-- +phpunit --exclude-group X+Y+Z tests/MultiGroupTest.php (AND exclude group filter with three groups) +--FILE-- +run($_SERVER['argv']); +--EXPECTF-- +PHPUnit Started (PHPUnit %s using %s) +Test Runner Configured +Event Facade Sealed +Test Suite Loaded (5 tests) +Test Runner Started +Test Suite Sorted +Test Suite Filtered (4 tests) +Test Runner Execution Started (4 tests) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 4 tests) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 4 tests) +Test Runner Execution Finished +Test Runner Finished +PHPUnit Finished (Shell Exit Code: 0) diff --git a/tests/end-to-end/cli/group/group-and-three-argument.phpt b/tests/end-to-end/cli/group/group-and-three-argument.phpt new file mode 100644 index 00000000000..2ad6ae1e0ce --- /dev/null +++ b/tests/end-to-end/cli/group/group-and-three-argument.phpt @@ -0,0 +1,32 @@ +--TEST-- +phpunit --group X+Y+Z tests/MultiGroupTest.php (AND group filter with three groups) +--FILE-- +run($_SERVER['argv']); +--EXPECTF-- +PHPUnit Started (PHPUnit %s using %s) +Test Runner Configured +Event Facade Sealed +Test Suite Loaded (5 tests) +Test Runner Started +Test Suite Sorted +Test Suite Filtered (1 test) +Test Runner Execution Started (1 test) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 1 test) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 1 test) +Test Runner Execution Finished +Test Runner Finished +PHPUnit Finished (Shell Exit Code: 0) From 0a58272985e99bf38c718a1e5dce2e55e9a0d042 Mon Sep 17 00:00:00 2001 From: David Parry Date: Sat, 14 Mar 2026 16:44:04 +1100 Subject: [PATCH 5/5] feat: Add end-to-end tests for group exclusion with multiple arguments --- .../cli/group/exclude-group-and-argument.phpt | 40 +++++++++++++++++ .../group/exclude-group-and-or-argument.phpt | 38 ++++++++++++++++ .../exclude-group-and-three-argument.phpt | 44 +++++++++++++++++++ .../cli/group/group-and-three-argument.phpt | 32 ++++++++++++++ 4 files changed, 154 insertions(+) create mode 100644 tests/end-to-end/cli/group/exclude-group-and-argument.phpt create mode 100644 tests/end-to-end/cli/group/exclude-group-and-or-argument.phpt create mode 100644 tests/end-to-end/cli/group/exclude-group-and-three-argument.phpt create mode 100644 tests/end-to-end/cli/group/group-and-three-argument.phpt diff --git a/tests/end-to-end/cli/group/exclude-group-and-argument.phpt b/tests/end-to-end/cli/group/exclude-group-and-argument.phpt new file mode 100644 index 00000000000..db78d75d426 --- /dev/null +++ b/tests/end-to-end/cli/group/exclude-group-and-argument.phpt @@ -0,0 +1,40 @@ +--TEST-- +phpunit --exclude-group X+Y tests/MultiGroupTest.php (AND exclude group filter) +--FILE-- +run($_SERVER['argv']); +--EXPECTF-- +PHPUnit Started (PHPUnit %s using %s) +Test Runner Configured +Event Facade Sealed +Test Suite Loaded (5 tests) +Test Runner Started +Test Suite Sorted +Test Suite Filtered (3 tests) +Test Runner Execution Started (3 tests) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 3 tests) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 3 tests) +Test Runner Execution Finished +Test Runner Finished +PHPUnit Finished (Shell Exit Code: 0) diff --git a/tests/end-to-end/cli/group/exclude-group-and-or-argument.phpt b/tests/end-to-end/cli/group/exclude-group-and-or-argument.phpt new file mode 100644 index 00000000000..7bf44944c28 --- /dev/null +++ b/tests/end-to-end/cli/group/exclude-group-and-or-argument.phpt @@ -0,0 +1,38 @@ +--TEST-- +phpunit --exclude-group X+Y --exclude-group Z tests/MultiGroupTest.php (AND combined with OR exclude group filter) +--FILE-- +run($_SERVER['argv']); +--EXPECTF-- +PHPUnit Started (PHPUnit %s using %s) +Test Runner Configured +Event Facade Sealed +Test Suite Loaded (5 tests) +Test Runner Started +Test Suite Sorted +Test Suite Filtered (2 tests) +Test Runner Execution Started (2 tests) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 2 tests) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 2 tests) +Test Runner Execution Finished +Test Runner Finished +PHPUnit Finished (Shell Exit Code: 0) diff --git a/tests/end-to-end/cli/group/exclude-group-and-three-argument.phpt b/tests/end-to-end/cli/group/exclude-group-and-three-argument.phpt new file mode 100644 index 00000000000..5dc674c306a --- /dev/null +++ b/tests/end-to-end/cli/group/exclude-group-and-three-argument.phpt @@ -0,0 +1,44 @@ +--TEST-- +phpunit --exclude-group X+Y+Z tests/MultiGroupTest.php (AND exclude group filter with three groups) +--FILE-- +run($_SERVER['argv']); +--EXPECTF-- +PHPUnit Started (PHPUnit %s using %s) +Test Runner Configured +Event Facade Sealed +Test Suite Loaded (5 tests) +Test Runner Started +Test Suite Sorted +Test Suite Filtered (4 tests) +Test Runner Execution Started (4 tests) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 4 tests) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testX) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXY) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testZ) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 4 tests) +Test Runner Execution Finished +Test Runner Finished +PHPUnit Finished (Shell Exit Code: 0) diff --git a/tests/end-to-end/cli/group/group-and-three-argument.phpt b/tests/end-to-end/cli/group/group-and-three-argument.phpt new file mode 100644 index 00000000000..2ad6ae1e0ce --- /dev/null +++ b/tests/end-to-end/cli/group/group-and-three-argument.phpt @@ -0,0 +1,32 @@ +--TEST-- +phpunit --group X+Y+Z tests/MultiGroupTest.php (AND group filter with three groups) +--FILE-- +run($_SERVER['argv']); +--EXPECTF-- +PHPUnit Started (PHPUnit %s using %s) +Test Runner Configured +Event Facade Sealed +Test Suite Loaded (5 tests) +Test Runner Started +Test Suite Sorted +Test Suite Filtered (1 test) +Test Runner Execution Started (1 test) +Test Suite Started (PHPUnit\TestFixture\Groups\MultiGroupTest, 1 test) +Test Preparation Started (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Prepared (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Passed (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Finished (PHPUnit\TestFixture\Groups\MultiGroupTest::testXYZ) +Test Suite Finished (PHPUnit\TestFixture\Groups\MultiGroupTest, 1 test) +Test Runner Execution Finished +Test Runner Finished +PHPUnit Finished (Shell Exit Code: 0)