function it_does_not_store_resolvers_that_can_be_resolved_from_cache(DependencyResolver $resolver, $dispatcher) { $car = new Car(); $this->set('kitt', $car); $resolver->resolve('Car:kitt', $car)->shouldBeCalled(); $resolver->getDependencies()->willReturn(['Car:kitt']); $resolver->isResolved()->willReturn(true); $dispatcher->addListener(Argument::cetera())->shouldNotBeCalled(); $this->addResolver($resolver); $this->getResolvers()->shouldBe([]); }
/** * @param DependencyResolver $resolver */ public function addResolver(DependencyResolver $resolver) { $dependencies = $resolver->getDependencies(); foreach ($dependencies as $reference) { if (array_key_exists($reference, $this->cache)) { $resolver->resolve($reference, $this->cache[$reference]); } else { // Set up an event listener to notify the resolver when the dependency is provided $this->dispatcher->addListener(sprintf(FixtureEvents::RESOLVE_DEPENDENCY_PATTERN, $reference), array($resolver, 'handle')); } } // Only store resolvers that have outstanding dependencies so we can check if everything // was resolved at a later date if (!$resolver->isResolved()) { $this->resolvers[] = $resolver; } }