Skip to content

Commit 2ed3a0d

Browse files
committed
bug symfony#38390 [Serializer][Minor] Fix circular reference exception message (bad limit displayed) (l-vo)
This PR was merged into the 4.4 branch. Discussion ---------- [Serializer][Minor] Fix circular reference exception message (bad limit displayed) | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | | License | MIT | Doc PR | Commits ------- 36ce902 [Serializer][Minor] Fix exception message
2 parents b3a20e4 + 36ce902 commit 2ed3a0d

File tree

5 files changed

+25
-12
lines changed

5 files changed

+25
-12
lines changed

src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ protected function handleCircularReference($object/*, string $format = null, arr
327327
return $circularReferenceHandler($object, $format, $context);
328328
}
329329

330-
throw new CircularReferenceException(sprintf('A circular reference has been detected when serializing the object of class "%s" (configured limit: %d).', \get_class($object), $this->circularReferenceLimit));
330+
throw new CircularReferenceException(sprintf('A circular reference has been detected when serializing the object of class "%s" (configured limit: %d).', \get_class($object), $context[self::CIRCULAR_REFERENCE_LIMIT] ?? $this->defaultContext[self::CIRCULAR_REFERENCE_LIMIT] ?? $this->circularReferenceLimit));
331331
}
332332

333333
/**

src/Symfony/Component/Serializer/Tests/Normalizer/Features/CircularReferenceTestTrait.php

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,36 @@
1010
*/
1111
trait CircularReferenceTestTrait
1212
{
13-
abstract protected function getNormalizerForCircularReference(): NormalizerInterface;
13+
abstract protected function getNormalizerForCircularReference(array $defaultContext): NormalizerInterface;
1414

1515
abstract protected function getSelfReferencingModel();
1616

17-
public function testUnableToNormalizeCircularReference()
17+
public function provideUnableToNormalizeCircularReference(): array
1818
{
19-
$normalizer = $this->getNormalizerForCircularReference();
19+
return [
20+
[[], [], 1],
21+
[['circular_reference_limit' => 2], [], 2],
22+
[['circular_reference_limit' => 2], ['circular_reference_limit' => 3], 3],
23+
];
24+
}
25+
26+
/**
27+
* @dataProvider provideUnableToNormalizeCircularReference
28+
*/
29+
public function testUnableToNormalizeCircularReference(array $defaultContext, array $context, int $expectedLimit)
30+
{
31+
$normalizer = $this->getNormalizerForCircularReference($defaultContext);
2032

2133
$obj = $this->getSelfReferencingModel();
2234

2335
$this->expectException(CircularReferenceException::class);
24-
$normalizer->normalize($obj, null, ['circular_reference_limit' => 2]);
36+
$this->expectExceptionMessage(sprintf('A circular reference has been detected when serializing the object of class "%s" (configured limit: %d).', \get_class($obj), $expectedLimit));
37+
$normalizer->normalize($obj, null, $context);
2538
}
2639

2740
public function testCircularReferenceHandler()
2841
{
29-
$normalizer = $this->getNormalizerForCircularReference();
42+
$normalizer = $this->getNormalizerForCircularReference([]);
3043

3144
$obj = $this->getSelfReferencingModel();
3245
$expected = ['me' => \get_class($obj)];

src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,10 +247,10 @@ public function testLegacyCallbacks($callbacks, $value, $result)
247247
);
248248
}
249249

250-
protected function getNormalizerForCircularReference(): GetSetMethodNormalizer
250+
protected function getNormalizerForCircularReference(array $defaultContext): GetSetMethodNormalizer
251251
{
252252
$classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
253-
$normalizer = new GetSetMethodNormalizer($classMetadataFactory, new MetadataAwareNameConverter($classMetadataFactory));
253+
$normalizer = new GetSetMethodNormalizer($classMetadataFactory, new MetadataAwareNameConverter($classMetadataFactory), null, null, null, $defaultContext);
254254
new Serializer([$normalizer]);
255255

256256
return $normalizer;

src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -365,9 +365,9 @@ public function testLegacyUncallableCallbacks($callbacks)
365365

366366
// circular reference
367367

368-
protected function getNormalizerForCircularReference(): ObjectNormalizer
368+
protected function getNormalizerForCircularReference(array $defaultContext): ObjectNormalizer
369369
{
370-
$normalizer = new ObjectNormalizer();
370+
$normalizer = new ObjectNormalizer(null, null, null, null, null, null, $defaultContext);
371371
new Serializer([$normalizer]);
372372

373373
return $normalizer;

src/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,9 +191,9 @@ public function testLegacyUncallableCallbacks($callbacks)
191191
$this->normalizer->setCallbacks($callbacks);
192192
}
193193

194-
protected function getNormalizerForCircularReference(): PropertyNormalizer
194+
protected function getNormalizerForCircularReference(array $defaultContext): PropertyNormalizer
195195
{
196-
$normalizer = new PropertyNormalizer();
196+
$normalizer = new PropertyNormalizer(null, null, null, null, null, $defaultContext);
197197
new Serializer([$normalizer]);
198198

199199
return $normalizer;

0 commit comments

Comments
 (0)