13
13
14
14
use PHPUnit \Framework \TestCase ;
15
15
use Symfony \Bundle \FrameworkBundle \DependencyInjection \Compiler \FormPass ;
16
+ use Symfony \Component \DependencyInjection \Argument \IteratorArgument ;
17
+ use Symfony \Component \DependencyInjection \Argument \ServiceLocatorArgument ;
16
18
use Symfony \Component \DependencyInjection \ContainerBuilder ;
17
19
use Symfony \Component \DependencyInjection \Definition ;
18
20
use Symfony \Component \DependencyInjection \Reference ;
@@ -27,8 +29,7 @@ class FormPassTest extends TestCase
27
29
{
28
30
public function testDoNothingIfFormExtensionNotLoaded ()
29
31
{
30
- $ container = new ContainerBuilder ();
31
- $ container ->addCompilerPass (new FormPass ());
32
+ $ container = $ this ->createContainerBuilder ();
32
33
33
34
$ container ->compile ();
34
35
@@ -37,47 +38,36 @@ public function testDoNothingIfFormExtensionNotLoaded()
37
38
38
39
public function testAddTaggedTypes ()
39
40
{
40
- $ container = new ContainerBuilder ();
41
- $ container ->addCompilerPass (new FormPass ());
42
-
43
- $ extDefinition = new Definition ('Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension ' );
44
- $ extDefinition ->setArguments (array (
45
- new Reference ('service_container ' ),
46
- array (),
47
- array (),
48
- array (),
49
- ));
41
+ $ container = $ this ->createContainerBuilder ();
50
42
51
- $ container ->setDefinition ('form.extension ' , $ extDefinition );
43
+ $ container ->setDefinition ('form.extension ' , $ this -> createExtensionDefinition () );
52
44
$ container ->register ('my.type1 ' , __CLASS__ .'_Type1 ' )->addTag ('form.type ' );
53
45
$ container ->register ('my.type2 ' , __CLASS__ .'_Type2 ' )->addTag ('form.type ' );
54
46
55
47
$ container ->compile ();
56
48
57
49
$ extDefinition = $ container ->getDefinition ('form.extension ' );
58
-
59
- $ this ->assertEquals (array (
60
- __CLASS__ .'_Type1 ' => 'my.type1 ' ,
61
- __CLASS__ .'_Type2 ' => 'my.type2 ' ,
62
- ), $ extDefinition ->getArgument (1 ));
50
+ $ locator = $ extDefinition ->getArgument (0 );
51
+
52
+ $ this ->assertEquals (
53
+ new ServiceLocatorArgument (array (
54
+ __CLASS__ .'_Type1 ' => new Reference ('my.type1 ' ),
55
+ __CLASS__ .'_Type2 ' => new Reference ('my.type2 ' ),
56
+ 'my.type1 ' => new Reference ('my.type1 ' ),
57
+ 'my.type2 ' => new Reference ('my.type2 ' ),
58
+ )),
59
+ $ locator
60
+ );
63
61
}
64
62
65
63
/**
66
64
* @dataProvider addTaggedTypeExtensionsDataProvider
67
65
*/
68
66
public function testAddTaggedTypeExtensions (array $ extensions , array $ expectedRegisteredExtensions )
69
67
{
70
- $ container = new ContainerBuilder ();
71
- $ container ->addCompilerPass (new FormPass ());
68
+ $ container = $ this ->createContainerBuilder ();
72
69
73
- $ extDefinition = new Definition ('Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension ' , array (
74
- new Reference ('service_container ' ),
75
- array (),
76
- array (),
77
- array (),
78
- ));
79
-
80
- $ container ->setDefinition ('form.extension ' , $ extDefinition );
70
+ $ container ->setDefinition ('form.extension ' , $ this ->createExtensionDefinition ());
81
71
82
72
foreach ($ extensions as $ serviceId => $ tag ) {
83
73
$ container ->register ($ serviceId , 'stdClass ' )->addTag ('form.type_extension ' , $ tag );
@@ -86,7 +76,7 @@ public function testAddTaggedTypeExtensions(array $extensions, array $expectedRe
86
76
$ container ->compile ();
87
77
88
78
$ extDefinition = $ container ->getDefinition ('form.extension ' );
89
- $ this ->assertSame ($ expectedRegisteredExtensions , $ extDefinition ->getArgument (2 ));
79
+ $ this ->assertEquals ($ expectedRegisteredExtensions , $ extDefinition ->getArgument (1 ));
90
80
}
91
81
92
82
/**
@@ -102,8 +92,11 @@ public function addTaggedTypeExtensionsDataProvider()
102
92
'my.type_extension3 ' => array ('extended_type ' => 'type2 ' ),
103
93
),
104
94
array (
105
- 'type1 ' => array ('my.type_extension1 ' , 'my.type_extension2 ' ),
106
- 'type2 ' => array ('my.type_extension3 ' ),
95
+ 'type1 ' => new IteratorArgument (array (
96
+ new Reference ('my.type_extension1 ' ),
97
+ new Reference ('my.type_extension2 ' ),
98
+ )),
99
+ 'type2 ' => new IteratorArgument (array (new Reference ('my.type_extension3 ' ))),
107
100
),
108
101
),
109
102
array (
@@ -116,8 +109,16 @@ public function addTaggedTypeExtensionsDataProvider()
116
109
'my.type_extension6 ' => array ('extended_type ' => 'type2 ' , 'priority ' => 1 ),
117
110
),
118
111
array (
119
- 'type1 ' => array ('my.type_extension2 ' , 'my.type_extension1 ' , 'my.type_extension3 ' ),
120
- 'type2 ' => array ('my.type_extension4 ' , 'my.type_extension5 ' , 'my.type_extension6 ' ),
112
+ 'type1 ' => new IteratorArgument (array (
113
+ new Reference ('my.type_extension2 ' ),
114
+ new Reference ('my.type_extension1 ' ),
115
+ new Reference ('my.type_extension3 ' ),
116
+ )),
117
+ 'type2 ' => new IteratorArgument (array (
118
+ new Reference ('my.type_extension4 ' ),
119
+ new Reference ('my.type_extension5 ' ),
120
+ new Reference ('my.type_extension6 ' ),
121
+ )),
121
122
),
122
123
),
123
124
);
@@ -129,17 +130,9 @@ public function addTaggedTypeExtensionsDataProvider()
129
130
*/
130
131
public function testAddTaggedFormTypeExtensionWithoutExtendedTypeAttribute ()
131
132
{
132
- $ container = new ContainerBuilder ();
133
- $ container ->addCompilerPass (new FormPass ());
133
+ $ container = $ this ->createContainerBuilder ();
134
134
135
- $ extDefinition = new Definition ('Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension ' , array (
136
- new Reference ('service_container ' ),
137
- array (),
138
- array (
2851
),
139
- array (),
140
- ));
141
-
142
- $ container ->setDefinition ('form.extension ' , $ extDefinition );
135
+ $ container ->setDefinition ('form.extension ' , $ this ->createExtensionDefinition ());
143
136
$ container ->register ('my.type_extension ' , 'stdClass ' )
144
137
->addTag ('form.type_extension ' );
145
138
@@ -148,68 +141,72 @@ public function testAddTaggedFormTypeExtensionWithoutExtendedTypeAttribute()
148
141
149
142
public function testAddTaggedGuessers ()
150
143
{
151
- $ container = new ContainerBuilder ();
152
- $ container ->addCompilerPass (new FormPass ());
153
-
154
- $ extDefinition = new Definition ('Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension ' );
155
- $ extDefinition ->setArguments (array (
156
- new Reference ('service_container ' ),
157
- array (),
158
- array (),
159
- array (),
160
- ));
144
+ $ container = $ this ->createContainerBuilder ();
161
145
162
146
$ definition1 = new Definition ('stdClass ' );
163
147
$ definition1 ->addTag ('form.type_guesser ' );
164
148
$ definition2 = new Definition ('stdClass ' );
165
149
$ definition2 ->addTag ('form.type_guesser ' );
166
150
167
- $ container ->setDefinition ('form.extension ' , $ extDefinition );
151
+ $ container ->setDefinition ('form.extension ' , $ this -> createExtensionDefinition () );
168
152
$ container ->setDefinition ('my.guesser1 ' , $ definition1 );
169
153
$ container ->setDefinition ('my.guesser2 ' , $ definition2 );
170
154
171
155
$ container ->compile ();
172
156
173
157
$ extDefinition = $ container ->getDefinition ('form.extension ' );
174
-
175
- $ this ->assertSame (array (
176
- 'my.guesser1 ' ,
177
- 'my.guesser2 ' ,
178
- ), $ extDefinition ->getArgument (3 ));
158
+ $ iteratorArgument = $ extDefinition ->getArgument (2 );
159
+
160
+ $ this ->assertEquals (
161
+ new IteratorArgument (array (
162
+ new Reference ('my.guesser1 ' ),
163
+ new Reference ('my.guesser2 ' ),
164
+ )),
165
+ $ iteratorArgument
166
+ );
179
167
}
180
168
181
169
/**
182
170
* @dataProvider privateTaggedServicesProvider
183
171
*/
184
- public function testPrivateTaggedServices ($ id , $ tagName , $ expectedExceptionMessage )
172
+ public function testPrivateTaggedServices ($ id , $ tagName , array $ tagAttributes = array () )
185
173
{
186
- $ container = new ContainerBuilder ();
187
- $ container ->addCompilerPass (new FormPass ());
174
+ $ container = $ this ->createContainerBuilder ();
188
175
189
- $ extDefinition = new Definition ('Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension ' );
190
- $ extDefinition ->setArguments (array (
191
- new Reference ('service_container ' ),
192
- array (),
193
- array (),
194
- array (),
195
- ));
196
-
197
- $ container ->setDefinition ('form.extension ' , $ extDefinition );
198
- $ container ->register ($ id , 'stdClass ' )->setPublic (false )->addTag ($ tagName );
199
-
200
- $ this ->setExpectedException ('\InvalidArgumentException ' , $ expectedExceptionMessage );
176
+ $ container ->setDefinition ('form.extension ' , $ this ->createExtensionDefinition ());
177
+ $ container ->register ($ id , 'stdClass ' )->setPublic (false )->addTag ($ tagName , $ tagAttributes );
201
178
202
179
$ container ->compile ();
203
180
}
204
181
205
182
public function privateTaggedServicesProvider ()
206
183
{
207
184
return array (
208
- array ('my.type ' , 'form.type ' , ' The service "my.type" must be public as form types are lazy-loaded ' ),
209
- array ('my.type_extension ' , 'form.type_extension ' , ' The service "my.type_extension" must be public as form type extensions are lazy-loaded ' ),
210
- array ('my.guesser ' , 'form.type_guesser ' , ' The service "my.guesser" must be public as form type guessers are lazy-loaded ' ),
185
+ array ('my.type ' , 'form.type ' ),
186
+ array ('my.type_extension ' , 'form.type_extension ' , array ( ' extended_type ' => ' Symfony\Component\Form\Extension\Core\Type\FormType ' ) ),
187
+ array ('my.guesser ' , 'form.type_guesser ' ),
211
188
);
212
189
}
190
+
191
+ private function createContainerBuilder ()
192
+ {
193
+ $ container = new ContainerBuilder ();
194
+ $ container ->addCompilerPass (new FormPass ());
195
+
196
+ return $ container ;
197
+ }
198
+
199
+ private function createExtensionDefinition ()
200
+ {
201
+ $ definition = new Definition ('Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension ' );
202
+ $ definition ->setArguments (array (
203
+ new ServiceLocatorArgument (array ()),
204
+ new IteratorArgument (array ()),
205
+ new IteratorArgument (array ()),
206
+ ));
207
+
208
+ return $ definition ;
209
+ }
213
210
}
214
211
215
212
class FormPassTest_Type1 extends AbstractType
0 commit comments