@@ -24,66 +24,119 @@ protected function setUp()
24
24
}
25
25
}
26
26
27
- public function testGetController ()
27
+ public function testGetControllerWithoutControllerParameter ()
28
28
{
29
- $ logger = new Logger ();
29
+ $ logger = $ this ->getMock ('Psr\Log\LoggerInterface ' );
30
+ $ logger ->expects ($ this ->once ())->method ('warning ' )->with ('Unable to look for the controller as the "_controller" parameter is missing ' );
30
31
$ resolver = new ControllerResolver ($ logger );
31
32
32
33
$ request = Request::create ('/ ' );
33
34
$ this ->assertFalse ($ resolver ->getController ($ request ), '->getController() returns false when the request has no _controller attribute ' );
34
- $ this -> assertEquals ( array ( ' Unable to look for the controller as the "_controller" parameter is missing ' ), $ logger -> getLogs ( ' warning ' ));
35
+ }
35
36
36
- $ request -> attributes -> set ( ' _controller ' , ' Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::testGetController ' );
37
- $ controller = $ resolver -> getController ( $ request );
38
- $ this -> assertInstanceOf ( ' Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest ' , $ controller [ 0 ], ' ->getController() returns a PHP callable ' );
37
+ public function testGetControllerWithLambda ()
38
+ {
39
+ $ resolver = new ControllerResolver ( );
39
40
41
+ $ request = Request::create ('/ ' );
40
42
$ request ->attributes ->set ('_controller ' , $ lambda = function () {});
41
43
$ controller = $ resolver ->getController ($ request );
42
44
$ this ->assertSame ($ lambda , $ controller );
45
+ }
43
46
47
+ public function testGetControllerWithObjectAndInvokeMethod ()
48
+ {
49
+ $ resolver = new ControllerResolver ();
50
+
51
+ $ request = Request::create ('/ ' );
44
52
$ request ->attributes ->set ('_controller ' , $ this );
45
53
$ controller = $ resolver ->getController ($ request );
46
54
$ this ->assertSame ($ this , $ controller );
55
+ }
47
56
48
- $ request -> attributes -> set ( ' _controller ' , ' Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest ' );
49
- $ controller = $ resolver -> getController ( $ request );
50
- $ this -> assertInstanceOf ( ' Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest ' , $ controller );
57
+ public function testGetControllerWithObjectAndMethod ()
58
+ {
59
+ $ resolver = new ControllerResolver ( );
51
60
61
+ $ request = Request::create ('/ ' );
52
62
$ request ->attributes ->set ('_controller ' , array ($ this , 'controllerMethod1 ' ));
53
63
$ controller = $ resolver ->getController ($ request );
54
64
$ this ->assertSame (array ($ this , 'controllerMethod1 ' ), $ controller );
65
+ }
55
66
67
+ public function testGetControllerWithClassAndMethod ()
68
+ {
69
+ $ resolver = new ControllerResolver ();
70
+
71
+ $ request = Request::create ('/ ' );
56
72
$ request ->attributes ->set ('_controller ' , array ('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest ' , 'controllerMethod4 ' ));
57
73
$ controller = $ resolver ->getController ($ request );
58
74
$ this ->assertSame (array ('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest ' , 'controllerMethod4 ' ), $ controller );
75
+ }
76
+
77
+ public function testGetControllerWithObjectAndMethodAsString ()
78
+ {
79
+ $ resolver = new ControllerResolver ();
80
+
81
+ $ request = Request::create ('/ ' );
82
+ $ request ->attributes ->set ('_controller ' , 'Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::controllerMethod1 ' );
83
+ $ controller = $ resolver ->getController ($ request );
84
+ $ this ->assertInstanceOf ('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest ' , $ controller [0 ], '->getController() returns a PHP callable ' );
85
+ }
86
+
87
+ public function testGetControllerWithClassAndInvokeMethod ()
88
+ {
89
+ $ resolver = new ControllerResolver ();
90
+
91
+ $ request = Request::create ('/ ' );
92
+ $ request ->attributes ->set ('_controller ' , 'Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest ' );
93
+ $ controller = $ resolver ->getController ($ request );
94
+ $ this ->assertInstanceOf ('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest ' , $ controller );
95
+ }
96
+
97
+ /**
98
+ * @expectedException \InvalidArgumentException
99
+ */
100
+ public function testGetControllerOnObjectWithoutInvokeMethod ()
101
+ {
102
+ $ resolver = new ControllerResolver ();
103
+
104
+ $ request = Request::create ('/ ' );
105
+ $ request ->attributes ->set ('_controller ' , new \stdClass ());
106
+ $ resolver ->getController ($ request );
107
+ }
108
+
109
+ public function testGetControllerWithFunction ()
110
+ {
111
+ $ resolver = new ControllerResolver ();
59
112
113
+ $ request = Request::create ('/ ' );
60
114
$ request ->attributes ->set ('_controller ' , 'Symfony\Component\HttpKernel\Tests\Controller\some_controller_function ' );
61
115
$ controller = $ resolver ->getController ($ request );
62
116
$ this ->assertSame ('Symfony\Component\HttpKernel\Tests\Controller\some_controller_function ' , $ controller );
117
+ }
63
118
64
- $ request -> attributes -> set ( ' _controller ' , ' foo ' );
65
- try {
66
- $ resolver -> getController ( $ request );
67
- $ this -> fail ( ' ->getController() throws an \InvalidArgumentException if the _controller attribute is not well-formatted ' );
68
- } catch ( \ Exception $ e ) {
69
- $ this -> assertInstanceOf ( ' \InvalidArgumentException ' , $ e , ' ->getController() throws an \InvalidArgumentException if the _controller attribute is not well-formatted ' );
70
- }
119
+ /**
120
+ * @dataProvider getUndefinedControllers
121
+ * @expectedException \InvalidArgumentException
122
+ */
123
+ public function testGetControllerOnNonUndefinedFunction ( $ controller )
124
+ {
125
+ $ resolver = new ControllerResolver ();
71
126
72
- $ request ->attributes ->set ('_controller ' , 'foo::bar ' );
73
- try {
74
- $ resolver ->getController ($ request );
75
- $ this ->fail ('->getController() throws an \InvalidArgumentException if the _controller attribute contains a non-existent class ' );
76
- } catch (\Exception $ e ) {
77
- $ this ->assertInstanceOf ('\InvalidArgumentException ' , $ e , '->getController() throws an \InvalidArgumentException if the _controller attribute contains a non-existent class ' );
78
- }
127
+ $ request = Request::create ('/ ' );
128
+ $ request ->attributes ->set ('_controller ' , $ controller );
129
+ $ resolver ->getController ($ request );
130
+ }
79
131
80
- $ request ->attributes ->set ('_controller ' , 'Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::bar ' );
81
- try {
82
- $ resolver ->getController ($ request );
83
- $ this ->fail ('->getController() throws an \InvalidArgumentException if the _controller attribute contains a non-existent method ' );
84
- } catch (\Exception $ e ) {
85
- $ this ->assertInstanceOf ('\InvalidArgumentException ' , $ e , '->getController() throws an \InvalidArgumentException if the _controller attribute contains a non-existent method ' );
86
- }
132
+ public function getUndefinedControllers ()
133
+ {
134
+ return array (
135
+ array ('foo ' ),
136
+ array ('foo::bar ' ),
137
+ array ('stdClass ' ),
138
+ array ('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::bar ' ),
139
+ );
87
140
}
88
141
89
142
public function testGetArguments ()
@@ -165,7 +218,7 @@ public function __invoke($foo, $bar = null)
165
218
{
166
219
}
167
220
168
- protected function controllerMethod1 ($ foo )
221
+ public function controllerMethod1 ($ foo )
169
222
{
170
223
}
171
224
0 commit comments