PageRenderTime 50ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/Doctrine/Tests/OXM/Tools/XmlEntityGeneratorTest.php

http://github.com/doctrine/oxm
PHP | 153 lines | 113 code | 33 blank | 7 comment | 9 complexity | c6cad50ef2d464ad77f80ba94acb7ac1 MD5 | raw file
  1. <?php
  2. namespace Doctrine\OXM\Tests\Tools;
  3. use Doctrine\OXM\Tools\SchemaTool,
  4. Doctrine\OXM\Tools\XmlEntityGenerator,
  5. Doctrine\OXM\Mapping\ClassMetadataInfo,
  6. Doctrine\Tests\OxmTestCase;
  7. class XmlEntityGeneratorTest extends OxmTestCase
  8. {
  9. private $generator;
  10. private $tmpDir;
  11. private $namespace;
  12. public function setUp()
  13. {
  14. $this->namespace = uniqid("doctrine_");
  15. $this->tmpDir = \sys_get_temp_dir();
  16. \mkdir($this->tmpDir . \DIRECTORY_SEPARATOR . $this->namespace);
  17. $this->generator = new XmlEntityGenerator();
  18. $this->generator->setGenerateAnnotations(true);
  19. $this->generator->setGenerateStubMethods(true);
  20. $this->generator->setRegenerateXmlEntityIfExists(false);
  21. $this->generator->setUpdateXmlEntityIfExists(true);
  22. }
  23. public function tearDown()
  24. {
  25. $ri = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->tmpDir . '/' . $this->namespace));
  26. foreach ($ri AS $file) {
  27. /* @var $file \SplFileInfo */
  28. if ($file->isFile()) {
  29. \unlink($file->getPathname());
  30. }
  31. }
  32. rmdir($this->tmpDir . '/' . $this->namespace);
  33. }
  34. public function generateBookXmlEntityFixture()
  35. {
  36. $metadata = new ClassMetadataInfo($this->namespace . '\XmlEntityGeneratorBook');
  37. $metadata->customRepositoryClassName = $this->namespace . '\XmlEntityGeneratorBookRepository';
  38. $metadata->isRoot = true;
  39. $metadata->mapField(array('fieldName' => 'name', 'type' => 'string'));
  40. $metadata->mapField(array('fieldName' => 'status', 'type' => 'string'));
  41. $metadata->mapField(array('fieldName' => 'id', 'type' => 'integer', 'id' => true));
  42. $metadata->addLifecycleCallback('loading', 'postLoad');
  43. $metadata->addLifecycleCallback('willBeRemoved', 'preRemove');
  44. $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO);
  45. $this->generator->writeXmlEntityClass($metadata, $this->tmpDir);
  46. return $metadata;
  47. }
  48. /**
  49. * @param ClassMetadataInfo $metadata
  50. * @return XmlEntityGeneratorBook
  51. */
  52. public function newInstance($metadata)
  53. {
  54. $path = $this->tmpDir . '/'. $this->namespace . '/XmlEntityGeneratorBook.php';
  55. $this->assertFileExists($path);
  56. require_once $path;
  57. return new $metadata->name;
  58. }
  59. public function testGeneratedXmlEntityClass()
  60. {
  61. $metadata = $this->generateBookXmlEntityFixture();
  62. $book = $this->newInstance($metadata);
  63. $this->assertTrue(class_exists($metadata->name), "Class does not exist.");
  64. //$this->assertTrue(method_exists($this->namespace . '\XmlEntityGeneratorBook', '__construct'), "XmlEntityGeneratorBook::__construct() missing.");
  65. $this->assertTrue(method_exists($this->namespace . '\XmlEntityGeneratorBook', 'getId'), "XmlEntityGeneratorBook::getId() missing.");
  66. $this->assertTrue(method_exists($this->namespace . '\XmlEntityGeneratorBook', 'setName'), "XmlEntityGeneratorBook::setName() missing.");
  67. $this->assertTrue(method_exists($this->namespace . '\XmlEntityGeneratorBook', 'getName'), "XmlEntityGeneratorBook::getName() missing.");
  68. $book->setName('Jonathan H. Wage');
  69. $this->assertEquals('Jonathan H. Wage', $book->getName());
  70. }
  71. public function testXmlEntityUpdatingWorks()
  72. {
  73. $metadata = $this->generateBookXmlEntityFixture();
  74. $metadata->mapField(array('fieldName' => 'test', 'type' => 'string'));
  75. $this->generator->writeXmlEntityClass($metadata, $this->tmpDir);
  76. $this->assertFileExists($this->tmpDir . "/" . $this->namespace . "/~XmlEntityGeneratorBook.php");
  77. $book = $this->newInstance($metadata);
  78. $reflClass = new \ReflectionClass($metadata->name);
  79. $this->assertTrue($reflClass->hasProperty('name'), "Regenerating keeps property 'name'.");
  80. $this->assertTrue($reflClass->hasProperty('status'), "Regenerating keeps property 'status'.");
  81. $this->assertTrue($reflClass->hasProperty('id'), "Regenerating keeps property 'id'.");
  82. $this->assertTrue($reflClass->hasProperty('test'), "Check for property test failed.");
  83. $this->assertTrue($reflClass->getProperty('test')->isPrivate(), "Check for private property test failed.");
  84. $this->assertTrue($reflClass->hasMethod('getTest'), "Check for method 'getTest' failed.");
  85. $this->assertTrue($reflClass->getMethod('getTest')->isPublic(), "Check for public visibility of method 'getTest' failed.");
  86. $this->assertTrue($reflClass->hasMethod('setTest'), "Check for method 'setTest' failed.");
  87. $this->assertTrue($reflClass->getMethod('setTest')->isPublic(), "Check for public visibility of method 'setTest' failed.");
  88. }
  89. public function testXmlEntityExtendsStdClass()
  90. {
  91. $this->generator->setClassToExtend('stdClass');
  92. $metadata = $this->generateBookXmlEntityFixture();
  93. $book = $this->newInstance($metadata);
  94. $this->assertInstanceOf('stdClass', $book);
  95. }
  96. public function testLifecycleCallbacks()
  97. {
  98. $metadata = $this->generateBookXmlEntityFixture();
  99. $book = $this->newInstance($metadata);
  100. $reflClass = new \ReflectionClass($metadata->name);
  101. $this->assertTrue($reflClass->hasMethod('loading'), "Check for postLoad lifecycle callback.");
  102. $this->assertTrue($reflClass->hasMethod('willBeRemoved'), "Check for preRemove lifecycle callback.");
  103. }
  104. public function testLoadMetadata()
  105. {
  106. $metadata = $this->generateBookXmlEntityFixture();
  107. $book = $this->newInstance($metadata);
  108. $cm = new \Doctrine\OXM\Mapping\ClassMetadataInfo($metadata->name);
  109. $reader = new \Doctrine\Common\Annotations\AnnotationReader();
  110. $driver = new \Doctrine\OXM\Mapping\Driver\AnnotationDriver($reader);
  111. $driver->loadMetadataForClass($cm->name, $cm);
  112. //$this->assertEquals($cm->getCollection(), $metadata->getCollection());
  113. $this->assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks);
  114. $this->assertEquals($cm->identifier, $metadata->identifier);
  115. $this->assertEquals($cm->idGenerator, $metadata->idGenerator);
  116. $this->assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName);
  117. }
  118. }
  119. class XmlEntityGeneratorAuthor {}
  120. class XmlEntityGeneratorComment {}