Initialize contexts registered as services

This commit is contained in:
Kamil Kokot
2019-03-21 17:16:23 +01:00
parent fad6548582
commit a425be697a
5 changed files with 99 additions and 3 deletions

View File

@@ -16,6 +16,7 @@ namespace FriendsOfBehat\SymfonyExtension\Context\Environment\Handler;
use Behat\Behat\Context\Context;
use Behat\Behat\Context\Environment\ContextEnvironment;
use Behat\Behat\Context\Environment\InitializedContextEnvironment;
use Behat\Behat\Context\Initializer\ContextInitializer;
use Behat\Testwork\Environment\Environment;
use Behat\Testwork\Environment\Exception\EnvironmentIsolationException;
use Behat\Testwork\Environment\Handler\EnvironmentHandler;
@@ -36,12 +37,20 @@ final class ContextServiceEnvironmentHandler implements EnvironmentHandler
/** @var EnvironmentHandler */
private $decoratedEnvironmentHandler;
/** @var ContextInitializer[] */
private $contextInitializers = [];
public function __construct(KernelInterface $symfonyKernel, EnvironmentHandler $decoratedEnvironmentHandler)
{
$this->symfonyKernel = $symfonyKernel;
$this->decoratedEnvironmentHandler = $decoratedEnvironmentHandler;
}
public function registerContextInitializer(ContextInitializer $contextInitializer): void
{
$this->contextInitializers[] = $contextInitializer;
}
public function supportsSuite(Suite $suite): bool
{
return $suite->hasSetting('contexts');
@@ -87,6 +96,8 @@ final class ContextServiceEnvironmentHandler implements EnvironmentHandler
/** @var Context $context */
$context = $this->getContainer()->get($serviceId);
$this->initializeContext($context);
$environment->registerContext($context);
}
@@ -100,6 +111,13 @@ final class ContextServiceEnvironmentHandler implements EnvironmentHandler
return $environment;
}
private function initializeContext(Context $context): void
{
foreach ($this->contextInitializers as $contextInitializer) {
$contextInitializer->initializeContext($context);
}
}
/**
* @return string[]
*