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); }