3 namespace Symfony\Component\Serializer\Tests\Normalizer;
5 use PHPUnit\Framework\TestCase;
6 use Symfony\Component\Serializer\Mapping\AttributeMetadata;
7 use Symfony\Component\Serializer\Mapping\ClassMetadata;
8 use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface;
9 use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
10 use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
11 use Symfony\Component\Serializer\Tests\Fixtures\AbstractNormalizerDummy;
12 use Symfony\Component\Serializer\Tests\Fixtures\ProxyDummy;
13 use Symfony\Component\Serializer\Tests\Fixtures\StaticConstructorDummy;
14 use Symfony\Component\Serializer\Tests\Fixtures\StaticConstructorNormalizer;
17 * Provides a dummy Normalizer which extends the AbstractNormalizer.
19 * @author Konstantin S. M. Möllers <ksm.moellers@gmail.com>
21 class AbstractNormalizerTest extends TestCase
24 * @var AbstractNormalizerDummy
29 * @var ClassMetadataFactoryInterface|\PHPUnit_Framework_MockObject_MockObject
31 private $classMetadata;
33 protected function setUp()
35 $loader = $this->getMockBuilder('Symfony\Component\Serializer\Mapping\Loader\LoaderChain')->setConstructorArgs(array(array()))->getMock();
36 $this->classMetadata = $this->getMockBuilder('Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory')->setConstructorArgs(array($loader))->getMock();
37 $this->normalizer = new AbstractNormalizerDummy($this->classMetadata);
40 public function testGetAllowedAttributesAsString()
42 $classMetadata = new ClassMetadata('c');
44 $a1 = new AttributeMetadata('a1');
45 $classMetadata->addAttributeMetadata($a1);
47 $a2 = new AttributeMetadata('a2');
48 $a2->addGroup('test');
49 $classMetadata->addAttributeMetadata($a2);
51 $a3 = new AttributeMetadata('a3');
52 $a3->addGroup('other');
53 $classMetadata->addAttributeMetadata($a3);
55 $a4 = new AttributeMetadata('a4');
56 $a4->addGroup('test');
57 $a4->addGroup('other');
58 $classMetadata->addAttributeMetadata($a4);
60 $this->classMetadata->method('getMetadataFor')->willReturn($classMetadata);
62 $result = $this->normalizer->getAllowedAttributes('c', array(AbstractNormalizer::GROUPS => array('test')), true);
63 $this->assertEquals(array('a2', 'a4'), $result);
65 $result = $this->normalizer->getAllowedAttributes('c', array(AbstractNormalizer::GROUPS => array('other')), true);
66 $this->assertEquals(array('a3', 'a4'), $result);
69 public function testGetAllowedAttributesAsObjects()
71 $classMetadata = new ClassMetadata('c');
73 $a1 = new AttributeMetadata('a1');
74 $classMetadata->addAttributeMetadata($a1);
76 $a2 = new AttributeMetadata('a2');
77 $a2->addGroup('test');
78 $classMetadata->addAttributeMetadata($a2);
80 $a3 = new AttributeMetadata('a3');
81 $a3->addGroup('other');
82 $classMetadata->addAttributeMetadata($a3);
84 $a4 = new AttributeMetadata('a4');
85 $a4->addGroup('test');
86 $a4->addGroup('other');
87 $classMetadata->addAttributeMetadata($a4);
89 $this->classMetadata->method('getMetadataFor')->willReturn($classMetadata);
91 $result = $this->normalizer->getAllowedAttributes('c', array(AbstractNormalizer::GROUPS => array('test')), false);
92 $this->assertEquals(array($a2, $a4), $result);
94 $result = $this->normalizer->getAllowedAttributes('c', array(AbstractNormalizer::GROUPS => array('other')), false);
95 $this->assertEquals(array($a3, $a4), $result);
98 public function testObjectToPopulateWithProxy()
100 $proxyDummy = new ProxyDummy();
102 $context = array(AbstractNormalizer::OBJECT_TO_POPULATE => $proxyDummy);
104 $normalizer = new ObjectNormalizer();
105 $normalizer->denormalize(array('foo' => 'bar'), 'Symfony\Component\Serializer\Tests\Fixtures\ToBeProxyfiedDummy', null, $context);
107 $this->assertSame('bar', $proxyDummy->getFoo());
110 public function testObjectWithStaticConstructor()
112 $normalizer = new StaticConstructorNormalizer();
113 $dummy = $normalizer->denormalize(array('foo' => 'baz'), StaticConstructorDummy::class);
115 $this->assertInstanceOf(StaticConstructorDummy::class, $dummy);
116 $this->assertEquals('baz', $dummy->quz);
117 $this->assertNull($dummy->foo);