checkForCircularReference() 공개 메소드

public checkForCircularReference ( string $key )
$key string
예제 #1
0
 /**
  * Resolves a given fixture. The resolution of a fixture may result in the resolution of several fixtures.
  *
  * @param TemplatingFixture|FixtureInterface $fixture Fixture to resolve
  * @param FixtureBag                         $unresolvedFixtures
  * @param TemplatingFixtureBag               $resolvedFixtures
  * @param ResolvingContext                   $context
  *
  * @throws FixtureNotFoundException
  *
  * @return TemplatingFixtureBag
  */
 public function resolve(TemplatingFixture $fixture, FixtureBag $unresolvedFixtures, TemplatingFixtureBag $resolvedFixtures, ResolvingContext $context) : TemplatingFixtureBag
 {
     $context->checkForCircularReference($fixture->getId());
     if (false === $fixture->extendsFixtures()) {
         return $resolvedFixtures->with($fixture);
     }
     /**
      * @var FixtureBag           $extendedFixtures
      * @var TemplatingFixtureBag $resolvedFixtures
      */
     list($extendedFixtures, $resolvedFixtures) = $this->resolveExtendedFixtures($fixture, $fixture->getExtendedFixturesReferences(), $unresolvedFixtures, $resolvedFixtures, $context);
     $fixture = $this->getExtendedFixture($fixture, $extendedFixtures);
     return $resolvedFixtures->with($fixture);
 }
예제 #2
0
 public function testThrowsAnExceptionWhenACircularReferenceIsDetected()
 {
     $context = new ResolvingContext('bar');
     $context->checkForCircularReference('foo');
     $context->add('foo');
     $context->checkForCircularReference('foo');
     $context->add('foo');
     try {
         $context->checkForCircularReference('foo');
         $this->fail('Expected exception to be thrown.');
     } catch (CircularReferenceException $exception) {
         $this->assertEquals('Circular reference detected for the parameter "foo" while resolving ["bar", "foo"].', $exception->getMessage());
     }
     $context = new ResolvingContext('foo');
     $context->checkForCircularReference('foo');
     $context->add('foo');
     try {
         $context->checkForCircularReference('foo');
         $this->fail('Expected exception to be thrown.');
     } catch (CircularReferenceException $exception) {
         $this->assertEquals('Circular reference detected for the parameter "foo" while resolving ["foo"].', $exception->getMessage());
     }
 }
예제 #3
0
 /**
  * @param string $id
  *
  * @throws CircularReferenceException
  */
 public function markIsResolvingFixture(string $id)
 {
     $this->resolving->add($id);
     $this->resolving->checkForCircularReference($id);
 }
예제 #4
0
 /**
  * @param ParameterResolverInterface $resolver
  * @param Parameter                  $parameter Parameter being resolved
  * @param string                     $key       Key of the parameter that need to be resolved to resolve $parameter
  * @param ParameterBag               $unresolvedParameters
  * @param ParameterBag               $resolvedParameters
  * @param ResolvingContext           $context
  *
  * @return ParameterBag
  */
 private function resolveStringKey(ParameterResolverInterface $resolver = null, Parameter $parameter, string $key, ParameterBag $unresolvedParameters, ParameterBag $resolvedParameters, ResolvingContext $context) : ParameterBag
 {
     if ($resolvedParameters->has($key)) {
         return $resolvedParameters;
     }
     if (false === $unresolvedParameters->has($key)) {
         throw ParameterNotFoundExceptionFactory::createForWhenResolvingParameter($key, $parameter);
     }
     $context->checkForCircularReference($key);
     $context->add($key);
     if (null === $resolver) {
         throw ResolverNotFoundExceptionFactory::createUnexpectedCall(__METHOD__);
     }
     return $resolver->resolve(new Parameter($key, $unresolvedParameters->get($key)), $unresolvedParameters, $resolvedParameters, $context);
 }