12
12
namespace Symfony \Component \Serializer \Tests \Normalizer ;
13
13
14
14
use Doctrine \Common \Annotations \AnnotationReader ;
15
+ use Symfony \Component \PropertyInfo \Extractor \PhpDocExtractor ;
15
16
use Symfony \Component \PropertyInfo \Extractor \ReflectionExtractor ;
17
+ use Symfony \Component \PropertyInfo \PropertyInfoExtractor ;
16
18
use Symfony \Component \Serializer \Exception \UnexpectedValueException ;
17
19
use Symfony \Component \Serializer \NameConverter \CamelCaseToSnakeCaseNameConverter ;
20
+ use Symfony \Component \Serializer \Normalizer \ArrayDenormalizer ;
18
21
use Symfony \Component \Serializer \Normalizer \DateTimeNormalizer ;
19
22
use Symfony \Component \Serializer \Normalizer \ObjectNormalizer ;
20
23
use Symfony \Component \Serializer \Serializer ;
@@ -525,13 +528,21 @@ public function testThrowUnexpectedValueException()
525
528
526
529
public function testDenomalizeRecursive ()
527
530
{
528
- $ normalizer = new ObjectNormalizer (null , null , null , new ReflectionExtractor ());
529
- $ serializer = new Serializer (array (new DateTimeNormalizer (), $ normalizer ));
531
+ $ extractor = new PropertyInfoExtractor (array (), array (new PhpDocExtractor (), new ReflectionExtractor ()));
532
+ $ normalizer = new ObjectNormalizer (null , null , null , $ extractor );
533
+ $ serializer = new Serializer (array (new ArrayDenormalizer (), new DateTimeNormalizer (), $ normalizer ));
534
+
535
+ $ obj = $ serializer ->denormalize (array (
536
+ 'inner ' => array ('foo ' => 'foo ' , 'bar ' => 'bar ' ),
537
+ 'date ' => '1988/01/21 ' ,
538
+ 'inners ' => array (array ('foo ' => 1 ), array ('foo ' => 2 )),
539
+ ), ObjectOuter::class);
530
540
531
- $ obj = $ serializer ->denormalize (array ('inner ' => array ('foo ' => 'foo ' , 'bar ' => 'bar ' ), 'date ' => '1988/01/21 ' ), ObjectOuter::class);
532
541
$ this ->assertEquals ('foo ' , $ obj ->getInner ()->foo );
533
542
$ this ->assertEquals ('bar ' , $ obj ->getInner ()->bar );
534
543
$ this ->assertEquals ('1988-01-21 ' , $ obj ->getDate ()->format ('Y-m-d ' ));
544
+ $ this ->assertEquals (1 , $ obj ->getInners ()[0 ]->foo );
545
+ $ this ->assertEquals (2 , $ obj ->getInners ()[1 ]->foo );
535
546
}
536
547
537
548
/**
@@ -546,6 +557,21 @@ public function testRejectInvalidType()
546
557
$ serializer ->denormalize (array ('date ' => 'foo ' ), ObjectOuter::class);
547
558
}
548
559
560
+ /**
561
+ * @expectedException UnexpectedValueException
562
+ * @expectedExceptionMessage The type of the key "a" must be "int" ("string" given).
563
+ */
564
+ public function testRejectInvalidKey ()
565
+ {
566
+ $ extractor = new PropertyInfoExtractor (array (), array (new PhpDocExtractor (), new ReflectionExtractor ()));
567
+ $ normalizer = new ObjectNormalizer (null , null , null , $ extractor );
568
+ $ serializer = new Serializer (array (new ArrayDenormalizer (), new DateTimeNormalizer (), $ normalizer ));
569
+
570
+ var_dump ($ serializer ->denormalize (array (
571
+ 'inners ' => array ('a ' => array ('foo ' => 1 )),
572
+ ), ObjectOuter::class));
573
+ }
574
+
549
575
public function testExtractAttributesRespectsFormat ()
550
576
{
551
577
$ normalizer = new FormatAndContextAwareNormalizer ();
@@ -740,6 +766,11 @@ class ObjectOuter
740
766
private $ inner ;
741
767
private $ date ;
742
768
769
+ /**
770
+ * @var ObjectInner[]
771
+ */
772
+ private $ inners ;
773
+
743
774
public function getInner ()
744
775
{
745
776
return $ this ->inner ;
@@ -759,6 +790,16 @@ public function getDate()
759
790
{
760
791
return $ this ->date ;
761
792
}
793
+
794
+ public function setInners (array $ inners )
795
+ {
796
+ $ this ->inners = $ inners ;
797
+ }
798
+
799
+ public function getInners ()
800
+ {
801
+ return $ this ->inners ;
802
+ }
762
803
}
763
804
764
805
class ObjectInner
0 commit comments