Nelmio\Alice\Generator\Resolver\Value\Chainable\UnresolvedFixtureReferenceIdResolver::withValueResolver PHP Method

withValueResolver() public method

public withValueResolver ( Nelmio\Alice\Generator\ValueResolverInterface $resolver ) : self
$resolver Nelmio\Alice\Generator\ValueResolverInterface
return self
    public function withValueResolver(ValueResolverInterface $resolver) : self
    {
        $decoratedResolver = $this->decoratedResolver instanceof ValueResolverAwareInterface ? $this->decoratedResolver->withValueResolver($resolver) : $this->decoratedResolver;
        return new self($decoratedResolver, $resolver);
    }

Usage Example

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