public function testPassesTheValeResolverAwarenessPropertyToItsDecoratedResolver()
{
$valueResolver = new FakeValueResolver();
$injectedValueResolver = new FakeValueResolver();
$injectedValueResolver->foo = 'bar';
$resolver = new UnresolvedFixtureReferenceIdResolver(new FakeChainableValueResolver());
$newResolver = $resolver->withValueResolver($valueResolver);
$this->assertEquals(new UnresolvedFixtureReferenceIdResolver(new FakeChainableValueResolver()), $resolver);
$this->assertEquals(new UnresolvedFixtureReferenceIdResolver(new FakeChainableValueResolver(), $valueResolver), $newResolver);
$resolver = new UnresolvedFixtureReferenceIdResolver(new FakeChainableValueResolver(), $injectedValueResolver);
$newResolver = $resolver->withValueResolver($valueResolver);
$this->assertEquals(new UnresolvedFixtureReferenceIdResolver(new FakeChainableValueResolver(), $injectedValueResolver), $resolver);
$this->assertEquals(new UnresolvedFixtureReferenceIdResolver(new FakeChainableValueResolver(), $valueResolver), $newResolver);
$decoratedResolverProphecy = $this->prophesize(ChainableValueResolverInterface::class);
$decoratedResolverProphecy->willImplement(ValueResolverAwareInterface::class);
$decoratedResolverProphecy->withValueResolver($valueResolver)->willReturn($newDecoratedResolver = new FakeChainableValueResolver());
/** @var ChainableValueResolverInterface $decoratedResolver */
$decoratedResolver = $decoratedResolverProphecy->reveal();
$resolver = new UnresolvedFixtureReferenceIdResolver($decoratedResolver);
$newResolver = $resolver->withValueResolver($valueResolver);
$this->assertEquals(new UnresolvedFixtureReferenceIdResolver($decoratedResolver), $resolver);
$this->assertEquals(new UnresolvedFixtureReferenceIdResolver($newDecoratedResolver, $valueResolver), $newResolver);
$resolver = new UnresolvedFixtureReferenceIdResolver($decoratedResolver, $injectedValueResolver);
$newResolver = $resolver->withValueResolver($valueResolver);
$this->assertEquals(new UnresolvedFixtureReferenceIdResolver($decoratedResolver, $injectedValueResolver), $resolver);
$this->assertEquals(new UnresolvedFixtureReferenceIdResolver($newDecoratedResolver, $valueResolver), $newResolver);
$decoratedResolverProphecy->withValueResolver(Argument::any())->shouldHaveBeenCalledTimes(2);
}