Apply suggestions from code review
Co-Authored-By: pamil <kamil@kokot.me>
This commit is contained in:
committed by
Kamil Kokot
parent
c54c581e74
commit
8a972b5b48
@@ -1,6 +1,6 @@
|
|||||||
Feature: Context constructor dependency injection compatibility
|
Feature: Context constructor dependency injection compatibility
|
||||||
|
|
||||||
Scenario: Using context consturctor dependency injection
|
Scenario: Using context constructor dependency injection
|
||||||
Given a working Symfony application with SymfonyExtension configured
|
Given a working Symfony application with SymfonyExtension configured
|
||||||
And a Behat configuration containing:
|
And a Behat configuration containing:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -5,5 +5,5 @@ parameters:
|
|||||||
- '/Cannot access offset 0 on callable/'
|
- '/Cannot access offset 0 on callable/'
|
||||||
- '/Cannot access offset 1 on callable/'
|
- '/Cannot access offset 1 on callable/'
|
||||||
- '/Cannot call method [a-zA-Z0-9]+\(\) on Symfony\\Component\\Config\\Definition\\Builder\\NodeParentInterface|null\./'
|
- '/Cannot call method [a-zA-Z0-9]+\(\) on Symfony\\Component\\Config\\Definition\\Builder\\NodeParentInterface|null\./'
|
||||||
- '/Method FriendsOfBehat\\SymfonyExtension\\Context\\Environment\\InitialisedSymfonyExtensionEnvironment::bindCallee\(\) should return callable/'
|
- '/Method FriendsOfBehat\\SymfonyExtension\\Context\\Environment\\InitializedSymfonyExtensionEnvironment::bindCallee\(\) should return callable/'
|
||||||
- '/Strict comparison using === between 0\|1 and 2 will always evaluate to false\./'
|
- '/Strict comparison using === between 0\|1 and 2 will always evaluate to false\./'
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ use Behat\Testwork\Suite\Exception\SuiteConfigurationException;
|
|||||||
use Behat\Testwork\Suite\GenericSuite;
|
use Behat\Testwork\Suite\GenericSuite;
|
||||||
use Behat\Testwork\Suite\Suite;
|
use Behat\Testwork\Suite\Suite;
|
||||||
use FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle;
|
use FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle;
|
||||||
use FriendsOfBehat\SymfonyExtension\Context\Environment\InitialisedSymfonyExtensionEnvironment;
|
use FriendsOfBehat\SymfonyExtension\Context\Environment\InitializedSymfonyExtensionEnvironment;
|
||||||
use FriendsOfBehat\SymfonyExtension\Context\Environment\UninitialisedSymfonyExtensionEnvironment;
|
use FriendsOfBehat\SymfonyExtension\Context\Environment\UninitializedSymfonyExtensionEnvironment;
|
||||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
use Symfony\Component\HttpKernel\KernelInterface;
|
use Symfony\Component\HttpKernel\KernelInterface;
|
||||||
|
|
||||||
@@ -61,22 +61,19 @@ final class ContextServiceEnvironmentHandler implements EnvironmentHandler
|
|||||||
|
|
||||||
$delegatedSuite = $this->cloneSuiteWithoutContexts($suite, array_keys($symfonyContexts));
|
$delegatedSuite = $this->cloneSuiteWithoutContexts($suite, array_keys($symfonyContexts));
|
||||||
|
|
||||||
|
/** @var ContextEnvironment $delegatedEnvironment */
|
||||||
$delegatedEnvironment = $this->decoratedEnvironmentHandler->buildEnvironment($delegatedSuite);
|
$delegatedEnvironment = $this->decoratedEnvironmentHandler->buildEnvironment($delegatedSuite);
|
||||||
|
|
||||||
if (!$delegatedEnvironment instanceof ContextEnvironment) {
|
return new UninitializedSymfonyExtensionEnvironment($suite, $symfonyContexts, $delegatedEnvironment);
|
||||||
throw new \Exception();
|
|
||||||
}
|
|
||||||
|
|
||||||
return new UninitialisedSymfonyExtensionEnvironment($suite, $symfonyContexts, $delegatedEnvironment);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function supportsEnvironmentAndSubject(Environment $environment, $testSubject = null): bool
|
public function supportsEnvironmentAndSubject(Environment $environment, $testSubject = null): bool
|
||||||
{
|
{
|
||||||
return $environment instanceof UninitialisedSymfonyExtensionEnvironment;
|
return $environment instanceof UninitializedSymfonyExtensionEnvironment;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param UninitialisedSymfonyExtensionEnvironment $uninitializedEnvironment
|
* @param UninitializedSymfonyExtensionEnvironment $uninitializedEnvironment
|
||||||
*
|
*
|
||||||
* @throws EnvironmentIsolationException
|
* @throws EnvironmentIsolationException
|
||||||
*/
|
*/
|
||||||
@@ -84,7 +81,7 @@ final class ContextServiceEnvironmentHandler implements EnvironmentHandler
|
|||||||
{
|
{
|
||||||
$this->assertEnvironmentCanBeIsolated($uninitializedEnvironment, $testSubject);
|
$this->assertEnvironmentCanBeIsolated($uninitializedEnvironment, $testSubject);
|
||||||
|
|
||||||
$environment = new InitialisedSymfonyExtensionEnvironment($uninitializedEnvironment->getSuite());
|
$environment = new InitializedSymfonyExtensionEnvironment($uninitializedEnvironment->getSuite());
|
||||||
|
|
||||||
foreach ($uninitializedEnvironment->getServices() as $serviceId) {
|
foreach ($uninitializedEnvironment->getServices() as $serviceId) {
|
||||||
/** @var Context $context */
|
/** @var Context $context */
|
||||||
@@ -93,12 +90,9 @@ final class ContextServiceEnvironmentHandler implements EnvironmentHandler
|
|||||||
$environment->registerContext($context);
|
$environment->registerContext($context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @var InitializedContextEnvironment $delegatedEnvironment */
|
||||||
$delegatedEnvironment = $this->decoratedEnvironmentHandler->isolateEnvironment($uninitializedEnvironment->getDelegatedEnvironment());
|
$delegatedEnvironment = $this->decoratedEnvironmentHandler->isolateEnvironment($uninitializedEnvironment->getDelegatedEnvironment());
|
||||||
|
|
||||||
if (!$delegatedEnvironment instanceof InitializedContextEnvironment) {
|
|
||||||
throw new \Exception();
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($delegatedEnvironment->getContexts() as $context) {
|
foreach ($delegatedEnvironment->getContexts() as $context) {
|
||||||
$environment->registerContext($context);
|
$environment->registerContext($context);
|
||||||
}
|
}
|
||||||
@@ -123,7 +117,7 @@ final class ContextServiceEnvironmentHandler implements EnvironmentHandler
|
|||||||
), $suite->getName());
|
), $suite->getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
return array_map([$this, 'normaliseContext'], $contexts);
|
return array_map([$this, 'normalizeContext'], $contexts);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function cloneSuiteWithoutContexts(Suite $suite, array $contextsToRemove): Suite
|
private function cloneSuiteWithoutContexts(Suite $suite, array $contextsToRemove): Suite
|
||||||
@@ -139,13 +133,13 @@ final class ContextServiceEnvironmentHandler implements EnvironmentHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
$contexts = array_filter($contexts, function ($context) use ($contextsToRemove): bool {
|
$contexts = array_filter($contexts, function ($context) use ($contextsToRemove): bool {
|
||||||
return !in_array($this->normaliseContext($context), $contextsToRemove, true);
|
return !in_array($this->normalizeContext($context), $contextsToRemove, true);
|
||||||
});
|
});
|
||||||
|
|
||||||
return new GenericSuite($suite->getName(), array_merge($suite->getSettings(), ['contexts' => $contexts]));
|
return new GenericSuite($suite->getName(), array_merge($suite->getSettings(), ['contexts' => $contexts]));
|
||||||
}
|
}
|
||||||
|
|
||||||
private function normaliseContext($context): string
|
private function normalizeContext($context): string
|
||||||
{
|
{
|
||||||
if (is_array($context)) {
|
if (is_array($context)) {
|
||||||
return current(array_keys($context));
|
return current(array_keys($context));
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ use FriendsOfBehat\SymfonyExtension\Context\Environment\Handler\ContextServiceEn
|
|||||||
/**
|
/**
|
||||||
* @see ContextServiceEnvironmentHandler
|
* @see ContextServiceEnvironmentHandler
|
||||||
*/
|
*/
|
||||||
final class InitialisedSymfonyExtensionEnvironment implements SymfonyExtensionEnvironment
|
final class InitializedSymfonyExtensionEnvironment implements SymfonyExtensionEnvironment
|
||||||
{
|
{
|
||||||
/** @var Suite */
|
/** @var Suite */
|
||||||
private $suite;
|
private $suite;
|
||||||
@@ -21,7 +21,7 @@ use FriendsOfBehat\SymfonyExtension\Context\Environment\Handler\ContextServiceEn
|
|||||||
/**
|
/**
|
||||||
* @see ContextServiceEnvironmentHandler
|
* @see ContextServiceEnvironmentHandler
|
||||||
*/
|
*/
|
||||||
final class UninitialisedSymfonyExtensionEnvironment extends StaticEnvironment implements SymfonyExtensionEnvironment
|
final class UninitializedSymfonyExtensionEnvironment extends StaticEnvironment implements SymfonyExtensionEnvironment
|
||||||
{
|
{
|
||||||
/** @var string[] */
|
/** @var string[] */
|
||||||
private $contexts;
|
private $contexts;
|
||||||
Reference in New Issue
Block a user