/**
* Resolves a given fixture. The resolution of a fixture may result in the resolution of several fixtures.
*
* @param TemplatingFixture|FixtureInterface $fixture Fixture to resolve
* @param FixtureBag $unresolvedFixtures
* @param TemplatingFixtureBag $resolvedFixtures
* @param ResolvingContext $context
*
* @throws FixtureNotFoundException
*
* @return TemplatingFixtureBag
*/
public function resolve(TemplatingFixture $fixture, FixtureBag $unresolvedFixtures, TemplatingFixtureBag $resolvedFixtures, ResolvingContext $context) : TemplatingFixtureBag
{
$context->checkForCircularReference($fixture->getId());
if (false === $fixture->extendsFixtures()) {
return $resolvedFixtures->with($fixture);
}
/**
* @var FixtureBag $extendedFixtures
* @var TemplatingFixtureBag $resolvedFixtures
*/
list($extendedFixtures, $resolvedFixtures) = $this->resolveExtendedFixtures($fixture, $fixture->getExtendedFixturesReferences(), $unresolvedFixtures, $resolvedFixtures, $context);
$fixture = $this->getExtendedFixture($fixture, $extendedFixtures);
return $resolvedFixtures->with($fixture);
}