|
10 | 10 | */
|
11 | 11 | trait CircularReferenceTestTrait
|
12 | 12 | {
|
13 |
| - abstract protected function getNormalizerForCircularReference(): NormalizerInterface; |
| 13 | + abstract protected function getNormalizerForCircularReference(array $defaultContext): NormalizerInterface; |
14 | 14 |
|
15 | 15 | abstract protected function getSelfReferencingModel();
|
16 | 16 |
|
17 |
| - public function testUnableToNormalizeCircularReference() |
| 17 | + public function provideUnableToNormalizeCircularReference(): array |
18 | 18 | {
|
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); |
20 | 32 |
|
21 | 33 | $obj = $this->getSelfReferencingModel();
|
22 | 34 |
|
23 | 35 | $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); |
25 | 38 | }
|
26 | 39 |
|
27 | 40 | public function testCircularReferenceHandler()
|
28 | 41 | {
|
29 |
| - $normalizer = $this->getNormalizerForCircularReference(); |
| 42 | + $normalizer = $this->getNormalizerForCircularReference([]); |
30 | 43 |
|
31 | 44 | $obj = $this->getSelfReferencingModel();
|
32 | 45 | $expected = ['me' => \get_class($obj)];
|
|
0 commit comments