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\DefaultValueResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestAttributeValueResolver;
-use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestValueResolver;
-use Symfony\Component\HttpKernel\Controller\ArgumentResolver\VariadicValueResolver;
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;
public static function setUpBeforeClass()
{
$factory = new ArgumentMetadataFactory();
- $argumentValueResolvers = array(
- new RequestAttributeValueResolver(),
- new RequestValueResolver(),
- new DefaultValueResolver(),
- new VariadicValueResolver(),
- );
- self::$resolver = new ArgumentResolver($factory, $argumentValueResolvers);
+ self::$resolver = new ArgumentResolver($factory);
}
public function testDefaultState()
$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)
{
}
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)