public function testResolveWithChange()
{
$parameter = new Parameter('foo', null);
$unresolvedParameters = new ParameterBag(['name' => 'Alice']);
$resolvedParameters = new ParameterBag(['place' => 'Wonderlands']);
$context = new ResolvingContext('foo');
$decoratedResolverProphecy = $this->prophesize(ChainableParameterResolverInterface::class);
$decoratedResolverProphecy->resolve($parameter, $unresolvedParameters, $resolvedParameters, $context)->willReturn(new ParameterBag(['foo' => 'result1']));
$decoratedResolverProphecy->resolve(new Parameter('foo', 'result1'), $unresolvedParameters, $resolvedParameters, $context)->willReturn(new ParameterBag(['foo' => 'result2']));
$decoratedResolverProphecy->resolve(new Parameter('foo', 'result2'), $unresolvedParameters, $resolvedParameters, $context)->willReturn(new ParameterBag(['foo' => 'result3']));
$decoratedResolverProphecy->resolve(new Parameter('foo', 'result3'), $unresolvedParameters, $resolvedParameters, $context)->willReturn($expected = new ParameterBag(['foo' => 'result3']));
/* @var ChainableParameterResolverInterface $decoratedResolver */
$decoratedResolver = $decoratedResolverProphecy->reveal();
$resolver = new RecursiveParameterResolver($decoratedResolver);
$actual = $resolver->resolve($parameter, $unresolvedParameters, $resolvedParameters, $context);
$this->assertEquals($expected, $actual);
$decoratedResolverProphecy->resolve(Argument::cetera())->shouldHaveBeenCalledTimes(4);
}