public function testIfMultipleParametersAreResolvedInTheProcessThenTheyWillBeIncludedInTheReturnedResult()
{
$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' => 'first result', 'another_param1' => 'val1']));
$decoratedResolverProphecy->resolve(new Parameter('foo', 'first result'), $unresolvedParameters, $resolvedParameters, $context)->willReturn(new ParameterBag(['foo' => 'second result', 'another_param2' => 'val2']));
$decoratedResolverProphecy->resolve(new Parameter('foo', 'second result'), $unresolvedParameters, $resolvedParameters, $context)->willReturn(new ParameterBag(['foo' => 'second result']));
/* @var ChainableParameterResolverInterface $decoratedResolver */
$decoratedResolver = $decoratedResolverProphecy->reveal();
$resolver = new RecursiveParameterResolver($decoratedResolver);
$actual = $resolver->resolve($parameter, $unresolvedParameters, $resolvedParameters, $context);
$this->assertEquals(new ParameterBag(['foo' => 'second result', 'another_param1' => 'val1', 'another_param2' => 'val2']), $actual);
$decoratedResolverProphecy->resolve(Argument::cetera())->shouldHaveBeenCalledTimes(3);
}