Merge branch '5.0' into 5.1
* 5.0: Parse and render anonymous classes correctly on php 8 Enable APCu for the php 8 build. [Process] Fix failing test on php 8. [HttpKernel] fix test Make PHP 8 green on Travis Revert "[Cache] allow DBAL v3" [PropertyAccessor] Added missing property path on php 8. Don't execute tests with DBAL 2.x on php 8.
This commit is contained in:
commit
2ed4e0efce
19
.travis.yml
19
.travis.yml
@ -122,6 +122,23 @@ before_install:
|
|||||||
}
|
}
|
||||||
export -f tpecl
|
export -f tpecl
|
||||||
|
|
||||||
|
install_apcu_dev () {
|
||||||
|
local ref=$1
|
||||||
|
local INI=$2
|
||||||
|
|
||||||
|
wget https://github.com/krakjoe/apcu/archive/${ref}.zip
|
||||||
|
unzip ${ref}.zip
|
||||||
|
cd apcu-${ref}
|
||||||
|
phpize
|
||||||
|
./configure
|
||||||
|
make
|
||||||
|
mv modules/apcu.so $(php -r "echo ini_get('extension_dir');")
|
||||||
|
echo 'extension = apcu.so' >> $INI
|
||||||
|
cd ..
|
||||||
|
rm -rf apcu-${ref} ${ref}.zip
|
||||||
|
}
|
||||||
|
export -f install_apcu_dev
|
||||||
|
|
||||||
- |
|
- |
|
||||||
# Install sigchild-enabled PHP to test the Process component on the lowest PHP matrix line
|
# Install sigchild-enabled PHP to test the Process component on the lowest PHP matrix line
|
||||||
if [[ ! $deps && $TRAVIS_PHP_VERSION = ${MIN_PHP%.*} && ! -d php-$MIN_PHP/sapi ]]; then
|
if [[ ! $deps && $TRAVIS_PHP_VERSION = ${MIN_PHP%.*} && ! -d php-$MIN_PHP/sapi ]]; then
|
||||||
@ -155,6 +172,7 @@ before_install:
|
|||||||
fi
|
fi
|
||||||
if [[ $PHP = nightly ]]; then
|
if [[ $PHP = nightly ]]; then
|
||||||
tfold ext.memcached tpecl memcached-3.1.5 memcached.so $INI
|
tfold ext.memcached tpecl memcached-3.1.5 memcached.so $INI
|
||||||
|
tfold ext.apcu install_apcu_dev 9c36db45100d4d27ec33072f4be90f1f5a0108b7 $INI
|
||||||
else
|
else
|
||||||
tfold ext.apcu tpecl apcu-5.1.18 apcu.so $INI
|
tfold ext.apcu tpecl apcu-5.1.18 apcu.so $INI
|
||||||
tfold ext.mongodb tpecl mongodb-1.6.16 mongodb.so $INI
|
tfold ext.mongodb tpecl mongodb-1.6.16 mongodb.so $INI
|
||||||
@ -236,6 +254,7 @@ install:
|
|||||||
# Set composer's platform to php 7.4 if we're on php 8.
|
# Set composer's platform to php 7.4 if we're on php 8.
|
||||||
if [[ $PHP = nightly ]]; then
|
if [[ $PHP = nightly ]]; then
|
||||||
composer config platform.php 7.4.99
|
composer config platform.php 7.4.99
|
||||||
|
export SYMFONY_DEPRECATIONS_HELPER=weak
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- |
|
- |
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
namespace Symfony\Component\Cache\Tests\Adapter;
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Version;
|
||||||
use Psr\Cache\CacheItemPoolInterface;
|
use Psr\Cache\CacheItemPoolInterface;
|
||||||
use Symfony\Component\Cache\Adapter\PdoAdapter;
|
use Symfony\Component\Cache\Adapter\PdoAdapter;
|
||||||
use Symfony\Component\Cache\Tests\Traits\PdoPruneableTrait;
|
use Symfony\Component\Cache\Tests\Traits\PdoPruneableTrait;
|
||||||
@ -30,6 +31,10 @@ class PdoAdapterTest extends AdapterTestCase
|
|||||||
self::markTestSkipped('Extension pdo_sqlite required.');
|
self::markTestSkipped('Extension pdo_sqlite required.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (\PHP_VERSION_ID >= 80000 && class_exists(Version::class)) {
|
||||||
|
self::markTestSkipped('Doctrine DBAL 2.x is incompatible with PHP 8.');
|
||||||
|
}
|
||||||
|
|
||||||
self::$dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_cache');
|
self::$dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_cache');
|
||||||
|
|
||||||
$pool = new PdoAdapter('sqlite:'.self::$dbFile);
|
$pool = new PdoAdapter('sqlite:'.self::$dbFile);
|
||||||
|
@ -15,6 +15,7 @@ use Doctrine\DBAL\Connection;
|
|||||||
use Doctrine\DBAL\Driver;
|
use Doctrine\DBAL\Driver;
|
||||||
use Doctrine\DBAL\DriverManager;
|
use Doctrine\DBAL\DriverManager;
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\DBAL\Version;
|
||||||
use Psr\Cache\CacheItemPoolInterface;
|
use Psr\Cache\CacheItemPoolInterface;
|
||||||
use Symfony\Component\Cache\Adapter\PdoAdapter;
|
use Symfony\Component\Cache\Adapter\PdoAdapter;
|
||||||
use Symfony\Component\Cache\Tests\Traits\PdoPruneableTrait;
|
use Symfony\Component\Cache\Tests\Traits\PdoPruneableTrait;
|
||||||
@ -34,6 +35,10 @@ class PdoDbalAdapterTest extends AdapterTestCase
|
|||||||
self::markTestSkipped('Extension pdo_sqlite required.');
|
self::markTestSkipped('Extension pdo_sqlite required.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (\PHP_VERSION_ID >= 80000 && class_exists(Version::class)) {
|
||||||
|
self::markTestSkipped('Doctrine DBAL 2.x is incompatible with PHP 8.');
|
||||||
|
}
|
||||||
|
|
||||||
self::$dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_cache');
|
self::$dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_cache');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -883,7 +883,8 @@ class ApplicationTest extends TestCase
|
|||||||
$application = new Application();
|
$application = new Application();
|
||||||
$application->setAutoExit(false);
|
$application->setAutoExit(false);
|
||||||
$application->register('foo')->setCode(function () {
|
$application->register('foo')->setCode(function () {
|
||||||
throw new class('') extends \InvalidArgumentException { };
|
throw new class('') extends \InvalidArgumentException {
|
||||||
|
};
|
||||||
});
|
});
|
||||||
$tester = new ApplicationTester($application);
|
$tester = new ApplicationTester($application);
|
||||||
|
|
||||||
@ -893,7 +894,8 @@ class ApplicationTest extends TestCase
|
|||||||
$application = new Application();
|
$application = new Application();
|
||||||
$application->setAutoExit(false);
|
$application->setAutoExit(false);
|
||||||
$application->register('foo')->setCode(function () {
|
$application->register('foo')->setCode(function () {
|
||||||
throw new \InvalidArgumentException(sprintf('Dummy type "%s" is invalid.', get_debug_type(new class() { })));
|
throw new \InvalidArgumentException(sprintf('Dummy type "%s" is invalid.', \get_class(new class() {
|
||||||
|
})));
|
||||||
});
|
});
|
||||||
$tester = new ApplicationTester($application);
|
$tester = new ApplicationTester($application);
|
||||||
|
|
||||||
@ -906,7 +908,8 @@ class ApplicationTest extends TestCase
|
|||||||
$application = new Application();
|
$application = new Application();
|
||||||
$application->setAutoExit(false);
|
$application->setAutoExit(false);
|
||||||
$application->register('foo')->setCode(function () {
|
$application->register('foo')->setCode(function () {
|
||||||
throw new class('') extends \InvalidArgumentException { };
|
throw new class('') extends \InvalidArgumentException {
|
||||||
|
};
|
||||||
});
|
});
|
||||||
$tester = new ApplicationTester($application);
|
$tester = new ApplicationTester($application);
|
||||||
|
|
||||||
@ -916,7 +919,8 @@ class ApplicationTest extends TestCase
|
|||||||
$application = new Application();
|
$application = new Application();
|
||||||
$application->setAutoExit(false);
|
$application->setAutoExit(false);
|
||||||
$application->register('foo')->setCode(function () {
|
$application->register('foo')->setCode(function () {
|
||||||
throw new \InvalidArgumentException(sprintf('Dummy type "%s" is invalid.', get_debug_type(new class() { })));
|
throw new \InvalidArgumentException(sprintf('Dummy type "%s" is invalid.', \get_class(new class() {
|
||||||
|
})));
|
||||||
});
|
});
|
||||||
$tester = new ApplicationTester($application);
|
$tester = new ApplicationTester($application);
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
|
|||||||
use Symfony\Component\DependencyInjection\Reference;
|
use Symfony\Component\DependencyInjection\Reference;
|
||||||
use Symfony\Component\DependencyInjection\Tests\Fixtures\CaseSensitiveClass;
|
use Symfony\Component\DependencyInjection\Tests\Fixtures\CaseSensitiveClass;
|
||||||
use Symfony\Component\DependencyInjection\Tests\Fixtures\includes\FooVariadic;
|
use Symfony\Component\DependencyInjection\Tests\Fixtures\includes\FooVariadic;
|
||||||
|
use Symfony\Component\DependencyInjection\Tests\Fixtures\includes\MultipleArgumentsOptionalScalarNotReallyOptional;
|
||||||
use Symfony\Component\DependencyInjection\TypedReference;
|
use Symfony\Component\DependencyInjection\TypedReference;
|
||||||
|
|
||||||
require_once __DIR__.'/../Fixtures/includes/autowiring_classes.php';
|
require_once __DIR__.'/../Fixtures/includes/autowiring_classes.php';
|
||||||
@ -452,6 +453,9 @@ class AutowirePassTest extends TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP < 8
|
||||||
|
*/
|
||||||
public function testOptionalScalarNotReallyOptionalUsesDefaultValue()
|
public function testOptionalScalarNotReallyOptionalUsesDefaultValue()
|
||||||
{
|
{
|
||||||
$container = new ContainerBuilder();
|
$container = new ContainerBuilder();
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Symfony\Component\DependencyInjection\Tests\Fixtures\includes;
|
||||||
|
|
||||||
|
use Symfony\Component\DependencyInjection\Tests\Compiler\A;
|
||||||
|
use Symfony\Component\DependencyInjection\Tests\Compiler\Lille;
|
||||||
|
|
||||||
|
class MultipleArgumentsOptionalScalarNotReallyOptional
|
||||||
|
{
|
||||||
|
public function __construct(A $a, $foo = 'default_val', Lille $lille)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -186,12 +186,6 @@ class MultipleArgumentsOptionalScalarLast
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
class MultipleArgumentsOptionalScalarNotReallyOptional
|
|
||||||
{
|
|
||||||
public function __construct(A $a, $foo = 'default_val', Lille $lille)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Classes used for testing createResourceForClass
|
* Classes used for testing createResourceForClass
|
||||||
|
@ -75,7 +75,7 @@ class FlattenException
|
|||||||
$e->setStatusCode($statusCode);
|
$e->setStatusCode($statusCode);
|
||||||
$e->setHeaders($headers);
|
$e->setHeaders($headers);
|
||||||
$e->setTraceFromThrowable($exception);
|
$e->setTraceFromThrowable($exception);
|
||||||
$e->setClass(\get_class($exception));
|
$e->setClass(get_debug_type($exception));
|
||||||
$e->setFile($exception->getFile());
|
$e->setFile($exception->getFile());
|
||||||
$e->setLine($exception->getLine());
|
$e->setLine($exception->getLine());
|
||||||
|
|
||||||
|
@ -365,6 +365,26 @@ class ErrorHandlerTest extends TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testHandleErrorWithAnonymousClass()
|
||||||
|
{
|
||||||
|
$handler = ErrorHandler::register();
|
||||||
|
$handler->throwAt(3, true);
|
||||||
|
try {
|
||||||
|
$handler->handleError(3, 'foo '.\get_class(new class() extends \stdClass {
|
||||||
|
}).' bar', 'foo.php', 12);
|
||||||
|
$this->fail('Exception expected.');
|
||||||
|
} catch (\ErrorException $e) {
|
||||||
|
} finally {
|
||||||
|
restore_error_handler();
|
||||||
|
restore_exception_handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assertSame('foo stdClass@anonymous bar', $e->getMessage());
|
||||||
|
$this->assertSame(3, $e->getSeverity());
|
||||||
|
$this->assertSame('foo.php', $e->getFile());
|
||||||
|
$this->assertSame(12, $e->getLine());
|
||||||
|
}
|
||||||
|
|
||||||
public function testHandleDeprecation()
|
public function testHandleDeprecation()
|
||||||
{
|
{
|
||||||
$logArgCheck = function ($level, $message, $context) {
|
$logArgCheck = function ($level, $message, $context) {
|
||||||
@ -433,6 +453,10 @@ class ErrorHandlerTest extends TestCase
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
['Uncaught Exception: foo', new \Exception('foo')],
|
['Uncaught Exception: foo', new \Exception('foo')],
|
||||||
|
['Uncaught Exception: foo', new class('foo') extends \RuntimeException {
|
||||||
|
}],
|
||||||
|
['Uncaught Exception: foo stdClass@anonymous bar', new \RuntimeException('foo '.\get_class(new class() extends \stdClass {
|
||||||
|
}).' bar')],
|
||||||
['Uncaught Error: bar', new \Error('bar')],
|
['Uncaught Error: bar', new \Error('bar')],
|
||||||
['Uncaught ccc', new \ErrorException('ccc')],
|
['Uncaught ccc', new \ErrorException('ccc')],
|
||||||
];
|
];
|
||||||
|
@ -359,6 +359,11 @@ class FlattenExceptionTest extends TestCase
|
|||||||
|
|
||||||
$this->assertSame('RuntimeException@anonymous', $flattened->getClass());
|
$this->assertSame('RuntimeException@anonymous', $flattened->getClass());
|
||||||
|
|
||||||
|
$flattened->setClass(\get_class(new class('Oops') extends NotFoundHttpException {
|
||||||
|
}));
|
||||||
|
|
||||||
|
$this->assertSame('Symfony\Component\HttpKernel\Exception\NotFoundHttpException@anonymous', $flattened->getClass());
|
||||||
|
|
||||||
$flattened = FlattenException::createFromThrowable(new \Exception(sprintf('Class "%s" blah.', \get_class(new class() extends \RuntimeException {
|
$flattened = FlattenException::createFromThrowable(new \Exception(sprintf('Class "%s" blah.', \get_class(new class() extends \RuntimeException {
|
||||||
}))));
|
}))));
|
||||||
|
|
||||||
|
@ -223,9 +223,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
|
|||||||
public function getBundle(string $name)
|
public function getBundle(string $name)
|
||||||
{
|
{
|
||||||
if (!isset($this->bundles[$name])) {
|
if (!isset($this->bundles[$name])) {
|
||||||
$class = get_debug_type($this);
|
throw new \InvalidArgumentException(sprintf('Bundle "%s" does not exist or it is not enabled. Maybe you forgot to add it in the "registerBundles()" method of your "%s.php" file?', $name, get_debug_type($this)));
|
||||||
|
|
||||||
throw new \InvalidArgumentException(sprintf('Bundle "%s" does not exist or it is not enabled. Maybe you forgot to add it in the "registerBundles()" method of your "%s.php" file?', $name, $class));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->bundles[$name];
|
return $this->bundles[$name];
|
||||||
@ -400,6 +398,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
|
|||||||
$class = static::class;
|
$class = static::class;
|
||||||
$class = false !== strpos($class, "@anonymous\0") ? get_parent_class($class).str_replace('.', '_', ContainerBuilder::hash($class)) : $class;
|
$class = false !== strpos($class, "@anonymous\0") ? get_parent_class($class).str_replace('.', '_', ContainerBuilder::hash($class)) : $class;
|
||||||
$class = str_replace('\\', '_', $class).ucfirst($this->environment).($this->debug ? 'Debug' : '').'Container';
|
$class = str_replace('\\', '_', $class).ucfirst($this->environment).($this->debug ? 'Debug' : '').'Container';
|
||||||
|
|
||||||
if (!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $class)) {
|
if (!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $class)) {
|
||||||
throw new \InvalidArgumentException(sprintf('The environment "%s" contains invalid characters, it can only contain characters allowed in PHP class names.', $this->environment));
|
throw new \InvalidArgumentException(sprintf('The environment "%s" contains invalid characters, it can only contain characters allowed in PHP class names.', $this->environment));
|
||||||
}
|
}
|
||||||
|
@ -204,19 +204,19 @@ class ArgumentResolverTest extends TestCase
|
|||||||
$request = Request::create('/');
|
$request = Request::create('/');
|
||||||
$request->attributes->set('foo', 'foo');
|
$request->attributes->set('foo', 'foo');
|
||||||
$request->attributes->set('bar', new \stdClass());
|
$request->attributes->set('bar', new \stdClass());
|
||||||
$request->attributes->set('mandatory', 'mandatory');
|
$request->attributes->set('last', 'last');
|
||||||
$controller = [new NullableController(), 'action'];
|
$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));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetNullableArgumentsWithDefaults()
|
public function testGetNullableArgumentsWithDefaults()
|
||||||
{
|
{
|
||||||
$request = Request::create('/');
|
$request = Request::create('/');
|
||||||
$request->attributes->set('mandatory', 'mandatory');
|
$request->attributes->set('last', 'last');
|
||||||
$controller = [new NullableController(), 'action'];
|
$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()
|
public function testGetSessionArguments()
|
||||||
|
@ -80,7 +80,7 @@ class ArgumentMetadataFactoryTest extends TestCase
|
|||||||
|
|
||||||
$this->assertEquals([
|
$this->assertEquals([
|
||||||
new ArgumentMetadata('foo', 'array', false, true, null, true),
|
new ArgumentMetadata('foo', 'array', false, true, null, true),
|
||||||
new ArgumentMetadata('bar', null, false, false, null),
|
new ArgumentMetadata('bar', null, false, true, null, true),
|
||||||
], $arguments);
|
], $arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ class ArgumentMetadataFactoryTest extends TestCase
|
|||||||
new ArgumentMetadata('foo', 'string', false, false, null, true),
|
new ArgumentMetadata('foo', 'string', false, false, null, true),
|
||||||
new ArgumentMetadata('bar', \stdClass::class, false, false, null, true),
|
new ArgumentMetadata('bar', \stdClass::class, false, false, null, true),
|
||||||
new ArgumentMetadata('baz', 'string', false, true, 'value', 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);
|
], $arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,7 +133,7 @@ class ArgumentMetadataFactoryTest extends TestCase
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
private function signature5(array $foo = null, $bar)
|
private function signature5(array $foo = null, $bar = null)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ namespace Symfony\Component\HttpKernel\Tests\Fixtures\Controller;
|
|||||||
|
|
||||||
class NullableController
|
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 = '')
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -536,6 +536,27 @@ EOF;
|
|||||||
$this->assertGreaterThan($preReBoot, $kernel->getStartTime());
|
$this->assertGreaterThan($preReBoot, $kernel->getStartTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testAnonymousKernelGeneratesValidContainerClass(): void
|
||||||
|
{
|
||||||
|
$kernel = new class('test', true) extends Kernel {
|
||||||
|
public function registerBundles(): iterable
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerContainerConfiguration(LoaderInterface $loader): void
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getContainerClass(): string
|
||||||
|
{
|
||||||
|
return parent::getContainerClass();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$this->assertRegExp('/^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*TestDebugContainer$/', $kernel->getContainerClass());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a mock for the BundleInterface.
|
* Returns a mock for the BundleInterface.
|
||||||
*/
|
*/
|
||||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Lock\Tests\Store;
|
|||||||
use Doctrine\DBAL\Connection;
|
use Doctrine\DBAL\Connection;
|
||||||
use Doctrine\DBAL\DriverManager;
|
use Doctrine\DBAL\DriverManager;
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\DBAL\Version;
|
||||||
use Symfony\Component\Lock\PersistingStoreInterface;
|
use Symfony\Component\Lock\PersistingStoreInterface;
|
||||||
use Symfony\Component\Lock\Store\PdoStore;
|
use Symfony\Component\Lock\Store\PdoStore;
|
||||||
|
|
||||||
@ -32,6 +33,10 @@ class PdoDbalStoreTest extends AbstractStoreTest
|
|||||||
{
|
{
|
||||||
self::$dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_lock');
|
self::$dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_lock');
|
||||||
|
|
||||||
|
if (\PHP_VERSION_ID >= 80000 && class_exists(Version::class)) {
|
||||||
|
self::markTestSkipped('Doctrine DBAL 2.x is incompatible with PHP 8.');
|
||||||
|
}
|
||||||
|
|
||||||
$store = new PdoStore(DriverManager::getConnection(['driver' => 'pdo_sqlite', 'path' => self::$dbFile]));
|
$store = new PdoStore(DriverManager::getConnection(['driver' => 'pdo_sqlite', 'path' => self::$dbFile]));
|
||||||
$store->createTable();
|
$store->createTable();
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
namespace Symfony\Component\Lock\Tests\Store;
|
namespace Symfony\Component\Lock\Tests\Store;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Version;
|
||||||
use Symfony\Component\Lock\Key;
|
use Symfony\Component\Lock\Key;
|
||||||
use Symfony\Component\Lock\PersistingStoreInterface;
|
use Symfony\Component\Lock\PersistingStoreInterface;
|
||||||
use Symfony\Component\Lock\Store\PdoStore;
|
use Symfony\Component\Lock\Store\PdoStore;
|
||||||
@ -30,6 +31,10 @@ class PdoStoreTest extends AbstractStoreTest
|
|||||||
{
|
{
|
||||||
self::$dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_lock');
|
self::$dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_lock');
|
||||||
|
|
||||||
|
if (\PHP_VERSION_ID >= 80000 && class_exists(Version::class)) {
|
||||||
|
self::markTestSkipped('Doctrine DBAL 2.x is incompatible with PHP 8.');
|
||||||
|
}
|
||||||
|
|
||||||
$store = new PdoStore('sqlite:'.self::$dbFile);
|
$store = new PdoStore('sqlite:'.self::$dbFile);
|
||||||
$store->createTable();
|
$store->createTable();
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
"symfony/polyfill-php80": "^1.15"
|
"symfony/polyfill-php80": "^1.15"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"doctrine/dbal": "~2.5",
|
"doctrine/dbal": "^2.5|^3.0",
|
||||||
"mongodb/mongodb": "~1.1",
|
"mongodb/mongodb": "~1.1",
|
||||||
"predis/predis": "~1.0"
|
"predis/predis": "~1.0"
|
||||||
},
|
},
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
namespace Symfony\Component\Messenger\Bridge\Doctrine\Tests\Transport;
|
namespace Symfony\Component\Messenger\Bridge\Doctrine\Tests\Transport;
|
||||||
|
|
||||||
use Doctrine\DBAL\DriverManager;
|
use Doctrine\DBAL\DriverManager;
|
||||||
|
use Doctrine\DBAL\Version;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
use Symfony\Component\Messenger\Bridge\Doctrine\Tests\Fixtures\DummyMessage;
|
use Symfony\Component\Messenger\Bridge\Doctrine\Tests\Fixtures\DummyMessage;
|
||||||
use Symfony\Component\Messenger\Bridge\Doctrine\Transport\Connection;
|
use Symfony\Component\Messenger\Bridge\Doctrine\Transport\Connection;
|
||||||
@ -28,6 +29,13 @@ class DoctrineIntegrationTest extends TestCase
|
|||||||
/** @var string */
|
/** @var string */
|
||||||
private $sqliteFile;
|
private $sqliteFile;
|
||||||
|
|
||||||
|
public static function setUpBeforeClass(): void
|
||||||
|
{
|
||||||
|
if (\PHP_VERSION_ID >= 80000 && class_exists(Version::class)) {
|
||||||
|
self::markTestSkipped('Doctrine DBAL 2.x is incompatible with PHP 8.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected function setUp(): void
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
$this->sqliteFile = sys_get_temp_dir().'/symfony.messenger.sqlite';
|
$this->sqliteFile = sys_get_temp_dir().'/symfony.messenger.sqlite';
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
"symfony/service-contracts": "^1.1|^2"
|
"symfony/service-contracts": "^1.1|^2"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"doctrine/dbal": "^2.6",
|
"doctrine/dbal": "^2.6|^3.0",
|
||||||
"doctrine/orm": "^2.6.3",
|
"doctrine/orm": "^2.6.3",
|
||||||
"doctrine/persistence": "^1.3",
|
"doctrine/persistence": "^1.3",
|
||||||
"symfony/property-access": "^4.4|^5.0",
|
"symfony/property-access": "^4.4|^5.0",
|
||||||
|
@ -30,14 +30,16 @@ class TraceableMiddlewareTest extends MiddlewareTestCase
|
|||||||
$busId = 'command_bus';
|
$busId = 'command_bus';
|
||||||
$envelope = new Envelope(new DummyMessage('Hello'));
|
$envelope = new Envelope(new DummyMessage('Hello'));
|
||||||
|
|
||||||
$middleware = $this->getMockBuilder(MiddlewareInterface::class)->getMock();
|
$middleware = new class() implements MiddlewareInterface {
|
||||||
$middleware->expects($this->once())
|
public $calls = 0;
|
||||||
->method('handle')
|
|
||||||
->with($envelope, $this->anything())
|
public function handle(Envelope $envelope, StackInterface $stack): Envelope
|
||||||
->willReturnCallback(function ($envelope, StackInterface $stack) {
|
{
|
||||||
|
++$this->calls;
|
||||||
|
|
||||||
return $stack->next()->handle($envelope, $stack);
|
return $stack->next()->handle($envelope, $stack);
|
||||||
})
|
}
|
||||||
;
|
};
|
||||||
|
|
||||||
$stopwatch = $this->createMock(Stopwatch::class);
|
$stopwatch = $this->createMock(Stopwatch::class);
|
||||||
$stopwatch->expects($this->once())->method('isStarted')->willReturn(true);
|
$stopwatch->expects($this->once())->method('isStarted')->willReturn(true);
|
||||||
@ -51,7 +53,7 @@ class TraceableMiddlewareTest extends MiddlewareTestCase
|
|||||||
$stopwatch->expects($this->exactly(2))
|
$stopwatch->expects($this->exactly(2))
|
||||||
->method('stop')
|
->method('stop')
|
||||||
->withConsecutive(
|
->withConsecutive(
|
||||||
[$this->matches('"%sMiddlewareInterface%s" on "command_bus"')],
|
['"Symfony\Component\Messenger\Middleware\MiddlewareInterface@anonymous" on "command_bus"'],
|
||||||
['Tail on "command_bus"']
|
['Tail on "command_bus"']
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
@ -59,6 +61,7 @@ class TraceableMiddlewareTest extends MiddlewareTestCase
|
|||||||
$traced = new TraceableMiddleware($stopwatch, $busId);
|
$traced = new TraceableMiddleware($stopwatch, $busId);
|
||||||
|
|
||||||
$traced->handle($envelope, new StackMiddleware(new \ArrayIterator([null, $middleware])));
|
$traced->handle($envelope, new StackMiddleware(new \ArrayIterator([null, $middleware])));
|
||||||
|
$this->assertSame(1, $middleware->calls);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testHandleWithException()
|
public function testHandleWithException()
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
|
"psr/log": "^1.0",
|
||||||
"symfony/polyfill-php80": "^1.15"
|
"symfony/polyfill-php80": "^1.15"
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
|
@ -988,21 +988,20 @@ class ProcessTest extends TestCase
|
|||||||
|
|
||||||
public function testWrongSignal()
|
public function testWrongSignal()
|
||||||
{
|
{
|
||||||
$this->expectException('Symfony\Component\Process\Exception\RuntimeException');
|
|
||||||
if ('\\' === \DIRECTORY_SEPARATOR) {
|
if ('\\' === \DIRECTORY_SEPARATOR) {
|
||||||
$this->markTestSkipped('POSIX signals do not work on Windows');
|
$this->markTestSkipped('POSIX signals do not work on Windows');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->expectException(RuntimeException::class);
|
||||||
|
|
||||||
$process = $this->getProcessForCode('sleep(38);');
|
$process = $this->getProcessForCode('sleep(38);');
|
||||||
$process->start();
|
$process->start();
|
||||||
try {
|
try {
|
||||||
$process->signal(-4);
|
$process->signal(-4);
|
||||||
$this->fail('A RuntimeException must have been thrown');
|
$this->fail('A RuntimeException must have been thrown');
|
||||||
} catch (RuntimeException $e) {
|
} finally {
|
||||||
$process->stop(0);
|
$process->stop(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
throw $e;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testDisableOutputDisablesTheOutput()
|
public function testDisableOutputDisablesTheOutput()
|
||||||
|
@ -211,7 +211,7 @@ class PropertyAccessor implements PropertyAccessorInterface
|
|||||||
if (preg_match('/^\S+::\S+\(\): Argument #\d+ \(\$\S+\) must be of type (\S+), (\S+) given/', $message, $matches)) {
|
if (preg_match('/^\S+::\S+\(\): Argument #\d+ \(\$\S+\) must be of type (\S+), (\S+) given/', $message, $matches)) {
|
||||||
list(, $expectedType, $actualType) = $matches;
|
list(, $expectedType, $actualType) = $matches;
|
||||||
|
|
||||||
throw new InvalidArgumentException(sprintf('Expected argument of type "%s", "%s" given.', $expectedType, 'NULL' === $actualType ? 'null' : $actualType), 0, $previous);
|
throw new InvalidArgumentException(sprintf('Expected argument of type "%s", "%s" given at property path "%s".', $expectedType, 'NULL' === $actualType ? 'null' : $actualType, $propertyPath), 0, $previous);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,7 +237,7 @@ abstract class AbstractObjectNormalizer extends AbstractNormalizer
|
|||||||
*
|
*
|
||||||
* @return string[]
|
* @return string[]
|
||||||
*/
|
*/
|
||||||
protected function getAttributes($object, string $format = null, array $context)
|
protected function getAttributes($object, ?string $format, array $context)
|
||||||
{
|
{
|
||||||
$class = $this->objectClassResolver ? ($this->objectClassResolver)($object) : \get_class($object);
|
$class = $this->objectClassResolver ? ($this->objectClassResolver)($object) : \get_class($object);
|
||||||
$key = $class.'-'.$context['cache_key'];
|
$key = $class.'-'.$context['cache_key'];
|
||||||
|
@ -603,7 +603,7 @@ class GetConstructorArgsWithDefaultValueDummy
|
|||||||
protected $foo;
|
protected $foo;
|
||||||
protected $bar;
|
protected $bar;
|
||||||
|
|
||||||
public function __construct($foo = [], $bar)
|
public function __construct($foo = [], $bar = null)
|
||||||
{
|
{
|
||||||
$this->foo = $foo;
|
$this->foo = $foo;
|
||||||
$this->bar = $bar;
|
$this->bar = $bar;
|
||||||
|
@ -784,7 +784,7 @@ class ObjectConstructorArgsWithDefaultValueDummy
|
|||||||
protected $foo;
|
protected $foo;
|
||||||
protected $bar;
|
protected $bar;
|
||||||
|
|
||||||
public function __construct($foo = [], $bar)
|
public function __construct($foo = [], $bar = null)
|
||||||
{
|
{
|
||||||
$this->foo = $foo;
|
$this->foo = $foo;
|
||||||
$this->bar = $bar;
|
$this->bar = $bar;
|
||||||
@ -934,7 +934,7 @@ class DummyWithConstructorObjectAndDefaultValue
|
|||||||
private $foo;
|
private $foo;
|
||||||
private $inner;
|
private $inner;
|
||||||
|
|
||||||
public function __construct($foo = 'a', ObjectInner $inner)
|
public function __construct($foo = 'a', ObjectInner $inner = null)
|
||||||
{
|
{
|
||||||
$this->foo = $foo;
|
$this->foo = $foo;
|
||||||
$this->inner = $inner;
|
$this->inner = $inner;
|
||||||
|
Reference in New Issue
Block a user