testItShouldCreateAConfiguredContainerFromFrameworkConfig()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 8
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AntidotTest\Container;
6
7
use Antidot\Container\Container;
8
use Antidot\Container\ContainerBuilder;
9
use PHPUnit\Framework\TestCase;
10
use Psr\Container\ContainerInterface;
11
12
class ContainerBuilderTest extends TestCase
13
{
14
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfig(): void
15
    {
16
        $container = ContainerBuilder::build([
17
            'dependencies' => [],
18
            'config' => []
19
        ]);
20
21
        $this->assertInstanceOf(Container::class, $container);
22
    }
23
24
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfigWithInvokables(): void
25
    {
26
        $container = ContainerBuilder::build([
27
            'dependencies' => [
28
                'invokables' => [
29
                    \SplStack::class => \SplStack::class,
30
                ]
31
            ],
32
            'config' => []
33
        ], true);
34
35
        $this->assertInstanceOf(Container::class, $container);
36
        $this->assertInstanceOf(\SplStack::class, $container->get(\SplStack::class));
37
    }
38
39
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfigWithFactories(): void
40
    {
41
        $container = ContainerBuilder::build([
42
            'dependencies' => [
43
                'factories' => [
44
                    'some.test.class' => SomeTestFactory::class,
45
                ]
46
            ],
47
            'config' => []
48
        ], true);
49
50
        $this->assertInstanceOf(Container::class, $container);
51
        $this->assertInstanceOf(SomeTestClass::class, $container->get('some.test.class'));
52
    }
53
54
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfigWithComplexFactories(): void
55
    {
56
        $container = ContainerBuilder::build([
57
            'dependencies' => [
58
                'factories' => [
59
                    'some.test.class' => [SomeTestFactory::class, 'buzz'],
60
                ]
61
            ],
62
            'config' => []
63
        ], true);
64
65
        $this->assertInstanceOf(Container::class, $container);
66
        $this->assertInstanceOf(SomeTestClass::class, $container->get('some.test.class'));
67
    }
68
69
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfigWithAnonymousFunctionFactories(): void
70
    {
71
        $container = ContainerBuilder::build([
72
            'dependencies' => [
73
                'factories' => [
74
                    'some.test.class' => function (ContainerInterface $container) {
0 ignored issues
show
Unused Code introduced by
The parameter $container is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

74
                    'some.test.class' => function (/** @scrutinizer ignore-unused */ ContainerInterface $container) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
75
                        return new \SplStack();
76
                    },
77
                ]
78
            ],
79
            'config' => []
80
        ], true);
81
82
        $this->assertInstanceOf(Container::class, $container);
83
        $this->assertInstanceOf(\SplStack::class, $container->get('some.test.class'));
84
    }
85
86
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfigWithConditionals(): void
87
    {
88
        $container = ContainerBuilder::build([
89
            'dependencies' => [
90
                'conditionals' => [
91
                    \InvalidArgumentException::class => [
92
                        'class' => \InvalidArgumentException::class,
93
                        'arguments' => [
94
                            'message' => 'Oh Oh!!',
95
                            'code' => 0,
96
                            'previous' => null,
97
                        ]
98
                    ],
99
                ]
100
            ],
101
            'config' => []
102
        ], true);
103
104
        $this->assertInstanceOf(Container::class, $container);
105
        $this->assertInstanceOf(\InvalidArgumentException::class, $container->get(\InvalidArgumentException::class));
106
    }
107
108
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfigWithAliases(): void
109
    {
110
        $container = ContainerBuilder::build([
111
            'dependencies' => [
112
                'invokables' => [
113
                    \SplStack::class => \SplStack::class,
114
                ],
115
                'aliases' => [
116
                    'some.alias' => \SplStack::class,
117
                ]
118
            ],
119
            'config' => []
120
        ], true);
121
122
        $this->assertInstanceOf(Container::class, $container);
123
        $this->assertInstanceOf(\SplStack::class, $container->get('some.alias'));
124
    }
125
}
126