BaseDriverTest.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. /*
  3. * Copyright 2011 Johannes M. Schmitt <schmittjoh@gmail.com>
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. namespace JMS\Serializer\Tests\Metadata\Driver;
  18. use JMS\Serializer\Metadata\PropertyMetadata;
  19. use JMS\Serializer\Metadata\VirtualPropertyMetadata;
  20. abstract class BaseDriverTest extends \PHPUnit_Framework_TestCase
  21. {
  22. public function testLoadBlogPostMetadata()
  23. {
  24. $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost'));
  25. $this->assertNotNull($m);
  26. $this->assertEquals('blog-post', $m->xmlRootName);
  27. $p = new PropertyMetadata($m->name, 'title');
  28. $p->type = array('name' => 'string', 'params' => array());
  29. $p->groups = array("comments","post");
  30. $this->assertEquals($p, $m->propertyMetadata['title']);
  31. $p = new PropertyMetadata($m->name, 'createdAt');
  32. $p->type = array('name' => 'DateTime', 'params' => array());
  33. $p->xmlAttribute = true;
  34. $this->assertEquals($p, $m->propertyMetadata['createdAt']);
  35. $p = new PropertyMetadata($m->name, 'published');
  36. $p->type = array('name' => 'boolean', 'params' => array());
  37. $p->serializedName = 'is_published';
  38. $p->xmlAttribute = true;
  39. $p->groups = array("post");
  40. $this->assertEquals($p, $m->propertyMetadata['published']);
  41. $p = new PropertyMetadata($m->name, 'comments');
  42. $p->type = array('name' => 'ArrayCollection', 'params' => array(array('name' => 'JMS\Serializer\Tests\Fixtures\Comment', 'params' => array())));
  43. $p->xmlCollection = true;
  44. $p->xmlCollectionInline = true;
  45. $p->xmlEntryName = 'comment';
  46. $p->groups = array("comments");
  47. $this->assertEquals($p, $m->propertyMetadata['comments']);
  48. $p = new PropertyMetadata($m->name, 'author');
  49. $p->type = array('name' => 'JMS\Serializer\Tests\Fixtures\Author', 'params' => array());
  50. $p->groups = array("post");
  51. $this->assertEquals($p, $m->propertyMetadata['author']);
  52. $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\Price'));
  53. $this->assertNotNull($m);
  54. $p = new PropertyMetadata($m->name, 'price');
  55. $p->type = array('name' => 'double', 'params' => array());
  56. $p->xmlValue = true;
  57. $this->assertEquals($p, $m->propertyMetadata['price']);
  58. }
  59. public function testVirtualProperty()
  60. {
  61. $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\ObjectWithVirtualProperties'));
  62. $this->assertArrayHasKey('existField', $m->propertyMetadata);
  63. $this->assertArrayHasKey('virtualValue', $m->propertyMetadata);
  64. $this->assertArrayHasKey('virtualSerializedValue', $m->propertyMetadata);
  65. $this->assertEquals($m->propertyMetadata['virtualSerializedValue']->serializedName, 'test', 'Serialized name is missing' );
  66. $p = new VirtualPropertyMetadata($m->name, 'virtualValue');
  67. $p->getter = 'getVirtualValue';
  68. $this->assertEquals($p, $m->propertyMetadata['virtualValue']);
  69. }
  70. public function testXmlKeyValuePairs()
  71. {
  72. $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\ObjectWithXmlKeyValuePairs'));
  73. $this->assertArrayHasKey('array', $m->propertyMetadata);
  74. $this->assertTrue($m->propertyMetadata['array']->xmlKeyValuePairs);
  75. }
  76. public function testVirtualPropertyWithExcludeAll()
  77. {
  78. $a = new \JMS\Serializer\Tests\Fixtures\ObjectWithVirtualPropertiesAndExcludeAll();
  79. $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass($a));
  80. $this->assertArrayHasKey('virtualValue', $m->propertyMetadata);
  81. $p = new VirtualPropertyMetadata($m->name, 'virtualValue');
  82. $p->getter = 'getVirtualValue';
  83. $this->assertEquals($p, $m->propertyMetadata['virtualValue']);
  84. }
  85. public function testReadOnlyDefinedBeforeGetterAndSetter()
  86. {
  87. $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\AuthorReadOnly'));
  88. $this->assertNotNull($m);
  89. }
  90. abstract protected function getDriver();
  91. }