platform/api/symfony/Component/Serializer/Tests/SerializerTest.yaml

1166 lines
62 KiB
YAML
Raw Normal View History

2024-09-02 17:44:11 +00:00
name: SerializerTest
class_comment: null
dependencies:
- name: TestCase
type: class
source: PHPUnit\Framework\TestCase
- name: InvalidTypeException
type: class
source: Symfony\Component\PropertyAccess\Exception\InvalidTypeException
- name: PropertyAccessor
type: class
source: Symfony\Component\PropertyAccess\PropertyAccessor
- name: PhpDocExtractor
type: class
source: Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor
- name: ReflectionExtractor
type: class
source: Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor
- name: PropertyInfoExtractor
type: class
source: Symfony\Component\PropertyInfo\PropertyInfoExtractor
- name: CsvEncoder
type: class
source: Symfony\Component\Serializer\Encoder\CsvEncoder
- name: JsonEncoder
type: class
source: Symfony\Component\Serializer\Encoder\JsonEncoder
- name: XmlEncoder
type: class
source: Symfony\Component\Serializer\Encoder\XmlEncoder
- name: ExtraAttributesException
type: class
source: Symfony\Component\Serializer\Exception\ExtraAttributesException
- name: InvalidArgumentException
type: class
source: Symfony\Component\Serializer\Exception\InvalidArgumentException
- name: LogicException
type: class
source: Symfony\Component\Serializer\Exception\LogicException
- name: NotNormalizableValueException
type: class
source: Symfony\Component\Serializer\Exception\NotNormalizableValueException
- name: PartialDenormalizationException
type: class
source: Symfony\Component\Serializer\Exception\PartialDenormalizationException
- name: UnexpectedValueException
type: class
source: Symfony\Component\Serializer\Exception\UnexpectedValueException
- name: ClassDiscriminatorFromClassMetadata
type: class
source: Symfony\Component\Serializer\Mapping\ClassDiscriminatorFromClassMetadata
- name: ClassDiscriminatorMapping
type: class
source: Symfony\Component\Serializer\Mapping\ClassDiscriminatorMapping
- name: ClassMetadata
type: class
source: Symfony\Component\Serializer\Mapping\ClassMetadata
- name: ClassMetadataInterface
type: class
source: Symfony\Component\Serializer\Mapping\ClassMetadataInterface
- name: ClassMetadataFactory
type: class
source: Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory
- name: ClassMetadataFactoryInterface
type: class
source: Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface
- name: AttributeLoader
type: class
source: Symfony\Component\Serializer\Mapping\Loader\AttributeLoader
- name: AbstractNormalizer
type: class
source: Symfony\Component\Serializer\Normalizer\AbstractNormalizer
- name: AbstractObjectNormalizer
type: class
source: Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer
- name: ArrayDenormalizer
type: class
source: Symfony\Component\Serializer\Normalizer\ArrayDenormalizer
- name: BackedEnumNormalizer
type: class
source: Symfony\Component\Serializer\Normalizer\BackedEnumNormalizer
- name: CustomNormalizer
type: class
source: Symfony\Component\Serializer\Normalizer\CustomNormalizer
- name: DataUriNormalizer
type: class
source: Symfony\Component\Serializer\Normalizer\DataUriNormalizer
- name: DateTimeNormalizer
type: class
source: Symfony\Component\Serializer\Normalizer\DateTimeNormalizer
- name: DateTimeZoneNormalizer
type: class
source: Symfony\Component\Serializer\Normalizer\DateTimeZoneNormalizer
- name: DenormalizerAwareInterface
type: class
source: Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface
- name: DenormalizerInterface
type: class
source: Symfony\Component\Serializer\Normalizer\DenormalizerInterface
- name: GetSetMethodNormalizer
type: class
source: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
- name: NormalizerAwareInterface
type: class
source: Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface
- name: NormalizerInterface
type: class
source: Symfony\Component\Serializer\Normalizer\NormalizerInterface
- name: ObjectNormalizer
type: class
source: Symfony\Component\Serializer\Normalizer\ObjectNormalizer
- name: PropertyNormalizer
type: class
source: Symfony\Component\Serializer\Normalizer\PropertyNormalizer
- name: UidNormalizer
type: class
source: Symfony\Component\Serializer\Normalizer\UidNormalizer
- name: UnwrappingDenormalizer
type: class
source: Symfony\Component\Serializer\Normalizer\UnwrappingDenormalizer
- name: Serializer
type: class
source: Symfony\Component\Serializer\Serializer
- name: AbstractDummy
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\Attributes\AbstractDummy
- name: AbstractDummyFirstChild
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\Attributes\AbstractDummyFirstChild
- name: AbstractDummySecondChild
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\Attributes\AbstractDummySecondChild
- name: DenormalizableDummy
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\DenormalizableDummy
- name: DummyFirstChildQuux
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\DummyFirstChildQuux
- name: DummyMessageInterface
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\DummyMessageInterface
- name: DummyMessageNumberOne
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\DummyMessageNumberOne
- name: DummyMessageNumberThree
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\DummyMessageNumberThree
- name: DummyMessageNumberTwo
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\DummyMessageNumberTwo
- name: DummyNullableInt
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\DummyNullableInt
- name: DummyObjectWithEnumConstructor
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\DummyObjectWithEnumConstructor
- name: DummyObjectWithEnumProperty
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\DummyObjectWithEnumProperty
- name: DummyWithObjectOrNull
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\DummyWithObjectOrNull
- name: FalseBuiltInDummy
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\FalseBuiltInDummy
- name: FooImplementationDummy
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\FooImplementationDummy
- name: FooInterfaceDummyDenormalizer
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\FooInterfaceDummyDenormalizer
- name: NormalizableTraversableDummy
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\NormalizableTraversableDummy
- name: ObjectCollectionPropertyDummy
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\ObjectCollectionPropertyDummy
- name: Php74Full
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\Php74Full
- name: Php80WithOptionalConstructorParameter
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\Php80WithOptionalConstructorParameter
- name: Php80WithPromotedTypedConstructor
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\Php80WithPromotedTypedConstructor
- name: TraversableDummy
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\TraversableDummy
- name: TrueBuiltInDummy
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\TrueBuiltInDummy
- name: WithTypedConstructor
type: class
source: Symfony\Component\Serializer\Tests\Fixtures\WithTypedConstructor
- name: TestDenormalizer
type: class
source: Symfony\Component\Serializer\Tests\Normalizer\TestDenormalizer
- name: TestNormalizer
type: class
source: Symfony\Component\Serializer\Tests\Normalizer\TestNormalizer
properties:
- name: map
visibility: public
comment: null
- name: map
visibility: public
comment: null
- name: map
visibility: public
comment: null
- name: map
visibility: public
comment: null
- name: changed
visibility: public
comment: "# @dataProvider provideObjectOrCollectionTests */\n# public function testNormalizeWithCollection(Serializer\
\ $serializer, array $data)\n# {\n# $expected = '{\"a1\":[],\"a2\":{\"k\":\"v\"\
},\"b1\":[],\"b2\":{\"k\":\"v\"},\"c1\":{\"nested\":[]},\"c2\":{\"nested\":{\"\
k\":\"v\"}},\"d1\":{\"nested\":[]},\"d2\":{\"nested\":{\"k\":\"v\"}},\"e1\":{\"\
map\":[]},\"e2\":{\"map\":{\"k\":\"v\"}},\"f1\":{\"map\":[]},\"f2\":{\"map\":{\"\
k\":\"v\"}},\"g1\":{\"list\":[],\"settings\":[]},\"g2\":{\"list\":[\"greg\"],\"\
settings\":[]}}';\n# $this->assertSame($expected, $serializer->serialize($data,\
\ 'json'));\n# }\n# \n# /** @dataProvider provideObjectOrCollectionTests */\n\
# public function testNormalizePreserveEmptyArrayObject(Serializer $serializer,\
\ array $data)\n# {\n# $expected = '{\"a1\":{},\"a2\":{\"k\":\"v\"},\"b1\":[],\"\
b2\":{\"k\":\"v\"},\"c1\":{\"nested\":{}},\"c2\":{\"nested\":{\"k\":\"v\"}},\"\
d1\":{\"nested\":[]},\"d2\":{\"nested\":{\"k\":\"v\"}},\"e1\":{\"map\":[]},\"\
e2\":{\"map\":{\"k\":\"v\"}},\"f1\":{\"map\":{}},\"f2\":{\"map\":{\"k\":\"v\"\
}},\"g1\":{\"list\":{},\"settings\":[]},\"g2\":{\"list\":[\"greg\"],\"settings\"\
:[]}}';\n# $this->assertSame($expected, $serializer->serialize($data, 'json',\
\ [\n# AbstractObjectNormalizer::PRESERVE_EMPTY_OBJECTS => true,\n# ]));\n# }\n\
# \n# /** @dataProvider provideObjectOrCollectionTests */\n# public function testNormalizeEmptyArrayAsObject(Serializer\
\ $serializer, array $data)\n# {\n# $expected = '{\"a1\":[],\"a2\":{\"k\":\"v\"\
},\"b1\":{},\"b2\":{\"k\":\"v\"},\"c1\":{\"nested\":[]},\"c2\":{\"nested\":{\"\
k\":\"v\"}},\"d1\":{\"nested\":{}},\"d2\":{\"nested\":{\"k\":\"v\"}},\"e1\":{\"\
map\":{}},\"e2\":{\"map\":{\"k\":\"v\"}},\"f1\":{\"map\":[]},\"f2\":{\"map\":{\"\
k\":\"v\"}},\"g1\":{\"list\":[],\"settings\":{}},\"g2\":{\"list\":[\"greg\"],\"\
settings\":{}}}';\n# $this->assertSame($expected, $serializer->serialize($data,\
\ 'json', [\n# Serializer::EMPTY_ARRAY_AS_OBJECT => true,\n# ]));\n# }\n# \n#\
\ /** @dataProvider provideObjectOrCollectionTests */\n# public function testNormalizeEmptyArrayAsObjectAndPreserveEmptyArrayObject(Serializer\
\ $serializer, array $data)\n# {\n# $expected = '{\"a1\":{},\"a2\":{\"k\":\"v\"\
},\"b1\":{},\"b2\":{\"k\":\"v\"},\"c1\":{\"nested\":{}},\"c2\":{\"nested\":{\"\
k\":\"v\"}},\"d1\":{\"nested\":{}},\"d2\":{\"nested\":{\"k\":\"v\"}},\"e1\":{\"\
map\":{}},\"e2\":{\"map\":{\"k\":\"v\"}},\"f1\":{\"map\":{}},\"f2\":{\"map\":{\"\
k\":\"v\"}},\"g1\":{\"list\":{},\"settings\":{}},\"g2\":{\"list\":[\"greg\"],\"\
settings\":{}}}';\n# $this->assertSame($expected, $serializer->serialize($data,\
\ 'json', [\n# Serializer::EMPTY_ARRAY_AS_OBJECT => true,\n# AbstractObjectNormalizer::PRESERVE_EMPTY_OBJECTS\
\ => true,\n# ]));\n# }\n# \n# public function testNormalizeScalar()\n# {\n# $serializer\
\ = new Serializer([], ['json' => new JsonEncoder()]);\n# \n# $this->assertSame('42',\
\ $serializer->serialize(42, 'json'));\n# $this->assertSame('true', $serializer->serialize(true,\
\ 'json'));\n# $this->assertSame('false', $serializer->serialize(false, 'json'));\n\
# $this->assertSame('3.14', $serializer->serialize(3.14, 'json'));\n# $this->assertSame('3.14',\
\ $serializer->serialize(31.4e-1, 'json'));\n# $this->assertSame('\" spaces \
\ \"', $serializer->serialize(' spaces ', 'json'));\n# $this->assertSame('\"\
@Ca$e%\"', $serializer->serialize('@Ca$e%', 'json'));\n# }\n# \n# public function\
\ testNormalizeScalarArray()\n# {\n# $serializer = new Serializer([], ['json'\
\ => new JsonEncoder()]);\n# \n# $this->assertSame('[42]', $serializer->serialize([42],\
\ 'json'));\n# $this->assertSame('[true,false]', $serializer->serialize([true,\
\ false], 'json'));\n# $this->assertSame('[3.14,3.24]', $serializer->serialize([3.14,\
\ 32.4e-1], 'json'));\n# $this->assertSame('[\" spaces \",\"@Ca$e%\"]', $serializer->serialize(['\
\ spaces ', '@Ca$e%'], 'json'));\n# }\n# \n# public function testDeserializeScalar()\n\
# {\n# $serializer = new Serializer([], ['json' => new JsonEncoder()]);\n# \n\
# $this->assertSame(42, $serializer->deserialize('42', 'int', 'json'));\n# $this->assertTrue($serializer->deserialize('true',\
\ 'bool', 'json'));\n# $this->assertSame(3.14, $serializer->deserialize('3.14',\
\ 'float', 'json'));\n# $this->assertSame(3.14, $serializer->deserialize('31.4e-1',\
\ 'float', 'json'));\n# $this->assertSame(' spaces ', $serializer->deserialize('\"\
\ spaces \"', 'string', 'json'));\n# $this->assertSame('@Ca$e%', $serializer->deserialize('\"\
@Ca$e%\"', 'string', 'json'));\n# }\n# \n# public function testDeserializeLegacyScalarType()\n\
# {\n# $serializer = new Serializer([], ['json' => new JsonEncoder()]);\n# \n\
# $this->expectException(LogicException::class);\n# \n# $serializer->deserialize('42',\
\ 'integer', 'json');\n# }\n# \n# public function testDeserializeScalarTypeToCustomType()\n\
# {\n# $serializer = new Serializer([], ['json' => new JsonEncoder()]);\n# \n\
# $this->expectException(LogicException::class);\n# \n# $serializer->deserialize('\"\
something\"', Foo::class, 'json');\n# }\n# \n# public function testDeserializeNonscalarTypeToScalar()\n\
# {\n# $serializer = new Serializer([], ['json' => new JsonEncoder()]);\n# \n\
# $this->expectException(NotNormalizableValueException::class);\n# \n# $serializer->deserialize('{\"\
foo\":true}', 'string', 'json');\n# }\n# \n# public function testDeserializeInconsistentScalarType()\n\
# {\n# $serializer = new Serializer([], ['json' => new JsonEncoder()]);\n# \n\
# $this->expectException(NotNormalizableValueException::class);\n# \n# $serializer->deserialize('\"\
42\"', 'int', 'json');\n# }\n# \n# public function testDeserializeScalarArray()\n\
# {\n# $serializer = new Serializer([new ArrayDenormalizer()], ['json' => new\
\ JsonEncoder()]);\n# \n# $this->assertSame([42], $serializer->deserialize('[42]',\
\ 'int[]', 'json'));\n# $this->assertSame([true, false], $serializer->deserialize('[true,false]',\
\ 'bool[]', 'json'));\n# $this->assertSame([3.14, 3.24], $serializer->deserialize('[3.14,32.4e-1]',\
\ 'float[]', 'json'));\n# $this->assertSame([' spaces ', '@Ca$e%'], $serializer->deserialize('[\"\
\ spaces \",\"@Ca$e%\"]', 'string[]', 'json'));\n# }\n# \n# public function\
\ testDeserializeInconsistentScalarArray()\n# {\n# $serializer = new Serializer([new\
\ ArrayDenormalizer()], ['json' => new JsonEncoder()]);\n# \n# $this->expectException(NotNormalizableValueException::class);\n\
# \n# $serializer->deserialize('[\"42\"]', 'int[]', 'json');\n# }\n# \n# public\
\ function testDeserializeOnObjectWithObjectCollectionProperty()\n# {\n# $serializer\
\ = new Serializer([new FooInterfaceDummyDenormalizer(), new ObjectNormalizer(null,\
\ null, null, new PhpDocExtractor())], [new JsonEncoder()]);\n# \n# $obj = $serializer->deserialize('{\"\
foo\":[{\"name\":\"bar\"}]}', ObjectCollectionPropertyDummy::class, 'json');\n\
# $this->assertInstanceOf(ObjectCollectionPropertyDummy::class, $obj);\n# \n#\
\ $fooDummyObjects = $obj->getFoo();\n# $this->assertCount(1, $fooDummyObjects);\n\
# \n# $fooDummyObject = $fooDummyObjects[0];\n# $this->assertInstanceOf(FooImplementationDummy::class,\
\ $fooDummyObject);\n# $this->assertSame('bar', $fooDummyObject->name);\n# }\n\
# \n# public function testDeserializeWrappedScalar()\n# {\n# $serializer = new\
\ Serializer([new UnwrappingDenormalizer()], ['json' => new JsonEncoder()]);\n\
# \n# $this->assertSame(42, $serializer->deserialize('{\"wrapper\": 42}', 'int',\
\ 'json', [UnwrappingDenormalizer::UNWRAP_PATH => '[wrapper]']));\n# }\n# \n#\
\ public function testDeserializeNullableIntInXml()\n# {\n# $extractor = new PropertyInfoExtractor([],\
\ [new ReflectionExtractor()]);\n# $serializer = new Serializer([new ObjectNormalizer(null,\
\ null, null, $extractor)], ['xml' => new XmlEncoder()]);\n# \n# $obj = $serializer->deserialize('<?xml\
\ version=\"1.0\" encoding=\"UTF-8\"?><DummyNullableInt><value/></DummyNullableInt>',\
\ DummyNullableInt::class, 'xml');\n# $this->assertInstanceOf(DummyNullableInt::class,\
\ $obj);\n# $this->assertNull($obj->value);\n# }\n# \n# public function testUnionTypeDeserializable()\n\
# {\n# $classMetadataFactory = new ClassMetadataFactory(new AttributeLoader());\n\
# $extractor = new PropertyInfoExtractor([], [new PhpDocExtractor(), new ReflectionExtractor()]);\n\
# $serializer = new Serializer(\n# [\n# new DateTimeNormalizer(),\n# new ObjectNormalizer($classMetadataFactory,\
\ null, null, $extractor, new ClassDiscriminatorFromClassMetadata($classMetadataFactory)),\n\
# ],\n# ['json' => new JsonEncoder()]\n# );\n# \n# $actual = $serializer->deserialize('{\
\ \"changed\": null }', DummyUnionType::class, 'json', [\n# DateTimeNormalizer::FORMAT_KEY\
\ => \\DateTimeinterface::ATOM,\n# ]);\n# \n# $this->assertEquals((new DummyUnionType())->setChanged(null),\
\ $actual, 'Union type denormalization first case failed.');\n# \n# $actual =\
\ $serializer->deserialize('{ \"changed\": \"2022-03-22T16:15:05+0000\" }', DummyUnionType::class,\
\ 'json', [\n# DateTimeNormalizer::FORMAT_KEY => \\DateTimeinterface::ATOM,\n\
# ]);\n# \n# $expectedDateTime = \\DateTimeImmutable::createFromFormat(\\DateTimeinterface::ATOM,\
\ '2022-03-22T16:15:05+0000');\n# $this->assertEquals((new DummyUnionType())->setChanged($expectedDateTime),\
\ $actual, 'Union type denormalization second case failed.');\n# \n# $actual =\
\ $serializer->deserialize('{ \"changed\": false }', DummyUnionType::class, 'json',\
\ [\n# DateTimeNormalizer::FORMAT_KEY => \\DateTimeinterface::ATOM,\n# ]);\n#\
\ \n# $this->assertEquals(new DummyUnionType(), $actual, 'Union type denormalization\
\ third case failed.');\n# }\n# \n# public function testUnionTypeDeserializableWithoutAllowedExtraAttributes()\n\
# {\n# $classMetadataFactory = new ClassMetadataFactory(new AttributeLoader());\n\
# $extractor = new PropertyInfoExtractor([], [new PhpDocExtractor(), new ReflectionExtractor()]);\n\
# $serializer = new Serializer(\n# [\n# new ObjectNormalizer($classMetadataFactory,\
\ null, null, $extractor, new ClassDiscriminatorFromClassMetadata($classMetadataFactory)),\n\
# ],\n# ['json' => new JsonEncoder()]\n# );\n# \n# $actual = $serializer->deserialize('{\
\ \"v\": { \"a\": 0 }}', DummyUnionWithAAndCAndB::class, 'json', [\n# AbstractNormalizer::ALLOW_EXTRA_ATTRIBUTES\
\ => false,\n# ]);\n# \n# $this->assertEquals(new DummyUnionWithAAndCAndB(new\
\ DummyATypeForUnion()), $actual);\n# \n# $actual = $serializer->deserialize('{\
\ \"v\": { \"b\": 1 }}', DummyUnionWithAAndCAndB::class, 'json', [\n# AbstractNormalizer::ALLOW_EXTRA_ATTRIBUTES\
\ => false,\n# ]);\n# \n# $this->assertEquals(new DummyUnionWithAAndCAndB(new\
\ DummyBTypeForUnion()), $actual);\n# \n# $actual = $serializer->deserialize('{\
\ \"v\": { \"c\": 3 }}', DummyUnionWithAAndCAndB::class, 'json', [\n# AbstractNormalizer::ALLOW_EXTRA_ATTRIBUTES\
\ => false,\n# ]);\n# \n# $this->assertEquals(new DummyUnionWithAAndCAndB(new\
\ DummyCTypeForUnion(3)), $actual);\n# \n# $this->expectException(ExtraAttributesException::class);\n\
# $serializer->deserialize('{ \"v\": { \"b\": 1, \"d\": \"i am not allowed\" }}',\
\ DummyUnionWithAAndCAndB::class, 'json', [\n# AbstractNormalizer::ALLOW_EXTRA_ATTRIBUTES\
\ => false,\n# ]);\n# }\n# \n# public function testFalseBuiltInTypes()\n# {\n\
# $extractor = new PropertyInfoExtractor([], [new ReflectionExtractor()]);\n#\
\ $serializer = new Serializer([new ObjectNormalizer(null, null, null, $extractor)],\
\ ['json' => new JsonEncoder()]);\n# \n# $actual = $serializer->deserialize('{\"\
false\":false}', FalseBuiltInDummy::class, 'json');\n# \n# $this->assertEquals(new\
\ FalseBuiltInDummy(), $actual);\n# }\n# \n# public function testTrueBuiltInTypes()\n\
# {\n# $extractor = new PropertyInfoExtractor([], [new ReflectionExtractor()]);\n\
# $serializer = new Serializer([new ObjectNormalizer(null, null, null, $extractor)],\
\ ['json' => new JsonEncoder()]);\n# \n# $actual = $serializer->deserialize('{\"\
true\":true}', TrueBuiltInDummy::class, 'json');\n# \n# $this->assertEquals(new\
\ TrueBuiltInDummy(), $actual);\n# }\n# \n# public function testDeserializeUntypedFormat()\n\
# {\n# $serializer = new Serializer([new ObjectNormalizer(null, null, null, new\
\ PropertyInfoExtractor([], [new PhpDocExtractor(), new ReflectionExtractor()]))],\
\ ['csv' => new CsvEncoder()]);\n# $actual = $serializer->deserialize('value'.\\\
PHP_EOL.',', DummyWithObjectOrNull::class, 'csv', [CsvEncoder::AS_COLLECTION_KEY\
\ => false]);\n# \n# $this->assertEquals(new DummyWithObjectOrNull(null), $actual);\n\
# }\n# \n# private function serializerWithClassDiscriminator()\n# {\n# $classMetadataFactory\
\ = new ClassMetadataFactory(new AttributeLoader());\n# \n# return new Serializer([new\
\ ObjectNormalizer($classMetadataFactory, null, null, new ReflectionExtractor(),\
\ new ClassDiscriminatorFromClassMetadata($classMetadataFactory))], ['json' =>\
\ new JsonEncoder()]);\n# }\n# \n# public function testDeserializeAndUnwrap()\n\
# {\n# $jsonData = '{\"baz\": {\"foo\": \"bar\", \"inner\": {\"title\": \"value\"\
, \"numbers\": [5,3]}}}';\n# \n# $expectedData = Model::fromArray(['title' =>\
\ 'value', 'numbers' => [5, 3]]);\n# \n# $serializer = new Serializer([new UnwrappingDenormalizer(new\
\ PropertyAccessor()), new ObjectNormalizer()], ['json' => new JsonEncoder()]);\n\
# \n# $this->assertEquals(\n# $expectedData,\n# $serializer->deserialize($jsonData,\
\ __NAMESPACE__.'\\Model', 'json', [UnwrappingDenormalizer::UNWRAP_PATH => '[baz][inner]'])\n\
# );\n# }\n# \n# /**\n# * @dataProvider provideCollectDenormalizationErrors\n\
# */\n# public function testCollectDenormalizationErrors(?ClassMetadataFactory\
\ $classMetadataFactory)\n# {\n# $json = '\n# {\n# \"string\": null,\n# \"int\"\
: null,\n# \"float\": null,\n# \"bool\": null,\n# \"dateTime\": null,\n# \"dateTimeImmutable\"\
: null,\n# \"dateTimeZone\": null,\n# \"splFileInfo\": null,\n# \"uuid\": null,\n\
# \"array\": null,\n# \"collection\": [\n# {\n# \"string\": \"string\"\n# },\n\
# {\n# \"string\": null\n# }\n# ],\n# \"php74FullWithConstructor\": {},\n# \"\
php74FullWithTypedConstructor\": {\n# \"something\": \"not a float\",\n# \"somethingElse\"\
: \"not a bool\"\n# },\n# \"dummyMessage\": {\n# },\n# \"nestedObject\": {\n#\
\ \"int\": \"string\"\n# },\n# \"anotherCollection\": null\n# }';\n# \n# $extractor\
\ = new PropertyInfoExtractor([], [new PhpDocExtractor(), new ReflectionExtractor()]);\n\
# \n# $serializer = new Serializer(\n# [\n# new ArrayDenormalizer(),\n# new DateTimeNormalizer(),\n\
# new DateTimeZoneNormalizer(),\n# new DataUriNormalizer(),\n# new UidNormalizer(),\n\
# new ObjectNormalizer($classMetadataFactory, null, null, $extractor, $classMetadataFactory\
\ ? new ClassDiscriminatorFromClassMetadata($classMetadataFactory) : null),\n\
# ],\n# ['json' => new JsonEncoder()]\n# );\n# \n# try {\n# $serializer->deserialize($json,\
\ Php74Full::class, 'json', [\n# DenormalizerInterface::COLLECT_DENORMALIZATION_ERRORS\
\ => true,\n# ]);\n# \n# $this->fail();\n# } catch (\\Throwable $th) {\n# $this->assertInstanceOf(PartialDenormalizationException::class,\
\ $th);\n# }\n# \n# $this->assertInstanceOf(Php74Full::class, $th->getData());\n\
# \n# $exceptionsAsArray = array_map(fn (NotNormalizableValueException $e): array\
\ => [\n# 'currentType' => $e->getCurrentType(),\n# 'expectedTypes' => $e->getExpectedTypes(),\n\
# 'path' => $e->getPath(),\n# 'useMessageForUser' => $e->canUseMessageForUser(),\n\
# 'message' => $e->getMessage(),\n# ], $th->getErrors());\n# \n# $expected = [\n\
# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'string',\n# ],\n#\
\ 'path' => 'string',\n# 'useMessageForUser' => false,\n# 'message' => 'The type\
\ of the \"string\" attribute for class \"Symfony\\\\Component\\\\Serializer\\\
\\Tests\\\\Fixtures\\\\Php74Full\" must be one of \"string\" (\"null\" given).',\n\
# ],\n# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'int',\n# ],\n\
# 'path' => 'int',\n# 'useMessageForUser' => false,\n# 'message' => 'The type\
\ of the \"int\" attribute for class \"Symfony\\\\Component\\\\Serializer\\\\\
Tests\\\\Fixtures\\\\Php74Full\" must be one of \"int\" (\"null\" given).',\n\
# ],\n# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'float',\n# ],\n\
# 'path' => 'float',\n# 'useMessageForUser' => false,\n# 'message' => 'The type\
\ of the \"float\" attribute for class \"Symfony\\\\Component\\\\Serializer\\\\\
Tests\\\\Fixtures\\\\Php74Full\" must be one of \"float\" (\"null\" given).',\n\
# ],\n# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'bool',\n# ],\n\
# 'path' => 'bool',\n# 'useMessageForUser' => false,\n# 'message' => 'The type\
\ of the \"bool\" attribute for class \"Symfony\\\\Component\\\\Serializer\\\\\
Tests\\\\Fixtures\\\\Php74Full\" must be one of \"bool\" (\"null\" given).',\n\
# ],\n# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'string',\n#\
\ ],\n# 'path' => 'dateTime',\n# 'useMessageForUser' => true,\n# 'message' =>\
\ 'The data is either not an string, an empty string, or null; you should pass\
\ a string that can be parsed with the passed format or a valid DateTime string.',\n\
# ],\n# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'string',\n#\
\ ],\n# 'path' => 'dateTimeImmutable',\n# 'useMessageForUser' => true,\n# 'message'\
\ => 'The data is either not an string, an empty string, or null; you should pass\
\ a string that can be parsed with the passed format or a valid DateTime string.',\n\
# ],\n# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'string',\n#\
\ ],\n# 'path' => 'dateTimeZone',\n# 'useMessageForUser' => true,\n# 'message'\
\ => 'The data is either an empty string or null, you should pass a string that\
\ can be parsed as a DateTimeZone.',\n# ],\n# [\n# 'currentType' => 'null',\n\
# 'expectedTypes' => [\n# 'string',\n# ],\n# 'path' => 'splFileInfo',\n# 'useMessageForUser'\
\ => true,\n# 'message' => 'The provided \"data:\" URI is not valid.',\n# ],\n\
# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'string',\n# ],\n#\
\ 'path' => 'uuid',\n# 'useMessageForUser' => true,\n# 'message' => 'The data\
\ is not a valid \"Symfony\\Component\\Uid\\Uuid\" string representation.',\n\
# ],\n# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'array',\n# ],\n\
# 'path' => 'array',\n# 'useMessageForUser' => false,\n# 'message' => 'The type\
\ of the \"array\" attribute for class \"Symfony\\\\Component\\\\Serializer\\\\\
Tests\\\\Fixtures\\\\Php74Full\" must be one of \"array\" (\"null\" given).',\n\
# ],\n# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'string',\n#\
\ ],\n# 'path' => 'collection[1].string',\n# 'useMessageForUser' => false,\n#\
\ 'message' => 'The type of the \"string\" attribute for class \"Symfony\\Component\\\
Serializer\\Tests\\Fixtures\\Php74Full\" must be one of \"string\" (\"null\" given).',\n\
# ],\n# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'unknown',\n\
# ],\n# 'path' => 'php74FullWithConstructor.constructorArgument',\n# 'useMessageForUser'\
\ => true,\n# 'message' => 'Failed to create object because the class misses the\
\ \"constructorArgument\" property.',\n# ],\n# [\n# 'currentType' => 'string',\n\
# 'expectedTypes' => [\n# 'float',\n# ],\n# 'path' => 'php74FullWithTypedConstructor.something',\n\
# 'useMessageForUser' => false,\n# 'message' => 'The type of the \"something\"\
\ attribute for class \"Symfony\\Component\\Serializer\\Tests\\Fixtures\\Php74FullWithTypedConstructor\"\
\ must be one of \"float\" (\"string\" given).',\n# ],\n# [\n# 'currentType' =>\
\ 'string',\n# 'expectedTypes' => [\n# 'bool',\n# ],\n# 'path' => 'php74FullWithTypedConstructor.somethingElse',\n\
# 'useMessageForUser' => false,\n# 'message' => 'The type of the \"somethingElse\"\
\ attribute for class \"Symfony\\Component\\Serializer\\Tests\\Fixtures\\Php74FullWithTypedConstructor\"\
\ must be one of \"bool\" (\"string\" given).',\n# ],\n# $classMetadataFactory\
\ ?\n# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'string',\n# ],\n\
# 'path' => 'dummyMessage.type',\n# 'useMessageForUser' => false,\n# 'message'\
\ => 'Type property \"type\" not found for the abstract object \"Symfony\\Component\\\
Serializer\\Tests\\Fixtures\\DummyMessageInterface\".',\n# ] :\n# [\n# 'currentType'\
\ => 'array',\n# 'expectedTypes' => [\n# DummyMessageInterface::class,\n# ],\n\
# 'path' => 'dummyMessage',\n# 'useMessageForUser' => false,\n# 'message' => 'The\
\ type of the \"dummyMessage\" attribute for class \"Symfony\\Component\\Serializer\\\
Tests\\Fixtures\\Php74Full\" must be one of \"Symfony\\Component\\Serializer\\\
Tests\\Fixtures\\DummyMessageInterface\" (\"array\" given).',\n# ],\n# [\n# 'currentType'\
\ => 'string',\n# 'expectedTypes' => [\n# 'int',\n# ],\n# 'path' => 'nestedObject[int]',\n\
# 'useMessageForUser' => true,\n# 'message' => 'The type of the key \"int\" must\
\ be \"int\" (\"string\" given).',\n# ],\n# [\n# 'currentType' => 'null',\n# 'expectedTypes'\
\ => ['array'],\n# 'path' => 'anotherCollection',\n# 'useMessageForUser' => false,\n\
# 'message' => 'Data expected to be \"Symfony\\Component\\Serializer\\Tests\\\
Fixtures\\Php74Full[]\", \"null\" given.',\n# ],\n# ];\n# \n# $this->assertSame($expected,\
\ $exceptionsAsArray);\n# }\n# \n# /**\n# * @dataProvider provideCollectDenormalizationErrors\n\
# */\n# public function testCollectDenormalizationErrors2(?ClassMetadataFactory\
\ $classMetadataFactory)\n# {\n# $json = '\n# [\n# {\n# \"string\": null\n# },\n\
# {\n# \"string\": null\n# }\n# ]';\n# \n# $extractor = new PropertyInfoExtractor([],\
\ [new PhpDocExtractor(), new ReflectionExtractor()]);\n# \n# $serializer = new\
\ Serializer(\n# [\n# new ArrayDenormalizer(),\n# new ObjectNormalizer($classMetadataFactory,\
\ null, null, $extractor, $classMetadataFactory ? new ClassDiscriminatorFromClassMetadata($classMetadataFactory)\
\ : null),\n# ],\n# ['json' => new JsonEncoder()]\n# );\n# \n# try {\n# $serializer->deserialize($json,\
\ Php74Full::class.'[]', 'json', [\n# DenormalizerInterface::COLLECT_DENORMALIZATION_ERRORS\
\ => true,\n# ]);\n# \n# $this->fail();\n# } catch (\\Throwable $th) {\n# $this->assertInstanceOf(PartialDenormalizationException::class,\
\ $th);\n# }\n# \n# $this->assertCount(2, $th->getData());\n# $this->assertInstanceOf(Php74Full::class,\
\ $th->getData()[0]);\n# $this->assertInstanceOf(Php74Full::class, $th->getData()[1]);\n\
# \n# $exceptionsAsArray = array_map(fn (NotNormalizableValueException $e): array\
\ => [\n# 'currentType' => $e->getCurrentType(),\n# 'expectedTypes' => $e->getExpectedTypes(),\n\
# 'path' => $e->getPath(),\n# 'useMessageForUser' => $e->canUseMessageForUser(),\n\
# 'message' => $e->getMessage(),\n# ], $th->getErrors());\n# \n# $expected = [\n\
# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'string',\n# ],\n#\
\ 'path' => '[0].string',\n# 'useMessageForUser' => false,\n# 'message' => 'The\
\ type of the \"string\" attribute for class \"Symfony\\\\Component\\\\Serializer\\\
\\Tests\\\\Fixtures\\\\Php74Full\" must be one of \"string\" (\"null\" given).',\n\
# ],\n# [\n# 'currentType' => 'null',\n# 'expectedTypes' => [\n# 'string',\n#\
\ ],\n# 'path' => '[1].string',\n# 'useMessageForUser' => false,\n# 'message'\
\ => 'The type of the \"string\" attribute for class \"Symfony\\\\Component\\\\\
Serializer\\\\Tests\\\\Fixtures\\\\Php74Full\" must be one of \"string\" (\"null\"\
\ given).',\n# ],\n# ];\n# \n# $this->assertSame($expected, $exceptionsAsArray);\n\
# }\n# \n# public function testCollectDenormalizationErrorsWithoutTypeExtractor()\n\
# {\n# $json = '\n# {\n# \"string\": [],\n# \"int\": [],\n# \"float\": []\n# }';\n\
# \n# $serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);\n\
# \n# try {\n# $serializer->deserialize($json, Php74Full::class, 'json', [\n#\
\ DenormalizerInterface::COLLECT_DENORMALIZATION_ERRORS => true,\n# ]);\n# \n\
# $this->fail();\n# } catch (\\Throwable $th) {\n# $this->assertInstanceOf(PartialDenormalizationException::class,\
\ $th);\n# }\n# \n# $this->assertInstanceOf(Php74Full::class, $th->getData());\n\
# \n# $exceptionsAsArray = array_map(fn (NotNormalizableValueException $e): array\
\ => [\n# 'currentType' => $e->getCurrentType(),\n# 'expectedTypes' => $e->getExpectedTypes(),\n\
# 'path' => $e->getPath(),\n# 'useMessageForUser' => $e->canUseMessageForUser(),\n\
# 'message' => $e->getMessage(),\n# ], $th->getErrors());\n# \n# $expected = [\n\
# [\n# 'currentType' => 'array',\n# 'expectedTypes' => [\n# class_exists(InvalidTypeException::class)\
\ ? 'string' : 'unknown',\n# ],\n# 'path' => 'string',\n# 'useMessageForUser'\
\ => false,\n# 'message' => 'Failed to denormalize attribute \"string\" value\
\ for class \"Symfony\\\\Component\\\\Serializer\\\\Tests\\\\Fixtures\\\\Php74Full\"\
: Expected argument of type \"string\", \"array\" given at property path \"string\"\
.',\n# ],\n# [\n# 'currentType' => 'array',\n# 'expectedTypes' => [\n# class_exists(InvalidTypeException::class)\
\ ? 'int' : 'unknown',\n# ],\n# 'path' => 'int',\n# 'useMessageForUser' => false,\n\
# 'message' => 'Failed to denormalize attribute \"int\" value for class \"Symfony\\\
\\Component\\\\Serializer\\\\Tests\\\\Fixtures\\\\Php74Full\": Expected argument\
\ of type \"int\", \"array\" given at property path \"int\".',\n# ],\n# [\n# 'currentType'\
\ => 'array',\n# 'expectedTypes' => [\n# class_exists(InvalidTypeException::class)\
\ ? 'float' : 'unknown',\n# ],\n# 'path' => 'float',\n# 'useMessageForUser' =>\
\ false,\n# 'message' => 'Failed to denormalize attribute \"float\" value for\
\ class \"Symfony\\\\Component\\\\Serializer\\\\Tests\\\\Fixtures\\\\Php74Full\"\
: Expected argument of type \"float\", \"array\" given at property path \"float\"\
.',\n# ],\n# ];\n# \n# $this->assertSame($expected, $exceptionsAsArray);\n# }\n\
# \n# /**\n# * @dataProvider provideCollectDenormalizationErrors\n# */\n# public\
\ function testCollectDenormalizationErrorsWithConstructor(?ClassMetadataFactory\
\ $classMetadataFactory)\n# {\n# $json = '{\"bool\": \"bool\"}';\n# \n# $extractor\
\ = new PropertyInfoExtractor([], [new PhpDocExtractor(), new ReflectionExtractor()]);\n\
# \n# $serializer = new Serializer(\n# [\n# new ObjectNormalizer($classMetadataFactory,\
\ null, null, $extractor, $classMetadataFactory ? new ClassDiscriminatorFromClassMetadata($classMetadataFactory)\
\ : null),\n# ],\n# ['json' => new JsonEncoder()]\n# );\n# \n# try {\n# $serializer->deserialize($json,\
\ Php80WithPromotedTypedConstructor::class, 'json', [\n# DenormalizerInterface::COLLECT_DENORMALIZATION_ERRORS\
\ => true,\n# ]);\n# \n# $this->fail();\n# } catch (\\Throwable $th) {\n# $this->assertInstanceOf(PartialDenormalizationException::class,\
\ $th);\n# }\n# \n# $this->assertInstanceOf(Php80WithPromotedTypedConstructor::class,\
\ $th->getData());\n# \n# $exceptionsAsArray = array_map(fn (NotNormalizableValueException\
\ $e): array => [\n# 'currentType' => $e->getCurrentType(),\n# 'expectedTypes'\
\ => $e->getExpectedTypes(),\n# 'path' => $e->getPath(),\n# 'useMessageForUser'\
\ => $e->canUseMessageForUser(),\n# 'message' => $e->getMessage(),\n# ], $th->getErrors());\n\
# \n# $expected = [\n# [\n# 'currentType' => 'string',\n# 'expectedTypes' => [\n\
# 'bool',\n# ],\n# 'path' => 'bool',\n# 'useMessageForUser' => false,\n# 'message'\
\ => 'The type of the \"bool\" attribute for class \"Symfony\\\\Component\\\\\
Serializer\\\\Tests\\\\Fixtures\\\\Php80WithPromotedTypedConstructor\" must be\
\ one of \"bool\" (\"string\" given).',\n# ],\n# [\n# 'currentType' => 'null',\n\
# 'expectedTypes' => [\n# 'string',\n# ],\n# 'path' => 'string',\n# 'useMessageForUser'\
\ => true,\n# 'message' => 'Failed to create object because the class misses the\
\ \"string\" property.',\n# ],\n# [\n# 'currentType' => 'null',\n# 'expectedTypes'\
\ => [\n# 'int',\n# ],\n# 'path' => 'int',\n# 'useMessageForUser' => true,\n#\
\ 'message' => 'Failed to create object because the class misses the \"int\" property.',\n\
# ],\n# ];\n# \n# $this->assertSame($expected, $exceptionsAsArray);\n# }\n# \n\
# public function testCollectDenormalizationErrorsWithInvalidConstructorTypes()\n\
# {\n# $json = '{\"string\": \"some string\", \"bool\": \"bool\", \"int\": true}';\n\
# \n# $extractor = new PropertyInfoExtractor([], [new ReflectionExtractor()]);\n\
# \n# $serializer = new Serializer(\n# [new ObjectNormalizer(null, null, null,\
\ $extractor)],\n# ['json' => new JsonEncoder()]\n# );\n# \n# try {\n# $serializer->deserialize($json,\
\ WithTypedConstructor::class, 'json', [\n# DenormalizerInterface::COLLECT_DENORMALIZATION_ERRORS\
\ => true,\n# ]);\n# \n# $this->fail();\n# } catch (\\Throwable $th) {\n# $this->assertInstanceOf(PartialDenormalizationException::class,\
\ $th);\n# }\n# \n# $this->assertInstanceOf(WithTypedConstructor::class, $object\
\ = $th->getData());\n# \n# $this->assertSame('some string', $object->string);\n\
# $this->assertTrue($object->bool);\n# $this->assertSame(1, $object->int);\n#\
\ \n# $exceptionsAsArray = array_map(function (NotNormalizableValueException $e):\
\ array {\n# return [\n# 'currentType' => $e->getCurrentType(),\n# 'expectedTypes'\
\ => $e->getExpectedTypes(),\n# 'path' => $e->getPath(),\n# 'useMessageForUser'\
\ => $e->canUseMessageForUser(),\n# 'message' => $e->getMessage(),\n# ];\n# },\
\ $th->getErrors());\n# \n# $expected = [\n# [\n# 'currentType' => 'string',\n\
# 'expectedTypes' => [\n# 'bool',\n# ],\n# 'path' => 'bool',\n# 'useMessageForUser'\
\ => false,\n# 'message' => 'The type of the \"bool\" attribute for class \"Symfony\\\
Component\\Serializer\\Tests\\Fixtures\\WithTypedConstructor\" must be one of\
\ \"bool\" (\"string\" given).',\n# ],\n# [\n# 'currentType' => 'bool',\n# 'expectedTypes'\
\ => [\n# 'int',\n# ],\n# 'path' => 'int',\n# 'useMessageForUser' => false,\n\
# 'message' => 'The type of the \"int\" attribute for class \"Symfony\\Component\\\
Serializer\\Tests\\Fixtures\\WithTypedConstructor\" must be one of \"int\" (\"\
bool\" given).',\n# ],\n# ];\n# \n# $this->assertSame($expected, $exceptionsAsArray);\n\
# }\n# \n# public function testCollectDenormalizationErrorsWithEnumConstructor()\n\
# {\n# $serializer = new Serializer(\n# [\n# new BackedEnumNormalizer(),\n# new\
\ ObjectNormalizer(),\n# ],\n# ['json' => new JsonEncoder()]\n# );\n# \n# try\
\ {\n# $serializer->deserialize('{\"invalid\": \"GET\"}', DummyObjectWithEnumConstructor::class,\
\ 'json', [\n# DenormalizerInterface::COLLECT_DENORMALIZATION_ERRORS => true,\n\
# ]);\n# } catch (\\Throwable $th) {\n# $this->assertInstanceOf(PartialDenormalizationException::class,\
\ $th);\n# }\n# \n# $exceptionsAsArray = array_map(fn (NotNormalizableValueException\
\ $e): array => [\n# 'currentType' => $e->getCurrentType(),\n# 'useMessageForUser'\
\ => $e->canUseMessageForUser(),\n# 'message' => $e->getMessage(),\n# ], $th->getErrors());\n\
# \n# $expected = [\n# [\n# 'currentType' => 'null',\n# 'useMessageForUser' =>\
\ true,\n# 'message' => 'Failed to create object because the class misses the\
\ \"get\" property.',\n# ],\n# ];\n# \n# $this->assertSame($expected, $exceptionsAsArray);\n\
# }\n# \n# public function testCollectDenormalizationErrorsWithWrongPropertyWithoutConstruct()\n\
# {\n# $classMetadataFactory = new ClassMetadataFactory(new AttributeLoader());\n\
# $reflectionExtractor = new ReflectionExtractor();\n# $propertyInfoExtractor\
\ = new PropertyInfoExtractor([], [$reflectionExtractor], [], [], []);\n# \n#\
\ $serializer = new Serializer(\n# [\n# new BackedEnumNormalizer(),\n# new ObjectNormalizer($classMetadataFactory,\
\ null, null, $propertyInfoExtractor),\n# ],\n# ['json' => new JsonEncoder()]\n\
# );\n# \n# try {\n# $serializer->deserialize('{\"get\": \"POST\"}', DummyObjectWithEnumProperty::class,\
\ 'json', [\n# DenormalizerInterface::COLLECT_DENORMALIZATION_ERRORS => true,\n\
# ]);\n# } catch (\\Throwable $e) {\n# $this->assertInstanceOf(PartialDenormalizationException::class,\
\ $e);\n# }\n# \n# $exceptionsAsArray = array_map(function (NotNormalizableValueException\
\ $e): array {\n# return [\n# 'currentType' => $e->getCurrentType(),\n# 'useMessageForUser'\
\ => $e->canUseMessageForUser(),\n# 'message' => $e->getMessage(),\n# ];\n# },\
\ $e->getErrors());\n# \n# $expected = [\n# [\n# 'currentType' => 'string',\n\
# 'useMessageForUser' => true,\n# 'message' => 'The data must belong to a backed\
\ enumeration of type Symfony\\Component\\Serializer\\Tests\\Fixtures\\StringBackedEnumDummy',\n\
# ],\n# ];\n# \n# $this->assertSame($expected, $exceptionsAsArray);\n# }\n# \n\
# public function testNoCollectDenormalizationErrorsWithWrongEnumOnConstructor()\n\
# {\n# $serializer = new Serializer(\n# [\n# new BackedEnumNormalizer(),\n# new\
\ ObjectNormalizer(),\n# ],\n# ['json' => new JsonEncoder()]\n# );\n# \n# try\
\ {\n# $serializer->deserialize('{\"get\": \"POST\"}', DummyObjectWithEnumConstructor::class,\
\ 'json', [\n# DenormalizerInterface::COLLECT_DENORMALIZATION_ERRORS => true,\n\
# ]);\n# } catch (\\Throwable $th) {\n# $this->assertNotInstanceOf(PartialDenormalizationException::class,\
\ $th);\n# $this->assertInstanceOf(InvalidArgumentException::class, $th);\n# }\n\
# }\n# \n# public function testGroupsOnClassSerialization()\n# {\n# $obj = new\
\ Fixtures\\Attributes\\GroupClassDummy();\n# $obj->setFoo('foo');\n# $obj->setBar('bar');\n\
# $obj->setBaz('baz');\n# \n# $serializer = new Serializer(\n# [\n# new ObjectNormalizer(),\n\
# ],\n# [\n# 'json' => new JsonEncoder(),\n# ]\n# );\n# \n# $this->assertSame(\n\
# '{\"foo\":\"foo\",\"bar\":\"bar\",\"baz\":\"baz\"}',\n# $serializer->serialize($obj,\
\ 'json', ['groups' => ['a']])\n# );\n# }\n# \n# public static function provideCollectDenormalizationErrors():\
\ array\n# {\n# return [\n# [null],\n# [new ClassMetadataFactory(new AttributeLoader())],\n\
# ];\n# }\n# \n# public function testSerializerUsesSupportedTypesMethod()\n# {\n\
# $neverCalledNormalizer = $this->createMock(DummyNormalizer::class);\n# $neverCalledNormalizer\n\
# // once for normalization, once for denormalization\n# ->expects($this->exactly(2))\n\
# ->method('getSupportedTypes')\n# ->willReturn([\n# Foo::class => true,\n# Bar::class\
\ => false,\n# ]);\n# \n# $supportedAndCachedNormalizer = $this->createMock(DummyNormalizer::class);\n\
# $supportedAndCachedNormalizer\n# // once for normalization, once for denormalization\n\
# ->expects($this->exactly(2))\n# ->method('getSupportedTypes')\n# ->willReturn([\n\
# Model::class => true,\n# ]);\n# \n# $serializer = new Serializer(\n# [\n# $neverCalledNormalizer,\n\
# $supportedAndCachedNormalizer,\n# new ObjectNormalizer(),\n# ],\n# ['json' =>\
\ new JsonEncoder()]\n# );\n# \n# // Normalization process\n# $neverCalledNormalizer\n\
# ->expects($this->never())\n# ->method('supportsNormalization');\n# $neverCalledNormalizer\n\
# ->expects($this->never())\n# ->method('normalize');\n# \n# $supportedAndCachedNormalizer\n\
# ->expects($this->once())\n# ->method('supportsNormalization')\n# ->willReturn(true);\n\
# $supportedAndCachedNormalizer\n# ->expects($this->exactly(2))\n# ->method('normalize')\n\
# ->willReturn(['foo' => 'bar']);\n# \n# $serializer->normalize(new Model(), 'json');\n\
# $serializer->normalize(new Model(), 'json');\n# \n# // Denormalization pass\n\
# $neverCalledNormalizer\n# ->expects($this->never())\n# ->method('supportsDenormalization');\n\
# $neverCalledNormalizer\n# ->expects($this->never())\n# ->method('denormalize');\n\
# $supportedAndCachedNormalizer\n# ->expects($this->once())\n# ->method('supportsDenormalization')\n\
# ->willReturn(true);\n# $supportedAndCachedNormalizer\n# ->expects($this->exactly(2))\n\
# ->method('denormalize')\n# ->willReturn(new Model());\n# \n# $serializer->denormalize('foo',\
\ Model::class, 'json');\n# $serializer->denormalize('foo', Model::class, 'json');\n\
# }\n# \n# public function testPartialDenormalizationWithMissingConstructorTypes()\n\
# {\n# $json = '{\"one\": \"one string\", \"three\": \"three string\"}';\n# \n\
# $extractor = new PropertyInfoExtractor([], [new ReflectionExtractor()]);\n#\
\ \n# $serializer = new Serializer(\n# [new ObjectNormalizer(null, null, null,\
\ $extractor)],\n# ['json' => new JsonEncoder()]\n# );\n# \n# try {\n# $serializer->deserialize($json,\
\ Php80WithOptionalConstructorParameter::class, 'json', [\n# DenormalizerInterface::COLLECT_DENORMALIZATION_ERRORS\
\ => true,\n# ]);\n# \n# $this->fail();\n# } catch (\\Throwable $th) {\n# $this->assertInstanceOf(PartialDenormalizationException::class,\
\ $th);\n# }\n# \n# $this->assertInstanceOf(Php80WithOptionalConstructorParameter::class,\
\ $object = $th->getData());\n# \n# $this->assertSame('one string', $object->one);\n\
# $this->assertFalse(isset($object->two));\n# $this->assertSame('three string',\
\ $object->three);\n# \n# $exceptionsAsArray = array_map(function (NotNormalizableValueException\
\ $e): array {\n# return [\n# 'currentType' => $e->getCurrentType(),\n# 'expectedTypes'\
\ => $e->getExpectedTypes(),\n# 'path' => $e->getPath(),\n# 'useMessageForUser'\
\ => $e->canUseMessageForUser(),\n# 'message' => $e->getMessage(),\n# ];\n# },\
\ $th->getErrors());\n# \n# $expected = [\n# [\n# 'currentType' => 'null',\n#\
\ 'expectedTypes' => [\n# 'string',\n# ],\n# 'path' => 'two',\n# 'useMessageForUser'\
\ => true,\n# 'message' => 'Failed to create object because the class misses the\
\ \"two\" property.',\n# ],\n# ];\n# \n# $this->assertSame($expected, $exceptionsAsArray);\n\
# }\n# }\n# \n# class Model\n# {\n# private $title;\n# private $numbers;\n# \n\
# public static function fromArray($array)\n# {\n# $model = new self();\n# if\
\ (isset($array['title'])) {\n# $model->setTitle($array['title']);\n# }\n# if\
\ (isset($array['numbers'])) {\n# $model->setNumbers($array['numbers']);\n# }\n\
# \n# return $model;\n# }\n# \n# public function getTitle()\n# {\n# return $this->title;\n\
# }\n# \n# public function setTitle($title)\n# {\n# $this->title = $title;\n#\
\ }\n# \n# public function getNumbers()\n# {\n# return $this->numbers;\n# }\n\
# \n# public function setNumbers($numbers)\n# {\n# $this->numbers = $numbers;\n\
# }\n# \n# public function toArray()\n# {\n# return ['title' => $this->title,\
\ 'numbers' => $this->numbers];\n# }\n# }\n# \n# class Foo\n# {\n# private $bar;\n\
# \n# public function __construct(Bar $bar)\n# {\n# $this->bar = $bar;\n# }\n\
# }\n# \n# class Bar\n# {\n# private $value;\n# \n# public function __construct($value)\n\
# {\n# $this->value = $value;\n# }\n# }\n# \n# class DummyUnionType\n# {\n# /**\n\
# * @var \\DateTimeImmutable|bool|null"
- name: v
visibility: public
comment: "# * @param \\DateTimeImmutable|bool|null\n# *\n# * @return $this\n# */\n\
# public function setChanged($changed): static\n# {\n# $this->changed = $changed;\n\
# \n# return $this;\n# }\n# }\n# \n# class DummyATypeForUnion\n# {\n# public $a\
\ = 0;\n# }\n# \n# class DummyBTypeForUnion\n# {\n# public $b = 1;\n# }\n# \n\
# class DummyCTypeForUnion\n# {\n# public $c = 2;\n# \n# public function __construct($c)\n\
# {\n# $this->c = $c;\n# }\n# }\n# \n# class DummyUnionWithAAndCAndB\n# {\n# /**\
\ @var DummyATypeForUnion|DummyCTypeForUnion|DummyBTypeForUnion"
- name: list
visibility: public
comment: null
- name: settings
visibility: public
comment: null
- name: list
visibility: public
comment: null
methods:
- name: testItThrowsExceptionOnInvalidNormalizer
visibility: public
parameters: []
comment: null
- name: testItThrowsExceptionOnInvalidEncoder
visibility: public
parameters: []
comment: null
- name: testNormalizeNoMatch
visibility: public
parameters: []
comment: null
- name: testNormalizeTraversable
visibility: public
parameters: []
comment: null
- name: testNormalizeGivesPriorityToInterfaceOverTraversable
visibility: public
parameters: []
comment: null
- name: testNormalizeOnDenormalizer
visibility: public
parameters: []
comment: null
- name: testDenormalizeNoMatch
visibility: public
parameters: []
comment: null
- name: testDenormalizeOnObjectThatOnlySupportsDenormalization
visibility: public
parameters: []
comment: null
- name: testDenormalizeOnNormalizer
visibility: public
parameters: []
comment: null
- name: testCustomNormalizerCanNormalizeCollectionsAndScalar
visibility: public
parameters: []
comment: null
- name: testNormalizeWithSupportOnData
visibility: public
parameters: []
comment: null
- name: testDenormalizeWithSupportOnData
visibility: public
parameters: []
comment: null
- name: testSerialize
visibility: public
parameters: []
comment: null
- name: testSerializeScalar
visibility: public
parameters: []
comment: null
- name: testSerializeArrayOfScalars
visibility: public
parameters: []
comment: null
- name: testSerializeEmpty
visibility: public
parameters: []
comment: null
- name: testSerializeNoEncoder
visibility: public
parameters: []
comment: null
- name: testSerializeNoNormalizer
visibility: public
parameters: []
comment: null
- name: testDeserialize
visibility: public
parameters: []
comment: null
- name: testDeserializeUseCache
visibility: public
parameters: []
comment: null
- name: testDeserializeNoNormalizer
visibility: public
parameters: []
comment: null
- name: testDeserializeWrongNormalizer
visibility: public
parameters: []
comment: null
- name: testDeserializeNoEncoder
visibility: public
parameters: []
comment: null
- name: testDeserializeSupported
visibility: public
parameters: []
comment: null
- name: testDeserializeNotSupported
visibility: public
parameters: []
comment: null
- name: testDeserializeNotSupportedMissing
visibility: public
parameters: []
comment: null
- name: testEncode
visibility: public
parameters: []
comment: null
- name: testDecode
visibility: public
parameters: []
comment: null
- name: testSupportsArrayDeserialization
visibility: public
parameters: []
comment: null
- name: testDeserializeArray
visibility: public
parameters: []
comment: null
- name: testNormalizerAware
visibility: public
parameters: []
comment: null
- name: testDenormalizerAware
visibility: public
parameters: []
comment: null
- name: testDeserializeObjectConstructorWithObjectTypeHint
visibility: public
parameters: []
comment: null
- name: testDeserializeAndSerializeAbstractObjectsWithTheClassMetadataDiscriminatorResolver
visibility: public
parameters: []
comment: null
- name: getMetadataFor
visibility: public
parameters:
- name: value
comment: null
- name: hasMetadataFor
visibility: public
parameters:
- name: value
comment: null
- name: testDeserializeAndSerializeInterfacedObjectsWithTheClassMetadataDiscriminatorResolver
visibility: public
parameters: []
comment: null
- name: testDeserializeAndSerializeInterfacedObjectsWithTheClassMetadataDiscriminatorResolverAndGroups
visibility: public
parameters: []
comment: null
- name: testDeserializeAndSerializeNestedInterfacedObjectsWithTheClassMetadataDiscriminator
visibility: public
parameters: []
comment: null
- name: testDeserializeAndSerializeNestedAbstractAndInterfacedObjectsWithTheClassMetadataDiscriminator
visibility: public
parameters: []
comment: null
- name: testExceptionWhenTypeIsNotKnownInDiscriminator
visibility: public
parameters: []
comment: null
- name: testExceptionWhenTypeIsNotInTheBodyToDeserialiaze
visibility: public
parameters: []
comment: null
- name: testNotNormalizableValueExceptionMessageForAResource
visibility: public
parameters: []
comment: null
- name: testNormalizeTransformEmptyArrayObjectToArray
visibility: public
parameters: []
comment: null
- name: provideObjectOrCollectionTests
visibility: public
parameters: []
comment: null
- name: __construct
visibility: public
parameters:
- name: map
comment: null
- name: __construct
visibility: public
parameters:
- name: map
comment: null
- name: testNormalizeWithCollection
visibility: public
parameters:
- name: serializer
- name: data
comment: '# @dataProvider provideObjectOrCollectionTests'
- name: testNormalizePreserveEmptyArrayObject
visibility: public
parameters:
- name: serializer
- name: data
comment: '# @dataProvider provideObjectOrCollectionTests'
- name: testNormalizeEmptyArrayAsObject
visibility: public
parameters:
- name: serializer
- name: data
comment: '# @dataProvider provideObjectOrCollectionTests'
- name: testNormalizeEmptyArrayAsObjectAndPreserveEmptyArrayObject
visibility: public
parameters:
- name: serializer
- name: data
comment: '# @dataProvider provideObjectOrCollectionTests'
- name: testNormalizeScalar
visibility: public
parameters: []
comment: null
- name: testNormalizeScalarArray
visibility: public
parameters: []
comment: null
- name: testDeserializeScalar
visibility: public
parameters: []
comment: null
- name: testDeserializeLegacyScalarType
visibility: public
parameters: []
comment: null
- name: testDeserializeScalarTypeToCustomType
visibility: public
parameters: []
comment: null
- name: testDeserializeNonscalarTypeToScalar
visibility: public
parameters: []
comment: null
- name: testDeserializeInconsistentScalarType
visibility: public
parameters: []
comment: null
- name: testDeserializeScalarArray
visibility: public
parameters: []
comment: null
- name: testDeserializeInconsistentScalarArray
visibility: public
parameters: []
comment: null
- name: testDeserializeOnObjectWithObjectCollectionProperty
visibility: public
parameters: []
comment: null
- name: testDeserializeWrappedScalar
visibility: public
parameters: []
comment: null
- name: testDeserializeNullableIntInXml
visibility: public
parameters: []
comment: null
- name: testUnionTypeDeserializable
visibility: public
parameters: []
comment: null
- name: testUnionTypeDeserializableWithoutAllowedExtraAttributes
visibility: public
parameters: []
comment: null
- name: testFalseBuiltInTypes
visibility: public
parameters: []
comment: null
- name: testTrueBuiltInTypes
visibility: public
parameters: []
comment: null
- name: testDeserializeUntypedFormat
visibility: public
parameters: []
comment: null
- name: serializerWithClassDiscriminator
visibility: private
parameters: []
comment: null
- name: testDeserializeAndUnwrap
visibility: public
parameters: []
comment: null
- name: testCollectDenormalizationErrors
visibility: public
parameters:
- name: classMetadataFactory
comment: '# * @dataProvider provideCollectDenormalizationErrors'
- name: testCollectDenormalizationErrors2
visibility: public
parameters:
- name: classMetadataFactory
comment: '# * @dataProvider provideCollectDenormalizationErrors'
- name: testCollectDenormalizationErrorsWithoutTypeExtractor
visibility: public
parameters: []
comment: null
- name: testCollectDenormalizationErrorsWithConstructor
visibility: public
parameters:
- name: classMetadataFactory
comment: '# * @dataProvider provideCollectDenormalizationErrors'
- name: testCollectDenormalizationErrorsWithInvalidConstructorTypes
visibility: public
parameters: []
comment: null
- name: testCollectDenormalizationErrorsWithEnumConstructor
visibility: public
parameters: []
comment: null
- name: testCollectDenormalizationErrorsWithWrongPropertyWithoutConstruct
visibility: public
parameters: []
comment: null
- name: testNoCollectDenormalizationErrorsWithWrongEnumOnConstructor
visibility: public
parameters: []
comment: null
- name: testGroupsOnClassSerialization
visibility: public
parameters: []
comment: null
- name: provideCollectDenormalizationErrors
visibility: public
parameters: []
comment: null
- name: testSerializerUsesSupportedTypesMethod
visibility: public
parameters: []
comment: null
- name: testPartialDenormalizationWithMissingConstructorTypes
visibility: public
parameters: []
comment: null
- name: fromArray
visibility: public
parameters:
- name: array
comment: null
- name: getTitle
visibility: public
parameters: []
comment: null
- name: setTitle
visibility: public
parameters:
- name: title
comment: null
- name: getNumbers
visibility: public
parameters: []
comment: null
- name: setNumbers
visibility: public
parameters:
- name: numbers
comment: null
- name: toArray
visibility: public
parameters: []
comment: null
- name: __construct
visibility: public
parameters:
- name: bar
comment: null
- name: __construct
visibility: public
parameters:
- name: value
comment: null
- name: setChanged
visibility: public
parameters:
- name: changed
comment: "# * @var \\DateTimeImmutable|bool|null\n# */\n# public $changed = false;\n\
# \n# /**\n# * @param \\DateTimeImmutable|bool|null\n# *\n# * @return $this"
- name: __construct
visibility: public
parameters:
- name: c
comment: null
- name: __construct
visibility: public
parameters:
- name: v
comment: "# @var DummyATypeForUnion|DummyCTypeForUnion|DummyBTypeForUnion */\n#\
\ public $v;\n# \n# /**\n# * @param DummyATypeForUnion|DummyCTypeForUnion|DummyBTypeForUnion\
\ $v"
- name: __construct
visibility: public
parameters:
- name: list
comment: null
- name: __construct
visibility: public
parameters:
- name: list
comment: null
- name: count
visibility: public
parameters: []
comment: null
- name: getIterator
visibility: public
parameters: []
comment: null
- name: getSupportedTypes
visibility: public
parameters:
- name: format
comment: null
traits:
- PHPUnit\Framework\TestCase
- Symfony\Component\PropertyAccess\Exception\InvalidTypeException
- Symfony\Component\PropertyAccess\PropertyAccessor
- Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor
- Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor
- Symfony\Component\PropertyInfo\PropertyInfoExtractor
- Symfony\Component\Serializer\Encoder\CsvEncoder
- Symfony\Component\Serializer\Encoder\JsonEncoder
- Symfony\Component\Serializer\Encoder\XmlEncoder
- Symfony\Component\Serializer\Exception\ExtraAttributesException
- Symfony\Component\Serializer\Exception\InvalidArgumentException
- Symfony\Component\Serializer\Exception\LogicException
- Symfony\Component\Serializer\Exception\NotNormalizableValueException
- Symfony\Component\Serializer\Exception\PartialDenormalizationException
- Symfony\Component\Serializer\Exception\UnexpectedValueException
- Symfony\Component\Serializer\Mapping\ClassDiscriminatorFromClassMetadata
- Symfony\Component\Serializer\Mapping\ClassDiscriminatorMapping
- Symfony\Component\Serializer\Mapping\ClassMetadata
- Symfony\Component\Serializer\Mapping\ClassMetadataInterface
- Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory
- Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface
- Symfony\Component\Serializer\Mapping\Loader\AttributeLoader
- Symfony\Component\Serializer\Normalizer\AbstractNormalizer
- Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer
- Symfony\Component\Serializer\Normalizer\ArrayDenormalizer
- Symfony\Component\Serializer\Normalizer\BackedEnumNormalizer
- Symfony\Component\Serializer\Normalizer\CustomNormalizer
- Symfony\Component\Serializer\Normalizer\DataUriNormalizer
- Symfony\Component\Serializer\Normalizer\DateTimeNormalizer
- Symfony\Component\Serializer\Normalizer\DateTimeZoneNormalizer
- Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface
- Symfony\Component\Serializer\Normalizer\DenormalizerInterface
- Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
- Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface
- Symfony\Component\Serializer\Normalizer\NormalizerInterface
- Symfony\Component\Serializer\Normalizer\ObjectNormalizer
- Symfony\Component\Serializer\Normalizer\PropertyNormalizer
- Symfony\Component\Serializer\Normalizer\UidNormalizer
- Symfony\Component\Serializer\Normalizer\UnwrappingDenormalizer
- Symfony\Component\Serializer\Serializer
- Symfony\Component\Serializer\Tests\Fixtures\Attributes\AbstractDummy
- Symfony\Component\Serializer\Tests\Fixtures\Attributes\AbstractDummyFirstChild
- Symfony\Component\Serializer\Tests\Fixtures\Attributes\AbstractDummySecondChild
- Symfony\Component\Serializer\Tests\Fixtures\DenormalizableDummy
- Symfony\Component\Serializer\Tests\Fixtures\DummyFirstChildQuux
- Symfony\Component\Serializer\Tests\Fixtures\DummyMessageInterface
- Symfony\Component\Serializer\Tests\Fixtures\DummyMessageNumberOne
- Symfony\Component\Serializer\Tests\Fixtures\DummyMessageNumberThree
- Symfony\Component\Serializer\Tests\Fixtures\DummyMessageNumberTwo
- Symfony\Component\Serializer\Tests\Fixtures\DummyNullableInt
- Symfony\Component\Serializer\Tests\Fixtures\DummyObjectWithEnumConstructor
- Symfony\Component\Serializer\Tests\Fixtures\DummyObjectWithEnumProperty
- Symfony\Component\Serializer\Tests\Fixtures\DummyWithObjectOrNull
- Symfony\Component\Serializer\Tests\Fixtures\FalseBuiltInDummy
- Symfony\Component\Serializer\Tests\Fixtures\FooImplementationDummy
- Symfony\Component\Serializer\Tests\Fixtures\FooInterfaceDummyDenormalizer
- Symfony\Component\Serializer\Tests\Fixtures\NormalizableTraversableDummy
- Symfony\Component\Serializer\Tests\Fixtures\ObjectCollectionPropertyDummy
- Symfony\Component\Serializer\Tests\Fixtures\Php74Full
- Symfony\Component\Serializer\Tests\Fixtures\Php80WithOptionalConstructorParameter
- Symfony\Component\Serializer\Tests\Fixtures\Php80WithPromotedTypedConstructor
- Symfony\Component\Serializer\Tests\Fixtures\TraversableDummy
- Symfony\Component\Serializer\Tests\Fixtures\TrueBuiltInDummy
- Symfony\Component\Serializer\Tests\Fixtures\WithTypedConstructor
- Symfony\Component\Serializer\Tests\Normalizer\TestDenormalizer
- Symfony\Component\Serializer\Tests\Normalizer\TestNormalizer
interfaces:
- ClassMetadataFactoryInterface
- NormalizerInterface