Skip to content

Commit

Permalink
Merge branch '5.4' into 6.0
Browse files Browse the repository at this point in the history
* 5.4:
  [Serializer] Fix AbstractObjectNormalizer not considering pseudo type false
  [Serializer] Fix JsonSerializableNormalizer ignores circular reference handler in $context
  [Serializer][PropertyInfo] Fix support for "false" built-in type on PHP 8.2
  [ErrorHandler] Fix list of tentative return types
  Fix CS in Console Table after #45565
  Suppress unhandled error in some specific use-cases.
  fix italian translation for validators
  • Loading branch information
nicolas-grekas committed May 10, 2022
2 parents 76b9a43 + b548151 commit cd20971
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Normalizer/JsonSerializableNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class JsonSerializableNormalizer extends AbstractNormalizer
public function normalize(mixed $object, string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null
{
if ($this->isCircularReference($object, $context)) {
return $this->handleCircularReference($object);
return $this->handleCircularReference($object, $format, $context);
}

if (!$object instanceof \JsonSerializable) {
Expand Down
17 changes: 17 additions & 0 deletions Tests/Fixtures/FalseBuiltInDummy.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

/*
* This file is part of the Symfony package.
*
* (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 Symfony\Component\Serializer\Tests\Fixtures;

class FalseBuiltInDummy
{
public false $false = false;
}
25 changes: 25 additions & 0 deletions Tests/Fixtures/JsonSerializableCircularReferenceDummy.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

/*
* This file is part of the Symfony package.
*
* (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 Symfony\Component\Serializer\Tests\Fixtures;

/**
* @author Marvin Feldmann <breyndot.echse@gmail.com>
*/
class JsonSerializableCircularReferenceDummy implements \JsonSerializable
{
public function jsonSerialize(): array
{
return [
'me' => $this,
];
}
}
18 changes: 18 additions & 0 deletions Tests/Normalizer/JsonSerializableNormalizerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,19 @@
use Symfony\Component\Serializer\Exception\InvalidArgumentException;
use Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\Serializer\Tests\Fixtures\JsonSerializableCircularReferenceDummy;
use Symfony\Component\Serializer\Tests\Fixtures\JsonSerializableDummy;
use Symfony\Component\Serializer\Tests\Normalizer\Features\CircularReferenceTestTrait;

/**
* @author Fred Cox <mcfedr@gmail.com>
*/
class JsonSerializableNormalizerTest extends TestCase
{
use CircularReferenceTestTrait;

/**
* @var JsonSerializableNormalizer
*/
Expand Down Expand Up @@ -86,6 +91,19 @@ public function testCircularNormalize()
$this->assertEquals('string_object', $this->normalizer->normalize(new JsonSerializableDummy()));
}

protected function getNormalizerForCircularReference(array $defaultContext): JsonSerializableNormalizer
{
$normalizer = new JsonSerializableNormalizer(null, null, $defaultContext);
new Serializer([$normalizer]);

return $normalizer;
}

protected function getSelfReferencingModel()
{
return new JsonSerializableCircularReferenceDummy();
}

public function testInvalidDataThrowException()
{
$this->expectException(InvalidArgumentException::class);
Expand Down
14 changes: 14 additions & 0 deletions Tests/SerializerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
use Symfony\Component\Serializer\Tests\Fixtures\DummyMessageInterface;
use Symfony\Component\Serializer\Tests\Fixtures\DummyMessageNumberOne;
use Symfony\Component\Serializer\Tests\Fixtures\DummyMessageNumberTwo;
use Symfony\Component\Serializer\Tests\Fixtures\FalseBuiltInDummy;
use Symfony\Component\Serializer\Tests\Fixtures\NormalizableTraversableDummy;
use Symfony\Component\Serializer\Tests\Fixtures\Php74Full;
use Symfony\Component\Serializer\Tests\Fixtures\Php80WithPromotedTypedConstructor;
Expand Down Expand Up @@ -750,6 +751,19 @@ public function testUnionTypeDeserializable()
$this->assertEquals(new DummyUnionType(), $actual, 'Union type denormalization third case failed.');
}

/**
* @requires PHP 8.2
*/
public function testFalseBuiltInTypes()
{
$extractor = new PropertyInfoExtractor([], [new ReflectionExtractor()]);
$serializer = new Serializer([new ObjectNormalizer(null, null, null, $extractor)], ['json' => new JsonEncoder()]);

$actual = $serializer->deserialize('{"false":false}', FalseBuiltInDummy::class, 'json');

$this->assertEquals(new FalseBuiltInDummy(), $actual);
}

private function serializerWithClassDiscriminator()
{
$classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
Expand Down

0 comments on commit cd20971

Please sign in to comment.