Commit f51da0dd authored by Fabien Potencier's avatar Fabien Potencier

feature #1607 Drop support for older versions of PHP and Symfony (fabpot)

This PR was squashed before being merged into the 2.3.x-dev branch (closes #1607).

Discussion
----------

Drop support for older versions of PHP and Symfony

Let's make it much simpler to maintain future versions of Silex. This pull request does the following (@Ocramius would be proud of me :)):

 * drop support for Twig < 2.0
 * drop support for PHP < 7.1
 * drop support for Symfony 2.x and 3.x

Commits
-------

816f4591 removed obsolete code
63851cc6 use namespaced PHPUnit
182ecf05 removed obsolete code
f1f9ce42 dropped support for older versions of PHP and Symfony
parents a50ba322 816f4591
...@@ -14,31 +14,6 @@ cache: ...@@ -14,31 +14,6 @@ cache:
before_install: before_install:
- phpenv config-rm xdebug.ini - phpenv config-rm xdebug.ini
# Twig 1.x
- if [[ $TWIG_VERSION != 2.0 ]]; then sed -i 's/~1.8|~2.0/~1.8/g' composer.json; fi
# Symfony 2.8
- if [[ $SYMFONY_DEPS_VERSION = 2.8 ]]; then sed -i 's/~2\.8|^3\.0/2.8.*/g' composer.json; fi
# Symfony 3.3
- |
if [[ $SYMFONY_DEPS_VERSION = 3.3 ]]; then
sed -i 's/~2\.8|^3\.0/3.3.*/g' composer.json;
composer require --no-update symfony/web-link:3.3.*
fi
# Symfony 3.4
- |
if [[ $SYMFONY_DEPS_VERSION = 3.4 ]]; then
sed -i 's/~2\.8|^3\.0/3.4.*/g' composer.json;
composer require --no-update symfony/web-link:3.4.*
fi
# Symfony 4.0
- |
if [[ $SYMFONY_DEPS_VERSION = 4.0 ]]; then
sed -i 's/~2\.8|^3\.0/4.0.*/g' composer.json;
composer require --no-update symfony/web-link:4.0.*
fi
- composer update --no-suggest - composer update --no-suggest
install: install:
...@@ -48,18 +23,5 @@ script: ./vendor/bin/simple-phpunit ...@@ -48,18 +23,5 @@ script: ./vendor/bin/simple-phpunit
matrix: matrix:
include: include:
- php: 5.5
- php: 5.6
env: TWIG_VERSION=2.0
- php: 5.6
env: SYMFONY_DEPS_VERSION=2.8
- php: 5.6
env: SYMFONY_DEPS_VERSION=3.3
- php: 5.6
env: SYMFONY_DEPS_VERSION=3.4
- php: 7.2
env: SYMFONY_DEPS_VERSION=4.0
- php: 5.6
- php: 7.0
- php: 7.1 - php: 7.1
- php: 7.2 - php: 7.2
...@@ -15,43 +15,40 @@ ...@@ -15,43 +15,40 @@
} }
], ],
"require": { "require": {
"php": ">=5.5.9", "php": ">=7.1.3",
"pimple/pimple": "~3.0", "pimple/pimple": "^3.0",
"symfony/event-dispatcher": "~2.8|^3.4|^4.0", "symfony/event-dispatcher": "^4.0",
"symfony/http-foundation": "~2.8|^3.4|^4.0", "symfony/http-foundation": "^4.0",
"symfony/http-kernel": "~2.8|^3.4|^4.0", "symfony/http-kernel": "^4.0",
"symfony/routing": "~2.8|^3.4|^4.0" "symfony/routing": "^4.0"
}, },
"require-dev": { "require-dev": {
"symfony/asset": "~2.8|^3.4|^4.0", "symfony/asset": "^4.0",
"symfony/expression-language": "~2.8|^3.4|^4.0", "symfony/expression-language": "^4.0",
"symfony/security": "~2.8|^3.4|^4.0", "symfony/security": "^4.0",
"symfony/config": "~2.8|^3.4|^4.0", "symfony/config": "^4.0",
"symfony/form": "~2.8|^3.4|^4.0", "symfony/form": "^4.0",
"symfony/browser-kit": "~2.8|^3.4|^4.0", "symfony/browser-kit": "^4.0",
"symfony/css-selector": "~2.8|^3.4|^4.0", "symfony/css-selector": "^4.0",
"symfony/debug": "~2.8|^3.4|^4.0", "symfony/debug": "^4.0",
"symfony/dom-crawler": "~2.8|^3.4|^4.0", "symfony/dom-crawler": "^4.0",
"symfony/finder": "~2.8|^3.4|^4.0", "symfony/finder": "^4.0",
"symfony/intl": "~2.8|^3.4|^4.0", "symfony/intl": "^4.0",
"symfony/monolog-bridge": "~2.8|^3.4|^4.0", "symfony/monolog-bridge": "^4.0",
"symfony/doctrine-bridge": "~2.8|^3.4|^4.0", "symfony/doctrine-bridge": "^4.0",
"symfony/options-resolver": "~2.8|^3.4|^4.0", "symfony/options-resolver": "^4.0",
"symfony/phpunit-bridge": "^3.2", "symfony/phpunit-bridge": "^3.2",
"symfony/process": "~2.8|^3.4|^4.0", "symfony/process": "^4.0",
"symfony/serializer": "~2.8|^3.4|^4.0", "symfony/serializer": "^4.0",
"symfony/translation": "~2.8|^3.4|^4.0", "symfony/translation": "^4.0",
"symfony/twig-bridge": "~2.8|^3.4|^4.0", "symfony/twig-bridge": "^4.0",
"symfony/validator": "~2.8|^3.4|^4.0", "symfony/validator": "^4.0",
"symfony/var-dumper": "~2.8|^3.4|^4.0", "symfony/var-dumper": "^4.0",
"twig/twig": "~1.30|~2.0", "twig/twig": "^2.0",
"doctrine/dbal": "~2.2", "doctrine/dbal": "^2.2",
"swiftmailer/swiftmailer": "~5", "swiftmailer/swiftmailer": "^5",
"monolog/monolog": "^1.4.1", "monolog/monolog": "^1.4.1",
"symfony/web-link": "^3.4|^4.0" "symfony/web-link": "^4.0"
},
"conflict": {
"phpunit/phpunit": "<4.8.35 || >= 5.0, <5.4.3"
}, },
"replace": { "replace": {
"silex/api": "self.version", "silex/api": "self.version",
......
...@@ -9,6 +9,9 @@ Changelog ...@@ -9,6 +9,9 @@ Changelog
* allow setting custom status code on exception response with Symfony 3.3+ * allow setting custom status code on exception response with Symfony 3.3+
* made CSRF extension work with Validator translations domain * made CSRF extension work with Validator translations domain
* fixed Security provider context usage * fixed Security provider context usage
* dropped support for Twig < 2.0
* dropped support for PHP < 7.1
* dropped support for Symfony 2.x and 3.x
* added support for Symfony 4 * added support for Symfony 4
2.2.3 (2018-02-25) 2.2.3 (2018-02-25)
......
...@@ -26,10 +26,12 @@ PHPUnit ...@@ -26,10 +26,12 @@ PHPUnit
`PHPUnit <https://github.com/sebastianbergmann/phpunit>`_ is the de-facto `PHPUnit <https://github.com/sebastianbergmann/phpunit>`_ is the de-facto
standard testing framework for PHP. It was built for writing unit tests, but it standard testing framework for PHP. It was built for writing unit tests, but it
can be used for functional tests too. You write tests by creating a new class, can be used for functional tests too. You write tests by creating a new class,
that extends the ``PHPUnit_Framework_TestCase``. Your test cases are methods that extends the ``PHPUnit\Framework\TestCase``. Your test cases are methods
prefixed with ``test``:: prefixed with ``test``::
class ContactFormTest extends \PHPUnit_Framework_TestCase use PHPUnit\Framework\TestCase;
class ContactFormTest extends TestCase
{ {
public function testInitialPage() public function testInitialPage()
{ {
......
<?php
/*
* This file is part of the Silex framework.
*
* (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 Silex;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Controller\ControllerResolver as BaseControllerResolver;
use Symfony\Component\HttpFoundation\Request;
/**
* Adds Application as a valid argument for controllers.
*
* @author Fabien Potencier <fabien@symfony.com>
*
* @deprecated This class can be dropped once Symfony 3.0 is not supported anymore.
*/
class ControllerResolver extends BaseControllerResolver
{
protected $app;
/**
* Constructor.
*
* @param Application $app An Application instance
* @param LoggerInterface $logger A LoggerInterface instance
*/
public function __construct(Application $app, LoggerInterface $logger = null)
{
$this->app = $app;
parent::__construct($logger);
}
protected function doGetArguments(Request $request, $controller, array $parameters)
{
foreach ($parameters as $param) {
if ($param->getClass() && $param->getClass()->isInstance($this->app)) {
$request->attributes->set($param->getName(), $this->app);
break;
}
}
return parent::doGetArguments($request, $controller, $parameters);
}
}
...@@ -72,10 +72,6 @@ class AssetServiceProvider implements ServiceProviderInterface ...@@ -72,10 +72,6 @@ class AssetServiceProvider implements ServiceProviderInterface
} }
if ($jsonManifestPath) { if ($jsonManifestPath) {
if (!class_exists('Symfony\Component\Asset\VersionStrategy\JsonManifestVersionStrategy')) {
throw new \RuntimeException('You must require symfony/asset >= 3.3 to use JSON manifest version strategy.');
}
return new JsonManifestVersionStrategy($jsonManifestPath); return new JsonManifestVersionStrategy($jsonManifestPath);
} }
......
...@@ -7,23 +7,17 @@ use Pimple\ServiceProviderInterface; ...@@ -7,23 +7,17 @@ use Pimple\ServiceProviderInterface;
use Silex\Api\EventListenerProviderInterface; use Silex\Api\EventListenerProviderInterface;
use Silex\AppArgumentValueResolver; use Silex\AppArgumentValueResolver;
use Silex\CallbackResolver; use Silex\CallbackResolver;
use Silex\ControllerResolver;
use Silex\EventListener\ConverterListener; use Silex\EventListener\ConverterListener;
use Silex\EventListener\MiddlewareListener; use Silex\EventListener\MiddlewareListener;
use Silex\EventListener\StringToResponseListener; use Silex\EventListener\StringToResponseListener;
use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver; use Symfony\Component\HttpKernel\Controller\ArgumentResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestAttributeValueResolver; use Symfony\Component\HttpKernel\Controller\ControllerResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestValueResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\DefaultValueResolver;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\VariadicValueResolver;
use Symfony\Component\HttpKernel\Controller\ControllerResolver as SfControllerResolver;
use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactory; use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactory;
use Symfony\Component\HttpKernel\EventListener\ResponseListener; use Symfony\Component\HttpKernel\EventListener\ResponseListener;
use Symfony\Component\HttpKernel\HttpKernel; use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\WebLink\EventListener\AddLinkHeaderListener; use Symfony\Component\WebLink\EventListener\AddLinkHeaderListener;
use Symfony\Component\WebLink\HttpHeaderSerializer; use Symfony\Component\WebLink\HttpHeaderSerializer;
...@@ -35,36 +29,18 @@ class HttpKernelServiceProvider implements ServiceProviderInterface, EventListen ...@@ -35,36 +29,18 @@ class HttpKernelServiceProvider implements ServiceProviderInterface, EventListen
public function register(Container $app) public function register(Container $app)
{ {
$app['resolver'] = function ($app) { $app['resolver'] = function ($app) {
if (Kernel::VERSION_ID >= 30100) { return new ControllerResolver($app['logger']);
return new SfControllerResolver($app['logger']);
}
return new ControllerResolver($app, $app['logger']);
}; };
if (Kernel::VERSION_ID >= 30100) { $app['argument_metadata_factory'] = function ($app) {
$app['argument_metadata_factory'] = function ($app) { return new ArgumentMetadataFactory();
return new ArgumentMetadataFactory(); };
}; $app['argument_value_resolvers'] = function ($app) {
$app['argument_value_resolvers'] = function ($app) { return array_merge([new AppArgumentValueResolver($app)], ArgumentResolver::getDefaultArgumentValueResolvers());
if (Kernel::VERSION_ID < 30200) { };
return [
new AppArgumentValueResolver($app),
new RequestAttributeValueResolver(),
new RequestValueResolver(),
new DefaultValueResolver(),
new VariadicValueResolver(),
];
}
return array_merge([new AppArgumentValueResolver($app)], ArgumentResolver::getDefaultArgumentValueResolvers());
};
}
$app['argument_resolver'] = function ($app) { $app['argument_resolver'] = function ($app) {
if (Kernel::VERSION_ID >= 30100) { return new ArgumentResolver($app['argument_metadata_factory'], $app['argument_value_resolvers']);
return new ArgumentResolver($app['argument_metadata_factory'], $app['argument_value_resolvers']);
}
}; };
$app['kernel'] = function ($app) { $app['kernel'] = function ($app) {
......
...@@ -19,7 +19,6 @@ use Monolog\Handler; ...@@ -19,7 +19,6 @@ use Monolog\Handler;
use Monolog\ErrorHandler; use Monolog\ErrorHandler;
use Silex\Application; use Silex\Application;
use Silex\Api\BootableProviderInterface; use Silex\Api\BootableProviderInterface;
use Symfony\Bridge\Monolog\Handler\DebugHandler;
use Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy; use Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy;
use Symfony\Bridge\Monolog\Processor\DebugProcessor; use Symfony\Bridge\Monolog\Processor\DebugProcessor;
use Silex\EventListener\LogListener; use Silex\EventListener\LogListener;
...@@ -38,12 +37,6 @@ class MonologServiceProvider implements ServiceProviderInterface, BootableProvid ...@@ -38,12 +37,6 @@ class MonologServiceProvider implements ServiceProviderInterface, BootableProvid
}; };
if ($bridge = class_exists('Symfony\Bridge\Monolog\Logger')) { if ($bridge = class_exists('Symfony\Bridge\Monolog\Logger')) {
$app['monolog.handler.debug'] = function () use ($app) {
$level = MonologServiceProvider::translateLevel($app['monolog.level']);
return new DebugHandler($level);
};
if (isset($app['request_stack'])) { if (isset($app['request_stack'])) {
$app['monolog.not_found_activation_strategy'] = function () use ($app) { $app['monolog.not_found_activation_strategy'] = function () use ($app) {
return new NotFoundActivationStrategy($app['request_stack'], ['^/'], $app['monolog.level']); return new NotFoundActivationStrategy($app['request_stack'], ['^/'], $app['monolog.level']);
...@@ -64,11 +57,7 @@ class MonologServiceProvider implements ServiceProviderInterface, BootableProvid ...@@ -64,11 +57,7 @@ class MonologServiceProvider implements ServiceProviderInterface, BootableProvid
$log->pushHandler($handler); $log->pushHandler($handler);
if ($app['debug'] && $bridge) { if ($app['debug'] && $bridge) {
if (class_exists(DebugProcessor::class)) { $log->pushProcessor(new DebugProcessor());
$log->pushProcessor(new DebugProcessor());
} else {
$log->pushHandler($app['monolog.handler.debug']);
}
} }
return $log; return $log;
......
...@@ -13,10 +13,8 @@ namespace Silex\Provider; ...@@ -13,10 +13,8 @@ namespace Silex\Provider;
use Pimple\Container; use Pimple\Container;
use Pimple\ServiceProviderInterface; use Pimple\ServiceProviderInterface;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Translation\Translator; use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\Formatter\MessageFormatter; use Symfony\Component\Translation\Formatter\MessageFormatter;
use Symfony\Component\Translation\MessageSelector;
use Symfony\Component\Translation\Loader\ArrayLoader; use Symfony\Component\Translation\Loader\ArrayLoader;
use Symfony\Component\Translation\Loader\XliffFileLoader; use Symfony\Component\Translation\Loader\XliffFileLoader;
use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface;
...@@ -79,10 +77,6 @@ class TranslationServiceProvider implements ServiceProviderInterface, EventListe ...@@ -79,10 +77,6 @@ class TranslationServiceProvider implements ServiceProviderInterface, EventListe
} }
$app['translator.message_selector'] = function () { $app['translator.message_selector'] = function () {
if (Kernel::VERSION_ID < 30400) {
return new MessageSelector();
}
return new MessageFormatter(); return new MessageFormatter();
}; };
......
...@@ -25,11 +25,8 @@ use Symfony\Bridge\Twig\Extension\HttpFoundationExtension; ...@@ -25,11 +25,8 @@ use Symfony\Bridge\Twig\Extension\HttpFoundationExtension;
use Symfony\Bridge\Twig\Extension\HttpKernelExtension; use Symfony\Bridge\Twig\Extension\HttpKernelExtension;
use Symfony\Bridge\Twig\Extension\WebLinkExtension; use Symfony\Bridge\Twig\Extension\WebLinkExtension;
use Symfony\Bridge\Twig\Form\TwigRendererEngine; use Symfony\Bridge\Twig\Form\TwigRendererEngine;
use Symfony\Bridge\Twig\Form\TwigRenderer;
use Symfony\Bridge\Twig\Extension\HttpKernelRuntime; use Symfony\Bridge\Twig\Extension\HttpKernelRuntime;
use Symfony\Component\Form\FormRenderer; use Symfony\Component\Form\FormRenderer;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\WebLink\HttpHeaderSerializer;
/** /**
* Twig integration for Silex. * Twig integration for Silex.
...@@ -128,14 +125,10 @@ class TwigServiceProvider implements ServiceProviderInterface ...@@ -128,14 +125,10 @@ class TwigServiceProvider implements ServiceProviderInterface
$app['twig.form.renderer'] = function ($app) { $app['twig.form.renderer'] = function ($app) {
$csrfTokenManager = isset($app['csrf.token_manager']) ? $app['csrf.token_manager'] : null; $csrfTokenManager = isset($app['csrf.token_manager']) ? $app['csrf.token_manager'] : null;
if (Kernel::VERSION_ID < 30400) {
return new TwigRenderer($app['twig.form.engine'], $csrfTokenManager);
}
return new FormRenderer($app['twig.form.engine'], $csrfTokenManager); return new FormRenderer($app['twig.form.engine'], $csrfTokenManager);
}; };
$twig->addExtension(new FormExtension(class_exists(HttpKernelRuntime::class) ? null : $app['twig.form.renderer'])); $twig->addExtension(new FormExtension());
// add loader for Symfony built-in form templates // add loader for Symfony built-in form templates
$reflected = new \ReflectionClass('Symfony\Bridge\Twig\Extension\FormExtension'); $reflected = new \ReflectionClass('Symfony\Bridge\Twig\Extension\FormExtension');
...@@ -147,13 +140,8 @@ class TwigServiceProvider implements ServiceProviderInterface ...@@ -147,13 +140,8 @@ class TwigServiceProvider implements ServiceProviderInterface
$twig->addExtension(new DumpExtension($app['var_dumper.cloner'])); $twig->addExtension(new DumpExtension($app['var_dumper.cloner']));
} }
if (class_exists(HttpKernelRuntime::class)) { $twig->addRuntimeLoader($app['twig.runtime_loader']);
$twig->addRuntimeLoader($app['twig.runtime_loader']); $twig->addExtension(new WebLinkExtension($app['request_stack']));
}
if (class_exists(HttpHeaderSerializer::class) && class_exists(WebLinkExtension::class)) {
$twig->addExtension(new WebLinkExtension($app['request_stack']));
}
} }
return $twig; return $twig;
...@@ -192,19 +180,10 @@ class TwigServiceProvider implements ServiceProviderInterface ...@@ -192,19 +180,10 @@ class TwigServiceProvider implements ServiceProviderInterface
}; };
$app['twig.runtimes'] = function ($app) { $app['twig.runtimes'] = function ($app) {
$runtimes = []; return [
HttpKernelRuntime::class => 'twig.runtime.httpkernel',
if (class_exists(HttpKernelRuntime::class)) { FormRenderer::class => 'twig.form.renderer',
$runtimes[HttpKernelRuntime::class] = 'twig.runtime.httpkernel'; ];
}
if (Kernel::VERSION_ID < 30400) {
$runtimes[TwigRenderer::class] = 'twig.form.renderer';
} else {
$runtimes[FormRenderer::class] = 'twig.form.renderer';
}
return $runtimes;
}; };
$app['twig.runtime_loader'] = function ($app) { $app['twig.runtime_loader'] = function ($app) {
......
...@@ -17,8 +17,6 @@ use Monolog\Handler\TestHandler; ...@@ -17,8 +17,6 @@ use Monolog\Handler\TestHandler;
use Monolog\Logger; use Monolog\Logger;
/** /**
* MonologTrait test cases.
*
* @author Fabien Potencier <fabien@symfony.com> * @author Fabien Potencier <fabien@symfony.com>
*/ */
class MonologTraitTest extends TestCase class MonologTraitTest extends TestCase
......
...@@ -17,8 +17,6 @@ use Symfony\Component\Security\Core\User\User; ...@@ -17,8 +17,6 @@ use Symfony\Component\Security\Core\User\User;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
/** /**
* SecurityTrait test cases.
*
* @author Fabien Potencier <fabien@symfony.com> * @author Fabien Potencier <fabien@symfony.com>
*/ */
class SecurityTraitTest extends TestCase class SecurityTraitTest extends TestCase
......
...@@ -15,8 +15,6 @@ use PHPUnit\Framework\TestCase; ...@@ -15,8 +15,6 @@ use PHPUnit\Framework\TestCase;
use Silex\Provider\SwiftmailerServiceProvider; use Silex\Provider\SwiftmailerServiceProvider;
/** /**
* SwiftmailerTrait test cases.
*
* @author Fabien Potencier <fabien@symfony.com> * @author Fabien Potencier <fabien@symfony.com>
*/ */
class SwiftmailerTraitTest extends TestCase class SwiftmailerTraitTest extends TestCase
......
...@@ -15,8 +15,6 @@ use PHPUnit\Framework\TestCase; ...@@ -15,8 +15,6 @@ use PHPUnit\Framework\TestCase;
use Silex\Provider\TranslationServiceProvider; use Silex\Provider\TranslationServiceProvider;
/** /**
* TranslationTrait test cases.
*
* @author Fabien Potencier <fabien@symfony.com> * @author Fabien Potencier <fabien@symfony.com>
*/ */
class TranslationTraitTest extends TestCase class TranslationTraitTest extends TestCase
......
...@@ -17,8 +17,6 @@ use Symfony\Component\HttpFoundation\Response; ...@@ -17,8 +17,6 @@ use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpFoundation\StreamedResponse;
/** /**
* TwigTrait test cases.
*
* @author Fabien Potencier <fabien@symfony.com> * @author Fabien Potencier <fabien@symfony.com>
*/ */
class TwigTraitTest extends TestCase class TwigTraitTest extends TestCase
......
...@@ -25,7 +25,6 @@ use Symfony\Component\HttpFoundation\StreamedResponse; ...@@ -25,7 +25,6 @@ use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\EventDispatcher\Event; use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\WebLink\HttpHeaderSerializer;
/** /**
* Application test cases. * Application test cases.
...@@ -661,10 +660,6 @@ class ApplicationTest extends TestCase ...@@ -661,10 +660,6 @@ class ApplicationTest extends TestCase
public function testWebLinkListener() public function testWebLinkListener()
{ {
if (!class_exists(HttpHeaderSerializer::class)) {
self::markTestSkipped('Symfony WebLink component is required.');
}
$app = new Application(); $app = new Application();
$app->get('/', function () { $app->get('/', function () {
......
<?php
/*
* This file is part of the Silex framework.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace Silex\Tests;
use PHPUnit\Framework\TestCase;
use Silex\ControllerResolver;
use Silex\Application;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Kernel;
/**
* ControllerResolver test cases.
*
* @author Fabien Potencier <fabien@symfony.com>
*/
class ControllerResolverTest extends TestCase
{
/**
* @group legacy
*/
public function testGetArguments()
{
if (Kernel::VERSION_ID >= 30100) {
self::markTestSkipped('HttpKernel < 3.1.0 is required');
}
$app = new Application();
$resolver = new ControllerResolver($app);
$controller = function (Application $app) {};
$args = $resolver->getArguments(Request::create('/'), $controller);
$this->assertSame($app, $args[0]);
}
}
...@@ -36,12 +36,6 @@ class AssetServiceProviderTest extends TestCase ...@@ -36,12 +36,6 @@ class AssetServiceProviderTest extends TestCase
public function testJsonManifestVersionStrategy() public function testJsonManifestVersionStrategy()
{ {
if (!class_exists('Symfony\Component\Asset\VersionStrategy\JsonManifestVersionStrategy')) {
$this->markTestSkipped('JsonManifestVersionStrategy class is not available.');
return;
}
$app = new Application(); $app = new Application();
$app->register(new AssetServiceProvider(), [ $app->register(new AssetServiceProvider(), [
'assets.json_manifest_path' => __DIR__.'/../Fixtures/manifest.json', 'assets.json_manifest_path' => __DIR__.'/../Fixtures/manifest.json',
......
...@@ -23,7 +23,6 @@ use Symfony\Component\Form\AbstractTypeExtension; ...@@ -23,7 +23,6 @@ use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormTypeGuesserChain; use Symfony\Component\Form\FormTypeGuesserChain;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Translation\Exception\NotFoundResourceException; use Symfony\Component\Translation\Exception\NotFoundResourceException;
class FormServiceProviderTest extends TestCase class FormServiceProviderTest extends TestCase
...@@ -313,52 +312,19 @@ class FormServiceProviderTest extends TestCase ...@@ -313,52 +312,19 @@ class FormServiceProviderTest extends TestCase
} }
} }
if (!class_exists('Symfony\Component\Form\Deprecated\FormEvents')) { class DummyFormType extends AbstractType
class DummyFormType extends AbstractType {
{
}
} else {
// FormTypeInterface::getName() is needed by the form component 2.8.x
class DummyFormType extends AbstractType
{
/**
* @return string The name of this type
*/
public function getName()
{
return 'dummy';
}
}
} }
if (method_exists('Symfony\Component\Form\AbstractType', 'configureOptions')) { class DummyFormTypeExtension extends AbstractTypeExtension
class DummyFormTypeExtension extends AbstractTypeExtension {
public function getExtendedType()
{ {
public function getExtendedType() return 'Symfony\Component\Form\Extension\Core\Type\FileType';
{
return 'Symfony\Component\Form\Extension\Core\Type\FileType';
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefined(['image_path']);
}
} }
} else {
class DummyFormTypeExtension extends AbstractTypeExtension
{
public function getExtendedType()
{
return 'Symfony\Component\Form\Extension\Core\Type\FileType';
}
public function setDefaultOptions(OptionsResolverInterface $resolver) public function configureOptions(OptionsResolver $resolver)
{ {
if (!method_exists($resolver, 'setDefined')) { $resolver->setDefined(['image_path']);
$resolver->setOptional(['image_path']);
} else {
$resolver->setDefined(['image_path']);
}
}
} }
} }
...@@ -11,16 +11,15 @@ ...@@ -11,16 +11,15 @@
namespace Silex\Tests\Provider; namespace Silex\Tests\Provider;
use PHPUnit\Framework\TestCase;
use Monolog\Formatter\JsonFormatter; use Monolog\Formatter\JsonFormatter;
use Monolog\Handler\TestHandler; use Monolog\Handler\TestHandler;
use Monolog\Logger; use Monolog\Logger;
use PHPUnit\Framework\TestCase;
use Silex\Application; use Silex\Application;
use Silex\Provider\MonologServiceProvider; use Silex\Provider\MonologServiceProvider;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\Kernel;
/** /**
* MonologProvider test cases. * MonologProvider test cases.
...@@ -59,12 +58,8 @@ class MonologServiceProviderTest extends TestCase ...@@ -59,12 +58,8 @@ class MonologServiceProviderTest extends TestCase
$this->assertTrue($app['monolog.handler']->hasDebug('< 200')); $this->assertTrue($app['monolog.handler']->hasDebug('< 200'));
$records = $app['monolog.handler']->getRecords(); $records = $app['monolog.handler']->getRecords();
if (Kernel::VERSION_ID < 30100) { $this->assertContains('Matched route "{route}".', $records[0]['message']);
$this->assertContains('Matched route "GET_foo"', $records[0]['message']); $this->assertSame('GET_foo', $records[0]['context']['route']);
} else {
$this->assertContains('Matched route "{route}".', $records[0]['message']);
$this->assertSame('GET_foo', $records[0]['context']['route']);
}
} }
public function testManualLogging() public function testManualLogging()
......
...@@ -13,7 +13,6 @@ namespace Silex\Tests\Provider\SecurityServiceProviderTest; ...@@ -13,7 +13,6 @@ namespace Silex\Tests\Provider\SecurityServiceProviderTest;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface; use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Guard\AbstractGuardAuthenticator; use Symfony\Component\Security\Guard\AbstractGuardAuthenticator;
...@@ -28,7 +27,7 @@ class TokenAuthenticator extends AbstractGuardAuthenticator ...@@ -28,7 +27,7 @@ class TokenAuthenticator extends AbstractGuardAuthenticator
public function getCredentials(Request $request) public function getCredentials(Request $request)
{ {
if (!$token = $request->headers->get('X-AUTH-TOKEN')) { if (!$token = $request->headers->get('X-AUTH-TOKEN')) {
return Kernel::VERSION_ID < 30400 ? null : false; return false;
} }
list($username, $secret) = explode(':', $token); list($username, $secret) = explode(':', $token);
......
...@@ -18,10 +18,7 @@ use Silex\Provider\CsrfServiceProvider; ...@@ -18,10 +18,7 @@ use Silex\Provider\CsrfServiceProvider;
use Silex\Provider\FormServiceProvider; use Silex\Provider\FormServiceProvider;
use Silex\Provider\TwigServiceProvider; use Silex\Provider\TwigServiceProvider;
use Silex\Provider\AssetServiceProvider; use Silex\Provider\AssetServiceProvider;
use Symfony\Bridge\Twig\Extension\WebLinkExtension;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\WebLink\HttpHeaderSerializer;
/** /**
* TwigProvider test cases. * TwigProvider test cases.
...@@ -112,11 +109,7 @@ class TwigServiceProviderTest extends TestCase ...@@ -112,11 +109,7 @@ class TwigServiceProviderTest extends TestCase
$this->assertInstanceOf('Twig_Environment', $app['twig']); $this->assertInstanceOf('Twig_Environment', $app['twig']);
$this->assertInstanceOf('Symfony\Bridge\Twig\Form\TwigRendererEngine', $app['twig.form.engine']); $this->assertInstanceOf('Symfony\Bridge\Twig\Form\TwigRendererEngine', $app['twig.form.engine']);
if (Kernel::VERSION_ID < 30400) { $this->assertInstanceOf('Symfony\Component\Form\FormRenderer', $app['twig.form.renderer']);
$this->assertInstanceOf('Symfony\Bridge\Twig\Form\TwigRenderer', $app['twig.form.renderer']);
} else {
$this->assertInstanceOf('Symfony\Component\Form\FormRenderer', $app['twig.form.renderer']);
}
} }
public function testFormWithoutCsrf() public function testFormWithoutCsrf()
...@@ -152,10 +145,6 @@ class TwigServiceProviderTest extends TestCase ...@@ -152,10 +145,6 @@ class TwigServiceProviderTest extends TestCase
public function testWebLinkIntegration() public function testWebLinkIntegration()
{ {
if (!class_exists(HttpHeaderSerializer::class) || !class_exists(WebLinkExtension::class)) {
$this->markTestSkipped('Twig WebLink extension not available.');
}
$app = new Application(); $app = new Application();
$app['request_stack']->push($request = Request::create('/')); $app['request_stack']->push($request = Request::create('/'));
$app->register(new TwigServiceProvider(), [ $app->register(new TwigServiceProvider(), [
......
...@@ -20,7 +20,6 @@ use Symfony\Component\Translation\Exception\NotFoundResourceException; ...@@ -20,7 +20,6 @@ use Symfony\Component\Translation\Exception\NotFoundResourceException;
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints as Assert;
use Silex\Tests\Provider\ValidatorServiceProviderTest\Constraint\Custom; use Silex\Tests\Provider\ValidatorServiceProviderTest\Constraint\Custom;
use Silex\Tests\Provider\ValidatorServiceProviderTest\Constraint\CustomValidator; use Silex\Tests\Provider\ValidatorServiceProviderTest\Constraint\CustomValidator;
use Symfony\Component\Validator\ValidatorInterface as LegacyValidatorInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Component\Validator\Validator\ValidatorInterface;
/** /**
...@@ -36,8 +35,6 @@ class ValidatorServiceProviderTest extends TestCase ...@@ -36,8 +35,6 @@ class ValidatorServiceProviderTest extends TestCase
$app->register(new ValidatorServiceProvider()); $app->register(new ValidatorServiceProvider());
$app->register(new FormServiceProvider()); $app->register(new FormServiceProvider());
$this->assertInstanceOf('Symfony\Component\Validator\Validator\ValidatorInterface', $app['validator']);
return $app; return $app;
} }
...@@ -55,8 +52,6 @@ class ValidatorServiceProviderTest extends TestCase ...@@ -55,8 +52,6 @@ class ValidatorServiceProviderTest extends TestCase
], ],
]); ]);
$this->assertInstanceOf('Symfony\Component\Validator\Validator\ValidatorInterface', $app['validator']);
return $app; return $app;
} }
...@@ -86,7 +81,7 @@ class ValidatorServiceProviderTest extends TestCase ...@@ -86,7 +81,7 @@ class ValidatorServiceProviderTest extends TestCase
*/ */
public function testValidatorServiceIsAValidator($app) public function testValidatorServiceIsAValidator($app)
{ {
$this->assertTrue($app['validator'] instanceof ValidatorInterface || $app['validator'] instanceof LegacyValidatorInterface); $this->assertTrue($app['validator'] instanceof ValidatorInterface);
} }
/** /**
......
...@@ -15,7 +15,6 @@ use PHPUnit\Framework\TestCase; ...@@ -15,7 +15,6 @@ use PHPUnit\Framework\TestCase;
use Silex\ServiceControllerResolver; use Silex\ServiceControllerResolver;
use Silex\Application; use Silex\Application;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Kernel;
/** /**
* Unit tests for ServiceControllerResolver, see ServiceControllerResolverRouterTest for some * Unit tests for ServiceControllerResolver, see ServiceControllerResolverRouterTest for some
...@@ -77,22 +76,4 @@ class ServiceControllerResolverTest extends Testcase ...@@ -77,22 +76,4 @@ class ServiceControllerResolverTest extends Testcase
$this->assertEquals(123, $this->resolver->getController($req)); $this->assertEquals(123, $this->resolver->getController($req));
} }
/**
* @group legacy
*/
public function testShouldDelegateGetArguments()
{
if (Kernel::VERSION_ID >= 40000) {
self::markTestSkipped('HttpKernel < 4.0 is required');
}
$req = Request::create('/');
$this->mockResolver->expects($this->once())
->method('getArguments')
->with($req)
->will($this->returnValue(123));
$this->assertEquals(123, $this->resolver->getArguments($req, function () {}));
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment