From 571d46cf01d4ab1c6e285242c19bfb1aaf89278d Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Sat, 23 May 2020 18:55:06 +0200 Subject: [PATCH] Make PHP 8 green on Travis --- .travis.yml | 3 +-- .../Tests/Compiler/AutowirePassTest.php | 4 ++++ ...gumentsOptionalScalarNotReallyOptional.php | 14 ++++++++++++++ .../Fixtures/includes/autowiring_classes.php | 6 ------ .../Tests/Controller/ArgumentResolverTest.php | 8 ++++---- .../Controller/ControllerResolverTest.php | 8 +++++--- .../ArgumentMetadataFactoryTest.php | 6 +++--- .../Controller/LegacyNullableController.php | 19 +++++++++++++++++++ .../Controller/NullableController.php | 2 +- .../Component/Process/Pipes/UnixPipes.php | 2 +- .../Component/Process/Tests/ProcessTest.php | 9 ++++++++- .../Normalizer/AbstractObjectNormalizer.php | 2 +- .../Normalizer/GetSetMethodNormalizerTest.php | 2 +- .../Tests/Normalizer/ObjectNormalizerTest.php | 4 ++-- 14 files changed, 64 insertions(+), 25 deletions(-) create mode 100644 src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/MultipleArgumentsOptionalScalarNotReallyOptional.php create mode 100644 src/Symfony/Component/HttpKernel/Tests/Fixtures/Controller/LegacyNullableController.php diff --git a/.travis.yml b/.travis.yml index 61445ec192..50c692fa01 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,8 +32,6 @@ matrix: - php: nightly services: [memcached] fast_finish: true - allow_failures: - - php: nightly cache: directories: @@ -264,6 +262,7 @@ install: # Set composer's platform to php 7.4 if we're on php 8. if [[ $PHP = nightly ]]; then composer config platform.php 7.4.99 + export SYMFONY_DEPRECATIONS_HELPER=weak fi - | diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php index a32a6c9735..e11154889c 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php @@ -23,6 +23,7 @@ use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\DependencyInjection\Tests\Fixtures\CaseSensitiveClass; use Symfony\Component\DependencyInjection\Tests\Fixtures\includes\FooVariadic; +use Symfony\Component\DependencyInjection\Tests\Fixtures\includes\MultipleArgumentsOptionalScalarNotReallyOptional; use Symfony\Component\DependencyInjection\TypedReference; require_once __DIR__.'/../Fixtures/includes/autowiring_classes.php'; @@ -473,6 +474,9 @@ class AutowirePassTest extends TestCase (new AutowirePass())->process($container); } + /** + * @requires PHP < 8 + */ public function testOptionalScalarNotReallyOptionalUsesDefaultValue() { $container = new ContainerBuilder(); diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/MultipleArgumentsOptionalScalarNotReallyOptional.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/MultipleArgumentsOptionalScalarNotReallyOptional.php new file mode 100644 index 0000000000..dcaaacc1f4 --- /dev/null +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/MultipleArgumentsOptionalScalarNotReallyOptional.php @@ -0,0 +1,14 @@ +attributes->set('foo', 'foo'); $request->attributes->set('bar', new \stdClass()); - $request->attributes->set('mandatory', 'mandatory'); + $request->attributes->set('last', 'last'); $controller = [new NullableController(), 'action']; - $this->assertEquals(['foo', new \stdClass(), 'value', 'mandatory'], self::$resolver->getArguments($request, $controller)); + $this->assertEquals(['foo', new \stdClass(), 'value', 'last'], self::$resolver->getArguments($request, $controller)); } /** @@ -228,10 +228,10 @@ class ArgumentResolverTest extends TestCase public function testGetNullableArgumentsWithDefaults() { $request = Request::create('/'); - $request->attributes->set('mandatory', 'mandatory'); + $request->attributes->set('last', 'last'); $controller = [new NullableController(), 'action']; - $this->assertEquals([null, null, 'value', 'mandatory'], self::$resolver->getArguments($request, $controller)); + $this->assertEquals([null, null, 'value', 'last'], self::$resolver->getArguments($request, $controller)); } public function testGetSessionArguments() diff --git a/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php b/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php index d2684791fe..b0a6b20058 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php @@ -15,7 +15,7 @@ use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Controller\ControllerResolver; -use Symfony\Component\HttpKernel\Tests\Fixtures\Controller\NullableController; +use Symfony\Component\HttpKernel\Tests\Fixtures\Controller\LegacyNullableController; use Symfony\Component\HttpKernel\Tests\Fixtures\Controller\VariadicController; class ControllerResolverTest extends TestCase @@ -243,6 +243,7 @@ class ControllerResolverTest extends TestCase /** * @requires PHP 7.1 + * @requires PHP < 8 * @group legacy */ public function testGetNullableArguments() @@ -253,12 +254,13 @@ class ControllerResolverTest extends TestCase $request->attributes->set('foo', 'foo'); $request->attributes->set('bar', new \stdClass()); $request->attributes->set('mandatory', 'mandatory'); - $controller = [new NullableController(), 'action']; + $controller = [new LegacyNullableController(), 'action']; $this->assertEquals(['foo', new \stdClass(), 'value', 'mandatory'], $resolver->getArguments($request, $controller)); } /** * @requires PHP 7.1 + * @requires PHP < 8 * @group legacy */ public function testGetNullableArgumentsWithDefaults() @@ -267,7 +269,7 @@ class ControllerResolverTest extends TestCase $request = Request::create('/'); $request->attributes->set('mandatory', 'mandatory'); - $controller = [new NullableController(), 'action']; + $controller = [new LegacyNullableController(), 'action']; $this->assertEquals([null, null, 'value', 'mandatory'], $resolver->getArguments($request, $controller)); } diff --git a/src/Symfony/Component/HttpKernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php b/src/Symfony/Component/HttpKernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php index e5c62a87ca..00715462a2 100644 --- a/src/Symfony/Component/HttpKernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php @@ -80,7 +80,7 @@ class ArgumentMetadataFactoryTest extends TestCase $this->assertEquals([ new ArgumentMetadata('foo', 'array', false, true, null, true), - new ArgumentMetadata('bar', null, false, false, null), + new ArgumentMetadata('bar', null, false, true, null, true), ], $arguments); } @@ -122,7 +122,7 @@ class ArgumentMetadataFactoryTest extends TestCase new ArgumentMetadata('foo', 'string', false, false, null, true), new ArgumentMetadata('bar', \stdClass::class, false, false, null, true), new ArgumentMetadata('baz', 'string', false, true, 'value', true), - new ArgumentMetadata('mandatory', null, false, false, null, true), + new ArgumentMetadata('last', 'string', false, true, '', false), ], $arguments); } @@ -142,7 +142,7 @@ class ArgumentMetadataFactoryTest extends TestCase { } - private function signature5(array $foo = null, $bar) + private function signature5(array $foo = null, $bar = null) { } } diff --git a/src/Symfony/Component/HttpKernel/Tests/Fixtures/Controller/LegacyNullableController.php b/src/Symfony/Component/HttpKernel/Tests/Fixtures/Controller/LegacyNullableController.php new file mode 100644 index 0000000000..23dde69d48 --- /dev/null +++ b/src/Symfony/Component/HttpKernel/Tests/Fixtures/Controller/LegacyNullableController.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Tests\Fixtures\Controller; + +class LegacyNullableController +{ + public function action(?string $foo, ?\stdClass $bar, ?string $baz = 'value', $mandatory) + { + } +} diff --git a/src/Symfony/Component/HttpKernel/Tests/Fixtures/Controller/NullableController.php b/src/Symfony/Component/HttpKernel/Tests/Fixtures/Controller/NullableController.php index 9db4df7b4c..aacae0e3e3 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Fixtures/Controller/NullableController.php +++ b/src/Symfony/Component/HttpKernel/Tests/Fixtures/Controller/NullableController.php @@ -13,7 +13,7 @@ namespace Symfony\Component\HttpKernel\Tests\Fixtures\Controller; class NullableController { - public function action(?string $foo, ?\stdClass $bar, ?string $baz = 'value', $mandatory) + public function action(?string $foo, ?\stdClass $bar, ?string $baz = 'value', string $last = '') { } } diff --git a/src/Symfony/Component/Process/Pipes/UnixPipes.php b/src/Symfony/Component/Process/Pipes/UnixPipes.php index 1ebf2138a5..5784a315bd 100644 --- a/src/Symfony/Component/Process/Pipes/UnixPipes.php +++ b/src/Symfony/Component/Process/Pipes/UnixPipes.php @@ -118,7 +118,7 @@ class UnixPipes extends AbstractPipes $read[$type = array_search($pipe, $this->pipes, true)] = ''; do { - $data = fread($pipe, self::CHUNK_SIZE); + $data = @fread($pipe, self::CHUNK_SIZE); $read[$type] .= $data; } while (isset($data[0]) && ($close || isset($data[self::CHUNK_SIZE - 1]))); diff --git a/src/Symfony/Component/Process/Tests/ProcessTest.php b/src/Symfony/Component/Process/Tests/ProcessTest.php index e5335282ca..2a58852351 100644 --- a/src/Symfony/Component/Process/Tests/ProcessTest.php +++ b/src/Symfony/Component/Process/Tests/ProcessTest.php @@ -987,16 +987,23 @@ class ProcessTest extends TestCase */ public function testWrongSignal($signal) { - $this->expectException('Symfony\Component\Process\Exception\RuntimeException'); if ('\\' === \DIRECTORY_SEPARATOR) { $this->markTestSkipped('POSIX signals do not work on Windows'); } + if (\PHP_VERSION_ID < 80000 || \is_int($signal)) { + $this->expectException(RuntimeException::class); + } else { + $this->expectException('TypeError'); + } + $process = $this->getProcessForCode('sleep(38);'); $process->start(); try { $process->signal($signal); $this->fail('A RuntimeException must have been thrown'); + } catch (\TypeError $e) { + $process->stop(0); } catch (RuntimeException $e) { $process->stop(0); } diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php index c1fc4ad82f..78a297b347 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php @@ -108,7 +108,7 @@ abstract class AbstractObjectNormalizer extends AbstractNormalizer * * @return string[] */ - protected function getAttributes($object, $format = null, array $context) + protected function getAttributes($object, $format, array $context) { $class = \get_class($object); $key = $class.'-'.$context['cache_key']; diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php index 43536e8144..e18bc6d1d3 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php @@ -728,7 +728,7 @@ class GetConstructorArgsWithDefaultValueDummy protected $foo; protected $bar; - public function __construct($foo = [], $bar) + public function __construct($foo = [], $bar = null) { $this->foo = $foo; $this->bar = $bar; diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index 62082e0cd2..e27f1ac12a 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -925,7 +925,7 @@ class ObjectConstructorArgsWithDefaultValueDummy protected $foo; protected $bar; - public function __construct($foo = [], $bar) + public function __construct($foo = [], $bar = null) { $this->foo = $foo; $this->bar = $bar; @@ -1075,7 +1075,7 @@ class DummyWithConstructorObjectAndDefaultValue private $foo; private $inner; - public function __construct($foo = 'a', ObjectInner $inner) + public function __construct($foo = 'a', ObjectInner $inner = null) { $this->foo = $foo; $this->inner = $inner;