Nelmio\Alice\Generator\Resolver\Parameter\Chainable\RecursiveParameterResolverTest::testThrowsAnExceptionWhenRecursionLimitIsReached PHP Method

testThrowsAnExceptionWhenRecursionLimitIsReached() public method

    public function testThrowsAnExceptionWhenRecursionLimitIsReached()
    {
        $parameter = new Parameter('foo', null);
        $unresolvedParameters = new ParameterBag();
        $resolvedParameters = new ParameterBag();
        $context = new ResolvingContext('foo');
        $decoratedResolverProphecy = $this->prophesize(ChainableParameterResolverInterface::class);
        $decoratedResolverProphecy->resolve(Argument::cetera())->will(function ($args) {
            $hash = spl_object_hash($args[0]);
            return new ParameterBag(['foo' => uniqid($hash)]);
        });
        /* @var ChainableParameterResolverInterface $decoratedResolver */
        $decoratedResolver = $decoratedResolverProphecy->reveal();
        $resolver = new RecursiveParameterResolver($decoratedResolver);
        try {
            $resolver->resolve($parameter, $unresolvedParameters, $resolvedParameters, $context);
            $this->fail('Expected exception to be thrown.');
        } catch (RecursionLimitReachedException $exception) {
            $this->assertEquals('Recursion limit (5 tries) reached while resolving the parameter "foo"', $exception->getMessage());
            $decoratedResolverProphecy->resolve(Argument::cetera())->shouldHaveBeenCalledTimes(5);
        }
        $resolver = new RecursiveParameterResolver($decoratedResolver, 10);
        try {
            $resolver->resolve($parameter, $unresolvedParameters, $resolvedParameters, $context);
            $this->fail('Expected exception to be thrown.');
        } catch (RecursionLimitReachedException $exception) {
            $this->assertEquals('Recursion limit (10 tries) reached while resolving the parameter "foo"', $exception->getMessage());
            $decoratedResolverProphecy->resolve(Argument::cetera())->shouldHaveBeenCalledTimes(15);
        }
    }