AnnotatedNormalizerTest.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace JMS\SerializerBundle\Tests\Serializer;
  3. use JMS\SerializerBundle\Tests\Fixtures\AllExcludedObject;
  4. use JMS\SerializerBundle\Tests\Fixtures\VersionedObject;
  5. use JMS\SerializerBundle\Serializer\Exclusion\DisjunctExclusionStrategy;
  6. use JMS\SerializerBundle\Serializer\Exclusion\VersionExclusionStrategy;
  7. use JMS\SerializerBundle\Serializer\Exclusion\NoneExclusionStrategy;
  8. use JMS\SerializerBundle\Serializer\Exclusion\AllExclusionStrategy;
  9. use Symfony\Component\Serializer\Serializer;
  10. use JMS\SerializerBundle\Tests\Fixtures\CircularReferenceParent;
  11. use JMS\SerializerBundle\Tests\Fixtures\SimpleObject;
  12. use JMS\SerializerBundle\Serializer\Exclusion\ExclusionStrategyFactory;
  13. use JMS\SerializerBundle\Serializer\Naming\CamelCaseNamingStrategy;
  14. use JMS\SerializerBundle\Serializer\Naming\AnnotatedNamingStrategy;
  15. use Doctrine\Common\Annotations\AnnotationReader;
  16. use JMS\SerializerBundle\Serializer\AnnotatedNormalizer;
  17. class AnnotatedNormalizerTest extends \PHPUnit_Framework_TestCase
  18. {
  19. public function testNormalizeAllExcludedObject()
  20. {
  21. $object = new AllExcludedObject();
  22. $normalizer = $this->getNormalizer();
  23. $this->assertEquals(array('bar' => 'bar'), $normalizer->normalize($object, null));
  24. }
  25. public function testNormalizeVersionedObject()
  26. {
  27. $object = new VersionedObject('name1', 'name2');
  28. $normalizer = $this->getNormalizer();
  29. $this->assertEquals(array('name' => 'name2'), $normalizer->normalize($object, null));
  30. $normalizer = $this->getNormalizer('0.1.0');
  31. $this->assertEquals(array('name' => 'name1'), $normalizer->normalize($object, null));
  32. $normalizer = $this->getNormalizer('1.1.0');
  33. $this->assertEquals(array('name' => 'name2'), $normalizer->normalize($object, null));
  34. }
  35. public function testNormalizeCircularReference()
  36. {
  37. $normalizer = $this->getNormalizer();
  38. $object = new CircularReferenceParent();
  39. $this->assertEquals(array(
  40. 'collection' => array(
  41. array('name' => 'child1'),
  42. array('name' => 'child2'),
  43. ),
  44. 'another_collection' => array(
  45. array('name' => 'child1'),
  46. array('name' => 'child2'),
  47. ),
  48. ), $normalizer->normalize($object, null));
  49. }
  50. public function testNormalize()
  51. {
  52. $normalizer = $this->getNormalizer();
  53. $object = new SimpleObject('foo', 'bar');
  54. $this->assertEquals(array('foo' => 'foo', 'moo' => 'bar', 'camel_case' => 'boo'), $normalizer->normalize($object, null));
  55. }
  56. protected function getNormalizer($version = null)
  57. {
  58. $reader = new AnnotationReader();
  59. $reader->setDefaultAnnotationNamespace('JMS\SerializerBundle\Annotation\\');
  60. $reader->setAutoloadAnnotations(true);
  61. $propertyNamingStrategy = new AnnotatedNamingStrategy($reader, new CamelCaseNamingStrategy('_'));
  62. if (null === $version) {
  63. $strategies = array(
  64. 'ALL' => new AllExclusionStrategy($reader),
  65. 'NONE' => new NoneExclusionStrategy($reader),
  66. );
  67. } else {
  68. $versionStrategy = new VersionExclusionStrategy($reader, $version);
  69. $strategies = array(
  70. 'ALL' => new DisjunctExclusionStrategy(array(
  71. $versionStrategy, new AllExclusionStrategy($reader)
  72. )),
  73. 'NONE' => new DisjunctExclusionStrategy(array(
  74. $versionStrategy, new NoneExclusionStrategy($reader),
  75. )),
  76. );
  77. }
  78. $exclusionStrategyFactory = new ExclusionStrategyFactory($strategies);
  79. $normalizer = new AnnotatedNormalizer($reader, $propertyNamingStrategy, $exclusionStrategyFactory);
  80. $serializer = new Serializer();
  81. $serializer->addNormalizer($normalizer);
  82. return $normalizer;
  83. }
  84. }