1
1
<?php
2
2
3
+ /**
4
+ * Testing Optional Parameters in classes' Dependency Injection
5
+ */
6
+ class TestOptionalParamClassForIoC
7
+ {
8
+ public function __construct ($ optional_param = 42 ) {}
9
+ }
10
+
11
+ /**
12
+ * Testing Dependency Injection with this class
13
+ */
14
+ class TestClassOneForIoC
15
+ {
16
+ public $ _variable ;
17
+ }
18
+
19
+ /**
20
+ * Testing Dependency Injection of ClassOne
21
+ */
22
+ class TestClassTwoForIoC
23
+ {
24
+ public $ class_one ;
25
+ public function __construct (TestClassOneForIoC $ class_one )
26
+ {
27
+ $ this ->class_one = $ class_one ;
28
+ }
29
+ }
30
+
31
+
3
32
class IoCTest extends PHPUnit_Framework_TestCase {
4
33
5
34
/**
@@ -71,4 +100,54 @@ public function testControllerMethodRegistersAController()
71
100
$ this ->assertTrue (IoC::registered ('controller: ioc.test ' ));
72
101
}
73
102
103
+ /**
104
+ * Test that classes with optional parameters can resolve
105
+ */
106
+ public function testOptionalParamClassResolves ()
107
+ {
108
+ $ test = IoC::resolve ('TestOptionalParamClassForIoC ' );
109
+ $ this ->assertInstanceOf ('TestOptionalParamClassForIoC ' , $ test );
110
+ }
111
+
112
+ /**
113
+ * Test that we can resolve TestClassOneForIoC using IoC
114
+ */
115
+ public function testClassOneForIoCResolves ()
116
+ {
117
+ $ test = IoC::resolve ('TestClassOneForIoC ' );
118
+ $ this ->assertInstanceOf ('TestClassOneForIoC ' , $ test );
119
+ }
120
+
121
+ /**
122
+ * Test that we can resolve TestClassTwoForIoC
123
+ */
124
+ public function testClassTwoForIoCResolves ()
125
+ {
126
+ $ test = IoC::resolve ('TestClassTwoForIoC ' );
127
+ $ this ->assertInstanceOf ('TestClassTwoForIoC ' , $ test );
128
+ }
129
+
130
+ /**
131
+ * Test that when we resolve TestClassTwoForIoC we auto resolve
132
+ * the dependency for TestClassOneForIoC
133
+ */
134
+ public function testClassTwoResolvesClassOneDependency ()
135
+ {
136
+ $ test = IoC::resolve ('TestClassTwoForIoC ' );
137
+ $ this ->assertInstanceOf ('TestClassOneForIoC ' , $ test ->TestClassOneForIoC );
138
+ }
139
+
140
+ /**
141
+ * Test that when we resolve TestClassTwoForIoC with a parameter
142
+ * that it actually uses that instead of a blank class TestClassOneForIoC
143
+ */
144
+ public function testClassTwoResolvesClassOneWithArgument ()
145
+ {
146
+ $ class_one = IoC::resolve ('TestClassOneForIoC ' );
147
+ $ class_one ->test_variable = 42 ;
148
+
149
+ $ class_two = IoC::resolve ('TestClassTwoForIoC ' , [$ class_one ]);
150
+ $ this ->assertEquals (42 , $ class_two ->class_one ->test_variable );
151
+ }
152
+
74
153
}
0 commit comments