Skip to content

Commit

Permalink
Merge branch '5.7'
Browse files Browse the repository at this point in the history
  • Loading branch information
sebastianbergmann committed Oct 9, 2016
2 parents 36827a5 + c4d334a commit 4b90637
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 28 deletions.
4 changes: 4 additions & 0 deletions ChangeLog-5.7.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,9 @@ All notable changes of the PHPUnit 5.7 release series are documented in this fil

## [5.7.0] - 2016-12-02

### Added

* Merged [#2223](https://github.com/sebastianbergmann/phpunit/pull/2223): Add support for multiple data providers

[5.7.0]: https://github.com/sebastianbergmann/phpunit/compare/5.6...5.7.0

63 changes: 35 additions & 28 deletions src/Util/Test.php
Original file line number Diff line number Diff line change
Expand Up @@ -434,41 +434,48 @@ public static function getProvidedData($className, $methodName)
*/
private static function getDataFromDataProviderAnnotation($docComment, $className, $methodName)
{
if (preg_match(self::REGEX_DATA_PROVIDER, $docComment, $matches)) {
$dataProviderMethodNameNamespace = explode('\\', $matches[1]);
$leaf = explode('::', array_pop($dataProviderMethodNameNamespace));
$dataProviderMethodName = array_pop($leaf);
if (preg_match_all(self::REGEX_DATA_PROVIDER, $docComment, $matches)) {
$result = array();
foreach ($matches[1] as $match) {
$dataProviderMethodNameNamespace = explode('\\', $match);
$leaf = explode('::', array_pop($dataProviderMethodNameNamespace));
$dataProviderMethodName = array_pop($leaf);

if (!empty($dataProviderMethodNameNamespace)) {
$dataProviderMethodNameNamespace = implode('\\', $dataProviderMethodNameNamespace) . '\\';
} else {
$dataProviderMethodNameNamespace = '';
}

if (!empty($dataProviderMethodNameNamespace)) {
$dataProviderMethodNameNamespace = implode('\\', $dataProviderMethodNameNamespace) . '\\';
} else {
$dataProviderMethodNameNamespace = '';
}
if (!empty($leaf)) {
$dataProviderClassName = $dataProviderMethodNameNamespace . array_pop($leaf);
} else {
$dataProviderClassName = $className;
}

if (!empty($leaf)) {
$dataProviderClassName = $dataProviderMethodNameNamespace . array_pop($leaf);
} else {
$dataProviderClassName = $className;
}
$dataProviderClass = new ReflectionClass($dataProviderClassName);
$dataProviderMethod = $dataProviderClass->getMethod(
$dataProviderMethodName
);

$dataProviderClass = new ReflectionClass($dataProviderClassName);
$dataProviderMethod = $dataProviderClass->getMethod(
$dataProviderMethodName
);
if ($dataProviderMethod->isStatic()) {
$object = null;
} else {
$object = $dataProviderClass->newInstance();
}

if ($dataProviderMethod->isStatic()) {
$object = null;
} else {
$object = $dataProviderClass->newInstance();
}
if ($dataProviderMethod->getNumberOfParameters() == 0) {
$data = $dataProviderMethod->invoke($object);
} else {
$data = $dataProviderMethod->invoke($object, $methodName);
}

if ($dataProviderMethod->getNumberOfParameters() == 0) {
$data = $dataProviderMethod->invoke($object);
} else {
$data = $dataProviderMethod->invoke($object, $methodName);
if (is_array($data)) {
$result = array_merge($result, $data);
}
}

return $data;
return $result;
}
}

Expand Down
24 changes: 24 additions & 0 deletions tests/Util/TestTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,30 @@ public function testGetProvidedDataRegEx()
$this->assertEquals('メソッド', $matches[1]);
}

/**
* Check if all data providers are being merged.
*/
public function testMultipleDataProviders()
{
$dataSets = PHPUnit_Util_Test::getProvidedData('MultipleDataProviderTest', 'testOne');

$this->assertEquals(9, count($dataSets));

$aCount = 0;
$bCount = 0;
$cCount = 0;

for ($i = 0; $i < 9; $i++) {
$aCount += $dataSets[$i][0] != null ? 1 : 0;
$bCount += $dataSets[$i][1] != null ? 1 : 0;
$cCount += $dataSets[$i][2] != null ? 1 : 0;
}

$this->assertEquals(3, $aCount);
$this->assertEquals(3, $bCount);
$this->assertEquals(3, $cCount);
}

/**
* @covers PHPUnit_Util_Test::getDataFromTestWithAnnotation
*/
Expand Down
39 changes: 39 additions & 0 deletions tests/_files/MultipleDataProviderTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php
class MultipleDataProviderTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider providerA
* @dataProvider providerB
* @dataProvider providerC
*/
public function testOne()
{
}

public static function providerA()
{
return [
['ok', null, null],
['ok', null, null],
['ok', null, null]
];
}

public static function providerB()
{
return [
[null, 'ok', null],
[null, 'ok', null],
[null, 'ok', null]
];
}

public static function providerC()
{
return [
[null, null, 'ok'],
[null, null, 'ok'],
[null, null, 'ok']
];
}
}

0 comments on commit 4b90637

Please sign in to comment.