23
23
24
24
class ArgumentResolverTest extends \PHPUnit_Framework_TestCase
25
25
{
26
- public function testGetArguments ()
26
+ /** @var ArgumentResolver */
27
+ private static $ resolver ;
28
+
29
+ public static function setUpBeforeClass ()
27
30
{
28
31
$ factory = new ArgumentMetadataFactory ();
29
32
$ argumentValueResolvers = array (
@@ -33,85 +36,121 @@ public function testGetArguments()
33
36
new DefaultArgumentValueResolver (),
34
37
);
35
38
36
- $ resolver = new ArgumentResolver ($ factory , $ argumentValueResolvers );
39
+ self ::$ resolver = new ArgumentResolver ($ factory , $ argumentValueResolvers );
40
+ }
37
41
42
+ public function testGetArguments ()
43
+ {
38
44
$ request = Request::create ('/ ' );
39
- $ controller = array (new self (), 'testGetArguments ' );
40
- $ this ->assertEquals (array (), $ resolver ->getArguments ($ request , $ controller ), '->getArguments() returns an empty array if the method takes no arguments ' );
45
+ $ request ->attributes ->set ('foo ' , 'foo ' );
46
+ $ controller = array (new self (), 'controllerWithFoo ' );
47
+
48
+ $ this ->assertEquals (array ('foo ' ), self ::$ resolver ->getArguments ($ request , $ controller ), '->getArguments() returns an array of arguments for the controller method ' );
49
+ }
41
50
51
+ public function testGetArgumentsReturnsEmptyArrayWhenNoArguments ()
52
+ {
42
53
$ request = Request::create ('/ ' );
43
- $ request ->attributes ->set ('foo ' , 'foo ' );
44
- $ controller = array (new self (), 'controllerMethod1 ' );
45
- $ this ->assertEquals (array ('foo ' ), $ resolver ->getArguments ($ request , $ controller ), '->getArguments() returns an array of arguments for the controller method ' );
54
+ $ controller = array (new self (), 'controllerWithoutArguments ' );
55
+
56
+ $ this ->assertEquals (array (), self ::$ resolver ->getArguments ($ request , $ controller ), '->getArguments() returns an empty array if the method takes no arguments ' );
57
+ }
46
58
59
+ public function testGetArgumentsUsesDefaultValue ()
60
+ {
47
61
$ request = Request::create ('/ ' );
48
62
$ request ->attributes ->set ('foo ' , 'foo ' );
49
- $ controller = array (new self (), 'controllerMethod2 ' );
50
- $ this ->assertEquals (array ('foo ' , null ), $ resolver ->getArguments ($ request , $ controller ), '->getArguments() uses default values if present ' );
63
+ $ controller = array (new self (), 'controllerWithFooAndDefaultBar ' );
64
+
65
+ $ this ->assertEquals (array ('foo ' , null ), self ::$ resolver ->getArguments ($ request , $ controller ), '->getArguments() uses default values if present ' );
66
+ }
51
67
68
+ public function testGetArgumentsOverrideDefaultValueByRequestAttribute ()
69
+ {
70
+ $ request = Request::create ('/ ' );
71
+ $ request ->attributes ->set ('foo ' , 'foo ' );
52
72
$ request ->attributes ->set ('bar ' , 'bar ' );
53
- $ this ->assertEquals (array ('foo ' , 'bar ' ), $ resolver ->getArguments ($ request , $ controller ), '->getArguments() overrides default values if provided in the request attributes ' );
73
+ $ controller = array (new self (), 'controllerWithFooAndDefaultBar ' );
74
+
75
+ $ this ->assertEquals (array ('foo ' , 'bar ' ), self ::$ resolver ->getArguments ($ request , $ controller ), '->getArguments() overrides default values if provided in the request attributes ' );
76
+ }
54
77
78
+ public function testGetArgumentsFromClosure ()
79
+ {
55
80
$ request = Request::create ('/ ' );
56
81
$ request ->attributes ->set ('foo ' , 'foo ' );
57
82
$ controller = function ($ foo ) {};
58
- $ this ->assertEquals (array ('foo ' ), $ resolver ->getArguments ($ request , $ controller ));
59
83
84
+ $ this ->assertEquals (array ('foo ' ), self ::$ resolver ->getArguments ($ request , $ controller ));
85
+ }
86
+
87
+ public function testGetArgumentsUsesDefaultValueFromClosure ()
88
+ {
60
89
$ request = Request::create ('/ ' );
61
90
$ request ->attributes ->set ('foo ' , 'foo ' );
62
91
$ controller = function ($ foo , $ bar = 'bar ' ) {};
63
- $ this ->assertEquals (array ('foo ' , 'bar ' ), $ resolver ->getArguments ($ request , $ controller ));
64
92
93
+ $ this ->assertEquals (array ('foo ' , 'bar ' ), self ::$ resolver ->getArguments ($ request , $ controller ));
94
+ }
95
+
96
+ public function testGetArgumentsFromInvokableObject ()
97
+ {
65
98
$ request = Request::create ('/ ' );
66
99
$ request ->attributes ->set ('foo ' , 'foo ' );
67
100
$ controller = new self ();
68
- $ this ->assertEquals (array ('foo ' , null ), $ resolver ->getArguments ($ request , $ controller ));
101
+
102
+ $ this ->assertEquals (array ('foo ' , null ), self ::$ resolver ->getArguments ($ request , $ controller ));
103
+
104
+ // Test default bar overridden by request attribute
69
105
$ request ->attributes ->set ('bar ' , 'bar ' );
70
- $ this ->assertEquals (array ('foo ' , 'bar ' ), $ resolver ->getArguments ($ request , $ controller ));
71
106
107
+ $ this ->assertEquals (array ('foo ' , 'bar ' ), self ::$ resolver ->getArguments ($ request , $ controller ));
108
+ }
109
+
110
+ public function testGetArgumentsFromFunctionName ()
111
+ {
72
112
$ request = Request::create ('/ ' );
73
113
$ request ->attributes ->set ('foo ' , 'foo ' );
74
114
$ request ->attributes ->set ('foobar ' , 'foobar ' );
75
- $ controller = 'Symfony\Component\HttpKernel\Tests\Controller\argument_resolver_controller_function ' ;
76
- $ this ->assertEquals (array ('foo ' , 'foobar ' ), $ resolver ->getArguments ($ request , $ controller ));
115
+ $ controller = __NAMESPACE__ .'\controller_function ' ;
116
+
117
+ $ this ->assertEquals (array ('foo ' , 'foobar ' ), self ::$ resolver ->getArguments ($ request , $ controller ));
118
+ }
77
119
120
+ public function testGetArgumentsFailsOnUnresolvedValue ()
121
+ {
78
122
$ request = Request::create ('/ ' );
79
123
$ request ->attributes ->set ('foo ' , 'foo ' );
80
124
$ request ->attributes ->set ('foobar ' , 'foobar ' );
81
- $ controller = array (new self (), 'controllerMethod3 ' );
125
+ $ controller = array (new self (), 'controllerWithFooBarFoobar ' );
82
126
83
127
try {
84
- $ resolver ->getArguments ($ request , $ controller );
128
+ self :: $ resolver ->getArguments ($ request , $ controller );
85
129
$ this ->fail ('->getArguments() throws a \RuntimeException exception if it cannot determine the argument value ' );
86
130
} catch (\Exception $ e ) {
87
131
$ this ->assertInstanceOf ('\RuntimeException ' , $ e , '->getArguments() throws a \RuntimeException exception if it cannot determine the argument value ' );
88
132
}
133
+ }
89
134
135
+ public function testGetArgumentsInjectsRequest ()
136
+ {
90
137
$ request = Request::create ('/ ' );
91
- $ controller = array (new self (), 'controllerMethod5 ' );
92
- $ this ->assertEquals (array ($ request ), $ resolver ->getArguments ($ request , $ controller ), '->getArguments() injects the request ' );
138
+ $ controller = array (new self (), 'controllerWithRequest ' );
139
+
140
+ $ this ->assertEquals (array ($ request ), self ::$ resolver ->getArguments ($ request , $ controller ), '->getArguments() injects the request ' );
93
141
}
94
142
95
143
/**
96
144
* @requires PHP 5.6
97
145
*/
98
146
public function testGetVariadicArguments ()
99
147
{
100
- $ factory = new ArgumentMetadataFactory ();
101
- $ argumentValueResolvers = array (
102
- new ArgumentFromAttributeResolver (),
103
- new VariadicArgumentValueResolver (),
104
- new RequestResolver (),
105
- new DefaultArgumentValueResolver (),
106
- );
107
-
108
- $ resolver = new ArgumentResolver ($ factory , $ argumentValueResolvers );
109
-
110
148
$ request = Request::create ('/ ' );
111
149
$ request ->attributes ->set ('foo ' , 'foo ' );
112
150
$ request ->attributes ->set ('bar ' , array ('foo ' , 'bar ' ));
113
151
$ controller = array (new VariadicController (), 'action ' );
114
- $ this ->assertEquals (array ('foo ' , 'foo ' , 'bar ' ), $ resolver ->getArguments ($ request , $ controller ));
152
+
153
+ $ this ->assertEquals (array ('foo ' , 'foo ' , 'bar ' ), self ::$ resolver ->getArguments ($ request , $ controller ));
115
154
}
116
155
117
156
/**
@@ -120,21 +159,12 @@ public function testGetVariadicArguments()
120
159
*/
121
160
public function testGetVariadicArgumentsWithoutArrayInRequest ()
122
161
{
123
- $ factory = new ArgumentMetadataFactory ();
124
- $ argumentValueResolvers = array (
125
- new ArgumentFromAttributeResolver (),
126
- new VariadicArgumentValueResolver (),
127
- new RequestResolver (),
128
- new DefaultArgumentValueResolver (),
129
- );
130
-
131
- $ resolver = new ArgumentResolver ($ factory , $ argumentValueResolvers );
132
-
133
162
$ request = Request::create ('/ ' );
134
163
$ request ->attributes ->set ('foo ' , 'foo ' );
135
164
$ request ->attributes ->set ('bar ' , 'foo ' );
136
165
$ controller = array (new VariadicController (), 'action ' );
137
- $ resolver ->getArguments ($ request , $ controller );
166
+
167
+ self ::$ resolver ->getArguments ($ request , $ controller );
138
168
}
139
169
140
170
/**
@@ -153,35 +183,35 @@ public function testGetArgumentWithoutArray()
153
183
$ request = Request::create ('/ ' );
154
184
$ request ->attributes ->set ('foo ' , 'foo ' );
155
185
$ request ->attributes ->set ('bar ' , 'foo ' );
156
- $ controller = array ($ this , 'controllerMethod2 ' );
186
+ $ controller = array ($ this , 'controllerWithFooAndDefaultBar ' );
157
187
$ resolver ->getArguments ($ request , $ controller );
158
188
}
159
189
160
190
public function __invoke ($ foo , $ bar = null )
161
191
{
162
192
}
163
193
164
- public function controllerMethod1 ($ foo )
194
+ public function controllerWithFoo ($ foo )
165
195
{
166
196
}
167
197
168
- protected function controllerMethod2 ( $ foo , $ bar = null )
198
+ public function controllerWithoutArguments ( )
169
199
{
170
200
}
171
201
172
- protected function controllerMethod3 ($ foo , $ bar, $ foobar )
202
+ protected function controllerWithFooAndDefaultBar ($ foo , $ bar = null )
173
203
{
174
204
}
175
205
176
- protected static function controllerMethod4 ( )
206
+ protected function controllerWithFooBarFoobar ( $ foo , $ bar , $ foobar )
177
207
{
178
208
}
179
209
180
- protected function controllerMethod5 (Request $ request )
210
+ protected function controllerWithRequest (Request $ request )
181
211
{
182
212
}
183
213
}
184
214
185
- function argument_resolver_controller_function ($ foo , $ foobar )
215
+ function controller_function ($ foo , $ foobar )
186
216
{
187
217
}
0 commit comments