Вход Регистрация
Файл: gapps/vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php
Строк: 526
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentHttpKernelTestsController;

use 
PsrLogLoggerInterface;
use 
SymfonyComponentHttpKernelControllerControllerResolver;
use 
SymfonyComponentHttpKernelTestsFixturesControllerVariadicController;
use 
SymfonyComponentHttpFoundationRequest;

class 
ControllerResolverTest extends PHPUnit_Framework_TestCase
{
    public function 
testGetControllerWithoutControllerParameter()
    {
        
$logger $this->getMock('PsrLogLoggerInterface');
        
$logger->expects($this->once())->method('warning')->with('Unable to look for the controller as the "_controller" parameter is missing.');
        
$resolver $this->createControllerResolver($logger);

        
$request Request::create('/');
        
$this->assertFalse($resolver->getController($request), '->getController() returns false when the request has no _controller attribute');
    }

    public function 
testGetControllerWithLambda()
    {
        
$resolver $this->createControllerResolver();

        
$request Request::create('/');
        
$request->attributes->set('_controller'$lambda = function () {});
        
$controller $resolver->getController($request);
        
$this->assertSame($lambda$controller);
    }

    public function 
testGetControllerWithObjectAndInvokeMethod()
    {
        
$resolver $this->createControllerResolver();

        
$request Request::create('/');
        
$request->attributes->set('_controller'$this);
        
$controller $resolver->getController($request);
        
$this->assertSame($this$controller);
    }

    public function 
testGetControllerWithObjectAndMethod()
    {
        
$resolver $this->createControllerResolver();

        
$request Request::create('/');
        
$request->attributes->set('_controller', array($this'controllerMethod1'));
        
$controller $resolver->getController($request);
        
$this->assertSame(array($this'controllerMethod1'), $controller);
    }

    public function 
testGetControllerWithClassAndMethod()
    {
        
$resolver $this->createControllerResolver();

        
$request Request::create('/');
        
$request->attributes->set('_controller', array('SymfonyComponentHttpKernelTestsControllerControllerResolverTest''controllerMethod4'));
        
$controller $resolver->getController($request);
        
$this->assertSame(array('SymfonyComponentHttpKernelTestsControllerControllerResolverTest''controllerMethod4'), $controller);
    }

    public function 
testGetControllerWithObjectAndMethodAsString()
    {
        
$resolver $this->createControllerResolver();

        
$request Request::create('/');
        
$request->attributes->set('_controller''SymfonyComponentHttpKernelTestsControllerControllerResolverTest::controllerMethod1');
        
$controller $resolver->getController($request);
        
$this->assertInstanceOf('SymfonyComponentHttpKernelTestsControllerControllerResolverTest'$controller[0], '->getController() returns a PHP callable');
    }

    public function 
testGetControllerWithClassAndInvokeMethod()
    {
        
$resolver $this->createControllerResolver();

        
$request Request::create('/');
        
$request->attributes->set('_controller''SymfonyComponentHttpKernelTestsControllerControllerResolverTest');
        
$controller $resolver->getController($request);
        
$this->assertInstanceOf('SymfonyComponentHttpKernelTestsControllerControllerResolverTest'$controller);
    }

    
/**
     * @expectedException InvalidArgumentException
     */
    
public function testGetControllerOnObjectWithoutInvokeMethod()
    {
        
$resolver $this->createControllerResolver();

        
$request Request::create('/');
        
$request->attributes->set('_controller', new stdClass());
        
$resolver->getController($request);
    }

    public function 
testGetControllerWithFunction()
    {
        
$resolver $this->createControllerResolver();

        
$request Request::create('/');
        
$request->attributes->set('_controller''SymfonyComponentHttpKernelTestsControllersome_controller_function');
        
$controller $resolver->getController($request);
        
$this->assertSame('SymfonyComponentHttpKernelTestsControllersome_controller_function'$controller);
    }

    
/**
     * @dataProvider getUndefinedControllers
     */
    
public function testGetControllerOnNonUndefinedFunction($controller$exceptionName null$exceptionMessage null)
    {
        
$resolver $this->createControllerResolver();
        
$this->setExpectedException($exceptionName$exceptionMessage);

        
$request Request::create('/');
        
$request->attributes->set('_controller'$controller);
        
$resolver->getController($request);
    }

    public function 
getUndefinedControllers()
    {
        return array(
            array(
1'InvalidArgumentException''Unable to find controller "1".'),
            array(
'foo''InvalidArgumentException''Unable to find controller "foo".'),
            array(
'oof::bar''InvalidArgumentException''Class "oof" does not exist.'),
            array(
'stdClass''InvalidArgumentException''Unable to find controller "stdClass".'),
            array(
'SymfonyComponentHttpKernelTestsControllerControllerTest::staticsAction''InvalidArgumentException''The controller for URI "/" is not callable. Expected method "staticsAction" on class "SymfonyComponentHttpKernelTestsControllerControllerTest", did you mean "staticAction"?'),
            array(
'SymfonyComponentHttpKernelTestsControllerControllerTest::privateAction''InvalidArgumentException''The controller for URI "/" is not callable. Method "privateAction" on class "SymfonyComponentHttpKernelTestsControllerControllerTest" should be public and non-abstract'),
            array(
'SymfonyComponentHttpKernelTestsControllerControllerTest::protectedAction''InvalidArgumentException''The controller for URI "/" is not callable. Method "protectedAction" on class "SymfonyComponentHttpKernelTestsControllerControllerTest" should be public and non-abstract'),
            array(
'SymfonyComponentHttpKernelTestsControllerControllerTest::undefinedAction''InvalidArgumentException''The controller for URI "/" is not callable. Expected method "undefinedAction" on class "SymfonyComponentHttpKernelTestsControllerControllerTest". Available methods: "publicAction", "staticAction"'),
        );
    }

    public function 
testGetArguments()
    {
        
$resolver $this->createControllerResolver();

        
$request Request::create('/');
        
$controller = array(new self(), 'testGetArguments');
        
$this->assertEquals(array(), $resolver->getArguments($request$controller), '->getArguments() returns an empty array if the method takes no arguments');

        
$request Request::create('/');
        
$request->attributes->set('foo''foo');
        
$controller = array(new self(), 'controllerMethod1');
        
$this->assertEquals(array('foo'), $resolver->getArguments($request$controller), '->getArguments() returns an array of arguments for the controller method');

        
$request Request::create('/');
        
$request->attributes->set('foo''foo');
        
$controller = array(new self(), 'controllerMethod2');
        
$this->assertEquals(array('foo'null), $resolver->getArguments($request$controller), '->getArguments() uses default values if present');

        
$request->attributes->set('bar''bar');
        
$this->assertEquals(array('foo''bar'), $resolver->getArguments($request$controller), '->getArguments() overrides default values if provided in the request attributes');

        
$request Request::create('/');
        
$request->attributes->set('foo''foo');
        
$controller = function ($foo) {};
        
$this->assertEquals(array('foo'), $resolver->getArguments($request$controller));

        
$request Request::create('/');
        
$request->attributes->set('foo''foo');
        
$controller = function ($foo$bar 'bar') {};
        
$this->assertEquals(array('foo''bar'), $resolver->getArguments($request$controller));

        
$request Request::create('/');
        
$request->attributes->set('foo''foo');
        
$controller = new self();
        
$this->assertEquals(array('foo'null), $resolver->getArguments($request$controller));
        
$request->attributes->set('bar''bar');
        
$this->assertEquals(array('foo''bar'), $resolver->getArguments($request$controller));

        
$request Request::create('/');
        
$request->attributes->set('foo''foo');
        
$request->attributes->set('foobar''foobar');
        
$controller 'SymfonyComponentHttpKernelTestsControllersome_controller_function';
        
$this->assertEquals(array('foo''foobar'), $resolver->getArguments($request$controller));

        
$request Request::create('/');
        
$request->attributes->set('foo''foo');
        
$request->attributes->set('foobar''foobar');
        
$controller = array(new self(), 'controllerMethod3');

        try {
            
$resolver->getArguments($request$controller);
            
$this->fail('->getArguments() throws a RuntimeException exception if it cannot determine the argument value');
        } catch (
Exception $e) {
            
$this->assertInstanceOf('RuntimeException'$e'->getArguments() throws a RuntimeException exception if it cannot determine the argument value');
        }

        
$request Request::create('/');
        
$controller = array(new self(), 'controllerMethod5');
        
$this->assertEquals(array($request), $resolver->getArguments($request$controller), '->getArguments() injects the request');
    }

    
/**
     * @requires PHP 5.6
     */
    
public function testGetVariadicArguments()
    {
        
$resolver = new ControllerResolver();

        
$request Request::create('/');
        
$request->attributes->set('foo''foo');
        
$request->attributes->set('bar', array('foo''bar'));
        
$controller = array(new VariadicController(), 'action');
        
$this->assertEquals(array('foo''foo''bar'), $resolver->getArguments($request$controller));
    }

    public function 
testCreateControllerCanReturnAnyCallable()
    {
        
$mock $this->getMock('SymfonyComponentHttpKernelControllerControllerResolver', array('createController'));
        
$mock->expects($this->once())->method('createController')->will($this->returnValue('SymfonyComponentHttpKernelTestsControllersome_controller_function'));

        
$request Request::create('/');
        
$request->attributes->set('_controller''foobar');
        
$mock->getController($request);
    }

    protected function 
createControllerResolver(LoggerInterface $logger null)
    {
        return new 
ControllerResolver($logger);
    }

    public function 
__invoke($foo$bar null)
    {
    }

    public function 
controllerMethod1($foo)
    {
    }

    protected function 
controllerMethod2($foo$bar null)
    {
    }

    protected function 
controllerMethod3($foo$bar$foobar)
    {
    }

    protected static function 
controllerMethod4()
    {
    }

    protected function 
controllerMethod5(Request $request)
    {
    }
}

function 
some_controller_function($foo$foobar)
{
}

class 
ControllerTest
{
    public function 
publicAction()
    {
    }

    private function 
privateAction()
    {
    }

    protected function 
protectedAction()
    {
    }

    public static function 
staticAction()
    {
    }
}
Онлайн: 1
Реклама