@@ -647,28 +647,65 @@ public function testExtractAttributesRespectsContext()
647
647
public function testAttributesContextNormalize ()
648
648
{
649
649
$ normalizer = new ObjectNormalizer ();
650
+ $ serializer = new Serializer (array ($ normalizer ));
651
+
652
+ $ objectInner = new ObjectInner ();
653
+ $ objectInner ->foo = 'innerFoo ' ;
654
+ $ objectInner ->bar = 'innerBar ' ;
650
655
651
656
$ objectDummy = new ObjectDummy ();
652
657
$ objectDummy ->setFoo ('foo ' );
653
- $ objectDummy ->setBaz ('baz ' );
658
+ $ objectDummy ->setBaz (true );
659
+ $ objectDummy ->setObject ($ objectInner );
654
660
655
- $ context = array ('attributes ' => array ('foo ' , 'baz ' ));
656
- $ this ->assertEquals (array ('foo ' => 'foo ' , 'baz ' => 'baz ' ), $ normalizer ->normalize ($ objectDummy , null , $ context ));
661
+ $ context = array ('attributes ' => array ('foo ' , 'baz ' , 'object ' => array ('foo ' )));
662
+ $ this ->assertEquals (
663
+ array (
664
+ 'foo ' => 'foo ' ,
665
+ 'baz ' => true ,
666
+ 'object ' => array ('foo ' => 'innerFoo ' ),
667
+ ),
668
+ $ serializer ->normalize ($ objectDummy , null , $ context )
669
+ );
657
670
}
658
671
659
672
public function testAttributesContextDenormalize ()
660
673
{
661
- $ normalizer = new ObjectNormalizer ();
674
+ $ normalizer = new ObjectNormalizer (null , null , null , new ReflectionExtractor ());
675
+ $ serializer = new Serializer (array ($ normalizer ));
662
676
663
- $ expected = new ObjectDummy ();
664
- $ expected ->setFoo ('foo ' );
665
- $ expected ->setBaz ('baz ' );
677
+ $ objectInner = new ObjectInner ();
678
+ $ objectInner ->foo = 'innerFoo ' ;
666
679
667
- $ context = array ('attributes ' => array ('foo ' , 'baz ' ));
668
- $ this ->assertEquals (
669
- $ expected ,
670
- $ normalizer ->denormalize (array ('foo ' => 'foo ' , 'baz ' => 'baz ' , 'bar ' => 'bar ' ), ObjectDummy::class, null , $ context )
671
- );
680
+ $ objectOuter = new ObjectOuter ();
681
+ $ objectOuter ->bar = 'bar ' ;
682
+ $ objectOuter ->setInner ($ objectInner );
683
+
684
+ $ context = array ('attributes ' => array ('bar ' , 'inner ' => array ('foo ' )));
685
+ $ this ->assertEquals ($ objectOuter , $ serializer ->denormalize (
686
+ array (
687
+ 'foo ' => 'foo ' ,
688
+ 'bar ' => 'bar ' ,
689
+ 'date ' => '2017-02-03 ' ,
690
+ 'inner ' => array ('foo ' => 'innerFoo ' , 'bar ' => 'innerBar ' ),
691
+ ), ObjectOuter::class, null , $ context ));
692
+ }
693
+
694
+ public function testAttributesContextDenormalizeConstructor ()
695
+ {
696
+ $ normalizer = new ObjectNormalizer (null , null , null , new ReflectionExtractor ());
697
+ $ serializer = new Serializer (array ($ normalizer ));
698
+
699
+ $ objectInner = new ObjectInner ();
700
+ $ objectInner ->bar = 'bar ' ;
701
+
702
+ $ obj = new DummyWithConstructorObjectAndDefaultValue ('a ' , $ objectInner );
703
+
704
+ $ context = array ('attributes ' => array ('inner ' => array ('bar ' )));
705
+ $ this ->assertEquals ($ obj , $ serializer ->denormalize (array (
706
+ 'foo ' => 'b ' ,
707
+ 'inner ' => array ('foo ' => 'foo ' , 'bar ' => 'bar ' ),
708
+ ), DummyWithConstructorObjectAndDefaultValue::class, null , $ context ));
672
709
}
673
710
}
674
711
@@ -840,6 +877,8 @@ public function setFoo(array $f)
840
877
841
878
class ObjectOuter
842
879
{
880
+ public $ foo ;
881
+ public $ bar ;
843
882
private $ inner ;
844
883
private $ date ;
845
884
@@ -937,3 +976,25 @@ class JsonNumber
937
976
*/
938
977
public $ number ;
939
978
}
979
+
980
+ class DummyWithConstructorObjectAndDefaultValue
981
+ {
982
+ private $ foo ;
983
+ private $ inner ;
984
+
985
+ public function __construct ($ foo = 'a ' , ObjectInner $ inner )
986
+ {
987
+ $ this ->foo = $ foo ;
988
+ $ this ->inner = $ inner ;
989
+ }
990
+
991
+ public function getFoo ()
992
+ {
993
+ return $ this ->foo ;
994
+ }
995
+
996
+ public function getInner ()
997
+ {
998
+ return $ this ->inner ;
999
+ }
1000
+ }
0 commit comments