function DataProvider::dataProvidedByMethods
@psalm-param class-string $className @psalm-param non-empty-string $methodName
Throws
1 call to DataProvider::dataProvidedByMethods()
- DataProvider::providedData in vendor/
phpunit/ phpunit/ src/ Metadata/ Api/ DataProvider.php - @psalm-param class-string $className @psalm-param non-empty-string $methodName
File
-
vendor/
phpunit/ phpunit/ src/ Metadata/ Api/ DataProvider.php, line 100
Class
- DataProvider
- @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
Namespace
PHPUnit\Metadata\ApiCode
private function dataProvidedByMethods(string $className, string $methodName, MetadataCollection $dataProvider) : array {
$testMethod = new Event\Code\ClassMethod($className, $methodName);
$methodsCalled = [];
$result = [];
foreach ($dataProvider as $_dataProvider) {
assert($_dataProvider instanceof DataProviderMetadata);
$dataProviderMethod = new Event\Code\ClassMethod($_dataProvider->className(), $_dataProvider->methodName());
Event\Facade::emitter()->dataProviderMethodCalled($testMethod, $dataProviderMethod);
$methodsCalled[] = $dataProviderMethod;
try {
$class = new ReflectionClass($_dataProvider->className());
$method = $class->getMethod($_dataProvider->methodName());
$object = null;
if (!$method->isPublic()) {
Event\Facade::emitter()->testTriggeredPhpunitDeprecation($this->valueObjectForTestMethodWithoutTestData($className, $methodName), sprintf('Data Provider method %s::%s() is not public', $_dataProvider->className(), $_dataProvider->methodName()));
}
if (!$method->isStatic()) {
Event\Facade::emitter()->testTriggeredPhpunitDeprecation($this->valueObjectForTestMethodWithoutTestData($className, $methodName), sprintf('Data Provider method %s::%s() is not static', $_dataProvider->className(), $_dataProvider->methodName()));
$object = $class->newInstanceWithoutConstructor();
}
if ($method->getNumberOfParameters() === 0) {
$data = $method->invoke($object);
}
else {
Event\Facade::emitter()->testTriggeredPhpunitDeprecation($this->valueObjectForTestMethodWithoutTestData($className, $methodName), sprintf('Data Provider method %s::%s() expects an argument', $_dataProvider->className(), $_dataProvider->methodName()));
$data = $method->invoke($object, $_dataProvider->methodName());
}
} catch (Throwable $e) {
Event\Facade::emitter()->dataProviderMethodFinished($testMethod, ...$methodsCalled);
throw new InvalidDataProviderException($e->getMessage(), $e->getCode(), $e);
}
foreach ($data as $key => $value) {
if (is_int($key)) {
$result[] = $value;
}
elseif (is_string($key)) {
if (array_key_exists($key, $result)) {
Event\Facade::emitter()->dataProviderMethodFinished($testMethod, ...$methodsCalled);
throw new InvalidDataProviderException(sprintf('The key "%s" has already been defined by a previous data provider', $key));
}
$result[$key] = $value;
}
else {
throw new InvalidDataProviderException(sprintf('The key must be an integer or a string, %s given', get_debug_type($key)));
}
}
}
Event\Facade::emitter()->dataProviderMethodFinished($testMethod, ...$methodsCalled);
return $result;
}