PageRenderTime 42ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/units/classes/factory.php

http://github.com/mageekguy/atoum
PHP | 250 lines | 231 code | 19 blank | 0 comment | 0 complexity | 60fb96672aa22344cf65cab723262b93 MD5 | raw file
  1. <?php
  2. namespace mageekguy\atoum\tests\units;
  3. use
  4. mageekguy\atoum
  5. ;
  6. require __DIR__ . '/../runner.php';
  7. class factory extends atoum\test
  8. {
  9. public function testClass()
  10. {
  11. $this
  12. ->testedClass
  13. ->hasInterface('arrayAccess')
  14. ->hasInterface('serializable')
  15. ;
  16. }
  17. public function test__construct()
  18. {
  19. $this
  20. ->if($factory = new atoum\factory())
  21. ->then
  22. ->array($factory->getBuilders())->isEmpty()
  23. ->array($factory->getImportations())->isEmpty()
  24. ;
  25. }
  26. public function testSerialize()
  27. {
  28. $this
  29. ->if($factory = new atoum\factory())
  30. ->then
  31. ->string($factory->serialize())->isEqualTo(serialize($factory->getImportations()))
  32. ->if($factory->import(uniqid(), uniqid()))
  33. ->then
  34. ->string($factory->serialize())->isEqualTo(serialize($factory->getImportations()))
  35. ;
  36. }
  37. public function testUnserialize()
  38. {
  39. $this
  40. ->if($factory = new atoum\factory())
  41. ->then
  42. ->object(unserialize(serialize($factory)))->isEqualTo($factory)
  43. ->if($factory->import($namespace = uniqid(), $alias = uniqid()))
  44. ->then
  45. ->object(unserialize(serialize($factory)))->isEqualTo($factory)
  46. ->if($factoryWithBuilder = new atoum\Factory())
  47. ->and($factoryWithBuilder[uniqid()] = function() {})
  48. ->and($factoryWithBuilder->import($namespace, $alias))
  49. ->then
  50. ->object(unserialize(serialize($factoryWithBuilder)))->isEqualTo($factory)
  51. ;
  52. }
  53. public function testBuild()
  54. {
  55. $this
  56. ->if($factory = new atoum\factory())
  57. ->then
  58. ->object($arrayIterator = $factory->build('arrayIterator'))->isEqualTo(new \arrayIterator())
  59. ->object($arrayIterator = $factory->build('arrayIterator', array()))->isEqualTo(new \arrayIterator())
  60. ->object($arrayIterator = $factory->build('arrayIterator', array(array())))->isEqualTo(new \arrayIterator())
  61. ->object($arrayIterator = $factory->build('arrayIterator', array($data = array(uniqid(), uniqid(), uniqid()))))->isEqualTo(new \arrayIterator($data))
  62. ->exception(function() use ($factory, & $class) { $factory->build($class = uniqid()); })
  63. ->isInstanceOf('mageekguy\atoum\factory\exception')
  64. ->hasMessage('Class \'' . $class . '\' does not exist')
  65. ->if($factory->setBuilder('arrayIterator', function() use (& $return) { return ($return = new \arrayIterator); }))
  66. ->object($arrayIterator = $factory->build('arrayIterator'))->isIdenticalTo($return)
  67. ->object($arrayIterator = $factory->build('arrayIterator', array()))->isIdenticalTo($return)
  68. ->object($arrayIterator = $factory->build('arrayIterator', array(array())))->isIdenticalTo($return)
  69. ->object($arrayIterator = $factory->build('arrayIterator', array($data = array(uniqid(), uniqid(), uniqid()))))->isIdenticalTo($return)
  70. ->if($factory->setBuilder('arrayIterator', function() use (& $return) { return ($return = uniqid()); }))
  71. ->then
  72. ->string($factory->build('arrayIterator'))->isEqualTo($return)
  73. ->if($factory->import('mageekguy\atoum'))
  74. ->then
  75. ->object($factory->build('atoum\adapter'))->isEqualTo(new atoum\adapter())
  76. ->if($factory->import('mageekguy\atoum', 'foo'))
  77. ->then
  78. ->object($factory->build('foo\adapter'))->isEqualTo(new atoum\adapter())
  79. ->if($factory->import('mageekguy\atoum\adapter'))
  80. ->then
  81. ->object($factory->build('adapter'))->isEqualTo(new atoum\adapter())
  82. ->if($factory->import('mageekguy\atoum\adapter', 'bar'))
  83. ->then
  84. ->object($factory->build('bar'))->isEqualTo(new atoum\adapter())
  85. ;
  86. }
  87. public function testSetBuilder()
  88. {
  89. $this
  90. ->if($factory = new atoum\factory())
  91. ->and($arrayIterator = new \arrayIterator())
  92. ->then
  93. ->object($factory->setBuilder('arrayIterator', function() use ($arrayIterator) { return $arrayIterator; }))->isIdenticalTo($factory)
  94. ->boolean($factory->builderIsSet('arrayIterator'))->isTrue()
  95. ->object($factory->build('arrayIterator'))->isIdenticalTo($arrayIterator)
  96. ;
  97. }
  98. public function testOffsetSet()
  99. {
  100. $this
  101. ->if($factory = new atoum\factory())
  102. ->and($arrayIterator = new \arrayIterator())
  103. ->and($factory['arrayIterator'] = function() use ($arrayIterator) { return $arrayIterator; })
  104. ->then
  105. ->boolean($factory->builderIsSet('arrayIterator'))->isTrue()
  106. ->object($factory->build('arrayIterator'))->isIdenticalTo($arrayIterator)
  107. ->if($factory['arrayIterator'] = $arrayIterator)
  108. ->then
  109. ->boolean($factory->builderIsSet('arrayIterator'))->isTrue()
  110. ->object($factory->build('arrayIterator'))->isIdenticalTo($arrayIterator)
  111. ;
  112. }
  113. public function testOffsetGet()
  114. {
  115. $this
  116. ->if($factory = new atoum\factory())
  117. ->then
  118. ->object($factory['arrayIterator'])->isInstanceOf('closure')
  119. ->if($factory->setBuilder('arrayIterator', $closure = function() {}))
  120. ->then
  121. ->object($factory['arrayIterator'])->isIdenticalTo($closure)
  122. ;
  123. }
  124. public function testOffsetExists()
  125. {
  126. $this
  127. ->if($factory = new atoum\factory())
  128. ->then
  129. ->boolean(isset($factory[uniqid()]))->isFalse()
  130. ->if($factory->setBuilder('arrayIterator', function() { return new \arrayIterator(array()); }))
  131. ->then
  132. ->boolean(isset($factory['arrayIterator']))->isTrue()
  133. ->boolean(isset($factory[uniqid()]))->isFalse()
  134. ;
  135. }
  136. public function testOffsetUnset()
  137. {
  138. $this
  139. ->if($factory = new atoum\factory())
  140. ->then
  141. ->object($factory->offsetUnset(uniqid()))->isIdenticalTo($factory)
  142. ->if($factory->setBuilder('arrayIterator', function() { return new \arrayIterator(array()); }))
  143. ->then
  144. ->object($factory->offsetUnset('arrayIterator'))->isIdenticalTo($factory)
  145. ->boolean($factory->builderIsSet('arrayIterator'))->isFalse()
  146. ;
  147. }
  148. public function testBuilderIsSet()
  149. {
  150. $this
  151. ->if($factory = new atoum\factory())
  152. ->then
  153. ->boolean($factory->builderIsSet(uniqid()))->isFalse()
  154. ->if($factory->setBuilder('arrayIterator', function() { return new \arrayIterator(array()); }))
  155. ->then
  156. ->boolean($factory->builderIsSet('arrayIterator'))->isTrue()
  157. ->boolean($factory->builderIsSet(uniqid()))->isFalse()
  158. ;
  159. }
  160. public function testUnsetBuilder()
  161. {
  162. $this
  163. ->if($factory = new atoum\factory())
  164. ->then
  165. ->object($factory->unsetBuilder(uniqid()))->isIdenticalTo($factory)
  166. ->if($factory->setBuilder('arrayIterator', function() { return new \arrayIterator(array()); }))
  167. ->then
  168. ->object($factory->unsetBuilder('arrayIterator'))->isIdenticalTo($factory)
  169. ->boolean($factory->builderIsSet('arrayIterator'))->isFalse()
  170. ;
  171. }
  172. public function testReturnWhenBuild()
  173. {
  174. $this
  175. ->if($factory = new atoum\factory())
  176. ->and($arrayIterator = new \arrayIterator())
  177. ->then
  178. ->object($factory->returnWhenBuild('arrayIterator', $arrayIterator))->isIdenticalTo($factory)
  179. ->boolean($factory->builderIsSet('arrayIterator'))->isTrue()
  180. ->object($factory->build('arrayIterator'))->isIdenticalTo($arrayIterator)
  181. ;
  182. }
  183. public function testGetBuilder()
  184. {
  185. $this
  186. ->if($factory = new atoum\factory())
  187. ->then
  188. ->variable($factory->getBuilder('arrayIterator'))->isNull()
  189. ->if($factory->setBuilder('arrayIterator', $closure = function() {}))
  190. ->then
  191. ->object($factory->getBuilder('arrayIterator'))->isIdenticalTo($closure)
  192. ;
  193. }
  194. public function testImport()
  195. {
  196. $this
  197. ->if($factory = new atoum\factory())
  198. ->then
  199. ->object($factory->import('foo'))->isIdenticalTo($factory)
  200. ->array($factory->getImportations())->isEqualTo(array('foo' => 'foo'))
  201. ->object($factory->import('\foo'))->isIdenticalTo($factory)
  202. ->array($factory->getImportations())->isEqualTo(array('foo' => 'foo'))
  203. ->object($factory->import('foo', 'bar'))->isIdenticalTo($factory)
  204. ->array($factory->getImportations())->isEqualTo(array('foo' => 'foo', 'bar' => 'foo'))
  205. ->object($factory->import('foo\bar', 'truc'))->isIdenticalTo($factory)
  206. ->array($factory->getImportations())->isEqualTo(array('foo' => 'foo', 'bar' => 'foo', 'truc' => 'foo\bar'))
  207. ->object($factory->import('foo\bar\toto', 'tutu'))->isIdenticalTo($factory)
  208. ->array($factory->getImportations())->isEqualTo(array('foo' => 'foo', 'bar' => 'foo', 'truc' => 'foo\bar', 'tutu' => 'foo\bar\toto'))
  209. ->exception(function() use ($factory) { $factory->import('foo\bar\tutu'); })
  210. ->isInstanceOf('mageekguy\atoum\factory\exception')
  211. ->hasMessage('Unable to use \'foo\bar\tutu\' as \'tutu\' because the name is already in use')
  212. ;
  213. }
  214. public function testResetImportations()
  215. {
  216. $this
  217. ->if($factory = new atoum\factory())
  218. ->then
  219. ->object($factory->resetImportations())->isIdenticalTo($factory)
  220. ->array($factory->getImportations())->isEmpty()
  221. ->if($factory->import($this, uniqid()))
  222. ->then
  223. ->object($factory->resetImportations())->isIdenticalTo($factory)
  224. ->array($factory->getImportations())->isEmpty()
  225. ->if($factory->import($this, uniqid(), uniqid()))
  226. ->then
  227. ->object($factory->resetImportations())->isIdenticalTo($factory)
  228. ->array($factory->getImportations())->isEmpty()
  229. ;
  230. }
  231. }