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
|
|
View Code Duplication |
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
|
|
View Code Duplication |
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
|
|
|
$service = $container->get(ModulesService::class, [['organizers']]); |
66
|
|
|
self::assertInstanceOf(ModulesService::class, $service); |
67
|
|
|
self::assertSame('organizers', $service['organizers']); |
68
|
|
|
|
69
|
|
|
$service2 = $container->get(ModulesService::class); |
70
|
|
|
self::assertSame($service, $service2); |
71
|
|
|
} |
72
|
|
|
|
73
|
|
|
/** |
74
|
|
|
* Asserts that the container sets and gets shared overwrite |
75
|
|
|
*/ |
76
|
|
|
public function testSetAndGetServiceSharedOverwrite() |
77
|
|
|
{ |
78
|
|
|
$container = new Container(); |
79
|
|
|
|
80
|
|
|
$container->add('service', Fixtures\ModulesService::class, true); |
81
|
|
|
static::assertTrue($container->has('service')); |
82
|
|
|
|
83
|
|
|
$modules1 = $container->get('service'); |
84
|
|
|
static::assertInstanceOf(Fixtures\ModulesService::class, $modules1, '->assert service initial class'); |
85
|
|
|
|
86
|
|
|
$container->add('service', '\stdClass', true); |
87
|
|
|
$modules2 = $container->get('service'); |
88
|
|
|
static::assertInstanceOf('\stdClass', $modules2, '->assert service overwrite'); |
89
|
|
|
|
90
|
|
|
$container->add('service', new \stdClass()); |
91
|
|
|
$modules3 = $container->get('service'); |
92
|
|
|
static::assertInstanceOf('\stdClass', $modules3, '->assert service overwrite'); |
93
|
|
|
static::assertNotSame($modules2, $modules3); |
94
|
|
|
} |
95
|
|
|
|
96
|
|
|
/** |
97
|
|
|
* Asserts that the container sets and gets shared overwrite |
98
|
|
|
*/ |
99
|
|
|
public function testSetAndGetServiceSharedClosuer() |
100
|
|
|
{ |
101
|
|
|
$container = new Container(); |
102
|
|
|
$container->share( |
103
|
|
|
'service', |
104
|
|
|
function () { |
105
|
|
|
return new Fixtures\ModulesService(); |
106
|
|
|
} |
107
|
|
|
); |
108
|
|
|
static::assertInstanceOf(Fixtures\ModulesService::class, $container->get('service')); |
109
|
|
|
} |
110
|
|
|
} |
111
|
|
|
|
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.