public function beforeSpecification(SpecificationEvent $event) { $examplesToAdd = array(); $parser = new Parser(); foreach ($event->getSpecification()->getExamples() as $example) { $dataProviderMethod = $parser->getDataProvider($example->getFunctionReflection()); if (null !== $dataProviderMethod) { if (!$example->getSpecification()->getClassReflection()->hasMethod($dataProviderMethod)) { return false; } $subject = $example->getSpecification()->getClassReflection()->newInstance(); $providedData = $example->getSpecification()->getClassReflection()->getMethod($dataProviderMethod)->invoke($subject); if (is_array($providedData)) { foreach ($providedData as $i => $dataRow) { $examplesToAdd[] = new ExampleNode($i + 1 . ') ' . $example->getTitle(), $example->getFunctionReflection()); } } } } foreach ($examplesToAdd as $example) { $event->getSpecification()->addExample($example); } }
/** * @param ExampleNode $example * @return bool|mixed */ private function getDataFromProvider(ExampleNode $example) { $parser = new Parser(); $dataProviderMethod = $parser->getDataProvider($example->getFunctionReflection()); if (!isset($dataProviderMethod)) { return array(); } if (!$example->getSpecification()->getClassReflection()->hasMethod($dataProviderMethod)) { return array(); } $subject = $example->getSpecification()->getClassReflection()->newInstance(); $providedData = $example->getSpecification()->getClassReflection()->getMethod($dataProviderMethod)->invoke($subject); return is_array($providedData) ? $providedData : array(); }