ContainerTest::testSetAndGetServiceSharedClosuer()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
c 0
b 0
f 0
dl 0
loc 10
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Nip\Container\Tests;
4
5
use Nip\Container\Container;
6
use Nip\Container\Tests\Fixtures\ModulesService;
7
8
/**
9
 * Class ContainerTest
10
 * @package Nip\Tests\Container
11
 */
12
class ContainerTest extends AbstractTest
13
{
14
    // tests
15
16
    public function testSetsAndGetServiceDefaultNotShared()
17
    {
18
        $container = new Container;
19
20
        $container->add('service', '\stdClass');
21
        static::assertTrue($container->has('service'));
22
23
        $service1 = $container->get('service');
24
        $service2 = $container->get('service');
25
26
        static::assertInstanceOf('\stdClass', $service1, '->assert service init');
27
        static::assertInstanceOf('\stdClass', $service2, '->assert service init');
28
        static::assertNotSame($service1, $service2, '->assert not shared by default');
29
    }
30
31
    public function testSetsAndGetServiceShared()
32
    {
33
        $container = new Container;
34
35
        $container->add('service', '\stdClass', true);
36
        static::assertTrue($container->has('service'));
37
38
        $service1 = $container->get('service');
39
        $service2 = $container->get('service');
40
41
        static::assertInstanceOf('\stdClass', $service1, '->assert service init');
42
        static::assertInstanceOf('\stdClass', $service2, '->assert service init');
43
        static::assertSame($service1, $service2, '->assert shared');
44
    }
45
46
    /**
47
     * Asserts that the container sets and gets an instance as shared.
48
     */
49
    public function testSetsAndGetInstanceAsShared()
50
    {
51
        $container = new Container;
52
        $class = new \stdClass;
53
        $container->add('service', $class);
54
        static::assertTrue($container->has('service'));
55
        static::assertSame($container->get('service'), $class);
56
    }
57
58
    /**
59
     * Asserts that the container sets and gets shared overwrite
60
     */
61
    public function testAutoInitClasses()
62
    {
63
        $container = new Container();
64
65
        $container->add(ModulesService::class)->addArgument(['organizers']);
66
        $service = $container->get(ModulesService::class);
67
        self::assertInstanceOf(ModulesService::class, $service);
68
        self::assertSame('organizers', $service['organizers']);
69
    }
70
71
    /**
72
     * Asserts that the container sets and gets shared overwrite
73
     */
74
    public function testSetAndGetServiceSharedOverwrite()
75
    {
76
        $container = new Container();
77
78
        $container->add('service', Fixtures\ModulesService::class, true);
79
        static::assertTrue($container->has('service'));
80
81
        $modules1 = $container->get('service');
82
        static::assertInstanceOf(Fixtures\ModulesService::class, $modules1, '->assert service initial class');
83
84
        $container->add('service', '\stdClass', true);
85
        $modules2 = $container->get('service');
86
        static::assertInstanceOf('\stdClass', $modules2, '->assert service overwrite');
87
88
        $container->add('service', new \stdClass());
89
        $modules3 = $container->get('service');
90
        static::assertInstanceOf('\stdClass', $modules3, '->assert service overwrite');
91
        static::assertNotSame($modules2, $modules3);
92
    }
93
94
    /**
95
     * Asserts that the container sets and gets shared overwrite
96
     */
97
    public function testSetAndGetServiceSharedClosuer()
98
    {
99
        $container = new Container();
100
        $container->share(
101
            'service',
102
            function () {
103
                return new Fixtures\ModulesService();
104
            }
105
        );
106
        static::assertInstanceOf(Fixtures\ModulesService::class, $container->get('service'));
107
    }
108
}
109