XmlDriverTest.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace JMS\Serializer\Tests\Metadata\Driver;
  3. use JMS\Serializer\Metadata\Driver\XmlDriver;
  4. use JMS\Serializer\Metadata\PropertyMetadata;
  5. use Metadata\Driver\FileLocator;
  6. class XmlDriverTest extends BaseDriverTest
  7. {
  8. /**
  9. * @expectedException JMS\Serializer\Exception\XmlErrorException
  10. * @expectedExceptionMessage [FATAL] Start tag expected, '<' not found
  11. */
  12. public function testInvalidXml()
  13. {
  14. $driver = $this->getDriver();
  15. $ref = new \ReflectionMethod($driver, 'loadMetadataFromFile');
  16. $ref->setAccessible(true);
  17. $ref->invoke($driver, new \ReflectionClass('stdClass'), __DIR__ . '/xml/invalid.xml');
  18. }
  19. public function testBlogPostExcludeAllStrategy()
  20. {
  21. $m = $this->getDriver('exclude_all')->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost'));
  22. $this->assertArrayHasKey('title', $m->propertyMetadata);
  23. $excluded = array('createdAt', 'published', 'comments', 'author');
  24. foreach ($excluded as $key) {
  25. $this->assertArrayNotHasKey($key, $m->propertyMetadata);
  26. }
  27. }
  28. public function testBlogPostExcludeNoneStrategy()
  29. {
  30. $m = $this->getDriver('exclude_none')->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost'));
  31. $this->assertArrayNotHasKey('title', $m->propertyMetadata);
  32. $excluded = array('createdAt', 'published', 'comments', 'author');
  33. foreach ($excluded as $key) {
  34. $this->assertArrayHasKey($key, $m->propertyMetadata);
  35. }
  36. }
  37. public function testBlogPostCaseInsensitive()
  38. {
  39. $m = $this->getDriver('case')->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost'));
  40. $p = new PropertyMetadata($m->name, 'title');
  41. $p->type = array('name' => 'string', 'params' => array());
  42. $this->assertEquals($p, $m->propertyMetadata['title']);
  43. }
  44. public function testAccessorAttributes()
  45. {
  46. $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\GetSetObject'));
  47. $p = new PropertyMetadata($m->name, 'name');
  48. $p->type = array('name' => 'string', 'params' => array());
  49. $p->getter = 'getTrimmedName';
  50. $p->setter = 'setCapitalizedName';
  51. $this->assertEquals($p, $m->propertyMetadata['name']);
  52. }
  53. public function testGroupsTrim()
  54. {
  55. $first = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\GroupsTrim'));
  56. $this->assertArrayHasKey('amount', $first->propertyMetadata);
  57. $this->assertArraySubset(['first.test.group', 'second.test.group'], $first->propertyMetadata['currency']->groups);
  58. }
  59. public function testMultilineGroups()
  60. {
  61. $first = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\MultilineGroupsFormat'));
  62. $this->assertArrayHasKey('amount', $first->propertyMetadata);
  63. $this->assertArraySubset(['first.test.group', 'second.test.group'], $first->propertyMetadata['currency']->groups);
  64. }
  65. protected function getDriver()
  66. {
  67. $append = '';
  68. if (func_num_args() == 1) {
  69. $append = '/' . func_get_arg(0);
  70. }
  71. return new XmlDriver(new FileLocator(array(
  72. 'JMS\Serializer\Tests\Fixtures' => __DIR__ . '/xml' . $append,
  73. )));
  74. }
  75. }