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