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