Skip to content

Commit f29bf4c

Browse files
HeahDudeIltar van der Berg
authored andcommitted
Refactor ArgumentResolverTest
1 parent cee5106 commit f29bf4c

File tree

1 file changed

+79
-49
lines changed

1 file changed

+79
-49
lines changed

src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolverTest.php

Lines changed: 79 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@
2323

2424
class ArgumentResolverTest extends \PHPUnit_Framework_TestCase
2525
{
26-
public function testGetArguments()
26+
/** @var ArgumentResolver */
27+
private static $resolver;
28+
29+
public static function setUpBeforeClass()
2730
{
2831
$factory = new ArgumentMetadataFactory();
2932
$argumentValueResolvers = array(
@@ -33,85 +36,121 @@ public function testGetArguments()
3336
new DefaultArgumentValueResolver(),
3437
);
3538

36-
$resolver = new ArgumentResolver($factory, $argumentValueResolvers);
39+
self::$resolver = new ArgumentResolver($factory, $argumentValueResolvers);
40+
}
3741

42+
public function testGetArguments()
43+
{
3844
$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+
}
4150

51+
public function testGetArgumentsReturnsEmptyArrayWhenNoArguments()
52+
{
4253
$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+
}
4658

59+
public function testGetArgumentsUsesDefaultValue()
60+
{
4761
$request = Request::create('/');
4862
$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+
}
5167

68+
public function testGetArgumentsOverrideDefaultValueByRequestAttribute()
69+
{
70+
$request = Request::create('/');
71+
$request->attributes->set('foo', 'foo');
5272
$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+
}
5477

78+
public function testGetArgumentsFromClosure()
79+
{
5580
$request = Request::create('/');
5681
$request->attributes->set('foo', 'foo');
5782
$controller = function ($foo) {};
58-
$this->assertEquals(array('foo'), $resolver->getArguments($request, $controller));
5983

84+
$this->assertEquals(array('foo'), self::$resolver->getArguments($request, $controller));
85+
}
86+
87+
public function testGetArgumentsUsesDefaultValueFromClosure()
88+
{
6089
$request = Request::create('/');
6190
$request->attributes->set('foo', 'foo');
6291
$controller = function ($foo, $bar = 'bar') {};
63-
$this->assertEquals(array('foo', 'bar'), $resolver->getArguments($request, $controller));
6492

93+
$this->assertEquals(array('foo', 'bar'), self::$resolver->getArguments($request, $controller));
94+
}
95+
96+
public function testGetArgumentsFromInvokableObject()
97+
{
6598
$request = Request::create('/');
6699
$request->attributes->set('foo', 'foo');
67100
$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
69105
$request->attributes->set('bar', 'bar');
70-
$this->assertEquals(array('foo', 'bar'), $resolver->getArguments($request, $controller));
71106

107+
$this->assertEquals(array('foo', 'bar'), self::$resolver->getArguments($request, $controller));
108+
}
109+
110+
public function testGetArgumentsFromFunctionName()
111+
{
72112
$request = Request::create('/');
73113
$request->attributes->set('foo', 'foo');
74114
$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+
}
77119

120+
public function testGetArgumentsFailsOnUnresolvedValue()
121+
{
78122
$request = Request::create('/');
79123
$request->attributes->set('foo', 'foo');
80124
$request->attributes->set('foobar', 'foobar');
81-
$controller = array(new self(), 'controllerMethod3');
125+
$controller = array(new self(), 'controllerWithFooBarFoobar');
82126

83127
try {
84-
$resolver->getArguments($request, $controller);
128+
self::$resolver->getArguments($request, $controller);
85129
$this->fail('->getArguments() throws a \RuntimeException exception if it cannot determine the argument value');
86130
} catch (\Exception $e) {
87131
$this->assertInstanceOf('\RuntimeException', $e, '->getArguments() throws a \RuntimeException exception if it cannot determine the argument value');
88132
}
133+
}
89134

135+
public function testGetArgumentsInjectsRequest()
136+
{
90137
$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');
93141
}
94142

95143
/**
96144
* @requires PHP 5.6
97145
*/
98146
public function testGetVariadicArguments()
99147
{
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-
110148
$request = Request::create('/');
111149
$request->attributes->set('foo', 'foo');
112150
$request->attributes->set('bar', array('foo', 'bar'));
113151
$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));
115154
}
116155

117156
/**
@@ -120,21 +159,12 @@ public function testGetVariadicArguments()
120159
*/
121160
public function testGetVariadicArgumentsWithoutArrayInRequest()
122161
{
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-
133162
$request = Request::create('/');
134163
$request->attributes->set('foo', 'foo');
135164
$request->attributes->set('bar', 'foo');
136165
$controller = array(new VariadicController(), 'action');
137-
$resolver->getArguments($request, $controller);
166+
167+
self::$resolver->getArguments($request, $controller);
138168
}
139169

140170
/**
@@ -153,35 +183,35 @@ public function testGetArgumentWithoutArray()
153183
$request = Request::create('/');
154184
$request->attributes->set('foo', 'foo');
155185
$request->attributes->set('bar', 'foo');
156-
$controller = array($this, 'controllerMethod2');
186+
$controller = array($this, 'controllerWithFooAndDefaultBar');
157187
$resolver->getArguments($request, $controller);
158188
}
159189

160190
public function __invoke($foo, $bar = null)
161191
{
162192
}
163193

164-
public function controllerMethod1($foo)
194+
public function controllerWithFoo($foo)
165195
{
166196
}
167197

168-
protected function controllerMethod2($foo, $bar = null)
198+
public function controllerWithoutArguments()
169199
{
170200
}
171201

172-
protected function controllerMethod3($foo, $bar, $foobar)
202+
protected function controllerWithFooAndDefaultBar($foo, $bar = null)
173203
{
174204
}
175205

176-
protected static function controllerMethod4()
206+
protected function controllerWithFooBarFoobar($foo, $bar, $foobar)
177207
{
178208
}
179209

180-
protected function controllerMethod5(Request $request)
210+
protected function controllerWithRequest(Request $request)
181211
{
182212
}
183213
}
184214

185-
function argument_resolver_controller_function($foo, $foobar)
215+
function controller_function($foo, $foobar)
186216
{
187217
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy