Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. DataProvider.php

function DataProvider::dataProvidedByMethods

@psalm-param class-string $className @psalm-param non-empty-string $methodName

Throws

InvalidDataProviderException

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\Api

Code

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;
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal