Skip to content

Commit 03ae3c3

Browse files
HeahDudeIltar van der Berg
authored and
Iltar van der Berg
committed
Refactor ArgumentResolverTest
1 parent 738bf1b commit 03ae3c3

File tree

1 file changed

+79
-49
lines changed

1 file changed

+79
-49
lines changed

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)