public function testPassesTheObjectGeneratorAwarenessPropertyToItsDecoratedResolver()
{
$generator = new FakeObjectGenerator();
$resolver = new UnresolvedFixtureReferenceIdResolver(new FakeChainableValueResolver());
$newResolver = $resolver->withObjectGenerator($generator);
$this->assertEquals($newResolver, $resolver);
$this->assertNotSame($newResolver, $resolver);
$resolver = new UnresolvedFixtureReferenceIdResolver(new FakeChainableValueResolver(), new FakeValueResolver());
$newResolver = $resolver->withObjectGenerator($generator);
$this->assertEquals($newResolver, $resolver);
$this->assertNotSame($newResolver, $resolver);
$decoratedResolverProphecy = $this->prophesize(ChainableValueResolverInterface::class);
$decoratedResolverProphecy->willImplement(ObjectGeneratorAwareInterface::class);
$decoratedResolverProphecy->withObjectGenerator($generator)->willReturn($newDecoratedResolver = new FakeChainableValueResolver());
/** @var ChainableValueResolverInterface $decoratedResolver */
$decoratedResolver = $decoratedResolverProphecy->reveal();
$resolver = new UnresolvedFixtureReferenceIdResolver($decoratedResolver);
$newResolver = $resolver->withObjectGenerator($generator);
$this->assertEquals(new UnresolvedFixtureReferenceIdResolver($decoratedResolver), $resolver);
$this->assertEquals(new UnresolvedFixtureReferenceIdResolver($newDecoratedResolver), $newResolver);
$resolver = new UnresolvedFixtureReferenceIdResolver($decoratedResolver, new FakeValueResolver());
$newResolver = $resolver->withObjectGenerator($generator);
$this->assertEquals(new UnresolvedFixtureReferenceIdResolver($decoratedResolver, new FakeValueResolver()), $resolver);
$this->assertEquals(new UnresolvedFixtureReferenceIdResolver($newDecoratedResolver, new FakeValueResolver()), $newResolver);
$decoratedResolverProphecy->withObjectGenerator(Argument::any())->shouldHaveBeenCalledTimes(2);
}