PageRenderTime 25ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/symfony/symfony/src/Symfony/Component/ClassLoader/Tests/ClassCollectionLoaderTest.php

https://gitlab.com/cuza/Clinic_Recods
PHP | 274 lines | 217 code | 34 blank | 23 comment | 4 complexity | ad6e55a11b616abae6b57aae7e33218a MD5 | raw file
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\ClassLoader\Tests;
  11. use Symfony\Component\ClassLoader\ClassCollectionLoader;
  12. require_once __DIR__.'/Fixtures/ClassesWithParents/GInterface.php';
  13. require_once __DIR__.'/Fixtures/ClassesWithParents/CInterface.php';
  14. require_once __DIR__.'/Fixtures/ClassesWithParents/B.php';
  15. require_once __DIR__.'/Fixtures/ClassesWithParents/A.php';
  16. class ClassCollectionLoaderTest extends \PHPUnit_Framework_TestCase
  17. {
  18. public function testTraitDependencies()
  19. {
  20. require_once __DIR__.'/Fixtures/deps/traits.php';
  21. $r = new \ReflectionClass('Symfony\Component\ClassLoader\ClassCollectionLoader');
  22. $m = $r->getMethod('getOrderedClasses');
  23. $m->setAccessible(true);
  24. $ordered = $m->invoke('Symfony\Component\ClassLoader\ClassCollectionLoader', array('CTFoo'));
  25. $this->assertEquals(
  26. array('TD', 'TC', 'TB', 'TA', 'TZ', 'CTFoo'),
  27. array_map(function ($class) { return $class->getName(); }, $ordered)
  28. );
  29. $ordered = $m->invoke('Symfony\Component\ClassLoader\ClassCollectionLoader', array('CTBar'));
  30. $this->assertEquals(
  31. array('TD', 'TZ', 'TC', 'TB', 'TA', 'CTBar'),
  32. array_map(function ($class) { return $class->getName(); }, $ordered)
  33. );
  34. }
  35. /**
  36. * @dataProvider getDifferentOrders
  37. */
  38. public function testClassReordering(array $classes)
  39. {
  40. $expected = array(
  41. 'ClassesWithParents\\GInterface',
  42. 'ClassesWithParents\\CInterface',
  43. 'ClassesWithParents\\B',
  44. 'ClassesWithParents\\A',
  45. );
  46. $r = new \ReflectionClass('Symfony\Component\ClassLoader\ClassCollectionLoader');
  47. $m = $r->getMethod('getOrderedClasses');
  48. $m->setAccessible(true);
  49. $ordered = $m->invoke('Symfony\Component\ClassLoader\ClassCollectionLoader', $classes);
  50. $this->assertEquals($expected, array_map(function ($class) { return $class->getName(); }, $ordered));
  51. }
  52. public function getDifferentOrders()
  53. {
  54. return array(
  55. array(array(
  56. 'ClassesWithParents\\A',
  57. 'ClassesWithParents\\CInterface',
  58. 'ClassesWithParents\\GInterface',
  59. 'ClassesWithParents\\B',
  60. )),
  61. array(array(
  62. 'ClassesWithParents\\B',
  63. 'ClassesWithParents\\A',
  64. 'ClassesWithParents\\CInterface',
  65. )),
  66. array(array(
  67. 'ClassesWithParents\\CInterface',
  68. 'ClassesWithParents\\B',
  69. 'ClassesWithParents\\A',
  70. )),
  71. array(array(
  72. 'ClassesWithParents\\A',
  73. )),
  74. );
  75. }
  76. /**
  77. * @dataProvider getDifferentOrdersForTraits
  78. */
  79. public function testClassWithTraitsReordering(array $classes)
  80. {
  81. require_once __DIR__.'/Fixtures/ClassesWithParents/ATrait.php';
  82. require_once __DIR__.'/Fixtures/ClassesWithParents/BTrait.php';
  83. require_once __DIR__.'/Fixtures/ClassesWithParents/CTrait.php';
  84. require_once __DIR__.'/Fixtures/ClassesWithParents/D.php';
  85. require_once __DIR__.'/Fixtures/ClassesWithParents/E.php';
  86. $expected = array(
  87. 'ClassesWithParents\\GInterface',
  88. 'ClassesWithParents\\CInterface',
  89. 'ClassesWithParents\\ATrait',
  90. 'ClassesWithParents\\BTrait',
  91. 'ClassesWithParents\\CTrait',
  92. 'ClassesWithParents\\B',
  93. 'ClassesWithParents\\A',
  94. 'ClassesWithParents\\D',
  95. 'ClassesWithParents\\E',
  96. );
  97. $r = new \ReflectionClass('Symfony\Component\ClassLoader\ClassCollectionLoader');
  98. $m = $r->getMethod('getOrderedClasses');
  99. $m->setAccessible(true);
  100. $ordered = $m->invoke('Symfony\Component\ClassLoader\ClassCollectionLoader', $classes);
  101. $this->assertEquals($expected, array_map(function ($class) { return $class->getName(); }, $ordered));
  102. }
  103. public function getDifferentOrdersForTraits()
  104. {
  105. return array(
  106. array(array(
  107. 'ClassesWithParents\\E',
  108. 'ClassesWithParents\\ATrait',
  109. )),
  110. array(array(
  111. 'ClassesWithParents\\E',
  112. )),
  113. );
  114. }
  115. public function testFixClassWithTraitsOrdering()
  116. {
  117. require_once __DIR__.'/Fixtures/ClassesWithParents/CTrait.php';
  118. require_once __DIR__.'/Fixtures/ClassesWithParents/F.php';
  119. require_once __DIR__.'/Fixtures/ClassesWithParents/G.php';
  120. $classes = array(
  121. 'ClassesWithParents\\F',
  122. 'ClassesWithParents\\G',
  123. );
  124. $expected = array(
  125. 'ClassesWithParents\\CTrait',
  126. 'ClassesWithParents\\F',
  127. 'ClassesWithParents\\G',
  128. );
  129. $r = new \ReflectionClass('Symfony\Component\ClassLoader\ClassCollectionLoader');
  130. $m = $r->getMethod('getOrderedClasses');
  131. $m->setAccessible(true);
  132. $ordered = $m->invoke('Symfony\Component\ClassLoader\ClassCollectionLoader', $classes);
  133. $this->assertEquals($expected, array_map(function ($class) { return $class->getName(); }, $ordered));
  134. }
  135. /**
  136. * @dataProvider getFixNamespaceDeclarationsData
  137. */
  138. public function testFixNamespaceDeclarations($source, $expected)
  139. {
  140. $this->assertEquals('<?php '.$expected, ClassCollectionLoader::fixNamespaceDeclarations('<?php '.$source));
  141. }
  142. public function getFixNamespaceDeclarationsData()
  143. {
  144. return array(
  145. array("namespace;\nclass Foo {}\n", "namespace\n{\nclass Foo {}\n}"),
  146. array("namespace Foo;\nclass Foo {}\n", "namespace Foo\n{\nclass Foo {}\n}"),
  147. array("namespace Bar ;\nclass Foo {}\n", "namespace Bar\n{\nclass Foo {}\n}"),
  148. array("namespace Foo\Bar;\nclass Foo {}\n", "namespace Foo\Bar\n{\nclass Foo {}\n}"),
  149. array("namespace Foo\Bar\Bar\n{\nclass Foo {}\n}\n", "namespace Foo\Bar\Bar\n{\nclass Foo {}\n}"),
  150. array("namespace\n{\nclass Foo {}\n}\n", "namespace\n{\nclass Foo {}\n}"),
  151. );
  152. }
  153. /**
  154. * @dataProvider getFixNamespaceDeclarationsDataWithoutTokenizer
  155. */
  156. public function testFixNamespaceDeclarationsWithoutTokenizer($source, $expected)
  157. {
  158. ClassCollectionLoader::enableTokenizer(false);
  159. $this->assertEquals('<?php '.$expected, ClassCollectionLoader::fixNamespaceDeclarations('<?php '.$source));
  160. ClassCollectionLoader::enableTokenizer(true);
  161. }
  162. public function getFixNamespaceDeclarationsDataWithoutTokenizer()
  163. {
  164. return array(
  165. array("namespace;\nclass Foo {}\n", "namespace\n{\nclass Foo {}\n}\n"),
  166. array("namespace Foo;\nclass Foo {}\n", "namespace Foo\n{\nclass Foo {}\n}\n"),
  167. array("namespace Bar ;\nclass Foo {}\n", "namespace Bar\n{\nclass Foo {}\n}\n"),
  168. array("namespace Foo\Bar;\nclass Foo {}\n", "namespace Foo\Bar\n{\nclass Foo {}\n}\n"),
  169. array("namespace Foo\Bar\Bar\n{\nclass Foo {}\n}\n", "namespace Foo\Bar\Bar\n{\nclass Foo {}\n}\n"),
  170. array("\nnamespace\n{\nclass Foo {}\n\$namespace=123;}\n", "\nnamespace\n{\nclass Foo {}\n\$namespace=123;}\n"),
  171. );
  172. }
  173. /**
  174. * @expectedException \InvalidArgumentException
  175. */
  176. public function testUnableToLoadClassException()
  177. {
  178. if (is_file($file = sys_get_temp_dir().'/foo.php')) {
  179. unlink($file);
  180. }
  181. ClassCollectionLoader::load(array('SomeNotExistingClass'), sys_get_temp_dir(), 'foo', false);
  182. }
  183. public function testCommentStripping()
  184. {
  185. if (is_file($file = sys_get_temp_dir().'/bar.php')) {
  186. unlink($file);
  187. }
  188. spl_autoload_register($r = function ($class) {
  189. if (0 === strpos($class, 'Namespaced') || 0 === strpos($class, 'Pearlike_')) {
  190. require_once __DIR__.'/Fixtures/'.str_replace(array('\\', '_'), '/', $class).'.php';
  191. }
  192. });
  193. ClassCollectionLoader::load(
  194. array('Namespaced\\WithComments', 'Pearlike_WithComments'),
  195. sys_get_temp_dir(),
  196. 'bar',
  197. false
  198. );
  199. spl_autoload_unregister($r);
  200. $this->assertEquals(<<<'EOF'
  201. namespace Namespaced
  202. {
  203. class WithComments
  204. {
  205. public static $loaded = true;
  206. }
  207. $string ='string should not be modified {$string}';
  208. $heredoc = (<<<HD
  209. Heredoc should not be modified {$string}
  210. HD
  211. );
  212. $nowdoc =<<<'ND'
  213. Nowdoc should not be modified {$string}
  214. ND
  215. ;
  216. }
  217. namespace
  218. {
  219. class Pearlike_WithComments
  220. {
  221. public static $loaded = true;
  222. }
  223. }
  224. EOF
  225. , str_replace("<?php \n", '', file_get_contents($file)));
  226. unlink($file);
  227. }
  228. }