Completed
Push — master ( 6ef701...eb43cb )
by Alessandro
13s
created

ParallelContainerDefinition::configureRunner()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 16
ccs 11
cts 11
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 11
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Paraunit\Configuration\DependencyInjection;
4
5
use Paraunit\Configuration\ParallelConfiguration;
6
use Paraunit\Configuration\PHPUnitBinFile;
7
use Paraunit\Configuration\PHPUnitConfig;
8
use Paraunit\Configuration\TempFilenameFactory;
9
use Paraunit\File\Cleaner;
10
use Paraunit\File\TempDirectory;
11
use Paraunit\Filter\Filter;
12
use Paraunit\Printer\ConsoleFormatter;
13
use Paraunit\Printer\FailuresPrinter;
14
use Paraunit\Printer\FilesRecapPrinter;
15
use Paraunit\Printer\FinalPrinter;
16
use Paraunit\Printer\ProcessPrinter;
17
use Paraunit\Printer\SharkPrinter;
18
use Paraunit\Printer\SingleResultFormatter;
19
use Paraunit\Process\CommandLine;
20
use Paraunit\Process\ProcessBuilderFactory;
21
use Paraunit\Proxy\PHPUnitUtilXMLProxy;
22
use Paraunit\Runner\PipelineCollection;
23
use Paraunit\Runner\PipelineFactory;
24
use Paraunit\Runner\Runner;
25
use Paraunit\TestResult\TestResultList;
26
use Symfony\Component\Console\Output\OutputInterface;
27
use Symfony\Component\DependencyInjection\ContainerBuilder;
28
use Symfony\Component\DependencyInjection\Definition;
29
use Symfony\Component\DependencyInjection\Reference;
30
use Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher;
31
use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass;
32
use Symfony\Component\EventDispatcher\EventDispatcher;
33
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
34
35
class ParallelContainerDefinition
36
{
37
    /** @var ParserDefinition */
38
    private $parserDefinition;
39
40
    /** @var TestResultDefinition */
41
    private $testResult;
42
43 20
    public function __construct()
44
    {
45 20
        $this->parserDefinition = new ParserDefinition();
46 20
        $this->testResult = new TestResultDefinition();
47
    }
48
49 63
    public function configure(ContainerBuilder $container): ContainerBuilder
50
    {
51 63
        $container->setParameter('paraunit.max_retry_count', 3);
52 63
        $container->setParameter('kernel.root_dir', 'src');
53 63
        $this->configureConfiguration($container);
54 63
        $this->configureEventDispatcher($container);
55 63
        $this->configureFile($container);
56 63
        $this->parserDefinition->configure($container);
57 63
        $this->configurePrinter($container);
58 63
        $this->configureProcess($container);
59 63
        $this->configureRunner($container);
60 63
        $this->configureServices($container);
61 63
        $this->testResult->configure($container);
62
63 63
        return $container;
64
    }
65
66 63 View Code Duplication
    private function configureConfiguration(ContainerBuilder $container)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
67
    {
68 63
        $container->setDefinition(PHPUnitBinFile::class, new Definition(PHPUnitBinFile::class));
69 63
        $container->setDefinition(PHPUnitConfig::class, new Definition(PHPUnitConfig::class, [
70 63
            '%paraunit.phpunit_config_filename%'
71
        ]));
72 63
        $container->setDefinition(TempFilenameFactory::class, new Definition(TempFilenameFactory::class, [
73 63
            new Reference(TempDirectory::class),
74
        ]));
75
    }
76
77 63 View Code Duplication
    private function configureEventDispatcher(ContainerBuilder $container)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
78
    {
79 63
        if (class_exists('Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument')) {
80 63
            $container->setDefinition(EventDispatcherInterface::class, new Definition(EventDispatcher::class));
81
        } else {
82
            $container->setDefinition(
83
                EventDispatcherInterface::class,
84
                new Definition(ContainerAwareEventDispatcher::class, [new Reference('service_container')])
85
            );
86
        }
87
88 63
        $container->addCompilerPass(
89 63
            new RegisterListenersPass(
90 63
                EventDispatcherInterface::class,
91 63
                null,
92 63
                ParallelConfiguration::TAG_EVENT_SUBSCRIBER
93
            )
94
        );
95
    }
96
97 63
    private function configureFile(ContainerBuilder $container)
98
    {
99 63
        $container->setDefinition(TempDirectory::class, new Definition(TempDirectory::class));
100 63
        $container->setDefinition(Cleaner::class, new Definition(Cleaner::class, [
101 63
            new Reference(TempDirectory::class),
102
        ]));
103
    }
104
105 63
    private function configurePrinter(ContainerBuilder $container)
106
    {
107 63
        $output = new Reference(OutputInterface::class);
108
109 63
        $container->setDefinition(SharkPrinter::class, new Definition(SharkPrinter::class, [
110 63
            $output,
111 63
            '%paraunit.show_logo%',
112
        ]));
113 63
        $container->setDefinition(ProcessPrinter::class, new Definition(ProcessPrinter::class, [
114 63
            new Reference(SingleResultFormatter::class),
115 63
            $output,
116
        ]));
117
118
        $finalPrinterArguments = [
119 63
            new Reference(TestResultList::class),
120 63
            $output,
121
        ];
122 63
        $container->setDefinition(FinalPrinter::class, new Definition(FinalPrinter::class, $finalPrinterArguments));
123 63
        $container->setDefinition(FailuresPrinter::class, new Definition(FailuresPrinter::class, $finalPrinterArguments));
124 63
        $container->setDefinition(FilesRecapPrinter::class, new Definition(FilesRecapPrinter::class, $finalPrinterArguments));
125
126 63
        $container->setDefinition(ConsoleFormatter::class, new Definition(ConsoleFormatter::class, [$output]));
127 63
        $container->setDefinition(SingleResultFormatter::class, new Definition(SingleResultFormatter::class, [
128 63
            new Reference(TestResultList::class),
129
        ]));
130
    }
131
132 63
    private function configureProcess(ContainerBuilder $container)
133
    {
134 63
        $container->setDefinition(CommandLine::class, new Definition(CommandLine::class, [
135 63
            new Reference(PHPUnitBinFile::class),
136
        ]));
137
138 63
        $container->setDefinition(ProcessBuilderFactory::class, new Definition(ProcessBuilderFactory::class, [
139 63
            new Reference(CommandLine::class),
140 63
            new Reference(PHPUnitConfig::class),
141 63
            new Reference(TempFilenameFactory::class),
142
        ]));
143
    }
144
145 63
    private function configureRunner(ContainerBuilder $container)
146
    {
147 63
        $container->setDefinition(PipelineFactory::class, new Definition(PipelineFactory::class, [
148 63
            new Reference(EventDispatcherInterface::class),
149
        ]));
150 63
        $container->setDefinition(PipelineCollection::class, new Definition(PipelineCollection::class, [
151 63
            new Reference(PipelineFactory::class),
152 63
            '%paraunit.max_process_count%',
153
        ]));
154 63
        $container->setDefinition(Runner::class, new Definition(Runner::class, [
155 63
            new Reference(EventDispatcherInterface::class),
156 63
            new Reference(ProcessBuilderFactory::class),
157 63
            new Reference(Filter::class),
158 63
            new Reference(PipelineCollection::class),
159
        ]));
160
    }
161
162 63
    private function configureServices(ContainerBuilder $container)
163
    {
164 63
        $container->setDefinition(PHPUnitUtilXMLProxy::class, new Definition(PHPUnitUtilXMLProxy::class));
165 63
        $container->setDefinition(\File_Iterator_Facade::class, new Definition(\File_Iterator_Facade::class));
166 63
        $container->setDefinition(Filter::class, new Definition(Filter::class, [
167 63
            new Reference(PHPUnitUtilXMLProxy::class),
168 63
            new Reference(\File_Iterator_Facade::class),
169 63
            new Reference(PHPUnitConfig::class),
170 63
            '%paraunit.testsuite%',
171 63
            '%paraunit.string_filter%',
172
        ]));
173
    }
174
}
175