Skip to content

Commit fa196c5

Browse files
Michel ValdrighiMichel VALDRIGHI
authored andcommitted
add support for the @group annotation at the class level
1 parent 07a5ca1 commit fa196c5

7 files changed

+110
-2
lines changed

phpunit.xml.dist

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<directory>tests/Queue/</directory>
77
<directory>tests/Process/</directory>
88
<directory>tests/Environment/</directory>
9+
<exclude>tests/Queue/Fixture/</exclude>
910
</testsuite>
1011
</testsuites>
1112

src/Queue/CreateTestsQueueFromPhpUnitXML.php

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,18 @@ class_alias('\PHPUnit_Util_TestSuiteIterator', '\PHPUnit\Framework\TestSuiteIter
1919
class_alias('\PHPUnit_Util_Fileloader', '\PHPUnit\Util\Fileloader');
2020
}
2121

22+
if (class_exists('\PHPUnit_Runner_Filter_Factory')) {
23+
class_alias('\PHPUnit_Runner_Filter_Factory', '\PHPUnit\Runner\Filter\Factory');
24+
}
25+
26+
if (class_exists('\PHPUnit_Runner_Filter_ExcludeGroupFilterIterator')) {
27+
class_alias('\PHPUnit_Runner_Filter_ExcludeGroupFilterIterator', '\PHPUnit\Runner\Filter\ExcludeGroupFilterIterator');
28+
}
29+
30+
if (class_exists('\PHPUnit_Runner_Filter_IncludeGroupFilterIterator')) {
31+
class_alias('\PHPUnit_Runner_Filter_IncludeGroupFilterIterator', '\PHPUnit\Runner\Filter\IncludeGroupFilterIterator');
32+
}
33+
2234
/*
2335
* Trigger autoload for possible file loader versions.
2436
* This fixes the problem with PHP classes being case insensitive versus composer case sensitive autoloader.
@@ -34,16 +46,52 @@ public static function execute($xmlFile)
3446
$testSuites = new TestsQueue();
3547

3648
self::handleBootstrap($configuration->getPHPUnitConfiguration());
37-
self::processTestSuite($testSuites, $configuration->getTestSuiteConfiguration()->getIterator());
49+
$testSuite = static::filterTestSuite($configuration);
50+
self::processTestSuite($testSuites, $testSuite->getIterator());
3851

3952
return $testSuites;
4053
}
4154

55+
private static function filterTestSuite(
56+
\PHPUnit\Util\Configuration $configuration
57+
) {
58+
$testSuite = $configuration->getTestSuiteConfiguration();
59+
$groupConfiguration = $configuration->getGroupConfiguration();
60+
61+
if (empty($groupConfiguration['exclude']) && empty($groupConfiguration['include'])) {
62+
return $testSuite;
63+
}
64+
65+
$filterFactory = new \PHPUnit\Runner\Filter\Factory();
66+
67+
if (!empty($groupConfiguration['exclude'])) {
68+
$filterFactory->addFilter(
69+
new \ReflectionClass(\PHPUnit\Runner\Filter\ExcludeGroupFilterIterator::class),
70+
$groupConfiguration['exclude']
71+
);
72+
}
73+
74+
if (!empty($groupConfiguration['include'])) {
75+
$filterFactory->addFilter(
76+
new \ReflectionClass(\PHPUnit\Runner\Filter\IncludeGroupFilterIterator::class),
77+
$groupConfiguration['include']
78+
);
79+
}
80+
81+
$testSuite->injectFilter($filterFactory);
82+
83+
return $testSuite;
84+
}
85+
4286
private static function processTestSuite(
4387
TestsQueue $testSuites,
44-
\PHPUnit\Framework\TestSuiteIterator $testSuiteIterator
88+
\RecursiveIterator $testSuiteIterator
4589
) {
4690
foreach ($testSuiteIterator as $testSuite) {
91+
if ($testSuite->count() === 0) {
92+
continue;
93+
}
94+
4795
self::addTestFile($testSuites, $testSuite);
4896

4997
if ($testSuite instanceof \PHPUnit\Framework\TestSuite) {

tests/Queue/CreateTestsQueueFromPhpUnitXMLTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ public function shouldCreateAnArrayOfTestSuitesFromXML()
2525
'ProcessorCounterTest.php',
2626
];
2727

28+
$dummyDir = __DIR__.'/Fixture/tests/';
29+
$dummyFiles = [
30+
'DummyIncludedTest.php',
31+
];
32+
2833
$queue = new TestsQueue();
2934

3035
foreach ($infrastructureFiles as $file) {
@@ -35,6 +40,10 @@ public function shouldCreateAnArrayOfTestSuitesFromXML()
3540
$queue->add($processesDir.$file);
3641
}
3742

43+
foreach ($dummyFiles as $file) {
44+
$queue->add($dummyDir.$file);
45+
}
46+
3847
$this->assertEquals($queue, $output);
3948
}
4049
}

tests/Queue/Fixture/phpunit.xml.dist

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,18 @@
88
<testsuite name="Processes Test Suite">
99
<directory>../../Process/</directory>
1010
</testsuite>
11+
<testsuite name="Dummy Test Suite">
12+
<directory>./tests/</directory>
13+
</testsuite>
1114
</testsuites>
15+
16+
<groups>
17+
<include>
18+
<group>default</group>
19+
<group>dummy-included</group>
20+
</include>
21+
<exclude>
22+
<group>dummy-excluded</group>
23+
</exclude>
24+
</groups>
1225
</phpunit>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace Liuggio\Fastest\Queue\Fixture\tests;
4+
5+
/**
6+
* @group dummy-excluded
7+
*/
8+
class DummyExcludedTest extends \PHPUnit\Framework\TestCase
9+
{
10+
public function testDummyAssert()
11+
{
12+
$this->assertTrue(true);
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace Liuggio\Fastest\Queue\Fixture\tests;
4+
5+
/**
6+
* @group dummy-included
7+
*/
8+
class DummyIncludedTest extends \PHPUnit\Framework\TestCase
9+
{
10+
public function testDummyAssert()
11+
{
12+
$this->assertTrue(true);
13+
}
14+
}

tests/Queue/ReadFromInputAndPushIntoTheQueueTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ public function shouldPushIntoTheQueueTheXMLFile()
2020
'ProcessorCounterTest.php',
2121
];
2222

23+
$dummyDir = __DIR__ . '/Fixture/tests/';
24+
$dummyFiles = [
25+
'DummyIncludedTest.php',
26+
];
27+
2328
$assertion = new TestsQueue();
2429

2530
foreach ($files as $file) {
@@ -30,6 +35,10 @@ public function shouldPushIntoTheQueueTheXMLFile()
3035
$assertion->add($processesDir.$file);
3136
}
3237

38+
foreach ($dummyFiles as $file) {
39+
$assertion->add($dummyDir.$file);
40+
}
41+
3342
$queue = $this->createMock('\Liuggio\Fastest\Queue\QueueInterface');
3443
$queue->expects($this->once())
3544
->method('push')

0 commit comments

Comments
 (0)