public function testResolvesAllArgumentsValuesBeforePassingThemToTheDecoratedResolver()
{
$value = new FunctionCallValue('foo', ['scalar', new FakeValue(), 'another scalar']);
$fixture = new FakeFixture();
$set = ResolvedFixtureSetFactory::create(new ParameterBag(['foo' => 'bar']));
$scope = ['val' => 'scopie'];
$context = new GenerationContext();
$context->markIsResolvingFixture('foo');
$argumentResolverProphecy = $this->prophesize(ValueResolverInterface::class);
$argumentResolverProphecy->resolve(new FakeValue(), $fixture, $set, $scope, $context)->willReturn(new ResolvedValueWithFixtureSet($instance = new \stdClass(), $newSet = ResolvedFixtureSetFactory::create(new ParameterBag(['ping' => 'pong']))));
/** @var ValueResolverInterface $argumentResolver */
$argumentResolver = $argumentResolverProphecy->reveal();
$decoratedResolverProphecy = $this->prophesize(ValueResolverInterface::class);
$decoratedResolverProphecy->resolve(new FunctionCallValue('foo', ['scalar', $instance, 'another scalar']), $fixture, $newSet, $scope, $context)->willReturn($expected = new ResolvedValueWithFixtureSet('end', ResolvedFixtureSetFactory::create(new ParameterBag(['gnip' => 'gnop']))));
/** @var ValueResolverInterface $decoratedResolver */
$decoratedResolver = $decoratedResolverProphecy->reveal();
$resolver = new FunctionCallArgumentResolver($decoratedResolver, $argumentResolver);
$actual = $resolver->resolve($value, $fixture, $set, $scope, $context);
$this->assertEquals($expected, $actual);
}