16
16
use Symfony \Component \PropertyInfo \Extractor \PhpDocExtractor ;
17
17
use Symfony \Component \PropertyInfo \Extractor \ReflectionExtractor ;
18
18
use Symfony \Component \PropertyInfo \PropertyInfoExtractor ;
19
+ use Symfony \Component \Serializer \Exception \CircularReferenceException ;
19
20
use Symfony \Component \Serializer \Mapping \Factory \ClassMetadataFactory ;
20
21
use Symfony \Component \Serializer \Mapping \Loader \AnnotationLoader ;
21
22
use Symfony \Component \Serializer \NameConverter \CamelCaseToSnakeCaseNameConverter ;
32
33
use Symfony \Component \Serializer \Tests \Fixtures \SiblingHolder ;
33
34
use Symfony \Component \Serializer \Tests \Normalizer \Features \CallbacksObject ;
34
35
use Symfony \Component \Serializer \Tests \Normalizer \Features \CallbacksTestTrait ;
36
+ use Symfony \Component \Serializer \Tests \Normalizer \Features \CircularReferenceTestTrait ;
35
37
use Symfony \Component \Serializer \Tests \Normalizer \Features \ConstructorArgumentsTestTrait ;
36
38
use Symfony \Component \Serializer \Tests \Normalizer \Features \GroupsTestTrait ;
39
+ use Symfony \Component \Serializer \Tests \Normalizer \Features \IgnoredAttributesTestTrait ;
37
40
use Symfony \Component \Serializer \Tests \Normalizer \Features \MaxDepthTestTrait ;
38
41
use Symfony \Component \Serializer \Tests \Normalizer \Features \ObjectToPopulateTestTrait ;
39
42
use Symfony \Component \Serializer \Tests \Normalizer \Features \TypeEnforcementTestTrait ;
40
43
41
44
class GetSetMethodNormalizerTest extends TestCase
42
45
{
43
46
use CallbacksTestTrait;
47
+ use CircularReferenceTestTrait;
44
48
use ConstructorArgumentsTestTrait;
45
49
use GroupsTestTrait;
50
+ use IgnoredAttributesTestTrait;
46
51
use MaxDepthTestTrait;
47
52
use ObjectToPopulateTestTrait;
48
53
use TypeEnforcementTestTrait;
@@ -242,6 +247,48 @@ public function testLegacyCallbacks($callbacks, $value, $result)
242
247
);
243
248
}
244
249
250
+ protected function getNormalizerForCircularReference (): GetSetMethodNormalizer
251
+ {
252
+ $ classMetadataFactory = new ClassMetadataFactory (new AnnotationLoader (new AnnotationReader ()));
253
+ $ normalizer = new GetSetMethodNormalizer ($ classMetadataFactory , new MetadataAwareNameConverter ($ classMetadataFactory ));
254
+ new Serializer ([$ normalizer ]);
255
+
256
+ return $ normalizer ;
257
+ }
258
+
259
+ protected function getSelfReferencingModel ()
260
+ {
261
+ return new CircularReferenceDummy ();
262
+ }
263
+
264
+ public function testLegacyUnableToNormalizeCircularReference ()
265
+ {
266
+ $ this ->normalizer ->setCircularReferenceLimit (2 );
267
+ $ this ->serializer = new Serializer ([$ this ->normalizer ]);
268
+ $ this ->normalizer ->setSerializer ($ this ->serializer );
269
+
270
+ $ obj = new CircularReferenceDummy ();
271
+
272
+ $ this ->expectException (CircularReferenceException::class);
273
+ $ this ->normalizer ->normalize ($ obj );
274
+ }
275
+
276
+ public function testLegacyCircularReferenceHandler ()
277
+ {
278
+ $ handler = function ($ obj ) {
279
+ return \get_class ($ obj );
280
+ };
281
+
282
+ $ this ->normalizer ->setCircularReferenceHandler ($ handler );
283
+ $ this ->serializer = new Serializer ([$ this ->normalizer ]);
284
+ $ this ->normalizer ->setSerializer ($ this ->serializer );
285
+
286
+ $ obj = new CircularReferenceDummy ();
287
+
288
+ $ expected = ['me ' => CircularReferenceDummy::class];
289
+ $ this ->assertEquals ($ expected , $ this ->normalizer ->normalize ($ obj ));
290
+ }
291
+
245
292
protected function getDenormalizerForConstructArguments (): GetSetMethodNormalizer
246
293
{
247
294
$ classMetadataFactory = new ClassMetadataFactory (new AnnotationLoader (new AnnotationReader ()));
@@ -341,25 +388,28 @@ public function testRejectInvalidKey()
341
388
$ this ->markTestSkipped ('This test makes no sense with the GetSetMethodNormalizer ' );
342
389
}
343
390
344
-
345
-
346
-
347
-
348
-
349
- public function testIgnoredAttributes ()
391
+ protected function getNormalizerForIgnoredAttributes (): GetSetMethodNormalizer
350
392
{
351
- $ this ->doTestIgnoredAttributes ();
393
+ $ classMetadataFactory = new ClassMetadataFactory (new AnnotationLoader (new AnnotationReader ()));
394
+ $ normalizer = new GetSetMethodNormalizer ($ classMetadataFactory , null , new PhpDocExtractor ());
395
+ new Serializer ([$ normalizer ]);
396
+
397
+ return $ normalizer ;
352
398
}
353
399
354
- public function testLegacyIgnoredAttributes ()
400
+ protected function getDenormalizerForIgnoredAttributes (): GetSetMethodNormalizer
355
401
{
356
- $ this ->doTestIgnoredAttributes (true );
402
+ $ classMetadataFactory = new ClassMetadataFactory (new AnnotationLoader (new AnnotationReader ()));
403
+ $ normalizer = new GetSetMethodNormalizer ($ classMetadataFactory , null , new PhpDocExtractor ());
404
+ new Serializer ([$ normalizer ]);
405
+
406
+ return $ normalizer ;
357
407
}
358
408
359
- private function doTestIgnoredAttributes ( bool $ legacy = false )
409
+ public function testLegacyIgnoredAttributes ( )
360
410
{
361
411
$ ignoredAttributes = ['foo ' , 'bar ' , 'baz ' , 'camelCase ' , 'object ' ];
362
- $ legacy ? $ this ->normalizer ->setIgnoredAttributes ($ ignoredAttributes) : $ this -> createNormalizer ([GetSetMethodNormalizer:: IGNORED_ATTRIBUTES => $ ignoredAttributes ] );
412
+ $ this ->normalizer ->setIgnoredAttributes ($ ignoredAttributes );
363
413
364
414
$ obj = new GetSetDummy ();
365
415
$ obj ->setFoo ('foo ' );
@@ -388,32 +438,6 @@ public function testUnableToNormalizeObjectAttribute()
388
438
$ this ->normalizer ->normalize ($ obj , 'any ' );
389
439
}
390
440
391
- /**
392
- * @expectedException \Symfony\Component\Serializer\Exception\CircularReferenceException
393
- */
394
- public function testUnableToNormalizeCircularReference ()
395
- {
396
- $ this ->doTestUnableToNormalizeCircularReference ();
397
- }
398
-
399
- /**
400
- * @expectedException \Symfony\Component\Serializer\Exception\CircularReferenceException
401
- */
402
- public function testLegacyUnableToNormalizeCircularReference ()
403
- {
404
- $ this ->doTestUnableToNormalizeCircularReference (true );
405
- }
406
-
407
- private function doTestUnableToNormalizeCircularReference (bool $ legacy = false )
408
- {
409
- $ legacy ? $ this ->normalizer ->setCircularReferenceLimit (2 ) : $ this ->createNormalizer ([GetSetMethodNormalizer::CIRCULAR_REFERENCE_LIMIT => 2 ]);
410
- $ this ->serializer = new Serializer ([$ this ->normalizer ]);
411
- $ this ->normalizer ->setSerializer ($ this ->serializer );
412
-
413
- $ obj = new CircularReferenceDummy ();
414
- $ this ->normalizer ->normalize ($ obj );
415
- }
416
-
417
441
public function testSiblingReference ()
418
442
{
419
443
$ serializer = new Serializer ([$ this ->normalizer ]);
@@ -429,31 +453,6 @@ public function testSiblingReference()
429
453
$ this ->assertEquals ($ expected , $ this ->normalizer ->normalize ($ siblingHolder ));
430
454
}
431
455
432
- public function testCircularReferenceHandler ()
433
- {
434
- $ this ->doTestCircularReferenceHandler ();
435
- }
436
-
437
- public function testLegacyCircularReferenceHandler ()
438
- {
439
- $ this ->doTestCircularReferenceHandler (true );
440
- }
441
-
442
- private function doTestCircularReferenceHandler (bool $ legacy = false )
443
- {
444
- $ handler = function ($ obj ) {
445
- return \get_class ($ obj );
446
- };
447
-
448
- $ legacy ? $ this ->normalizer ->setCircularReferenceHandler ($ handler ) : $ this ->createNormalizer ([GetSetMethodNormalizer::CIRCULAR_REFERENCE_HANDLER => $ handler ]);
449
- $ this ->serializer = new Serializer ([$ this ->normalizer ]);
450
- $ this ->normalizer ->setSerializer ($ this ->serializer );
451
-
452
- $ obj = new CircularReferenceDummy ();
453
-
454
- $ expected = ['me ' => 'Symfony\Component\Serializer\Tests\Fixtures\CircularReferenceDummy ' ];
455
- $ this ->assertEquals ($ expected , $ this ->normalizer ->normalize ($ obj ));
456
- }
457
456
458
457
public function testDenormalizeNonExistingAttribute ()
459
458
{
0 commit comments