17
17
use Symfony \Component \PropertyInfo \Extractor \ReflectionExtractor ;
18
18
use Symfony \Component \Serializer \Encoder \JsonEncoder ;
19
19
use Symfony \Component \Serializer \Exception \InvalidArgumentException ;
20
+ use Symfony \Component \Serializer \Exception \LogicException ;
20
21
use Symfony \Component \Serializer \Exception \NotNormalizableValueException ;
21
22
use Symfony \Component \Serializer \Mapping \ClassDiscriminatorFromClassMetadata ;
22
23
use Symfony \Component \Serializer \Mapping \ClassDiscriminatorMapping ;
@@ -488,6 +489,86 @@ public function testNotNormalizableValueExceptionMessageForAResource()
488
489
(new Serializer ())->normalize (tmpfile ());
489
490
}
490
491
492
+ public function testNormalizeScalar ()
493
+ {
494
+ $ serializer = new Serializer ([], ['json ' => new JsonEncoder ()]);
495
+
496
+ $ this ->assertSame ('42 ' , $ serializer ->serialize (42 , 'json ' ));
497
+ $ this ->assertSame ('true ' , $ serializer ->serialize (true , 'json ' ));
498
+ $ this ->assertSame ('false ' , $ serializer ->serialize (false , 'json ' ));
499
+ $ this ->assertSame ('3.14 ' , $ serializer ->serialize (3.14 , 'json ' ));
500
+ $ this ->assertSame ('3.14 ' , $ serializer ->serialize (31.4e-1 , 'json ' ));
501
+ $ this ->assertSame ('" spaces " ' , $ serializer ->serialize (' spaces ' , 'json ' ));
502
+ $ this ->assertSame ('"@Ca$e%" ' , $ serializer ->serialize ('@Ca$e% ' , 'json ' ));
503
+ }
504
+
505
+ public function testNormalizeScalarArray ()
506
+ {
507
+ $ serializer = new Serializer ([], ['json ' => new JsonEncoder ()]);
508
+
509
+ $ this ->assertSame ('[42] ' , $ serializer ->serialize ([42 ], 'json ' ));
510
+ $ this ->assertSame ('[true,false] ' , $ serializer ->serialize ([true , false ], 'json ' ));
511
+ $ this ->assertSame ('[3.14,3.24] ' , $ serializer ->serialize ([3.14 , 32.4e-1 ], 'json ' ));
512
+ $ this ->assertSame ('[" spaces ","@Ca$e%"] ' , $ serializer ->serialize ([' spaces ' , '@Ca$e% ' ], 'json ' ));
513
+ }
514
+
515
+ public function testDeserializeScalar ()
516
+ {
517
+ $ serializer = new Serializer ([], ['json ' => new JsonEncoder ()]);
518
+
519
+ $ this ->assertSame (42 , $ serializer ->deserialize ('42 ' , 'int ' , 'json ' ));
520
+ $ this ->assertTrue ($ serializer ->deserialize ('true ' , 'bool ' , 'json ' ));
521
+ $ this ->assertSame (3.14 , $ serializer ->deserialize ('3.14 ' , 'float ' , 'json ' ));
522
+ $ this ->assertSame (3.14 , $ serializer ->deserialize ('31.4e-1 ' , 'float ' , 'json ' ));
523
+ $ this ->assertSame (' spaces ' , $ serializer ->deserialize ('" spaces " ' , 'string ' , 'json ' ));
524
+ $ this ->assertSame ('@Ca$e% ' , $ serializer ->deserialize ('"@Ca$e%" ' , 'string ' , 'json ' ));
525
+ }
526
+
527
+ public function testDeserializeLegacyScalarType ()
528
+ {
529
+ $ this ->expectException (LogicException::class);
530
+ $ serializer = new Serializer ([], ['json ' => new JsonEncoder ()]);
531
+ $ serializer ->deserialize ('42 ' , 'integer ' , 'json ' );
532
+ }
533
+
534
+ public function testDeserializeScalarTypeToCustomType ()
535
+ {
536
+ $ this ->expectException (LogicException::class);
537
+ $ serializer = new Serializer ([], ['json ' => new JsonEncoder ()]);
538
+ $ serializer ->deserialize ('"something" ' , Foo::class, 'json ' );
539
+ }
540
+
541
+ public function testDeserializeNonscalarTypeToScalar ()
542
+ {
543
+ $ this ->expectException (NotNormalizableValueException::class);
544
+ $ serializer = new Serializer ([], ['json ' => new JsonEncoder ()]);
545
+ $ serializer ->deserialize ('{"foo":true} ' , 'string ' , 'json ' );
546
+ }
547
+
548
+ public function testDeserializeInconsistentScalarType ()
549
+ {
550
+ $ this ->expectException (NotNormalizableValueException::class);
551
+ $ serializer = new Serializer ([], ['json ' => new JsonEncoder ()]);
552
+ $ serializer ->deserialize ('"42" ' , 'int ' , 'json ' );
553
+ }
554
+
555
+ public function testDeserializeScalarArray ()
556
+ {
557
+ $ serializer = new Serializer ([new ArrayDenormalizer ()], ['json ' => new JsonEncoder ()]);
558
+
559
+ $ this ->assertSame ([42 ], $ serializer ->deserialize ('[42] ' , 'int[] ' , 'json ' ));
560
+ $ this ->assertSame ([true , false ], $ serializer ->deserialize ('[true,false] ' , 'bool[] ' , 'json ' ));
561
+ $ this ->assertSame ([3.14 , 3.24 ], $ serializer ->deserialize ('[3.14,32.4e-1] ' , 'float[] ' , 'json ' ));
562
+ $ this ->assertSame ([' spaces ' , '@Ca$e% ' ], $ serializer ->deserialize ('[" spaces ","@Ca$e%"] ' , 'string[] ' , 'json ' ));
563
+ }
564
+
565
+ public function testDeserializeInconsistentScalarArray ()
566
+ {
567
+ $ this ->expectException (NotNormalizableValueException::class);
568
+ $ serializer = new Serializer ([new ArrayDenormalizer ()], ['json ' => new JsonEncoder ()]);
569
+ $ serializer ->deserialize ('["42"] ' , 'int[] ' , 'json ' );
570
+ }
571
+
491
572
private function serializerWithClassDiscriminator ()
492
573
{
493
574
$ classMetadataFactory = new ClassMetadataFactory (new AnnotationLoader (new AnnotationReader ()));
0 commit comments