Merge branch '4.4'

* 4.4:
  [HttpKernel] fixed class having a leading \ in a route controller
  [HttpKernel] trim the leading backslash in the controller init
  Bump minimal requirements
  Use PHPUnit 8.3 on Travis when possible
This commit is contained in:
Nicolas Grekas 2019-08-09 14:41:16 +02:00
commit 547b9b8fc3
6 changed files with 36 additions and 7 deletions

View File

@ -29,9 +29,6 @@ matrix:
env: deps=high env: deps=high
- php: 7.3 - php: 7.3
env: deps=low env: deps=low
- php: 7.4snapshot
allow_failures:
- php: 7.4snapshot
fast_finish: true fast_finish: true
cache: cache:

View File

@ -114,7 +114,7 @@
"psr/http-client": "^1.0", "psr/http-client": "^1.0",
"psr/simple-cache": "^1.0", "psr/simple-cache": "^1.0",
"egulias/email-validator": "~1.2,>=1.2.8|~2.0", "egulias/email-validator": "~1.2,>=1.2.8|~2.0",
"symfony/phpunit-bridge": "^3.4.19|^4.1.8|~5.0", "symfony/phpunit-bridge": "^3.4.31|^4.3.4|~5.0",
"symfony/security-acl": "~2.8|~3.0", "symfony/security-acl": "~2.8|~3.0",
"phpdocumentor/reflection-docblock": "^3.0|^4.0" "phpdocumentor/reflection-docblock": "^3.0|^4.0"
}, },

View File

@ -8,8 +8,8 @@ if (!file_exists(__DIR__.'/vendor/symfony/phpunit-bridge/bin/simple-phpunit')) {
exit(1); exit(1);
} }
if (!getenv('SYMFONY_PHPUNIT_VERSION')) { if (!getenv('SYMFONY_PHPUNIT_VERSION')) {
if (\PHP_VERSION_ID >= 70400) { if (\PHP_VERSION_ID >= 70200) {
putenv('SYMFONY_PHPUNIT_VERSION=8.2'); putenv('SYMFONY_PHPUNIT_VERSION=8.3');
} elseif (\PHP_VERSION_ID >= 70000) { } elseif (\PHP_VERSION_ID >= 70000) {
putenv('SYMFONY_PHPUNIT_VERSION=6.5'); putenv('SYMFONY_PHPUNIT_VERSION=6.5');
} }

View File

@ -39,7 +39,7 @@ class LegacyRouteLoaderContainerTest extends TestCase
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
protected function setUp() protected function setUp(): void
{ {
$this->container = new Container(); $this->container = new Container();
$this->container->set('foo', new \stdClass()); $this->container->set('foo', new \stdClass());

View File

@ -47,6 +47,8 @@ class ContainerControllerResolver extends ControllerResolver
*/ */
protected function instantiateController(string $class) protected function instantiateController(string $class)
{ {
$class = ltrim($class, '\\');
if ($this->container->has($class)) { if ($this->container->has($class)) {
return $this->container->get($class); return $this->container->get($class);
} }

View File

@ -119,6 +119,36 @@ class ContainerControllerResolverTest extends ControllerResolverTest
$this->assertSame($service, $controller); $this->assertSame($service, $controller);
} }
/**
* @dataProvider getControllers
*/
public function testInstantiateControllerWhenControllerStartsWithABackslash($controller)
{
$service = new ControllerTestService('foo');
$class = ControllerTestService::class;
$container = $this->createMockContainer();
$container->expects($this->once())->method('has')->with($class)->willReturn(true);
$container->expects($this->once())->method('get')->with($class)->willReturn($service);
$resolver = $this->createControllerResolver(null, $container);
$request = Request::create('/');
$request->attributes->set('_controller', $controller);
$controller = $resolver->getController($request);
$this->assertInstanceOf(ControllerTestService::class, $controller[0]);
$this->assertSame('action', $controller[1]);
}
public function getControllers()
{
return [
['\\'.ControllerTestService::class.'::action'],
['\\'.ControllerTestService::class.':action'],
];
}
public function testExceptionWhenUsingRemovedControllerServiceWithClassNameAsName() public function testExceptionWhenUsingRemovedControllerServiceWithClassNameAsName()
{ {
$this->expectException('InvalidArgumentException'); $this->expectException('InvalidArgumentException');