|
17 | 17 |
|
18 | 18 | class ControllerResolverTestextends \PHPUnit_Framework_TestCase
|
19 | 19 | {
|
20 |
| -publicfunctiontestGetController() |
| 20 | +publicfunctiontestGetControllerWithoutControllerParameter() |
21 | 21 | {
|
22 |
| -$logger =newLogger(); |
| 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 =newControllerResolver($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 | +publicfunctiontestGetControllerWithLambda() |
| 31 | +{ |
| 32 | +$resolver =newControllerResolver(); |
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 | +publicfunctiontestGetControllerWithObjectAndInvokeMethod() |
| 41 | + { |
| 42 | +$resolver =newControllerResolver(); |
| 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 | +publicfunctiontestGetControllerWithObjectAndMethod() |
| 51 | +{ |
| 52 | +$resolver =newControllerResolver(); |
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 | +publicfunctiontestGetControllerWithClassAndMethod() |
| 61 | + { |
| 62 | +$resolver =newControllerResolver(); |
| 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 | +publicfunctiontestGetControllerWithObjectAndMethodAsString() |
| 71 | + { |
| 72 | +$resolver =newControllerResolver(); |
| 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 | +publicfunctiontestGetControllerWithClassAndInvokeMethod() |
| 81 | + { |
| 82 | +$resolver =newControllerResolver(); |
| 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 | +publicfunctiontestGetControllerOnObjectWithoutInvokeMethod() |
| 94 | + { |
| 95 | +$resolver =newControllerResolver(); |
| 96 | + |
| 97 | +$request = Request::create('/'); |
| 98 | +$request->attributes->set('_controller',new \stdClass()); |
| 99 | +$resolver->getController($request); |
| 100 | + } |
| 101 | + |
| 102 | +publicfunctiontestGetControllerWithFunction() |
| 103 | + { |
| 104 | +$resolver =newControllerResolver(); |
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 | +publicfunctiontestGetControllerOnNonUndefinedFunction($controller) |
| 117 | +{ |
| 118 | +$resolver =newControllerResolver(); |
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 | +publicfunctiongetUndefinedControllers() |
| 126 | + { |
| 127 | +returnarray( |
| 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 | publicfunctiontestGetArguments()
|
@@ -158,7 +211,7 @@ public function __invoke($foo, $bar = null)
|
158 | 211 | {
|
159 | 212 | }
|
160 | 213 |
|
161 |
| -protectedfunctioncontrollerMethod1($foo) |
| 214 | +publicfunctioncontrollerMethod1($foo) |
162 | 215 | {
|
163 | 216 | }
|
164 | 217 |
|
|