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;
15 * Provides a dummy Normalizer which extends the AbstractNormalizer.
17 * @author Konstantin S. M. Möllers <ksm.moellers@gmail.com>
19 class AbstractNormalizerTest extends TestCase
22 * @var AbstractNormalizerDummy
27 * @var ClassMetadataFactoryInterface|\PHPUnit_Framework_MockObject_MockObject
29 private $classMetadata;
31 protected function setUp()
33 $loader = $this->getMockBuilder('Symfony\Component\Serializer\Mapping\Loader\LoaderChain')->setConstructorArgs(array(array()))->getMock();
34 $this->classMetadata = $this->getMockBuilder('Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory')->setConstructorArgs(array($loader))->getMock();
35 $this->normalizer = new AbstractNormalizerDummy($this->classMetadata);
38 public function testGetAllowedAttributesAsString()
40 $classMetadata = new ClassMetadata('c');
42 $a1 = new AttributeMetadata('a1');
43 $classMetadata->addAttributeMetadata($a1);
45 $a2 = new AttributeMetadata('a2');
46 $a2->addGroup('test');
47 $classMetadata->addAttributeMetadata($a2);
49 $a3 = new AttributeMetadata('a3');
50 $a3->addGroup('other');
51 $classMetadata->addAttributeMetadata($a3);
53 $a4 = new AttributeMetadata('a4');
54 $a4->addGroup('test');
55 $a4->addGroup('other');
56 $classMetadata->addAttributeMetadata($a4);
58 $this->classMetadata->method('getMetadataFor')->willReturn($classMetadata);
60 $result = $this->normalizer->getAllowedAttributes('c', array(AbstractNormalizer::GROUPS => array('test')), true);
61 $this->assertEquals(array('a2', 'a4'), $result);
63 $result = $this->normalizer->getAllowedAttributes('c', array(AbstractNormalizer::GROUPS => array('other')), true);
64 $this->assertEquals(array('a3', 'a4'), $result);
67 public function testGetAllowedAttributesAsObjects()
69 $classMetadata = new ClassMetadata('c');
71 $a1 = new AttributeMetadata('a1');
72 $classMetadata->addAttributeMetadata($a1);
74 $a2 = new AttributeMetadata('a2');
75 $a2->addGroup('test');
76 $classMetadata->addAttributeMetadata($a2);
78 $a3 = new AttributeMetadata('a3');
79 $a3->addGroup('other');
80 $classMetadata->addAttributeMetadata($a3);
82 $a4 = new AttributeMetadata('a4');
83 $a4->addGroup('test');
84 $a4->addGroup('other');
85 $classMetadata->addAttributeMetadata($a4);
87 $this->classMetadata->method('getMetadataFor')->willReturn($classMetadata);
89 $result = $this->normalizer->getAllowedAttributes('c', array(AbstractNormalizer::GROUPS => array('test')), false);
90 $this->assertEquals(array($a2, $a4), $result);
92 $result = $this->normalizer->getAllowedAttributes('c', array(AbstractNormalizer::GROUPS => array('other')), false);
93 $this->assertEquals(array($a3, $a4), $result);
96 public function testObjectToPopulateWithProxy()
98 $proxyDummy = new ProxyDummy();
100 $context = array(AbstractNormalizer::OBJECT_TO_POPULATE => $proxyDummy);
102 $normalizer = new ObjectNormalizer();
103 $normalizer->denormalize(array('foo' => 'bar'), 'Symfony\Component\Serializer\Tests\Fixtures\ToBeProxyfiedDummy', null, $context);
105 $this->assertSame('bar', $proxyDummy->getFoo());