Merge branch '5.1'
* 5.1: Fix tests [Lock] Fix StoreFactory to accept same DSN syntax as AbstractAdapter [Serializer][Minor] Fix exception message
This commit is contained in:
commit
8fa6b3625b
@ -69,13 +69,13 @@ class StoreFactory
|
||||
case 'semaphore' === $connection:
|
||||
return new SemaphoreStore();
|
||||
|
||||
case 0 === strpos($connection, 'redis://'):
|
||||
case 0 === strpos($connection, 'rediss://'):
|
||||
case 0 === strpos($connection, 'memcached://'):
|
||||
case 0 === strpos($connection, 'redis:'):
|
||||
case 0 === strpos($connection, 'rediss:'):
|
||||
case 0 === strpos($connection, 'memcached:'):
|
||||
if (!class_exists(AbstractAdapter::class)) {
|
||||
throw new InvalidArgumentException(sprintf('Unsupported DSN "%s". Try running "composer require symfony/cache".', $connection));
|
||||
}
|
||||
$storeClass = 0 === strpos($connection, 'memcached://') ? MemcachedStore::class : RedisStore::class;
|
||||
$storeClass = 0 === strpos($connection, 'memcached:') ? MemcachedStore::class : RedisStore::class;
|
||||
$connection = AbstractAdapter::createConnection($connection, ['lazy' => true]);
|
||||
|
||||
return new $storeClass($connection);
|
||||
|
@ -63,12 +63,14 @@ class StoreFactoryTest extends TestCase
|
||||
}
|
||||
if (class_exists(\Memcached::class) && class_exists(AbstractAdapter::class)) {
|
||||
yield ['memcached://server.com', MemcachedStore::class];
|
||||
yield ['memcached:?host[localhost]&host[localhost:12345]', MemcachedStore::class];
|
||||
}
|
||||
if (class_exists(\Redis::class) && class_exists(AbstractAdapter::class)) {
|
||||
yield ['redis://localhost', RedisStore::class];
|
||||
yield ['redis://localhost?lazy=1', RedisStore::class];
|
||||
yield ['redis://localhost?redis_cluster=1', RedisStore::class];
|
||||
yield ['redis://localhost?redis_cluster=1&lazy=1', RedisStore::class];
|
||||
yield ['redis:?host[localhost]&host[localhost:6379]&redis_cluster=1', RedisStore::class];
|
||||
}
|
||||
if (class_exists(\PDO::class)) {
|
||||
yield ['sqlite:/tmp/sqlite.db', PdoStore::class];
|
||||
|
@ -10,23 +10,36 @@ use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
||||
*/
|
||||
trait CircularReferenceTestTrait
|
||||
{
|
||||
abstract protected function getNormalizerForCircularReference(): NormalizerInterface;
|
||||
abstract protected function getNormalizerForCircularReference(array $defaultContext): NormalizerInterface;
|
||||
|
||||
abstract protected function getSelfReferencingModel();
|
||||
|
||||
public function testUnableToNormalizeCircularReference()
|
||||
public function provideUnableToNormalizeCircularReference(): array
|
||||
{
|
||||
$normalizer = $this->getNormalizerForCircularReference();
|
||||
return [
|
||||
[[], [], 1],
|
||||
[['circular_reference_limit' => 2], [], 2],
|
||||
[['circular_reference_limit' => 2], ['circular_reference_limit' => 3], 3],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideUnableToNormalizeCircularReference
|
||||
*/
|
||||
public function testUnableToNormalizeCircularReference(array $defaultContext, array $context, int $expectedLimit)
|
||||
{
|
||||
$normalizer = $this->getNormalizerForCircularReference($defaultContext);
|
||||
|
||||
$obj = $this->getSelfReferencingModel();
|
||||
|
||||
$this->expectException(CircularReferenceException::class);
|
||||
$normalizer->normalize($obj, null, ['circular_reference_limit' => 2]);
|
||||
$this->expectExceptionMessage(sprintf('A circular reference has been detected when serializing the object of class "%s" (configured limit: %d).', \get_class($obj), $expectedLimit));
|
||||
$normalizer->normalize($obj, null, $context);
|
||||
}
|
||||
|
||||
public function testCircularReferenceHandler()
|
||||
{
|
||||
$normalizer = $this->getNormalizerForCircularReference();
|
||||
$normalizer = $this->getNormalizerForCircularReference([]);
|
||||
|
||||
$obj = $this->getSelfReferencingModel();
|
||||
$expected = ['me' => \get_class($obj)];
|
||||
|
@ -231,10 +231,10 @@ class GetSetMethodNormalizerTest extends TestCase
|
||||
return new GetSetMethodNormalizer($classMetadataFactory, new MetadataAwareNameConverter($classMetadataFactory));
|
||||
}
|
||||
|
||||
protected function getNormalizerForCircularReference(): GetSetMethodNormalizer
|
||||
protected function getNormalizerForCircularReference(array $defaultContext): GetSetMethodNormalizer
|
||||
{
|
||||
$classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
|
||||
$normalizer = new GetSetMethodNormalizer($classMetadataFactory, new MetadataAwareNameConverter($classMetadataFactory));
|
||||
$normalizer = new GetSetMethodNormalizer($classMetadataFactory, new MetadataAwareNameConverter($classMetadataFactory), null, null, null, $defaultContext);
|
||||
new Serializer([$normalizer]);
|
||||
|
||||
return $normalizer;
|
||||
|
@ -338,9 +338,9 @@ class ObjectNormalizerTest extends TestCase
|
||||
|
||||
// circular reference
|
||||
|
||||
protected function getNormalizerForCircularReference(): ObjectNormalizer
|
||||
protected function getNormalizerForCircularReference(array $defaultContext): ObjectNormalizer
|
||||
{
|
||||
$normalizer = new ObjectNormalizer();
|
||||
$normalizer = new ObjectNormalizer(null, null, null, null, null, null, $defaultContext);
|
||||
new Serializer([$normalizer]);
|
||||
|
||||
return $normalizer;
|
||||
|
@ -163,9 +163,9 @@ class PropertyNormalizerTest extends TestCase
|
||||
return new PropertyNormalizer();
|
||||
}
|
||||
|
||||
protected function getNormalizerForCircularReference(): PropertyNormalizer
|
||||
protected function getNormalizerForCircularReference(array $defaultContext): PropertyNormalizer
|
||||
{
|
||||
$normalizer = new PropertyNormalizer();
|
||||
$normalizer = new PropertyNormalizer(null, null, null, null, null, $defaultContext);
|
||||
new Serializer([$normalizer]);
|
||||
|
||||
return $normalizer;
|
||||
|
Reference in New Issue
Block a user