nginxsonarrradarrplexorganizrdashboardapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmark
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							349 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							349 lines
						
					
					
						
							12 KiB
						
					
					
				
								<?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 Symfony\Component\HttpKernel\Tests\Controller;
							 | 
						|
								
							 | 
						|
								use PHPUnit\Framework\TestCase;
							 | 
						|
								use Symfony\Component\HttpFoundation\Session\Session;
							 | 
						|
								use Symfony\Component\HttpFoundation\Session\SessionInterface;
							 | 
						|
								use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;
							 | 
						|
								use Symfony\Component\HttpKernel\Controller\ArgumentResolver;
							 | 
						|
								use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestAttributeValueResolver;
							 | 
						|
								use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface;
							 | 
						|
								use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactory;
							 | 
						|
								use Symfony\Component\HttpKernel\Tests\Fixtures\Controller\ExtendingRequest;
							 | 
						|
								use Symfony\Component\HttpKernel\Tests\Fixtures\Controller\ExtendingSession;
							 | 
						|
								use Symfony\Component\HttpKernel\Tests\Fixtures\Controller\NullableController;
							 | 
						|
								use Symfony\Component\HttpKernel\Tests\Fixtures\Controller\VariadicController;
							 | 
						|
								use Symfony\Component\HttpFoundation\Request;
							 | 
						|
								
							 | 
						|
								class ArgumentResolverTest extends TestCase
							 | 
						|
								{
							 | 
						|
								    /** @var ArgumentResolver */
							 | 
						|
								    private static $resolver;
							 | 
						|
								
							 | 
						|
								    public static function setUpBeforeClass()
							 | 
						|
								    {
							 | 
						|
								        $factory = new ArgumentMetadataFactory();
							 | 
						|
								
							 | 
						|
								        self::$resolver = new ArgumentResolver($factory);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testDefaultState()
							 | 
						|
								    {
							 | 
						|
								        $this->assertEquals(self::$resolver, new ArgumentResolver());
							 | 
						|
								        $this->assertNotEquals(self::$resolver, new ArgumentResolver(null, array(new RequestAttributeValueResolver())));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetArguments()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('foo', 'foo');
							 | 
						|
								        $controller = array(new self(), 'controllerWithFoo');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array('foo'), self::$resolver->getArguments($request, $controller), '->getArguments() returns an array of arguments for the controller method');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetArgumentsReturnsEmptyArrayWhenNoArguments()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $controller = array(new self(), 'controllerWithoutArguments');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array(), self::$resolver->getArguments($request, $controller), '->getArguments() returns an empty array if the method takes no arguments');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetArgumentsUsesDefaultValue()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('foo', 'foo');
							 | 
						|
								        $controller = array(new self(), 'controllerWithFooAndDefaultBar');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array('foo', null), self::$resolver->getArguments($request, $controller), '->getArguments() uses default values if present');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetArgumentsOverrideDefaultValueByRequestAttribute()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('foo', 'foo');
							 | 
						|
								        $request->attributes->set('bar', 'bar');
							 | 
						|
								        $controller = array(new self(), 'controllerWithFooAndDefaultBar');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array('foo', 'bar'), self::$resolver->getArguments($request, $controller), '->getArguments() overrides default values if provided in the request attributes');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetArgumentsFromClosure()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('foo', 'foo');
							 | 
						|
								        $controller = function ($foo) {};
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array('foo'), self::$resolver->getArguments($request, $controller));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetArgumentsUsesDefaultValueFromClosure()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('foo', 'foo');
							 | 
						|
								        $controller = function ($foo, $bar = 'bar') {};
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array('foo', 'bar'), self::$resolver->getArguments($request, $controller));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetArgumentsFromInvokableObject()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('foo', 'foo');
							 | 
						|
								        $controller = new self();
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array('foo', null), self::$resolver->getArguments($request, $controller));
							 | 
						|
								
							 | 
						|
								        // Test default bar overridden by request attribute
							 | 
						|
								        $request->attributes->set('bar', 'bar');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array('foo', 'bar'), self::$resolver->getArguments($request, $controller));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetArgumentsFromFunctionName()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('foo', 'foo');
							 | 
						|
								        $request->attributes->set('foobar', 'foobar');
							 | 
						|
								        $controller = __NAMESPACE__.'\controller_function';
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array('foo', 'foobar'), self::$resolver->getArguments($request, $controller));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetArgumentsFailsOnUnresolvedValue()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('foo', 'foo');
							 | 
						|
								        $request->attributes->set('foobar', 'foobar');
							 | 
						|
								        $controller = array(new self(), 'controllerWithFooBarFoobar');
							 | 
						|
								
							 | 
						|
								        try {
							 | 
						|
								            self::$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');
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetArgumentsInjectsRequest()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $controller = array(new self(), 'controllerWithRequest');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array($request), self::$resolver->getArguments($request, $controller), '->getArguments() injects the request');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetArgumentsInjectsExtendingRequest()
							 | 
						|
								    {
							 | 
						|
								        $request = ExtendingRequest::create('/');
							 | 
						|
								        $controller = array(new self(), 'controllerWithExtendingRequest');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array($request), self::$resolver->getArguments($request, $controller), '->getArguments() injects the request when extended');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @requires PHP 5.6
							 | 
						|
								     */
							 | 
						|
								    public function testGetVariadicArguments()
							 | 
						|
								    {
							 | 
						|
								        $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'), self::$resolver->getArguments($request, $controller));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @requires PHP 5.6
							 | 
						|
								     * @expectedException \InvalidArgumentException
							 | 
						|
								     */
							 | 
						|
								    public function testGetVariadicArgumentsWithoutArrayInRequest()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('foo', 'foo');
							 | 
						|
								        $request->attributes->set('bar', 'foo');
							 | 
						|
								        $controller = array(new VariadicController(), 'action');
							 | 
						|
								
							 | 
						|
								        self::$resolver->getArguments($request, $controller);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @requires PHP 5.6
							 | 
						|
								     * @expectedException \InvalidArgumentException
							 | 
						|
								     */
							 | 
						|
								    public function testGetArgumentWithoutArray()
							 | 
						|
								    {
							 | 
						|
								        $factory = new ArgumentMetadataFactory();
							 | 
						|
								        $valueResolver = $this->getMockBuilder(ArgumentValueResolverInterface::class)->getMock();
							 | 
						|
								        $resolver = new ArgumentResolver($factory, array($valueResolver));
							 | 
						|
								
							 | 
						|
								        $valueResolver->expects($this->any())->method('supports')->willReturn(true);
							 | 
						|
								        $valueResolver->expects($this->any())->method('resolve')->willReturn('foo');
							 | 
						|
								
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('foo', 'foo');
							 | 
						|
								        $request->attributes->set('bar', 'foo');
							 | 
						|
								        $controller = array($this, 'controllerWithFooAndDefaultBar');
							 | 
						|
								        $resolver->getArguments($request, $controller);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @expectedException \RuntimeException
							 | 
						|
								     */
							 | 
						|
								    public function testIfExceptionIsThrownWhenMissingAnArgument()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $controller = array($this, 'controllerWithFoo');
							 | 
						|
								
							 | 
						|
								        self::$resolver->getArguments($request, $controller);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @requires PHP 7.1
							 | 
						|
								     */
							 | 
						|
								    public function testGetNullableArguments()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('foo', 'foo');
							 | 
						|
								        $request->attributes->set('bar', new \stdClass());
							 | 
						|
								        $request->attributes->set('mandatory', 'mandatory');
							 | 
						|
								        $controller = array(new NullableController(), 'action');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array('foo', new \stdClass(), 'value', 'mandatory'), self::$resolver->getArguments($request, $controller));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @requires PHP 7.1
							 | 
						|
								     */
							 | 
						|
								    public function testGetNullableArgumentsWithDefaults()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('mandatory', 'mandatory');
							 | 
						|
								        $controller = array(new NullableController(), 'action');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array(null, null, 'value', 'mandatory'), self::$resolver->getArguments($request, $controller));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetSessionArguments()
							 | 
						|
								    {
							 | 
						|
								        $session = new Session(new MockArraySessionStorage());
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->setSession($session);
							 | 
						|
								        $controller = array($this, 'controllerWithSession');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array($session), self::$resolver->getArguments($request, $controller));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetSessionArgumentsWithExtendedSession()
							 | 
						|
								    {
							 | 
						|
								        $session = new ExtendingSession(new MockArraySessionStorage());
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->setSession($session);
							 | 
						|
								        $controller = array($this, 'controllerWithExtendingSession');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array($session), self::$resolver->getArguments($request, $controller));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetSessionArgumentsWithInterface()
							 | 
						|
								    {
							 | 
						|
								        $session = $this->getMockBuilder(SessionInterface::class)->getMock();
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->setSession($session);
							 | 
						|
								        $controller = array($this, 'controllerWithSessionInterface');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(array($session), self::$resolver->getArguments($request, $controller));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @expectedException \RuntimeException
							 | 
						|
								     */
							 | 
						|
								    public function testGetSessionMissMatchWithInterface()
							 | 
						|
								    {
							 | 
						|
								        $session = $this->getMockBuilder(SessionInterface::class)->getMock();
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->setSession($session);
							 | 
						|
								        $controller = array($this, 'controllerWithExtendingSession');
							 | 
						|
								
							 | 
						|
								        self::$resolver->getArguments($request, $controller);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @expectedException \RuntimeException
							 | 
						|
								     */
							 | 
						|
								    public function testGetSessionMissMatchWithImplementation()
							 | 
						|
								    {
							 | 
						|
								        $session = new Session(new MockArraySessionStorage());
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->setSession($session);
							 | 
						|
								        $controller = array($this, 'controllerWithExtendingSession');
							 | 
						|
								
							 | 
						|
								        self::$resolver->getArguments($request, $controller);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @expectedException \RuntimeException
							 | 
						|
								     */
							 | 
						|
								    public function testGetSessionMissMatchOnNull()
							 | 
						|
								    {
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $controller = array($this, 'controllerWithExtendingSession');
							 | 
						|
								
							 | 
						|
								        self::$resolver->getArguments($request, $controller);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function __invoke($foo, $bar = null)
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function controllerWithFoo($foo)
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function controllerWithoutArguments()
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    protected function controllerWithFooAndDefaultBar($foo, $bar = null)
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    protected function controllerWithFooBarFoobar($foo, $bar, $foobar)
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    protected function controllerWithRequest(Request $request)
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    protected function controllerWithExtendingRequest(ExtendingRequest $request)
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    protected function controllerWithSession(Session $session)
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    protected function controllerWithSessionInterface(SessionInterface $session)
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    protected function controllerWithExtendingSession(ExtendingSession $session)
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function controller_function($foo, $foobar)
							 | 
						|
								{
							 | 
						|
								}
							 | 
						|
								
							 |