Skip to content

Commit

Permalink
Fix coverage when there are more data providers (#353)
Browse files Browse the repository at this point in the history
  • Loading branch information
mvorisek committed Jul 6, 2022
1 parent 9686c15 commit dd25d5f
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 16 deletions.
24 changes: 13 additions & 11 deletions src/Phpunit/TestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,19 @@ protected function setUp(): void
$classRefl = new \ReflectionClass(static::class);
foreach ($classRefl->getMethods() as $methodRefl) {
$methodDoc = $methodRefl->getDocComment();
if ($methodDoc !== false && preg_match('~@dataProvider[ \t]+([\w\x7f-\xff]+::)?([\w\x7f-\xff]+)~', $methodDoc, $matches)) {
$providerClassRefl = $matches[1] === '' ? $classRefl : new \ReflectionClass($matches[1]);
$providerMethodRefl = $providerClassRefl->getMethod($matches[2]);
$key = $providerClassRefl->getName() . '::' . $providerMethodRefl->getName();
if (!isset($staticClass::$processedMethods[$key])) {
$staticClass::$processedMethods[static::class] = true;
$providerInstance = $providerClassRefl->newInstanceWithoutConstructor();
$provider = $providerMethodRefl->invoke($providerInstance);
if (!is_array($provider)) {
// yield all provider data
iterator_to_array($provider);
if ($methodDoc !== false && preg_match_all('~@dataProvider[ \t]+([\w\x7f-\xff]+::)?([\w\x7f-\xff]+)~', $methodDoc, $matchesAll, \PREG_SET_ORDER)) {
foreach ($matchesAll as $matches) {
$providerClassRefl = $matches[1] === '' ? $classRefl : new \ReflectionClass($matches[1]);
$providerMethodRefl = $providerClassRefl->getMethod($matches[2]);
$key = $providerClassRefl->getName() . '::' . $providerMethodRefl->getName();
if (!isset($staticClass::$processedMethods[$key])) {
$staticClass::$processedMethods[$key] = true;
$providerInstance = $providerClassRefl->newInstanceWithoutConstructor();
$provider = $providerMethodRefl->invoke($providerInstance);
if (!is_array($provider)) {
// yield all provider data
iterator_to_array($provider);
}
}
}
}
Expand Down
18 changes: 13 additions & 5 deletions tests/Phpunit/TestCaseTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,23 @@ private function coverCoverageFromProvider(): void
}

/**
* @dataProvider provideProviderCoverage
* @dataProvider provideProviderCoverage1
* @dataProvider provideProviderCoverage2
*/
public function testProviderCoverage(string $v): void
public function testProviderCoverage1(string $v): void
{
$this->assertGreaterThan(1, self::$providerCallCounter);
$this->assertTrue(in_array($v, ['x', 'y'], true));
if ($v === 'y') {
$this->assertSame(2, self::$providerCallCounter);
}
$this->assertTrue(in_array($v, ['a', 'x', 'y'], true));
}

public function provideProviderCoverage(): \Traversable
public function provideProviderCoverage1(): \Traversable
{
yield ['a'];
}

public function provideProviderCoverage2(): \Traversable
{
yield ['x'];
$this->coverCoverageFromProvider();
Expand Down

0 comments on commit dd25d5f

Please sign in to comment.