diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 0d2ac83..b59fab8 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -6,6 +6,7 @@
tests/Queue/
tests/Process/
tests/Environment/
+ tests/Queue/Fixture/
diff --git a/src/Queue/CreateTestsQueueFromPhpUnitXML.php b/src/Queue/CreateTestsQueueFromPhpUnitXML.php
index c570262..bffbb73 100644
--- a/src/Queue/CreateTestsQueueFromPhpUnitXML.php
+++ b/src/Queue/CreateTestsQueueFromPhpUnitXML.php
@@ -19,6 +19,18 @@ class_alias('\PHPUnit_Util_TestSuiteIterator', '\PHPUnit\Framework\TestSuiteIter
class_alias('\PHPUnit_Util_Fileloader', '\PHPUnit\Util\Fileloader');
}
+if (class_exists('\PHPUnit_Runner_Filter_Factory')) {
+ class_alias('\PHPUnit_Runner_Filter_Factory', '\PHPUnit\Runner\Filter\Factory');
+}
+
+if (class_exists('\PHPUnit_Runner_Filter_ExcludeGroupFilterIterator')) {
+ class_alias('\PHPUnit_Runner_Filter_ExcludeGroupFilterIterator', '\PHPUnit\Runner\Filter\ExcludeGroupFilterIterator');
+}
+
+if (class_exists('\PHPUnit_Runner_Filter_IncludeGroupFilterIterator')) {
+ class_alias('\PHPUnit_Runner_Filter_IncludeGroupFilterIterator', '\PHPUnit\Runner\Filter\IncludeGroupFilterIterator');
+}
+
/*
* Trigger autoload for possible file loader versions.
* This fixes the problem with PHP classes being case insensitive versus composer case sensitive autoloader.
@@ -34,16 +46,52 @@ public static function execute($xmlFile)
$testSuites = new TestsQueue();
self::handleBootstrap($configuration->getPHPUnitConfiguration());
- self::processTestSuite($testSuites, $configuration->getTestSuiteConfiguration()->getIterator());
+ $testSuite = static::filterTestSuite($configuration);
+ self::processTestSuite($testSuites, $testSuite->getIterator());
return $testSuites;
}
+ private static function filterTestSuite(
+ \PHPUnit\Util\Configuration $configuration
+ ) {
+ $testSuite = $configuration->getTestSuiteConfiguration();
+ $groupConfiguration = $configuration->getGroupConfiguration();
+
+ if (empty($groupConfiguration['exclude']) && empty($groupConfiguration['include'])) {
+ return $testSuite;
+ }
+
+ $filterFactory = new \PHPUnit\Runner\Filter\Factory();
+
+ if (!empty($groupConfiguration['exclude'])) {
+ $filterFactory->addFilter(
+ new \ReflectionClass(\PHPUnit\Runner\Filter\ExcludeGroupFilterIterator::class),
+ $groupConfiguration['exclude']
+ );
+ }
+
+ if (!empty($groupConfiguration['include'])) {
+ $filterFactory->addFilter(
+ new \ReflectionClass(\PHPUnit\Runner\Filter\IncludeGroupFilterIterator::class),
+ $groupConfiguration['include']
+ );
+ }
+
+ $testSuite->injectFilter($filterFactory);
+
+ return $testSuite;
+ }
+
private static function processTestSuite(
TestsQueue $testSuites,
- \PHPUnit\Framework\TestSuiteIterator $testSuiteIterator
+ \RecursiveIterator $testSuiteIterator
) {
foreach ($testSuiteIterator as $testSuite) {
+ if (0 === $testSuite->count()) {
+ continue;
+ }
+
self::addTestFile($testSuites, $testSuite);
if ($testSuite instanceof \PHPUnit\Framework\TestSuite) {
diff --git a/tests/Queue/CreateTestsQueueFromPhpUnitXMLTest.php b/tests/Queue/CreateTestsQueueFromPhpUnitXMLTest.php
index fec9f13..7f5728b 100644
--- a/tests/Queue/CreateTestsQueueFromPhpUnitXMLTest.php
+++ b/tests/Queue/CreateTestsQueueFromPhpUnitXMLTest.php
@@ -25,6 +25,11 @@ public function shouldCreateAnArrayOfTestSuitesFromXML()
'ProcessorCounterTest.php',
];
+ $dummyDir = __DIR__.'/Fixture/tests/';
+ $dummyFiles = [
+ 'DummyIncludedTest.php',
+ ];
+
$queue = new TestsQueue();
foreach ($infrastructureFiles as $file) {
@@ -35,6 +40,10 @@ public function shouldCreateAnArrayOfTestSuitesFromXML()
$queue->add($processesDir.$file);
}
+ foreach ($dummyFiles as $file) {
+ $queue->add($dummyDir.$file);
+ }
+
$this->assertEquals($queue, $output);
}
}
diff --git a/tests/Queue/Fixture/phpunit.xml.dist b/tests/Queue/Fixture/phpunit.xml.dist
index 23bb7fb..5169a90 100644
--- a/tests/Queue/Fixture/phpunit.xml.dist
+++ b/tests/Queue/Fixture/phpunit.xml.dist
@@ -8,5 +8,18 @@
../../Process/
+
+ ./tests/
+
+
+
+
+ default
+ dummy-included
+
+
+ dummy-excluded
+
+
diff --git a/tests/Queue/Fixture/tests/DummyExcludedTest.php b/tests/Queue/Fixture/tests/DummyExcludedTest.php
new file mode 100644
index 0000000..c4145f6
--- /dev/null
+++ b/tests/Queue/Fixture/tests/DummyExcludedTest.php
@@ -0,0 +1,14 @@
+assertTrue(true);
+ }
+}
diff --git a/tests/Queue/Fixture/tests/DummyIncludedTest.php b/tests/Queue/Fixture/tests/DummyIncludedTest.php
new file mode 100644
index 0000000..1976fcf
--- /dev/null
+++ b/tests/Queue/Fixture/tests/DummyIncludedTest.php
@@ -0,0 +1,14 @@
+assertTrue(true);
+ }
+}
diff --git a/tests/Queue/ReadFromInputAndPushIntoTheQueueTest.php b/tests/Queue/ReadFromInputAndPushIntoTheQueueTest.php
index baa1936..f449a80 100644
--- a/tests/Queue/ReadFromInputAndPushIntoTheQueueTest.php
+++ b/tests/Queue/ReadFromInputAndPushIntoTheQueueTest.php
@@ -20,6 +20,11 @@ public function shouldPushIntoTheQueueTheXMLFile()
'ProcessorCounterTest.php',
];
+ $dummyDir = __DIR__.'/Fixture/tests/';
+ $dummyFiles = [
+ 'DummyIncludedTest.php',
+ ];
+
$assertion = new TestsQueue();
foreach ($files as $file) {
@@ -30,6 +35,10 @@ public function shouldPushIntoTheQueueTheXMLFile()
$assertion->add($processesDir.$file);
}
+ foreach ($dummyFiles as $file) {
+ $assertion->add($dummyDir.$file);
+ }
+
$queue = $this->createMock('\Liuggio\Fastest\Queue\QueueInterface');
$queue->expects($this->once())
->method('push')