public function testInjectedResolverToResolveDynamicParameter()
{
$parameter = new Parameter('foo', '<{bar}>');
$unresolvedParameters = new ParameterBag(['bar' => 'unresolved(bar)']);
$resolvedParameters = new ParameterBag(['random' => 'param']);
$expected = new ParameterBag(['random' => 'param', 'bar' => 'Mad Hatter', 'foo' => 'Mad Hatter']);
$injectedResolverProphecy = $this->prophesize(ParameterResolverInterface::class);
$injectedResolverProphecy->resolve(new Parameter('bar', 'unresolved(bar)'), $unresolvedParameters, $resolvedParameters, (function () {
$context = new ResolvingContext('foo');
$context->add('bar');
return $context;
})())->willReturn(new ParameterBag(['random' => 'param', 'bar' => 'Mad Hatter']));
/* @var ParameterResolverInterface $injectedResolver */
$injectedResolver = $injectedResolverProphecy->reveal();
$resolver = (new StringParameterResolver())->withResolver($injectedResolver);
$result = $resolver->resolve($parameter, $unresolvedParameters, $resolvedParameters);
$this->assertEquals($expected, $result);
$injectedResolverProphecy->resolve(Argument::cetera())->shouldHaveBeenCalledTimes(1);
}