Completed
Pull Request — master (#12)
by Geza
03:44
created

ScreenshotExtension::configureExtensionParams()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 17
rs 9.4285
cc 1
eloc 15
nc 1
nop 1
1
<?php
2
3
namespace Bex\Behat\ScreenshotExtension\ServiceContainer;
4
5
use Behat\Testwork\ServiceContainer\Extension;
6
use Behat\Testwork\ServiceContainer\ExtensionManager;
7
use Bex\Behat\ExtensionDriverLocator\DriverLocator;
8
use Bex\Behat\ExtensionDriverLocator\DriverNodeBuilder;
9
use Bex\Behat\ScreenshotExtension\Driver\ImageDriverInterface;
10
use Bex\Behat\ScreenshotExtension\ServiceContainer\Config;
11
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
12
use Symfony\Component\Config\FileLocator;
13
use Symfony\Component\DependencyInjection\ContainerBuilder;
14
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
15
16
/**
17
 * This class is the entry point of the screenshot extension
18
 *
19
 * It provides debugging functionality by taking a screenshot of a failed tests.
20
 *
21
 * @license http://opensource.org/licenses/MIT The MIT License
22
 */
23
final class ScreenshotExtension implements Extension
24
{
25
    /**
26
     * @var DriverNodeBuilder
27
     */
28
    private $driverNodeBuilder;
29
30
    /**
31
     * Constuctor: init extension
32
     */
33
    public function __construct()
34
    {
35
        $this->driverNodeBuilder = DriverNodeBuilder::getInstance(
36
            Config::IMAGE_DRIVER_NAMESPACE,
37
            Config::IMAGE_DRIVER_PARENT
38
        );
39
    }
40
41
    /**
42
     * {@inheritdoc}
43
     */
44
    public function getConfigKey()
45
    {
46
        return Config::EXTENSION_CONFIG_KEY;
47
    }
48
49
    /**
50
     * {@inheritdoc}
51
     */
52
    public function process(ContainerBuilder $container)
53
    {
54
55
    }
56
57
    /**
58
     * {@inheritdoc}
59
     */
60
    public function initialize(ExtensionManager $extensionManager)
61
    {
62
63
    }
64
65
    /**
66
     * {@inheritdoc}
67
     */
68
    public function configure(ArrayNodeDefinition $builder)
69
    {
70
        $this->configureExtensionParams($builder);
71
        $this->configureDriverParams($builder);
72
    }
73
74
    /**
75
     * {@inheritdoc}
76
     */
77
    public function load(ContainerBuilder $container, array $config)
78
    {
79
        $extensionConfig = new Config($config);
80
        
81
        if ($extensionConfig->isEnabled()) {
82
            $extensionConfig->loadServices($container);
83
            $container->set(Config::CONFIG_CONTAINER_ID, $extensionConfig);
84
        }
85
    }
86
87
    private function configureExtensionParams(ArrayNodeDefinition $builder)
88
    {
89
        $builder
90
            ->children()
91
                ->booleanNode(Config::CONFIG_PARAM_EXTENSTION_ENABLED)
92
                    ->defaultTrue()
93
                ->end()
94
                ->enumNode(Config::CONFIG_PARAM_SCREENSHOT_TAKING_MODE)
95
                    ->values(Config::getScreenshotTakingModes())
96
                    ->defaultValue(Config::DEFAULT_SCREENSHOT_TAKING_MODE)
97
                    ->validate()
98
                        ->ifTrue(Config::getScreenshotTakingModeValidator())
99
                        ->thenInvalid(Config::ERROR_MESSAGE_IMAGICK_NOT_FOUND)
100
                    ->end()
101
                ->end()
102
            ->end();
103
    }
104
105
    private function configureDriverParams(ArrayNodeDefinition $builder)
106
    {
107
        $this->driverNodeBuilder->buildDriverNodes(
108
            $builder,
109
            Config::CONFIG_PARAM_ACTIVE_IMAGE_DRIVERS,
110
            Config::CONFIG_PARAM_IMAGE_DRIVER_CONFIGS,
111
            [Config::DEFAULT_IMAGE_DRIVER_KEY]
112
        );
113
    }
114
}
115