public function setDataProvider($testMethodName, $dataProvider = null)
{
if ($dataProvider === null) {
$dataProvider = $testMethodName . 'DataProvider';
if (method_exists($this->checkMethod($testMethodName), $dataProvider) === false) {
$reflectedMethod = call_user_func($this->reflectionMethodFactory, $this, $testMethodName);
$parametersProvider = new test\data\provider\aggregator();
foreach ($reflectedMethod->getParameters() as $parameter) {
$parameterProvider = new test\data\providers\mock($this->mockGenerator);
if (($parameterClass = $parameter->getClass()) === null) {
throw new exceptions\logic\invalidArgument('Could not generate a data provider for ' . $this->class . '::' . $testMethodName . '() because it has at least one argument which is not type-hinted with a class or interface name');
}
$parametersProvider->addProvider($parameterProvider->setClass($parameterClass->getName()));
}
$dataProvider = new test\data\set($parametersProvider);
}
}
if ($dataProvider instanceof \closure) {
throw new exceptions\logic\invalidArgument('Cannot use a closure as a data provider for method ' . $this->class . '::' . $testMethodName . '()');
}
if ($dataProvider instanceof test\data\provider === false && method_exists($this->checkMethod($testMethodName), $dataProvider) === false) {
throw new exceptions\logic\invalidArgument('Data provider ' . $this->class . '::' . lcfirst($dataProvider) . '() is unknown');
}
$this->dataProviders[$testMethodName] = $dataProvider;
return $this;
}