/tests/units/classes/test/generator.php

https://github.com/Hywan/atoum · PHP · 239 lines · 220 code · 19 blank · 0 comment · 1 complexity · ed6328ce7adf3e388a12fcf43714812b MD5 · raw file

  1. <?php
  2. namespace mageekguy\atoum\tests\units\test;
  3. use mageekguy\atoum;
  4. use mageekguy\atoum\fs\path;
  5. use mageekguy\atoum\template;
  6. use mageekguy\atoum\test\generator as testedClass;
  7. require_once __DIR__ . '/../../runner.php';
  8. class generator extends atoum\test
  9. {
  10. public function test__construct()
  11. {
  12. $this
  13. ->if($generator = new testedClass())
  14. ->then
  15. ->string($generator->getTemplatesDirectory())->isEqualTo(atoum\directory . DIRECTORY_SEPARATOR . 'resources' . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'generator')
  16. ->variable($generator->getTestedClassesDirectory())->isNull()
  17. ->variable($generator->getTestClassesDirectory())->isNull()
  18. ->variable($generator->getRunnerPath())->isNull()
  19. ->variable($generator->getTestedClassNamespace())->isNull()
  20. ->object($generator->getTemplateParser())->isEqualTo(new template\parser())
  21. ->object($generator->getPathFactory())->isEqualTo(new path\factory())
  22. ->object($generator->getAdapter())->isEqualTo(new atoum\adapter())
  23. ;
  24. }
  25. public function testSetTemplatesDirectory()
  26. {
  27. $this
  28. ->if($generator = new testedClass())
  29. ->then
  30. ->object($generator->setTemplatesDirectory($directory = uniqid()))->isIdenticalTo($generator)
  31. ->string($generator->getTemplatesDirectory())->isEqualTo($directory)
  32. ;
  33. }
  34. public function testSetTestedClassesDirectory()
  35. {
  36. $this
  37. ->if($generator = new testedClass())
  38. ->then
  39. ->object($generator->setTestedClassesDirectory($directory = uniqid()))->isIdenticalTo($generator)
  40. ->string($generator->getTestedClassesDirectory())->isEqualTo($directory . DIRECTORY_SEPARATOR)
  41. ->object($generator->setTestedClassesDirectory(($directory = uniqid()) . DIRECTORY_SEPARATOR))->isIdenticalTo($generator)
  42. ->string($generator->getTestedClassesDirectory())->isEqualTo($directory . DIRECTORY_SEPARATOR)
  43. ;
  44. }
  45. public function testSetTestClassesDirectory()
  46. {
  47. $this
  48. ->if($generator = new testedClass())
  49. ->then
  50. ->object($generator->setTestClassesDirectory($directory = uniqid()))->isIdenticalTo($generator)
  51. ->string($generator->getTestClassesDirectory())->isEqualTo($directory . DIRECTORY_SEPARATOR)
  52. ->object($generator->setTestClassesDirectory(($directory = uniqid()) . DIRECTORY_SEPARATOR))->isIdenticalTo($generator)
  53. ->string($generator->getTestClassesDirectory())->isEqualTo($directory . DIRECTORY_SEPARATOR)
  54. ;
  55. }
  56. public function testSetRunnerPath()
  57. {
  58. $this
  59. ->if($generator = new testedClass())
  60. ->then
  61. ->object($generator->setRunnerPath($path = uniqid()))->isIdenticalTo($generator)
  62. ->string($generator->getRunnerPath())->isEqualTo($path)
  63. ;
  64. }
  65. public function testSetTemplateParser()
  66. {
  67. $this
  68. ->if($generator = new testedClass())
  69. ->then
  70. ->object($generator->setTemplateParser($templateParser = new template\parser()))->isIdenticalTo($generator)
  71. ->object($generator->getTemplateParser())->isIdenticalTo($templateParser)
  72. ->object($generator->setTemplateParser())->isIdenticalTo($generator)
  73. ->object($generator->getTemplateParser())
  74. ->isNotIdenticalTo($templateParser)
  75. ->isEqualTo(new template\parser())
  76. ;
  77. }
  78. public function testSetPathFactory()
  79. {
  80. $this
  81. ->if($generator = new testedClass())
  82. ->then
  83. ->object($generator->setPathFactory($factory = new path\factory()))->isIdenticalTo($generator)
  84. ->object($generator->getPathFactory())->isIdenticalTo($factory)
  85. ->object($generator->setPathFactory())->isIdenticalTo($generator)
  86. ->object($generator->getPathFactory())
  87. ->isNotIdenticalTo($factory)
  88. ->isEqualTo(new path\factory())
  89. ;
  90. }
  91. public function testSetAdapter()
  92. {
  93. $this
  94. ->if($generator = new testedClass())
  95. ->then
  96. ->object($generator->setAdapter($adapter = new atoum\adapter()))->isIdenticalTo($generator)
  97. ->object($generator->getAdapter())->isIdenticalTo($adapter)
  98. ->object($generator->setAdapter())->isIdenticalTo($generator)
  99. ->object($generator->getAdapter())
  100. ->isNotIdenticalTo($adapter)
  101. ->isEqualTo(new atoum\adapter())
  102. ;
  103. }
  104. public function testSetTestedClassNamespace()
  105. {
  106. $this
  107. ->if($generator = new testedClass())
  108. ->then
  109. ->object($generator->setTestedClassNamespace($namespace = uniqid()))->isIdenticalTo($generator)
  110. ->string($generator->getTestedClassNamespace())->isEqualTo($namespace . '\\')
  111. ->object($generator->setTestedClassNamespace('\\' . ($namespace = uniqid()) . '\\'))->isIdenticalTo($generator)
  112. ->string($generator->getTestedClassNamespace())->isEqualTo($namespace . '\\')
  113. ->object($generator->setTestedClassNamespace('\\' . ($namespace = uniqid())))->isIdenticalTo($generator)
  114. ->string($generator->getTestedClassNamespace())->isEqualTo($namespace . '\\')
  115. ;
  116. }
  117. public function testSetTestClassNamespace()
  118. {
  119. $this
  120. ->if($generator = new testedClass())
  121. ->then
  122. ->object($generator->setTestClassNamespace($namespace = uniqid()))->isIdenticalTo($generator)
  123. ->string($generator->getTestClassNamespace())->isEqualTo($namespace . '\\')
  124. ->object($generator->setTestClassNamespace('\\' . ($namespace = uniqid()) . '\\'))->isIdenticalTo($generator)
  125. ->string($generator->getTestClassNamespace())->isEqualTo($namespace . '\\')
  126. ->object($generator->setTestClassNamespace('\\' . ($namespace = uniqid())))->isIdenticalTo($generator)
  127. ->string($generator->getTestClassNamespace())->isEqualTo($namespace . '\\')
  128. ;
  129. }
  130. public function testSetFullyQualifiedTestClassNameExtractor()
  131. {
  132. $this
  133. ->if($generator = new testedClass())
  134. ->then
  135. ->object($generator->setFullyQualifiedTestClassNameExtractor($extractor = function () {
  136. }))->isIdenticalTo($generator)
  137. ->object($generator->getFullyQualifiedTestClassNameExtractor())->isIdenticalTo($extractor)
  138. ;
  139. }
  140. public function testSetFullyQualifiedTestedClassNameExtractor()
  141. {
  142. $this
  143. ->if($generator = new testedClass())
  144. ->then
  145. ->object($generator->setFullyQualifiedTestedClassNameExtractor($extractor = function () {
  146. }))->isIdenticalTo($generator)
  147. ->object($generator->getFullyQualifiedTestedClassNameExtractor())->isIdenticalTo($extractor)
  148. ;
  149. }
  150. public function testSetTestedClassPathExtractor()
  151. {
  152. $this
  153. ->if($generator = new testedClass())
  154. ->then
  155. ->object($generator->setTestedClassPathExtractor($extractor = function () {
  156. }))->isIdenticalTo($generator)
  157. ->object($generator->getTestedClassPathExtractor())->isIdenticalTo($extractor)
  158. ;
  159. }
  160. public function testGenerate()
  161. {
  162. $this
  163. ->if($generator = new testedClass())
  164. ->and($generator->setAdapter($adapter = new atoum\test\adapter()))
  165. ->and($generator->setPathFactory($pathFactory = new \mock\mageekguy\atoum\fs\path\factory()))
  166. ->and($generator->setTemplateParser($templateParser = new \mock\mageekguy\atoum\template\parser()))
  167. ->then
  168. ->exception(function () use ($generator) {
  169. $generator->generate(uniqid());
  170. })
  171. ->isInstanceOf(atoum\test\generator\exception::class)
  172. ->hasMessage('Tested classes directory is undefined')
  173. ->if($generator->setTestedClassesDirectory($classesDirectory = uniqid()))
  174. ->then
  175. ->exception(function () use ($generator) {
  176. $generator->generate(uniqid());
  177. })
  178. ->isInstanceOf(atoum\test\generator\exception::class)
  179. ->hasMessage('Tests directory is undefined')
  180. ->if($generator->setTestClassesDirectory($testsDirectory = DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, ['a', 'b', 'c'])))
  181. ->then
  182. ->exception(function () use ($generator) {
  183. $generator->generate(uniqid());
  184. })
  185. ->isInstanceOf(atoum\test\generator\exception::class)
  186. ->hasMessage('Tested class namespace is undefined')
  187. ->if($generator->setTestedClassNamespace($testedClassNamespace = uniqid()))
  188. ->then
  189. ->exception(function () use ($generator) {
  190. $generator->generate(uniqid());
  191. })
  192. ->isInstanceOf(atoum\test\generator\exception::class)
  193. ->hasMessage('Test class namespace is undefined')
  194. ->if($generator->setTestClassNamespace($testClassNamespace = uniqid()))
  195. ->and($testClassesDirectoryPath = new \mock\mageekguy\atoum\fs\path(DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, ['a', 'b', 'c'])))
  196. ->and($this->calling($testClassesDirectoryPath)->exists = true)
  197. ->and($this->calling($testClassesDirectoryPath)->getRealPath = $testClassesDirectoryPath)
  198. ->and($testedClassPath = new \mock\mageekguy\atoum\fs\path(DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, ['x', 'y', 'z', 'f.php'])))
  199. ->and($this->calling($testedClassPath)->putContents = $testedClassPath)
  200. ->and($testClassPath = new \mock\mageekguy\atoum\fs\path(DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, ['a', 'b', 'c', 'd', 'e', 'f.php'])))
  201. ->and($this->calling($testClassPath)->getRealParentDirectoryPath = new \mock\mageekguy\atoum\fs\path(DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, ['a', 'b', 'c', 'd', 'e'])))
  202. ->and($this->calling($testClassPath)->getRealPath = $testClassPath)
  203. ->and($this->calling($testClassPath)->putContents = $testClassPath)
  204. ->and($this->calling($pathFactory)->build = function ($path) use ($testClassesDirectoryPath, $testClassPath, $testedClassPath) {
  205. switch ($path) {
  206. case (string) $testClassesDirectoryPath . DIRECTORY_SEPARATOR:
  207. return $testClassesDirectoryPath;
  208. case (string) $testClassPath:
  209. return $testClassPath;
  210. default:
  211. return $testedClassPath;
  212. }
  213. })
  214. ->then
  215. ->object($generator->generate((string) $testClassPath))->isIdenticalTo($generator)
  216. ->mock($templateParser)
  217. ->call('parseFile')->withArguments($generator->getTemplatesDirectory() . DIRECTORY_SEPARATOR . 'testClass.php')->once()
  218. ;
  219. }
  220. }