/** * Generates DI related stuff via parameter validator * * @param ExampleNode $example * @param Specification $context * @param MatcherManager $matchers * @param CollaboratorManager $collaborators * * @return $this */ public function prepare(ExampleNode $example, Specification $context, MatcherManager $matchers, CollaboratorManager $collaborators) { if ($example->getSpecification()->getClassReflection()->hasMethod('let')) { $this->parameterValidator->validate($example->getSpecification()->getClassReflection()->getMethod('let')); } $this->parameterValidator->validate($example->getFunctionReflection()); return $this; }
/** * @param ExampleNode $example * @param SpecificationInterface $context * @param MatcherManager $matchers * @param CollaboratorManager $collaborators */ public function prepare(ExampleNode $example, SpecificationInterface $context, MatcherManager $matchers, CollaboratorManager $collaborators) { $this->prophet = new Prophet(null, $this->unwrapper, null); $classRefl = $example->getSpecification()->getClassReflection(); if ($classRefl->hasMethod('let')) { $this->generateCollaborators($collaborators, $classRefl->getMethod('let')); } $this->generateCollaborators($collaborators, $example->getFunctionReflection()); }
/** * @param ExampleNode $example * * @return bool */ public function supports(ExampleNode $example) { $parser = new Parser(); $this->beforeMethod = $parser->getBeforeMethodName($example->getFunctionReflection()); if (!isset($this->beforeMethod)) { return false; } return $example->getSpecification()->getClassReflection()->hasMethod($this->beforeMethod); }
function prepareExampleBeforeAnnotation(ExampleNode $exampleNode, \ReflectionMethod $method, SpecificationNode $specificationNode, \ReflectionClass $specClass) { $exampleNode->getFunctionReflection()->willReturn($method); $method->getDocComment()->willReturn(<<<ANNOTATION /** * @before prepareMethod */ ANNOTATION ); $exampleNode->getSpecification()->willReturn($specificationNode); $specificationNode->getClassReflection()->willReturn($specClass); }
function it_does_pass_regular_example_into_parameter_validator_and_let_method_if_they_are_defined(ExampleNode $example, Specification $context, MatcherManager $matchers, CollaboratorManager $collaborators, SpecificationNode $specificationNode, \ReflectionClass $reflectionClass) { $example->getSpecification()->willReturn($specificationNode); $specificationNode->getClassReflection()->willReturn($reflectionClass); $reflectionClass->hasMethod('let')->willReturn(true); $exampleClosureReflection = new \ReflectionFunction(function () { }); $letClosureReflection = new \ReflectionFunction(function () { }); $reflectionClass->getMethod('let')->willReturn($letClosureReflection)->shouldBeCalled(); $example->getFunctionReflection()->willReturn($exampleClosureReflection)->shouldBeCalled(); $this->parameterValidator->validate($letClosureReflection)->shouldBeCalled(); $this->parameterValidator->validate($exampleClosureReflection)->shouldBeCalled(); $this->prepare($example, $context, $matchers, $collaborators)->shouldReturn($this); }
function it_runs_let_and_letgo_maintainer_before_and_after_each_example_if_the_example_throws_an_exception(ExampleNode $example, SpecificationNode $specification, ReflectionClass $specReflection, $context, ReflectionMethod $exampReflection, LetAndLetgoMaintainer $maintainer, SpecificationInterface $context) { $example->isPending()->willReturn(false); $example->getFunctionReflection()->willReturn($exampReflection); $example->getSpecification()->willReturn($specification); $specification->getClassReflection()->willReturn($specReflection); $specReflection->newInstanceArgs()->willReturn($context); $exampReflection->getParameters()->willReturn(array()); $exampReflection->invokeArgs($context, array())->willThrow('RuntimeException'); $maintainer->getPriority()->willReturn(1); $maintainer->supports($example)->willReturn(true); $maintainer->prepare($example, Argument::cetera())->shouldBeCalled(); $maintainer->teardown($example, Argument::cetera())->shouldBeCalled(); $this->registerMaintainer($maintainer); $this->run($example); }
private function getIterators(ExampleNode $example) { $classRefl = $example->getSpecification()->getClassReflection(); if ($classRefl->hasMethod('let')) { foreach ($classRefl->getMethod('let')->getParameters() as $parameter) { if ($this->isIterator($parameter->getClass())) { (yield $parameter->getName() => $parameter->getClass()->getName()); } } } foreach ($example->getFunctionReflection()->getParameters() as $parameter) { if ($this->isIterator($parameter->getClass())) { (yield $parameter->getName() => $parameter->getClass()->getName()); } } }
function it_outputs_exceptions_for_failed_examples(SuiteEvent $event, ExampleEvent $pendingEvent, IO $io, StatisticsCollector $stats, SpecificationNode $specification, ExampleNode $example, ReflectionFunctionAbstract $reflectionFunction) { $reflectionFunction->getStartLine()->willReturn(37); $example->getFunctionReflection()->willReturn($reflectionFunction); $example->getTitle()->willReturn('it tests something'); $pendingEvent->getException()->willReturn(new PendingException()); $pendingEvent->getSpecification()->willReturn($specification); $pendingEvent->getExample()->willReturn($example); $stats->getEventsCount()->willReturn(1); $stats->getFailedEvents()->willReturn(array()); $stats->getBrokenEvents()->willReturn(array()); $stats->getPendingEvents()->willReturn(array($pendingEvent)); $stats->getSkippedEvents()->willReturn(array()); $stats->getTotalSpecs()->willReturn(1); $stats->getCountsHash()->willReturn(array('passed' => 0, 'pending' => 1, 'skipped' => 0, 'failed' => 0, 'broken' => 0)); $this->afterSuite($event); $expected = '<lineno> 37</lineno> <pending>- it tests something</pending>'; $io->writeln($expected)->shouldHaveBeenCalled(); }
/** * @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(); }