@@ -643,6 +643,70 @@ public function testExtractAttributesRespectsContext()
643
643
644
644
$ this ->assertSame (array ('foo ' => 'bar ' , 'bar ' => 'foo ' ), $ normalizer ->normalize ($ data , null , array ('include_foo_and_bar ' => true )));
645
645
}
646
+
647
+ public function testAttributesContextNormalize ()
648
+ {
649
+ $ normalizer = new ObjectNormalizer ();
650
+ $ serializer = new Serializer (array ($ normalizer ));
651
+
652
+ $ objectInner = new ObjectInner ();
653
+ $ objectInner ->foo = 'innerFoo ' ;
654
+ $ objectInner ->bar = 'innerBar ' ;
655
+
656
+ $ objectDummy = new ObjectDummy ();
657
+ $ objectDummy ->setFoo ('foo ' );
658
+ $ objectDummy ->setBaz (true );
659
+ $ objectDummy ->setObject ($ objectInner );
660
+
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
+ );
670
+ }
671
+
672
+ public function testAttributesContextDenormalize ()
673
+ {
674
+ $ normalizer = new ObjectNormalizer (null , null , null , new ReflectionExtractor ());
675
+ $ serializer = new Serializer (array ($ normalizer ));
676
+
677
+ $ objectInner = new ObjectInner ();
678
+ $ objectInner ->foo = 'innerFoo ' ;
679
+
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 ));
709
+ }
646
710
}
647
711
648
712
class ObjectDummy
@@ -813,6 +877,8 @@ public function setFoo(array $f)
813
877
814
878
class ObjectOuter
815
879
{
880
+ public $ foo ;
881
+ public $ bar ;
816
882
private $ inner ;
817
883
private $ date ;
818
884
@@ -910,3 +976,25 @@ class JsonNumber
910
976
*/
911
977
public $ number ;
912
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