UniversalClassLoaderTest.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien.potencier@symfony-project.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\Tests\Component\HttpFoundation;
  11. use Symfony\Component\HttpFoundation\UniversalClassLoader;
  12. class UniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
  13. {
  14. /**
  15. * @covers Symfony\Component\HttpFoundation\UniversalClassLoader::loadClass
  16. * @dataProvider testClassProvider
  17. */
  18. public function testLoadClass($className, $testClassName, $message)
  19. {
  20. $loader = new UniversalClassLoader();
  21. $loader->registerNamespace('Namespaced', __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures');
  22. $loader->registerPrefix('Pearlike_', __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures');
  23. $loader->loadClass($testClassName);
  24. $this->assertTrue(class_exists($className), $message);
  25. }
  26. public static function testClassProvider()
  27. {
  28. return array(
  29. array('\\Namespaced\\Foo', 'Namespaced\\Foo', '->loadClass() loads Namespaced\Foo class'),
  30. array('\\Pearlike_Foo', 'Pearlike_Foo', '->loadClass() loads Pearlike_Foo class'),
  31. array('\\Namespaced\\Bar', '\\Namespaced\\Bar', '->loadClass() loads Namespaced\Bar class with a leading slash'),
  32. array('\\Pearlike_Bar', '\\Pearlike_Bar', '->loadClass() loads Pearlike_Bar class with a leading slash'),
  33. );
  34. }
  35. /**
  36. * @dataProvider namespaceCollisionClassProvider
  37. */
  38. public function testLoadClassNamespaceCollision($namespaces, $className, $message)
  39. {
  40. $loader = new UniversalClassLoader();
  41. $loader->registerNamespaces($namespaces);
  42. $loader->loadClass($className);
  43. $this->assertTrue(class_exists($className), $message);
  44. }
  45. public static function namespaceCollisionClassProvider()
  46. {
  47. return array(
  48. array(
  49. array(
  50. 'NamespaceCollision\\A' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/alpha',
  51. 'NamespaceCollision\\A\\B' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/beta',
  52. ),
  53. 'NamespaceCollision\A\Foo',
  54. '->loadClass() loads NamespaceCollision\A\Foo from alpha.',
  55. ),
  56. array(
  57. array(
  58. 'NamespaceCollision\\A\\B' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/beta',
  59. 'NamespaceCollision\\A' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/alpha',
  60. ),
  61. 'NamespaceCollision\A\Bar',
  62. '->loadClass() loads NamespaceCollision\A\Bar from alpha.',
  63. ),
  64. array(
  65. array(
  66. 'NamespaceCollision\\A' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/alpha',
  67. 'NamespaceCollision\\A\\B' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/beta',
  68. ),
  69. 'NamespaceCollision\A\B\Foo',
  70. '->loadClass() loads NamespaceCollision\A\B\Foo from beta.',
  71. ),
  72. array(
  73. array(
  74. 'NamespaceCollision\\A\\B' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/beta',
  75. 'NamespaceCollision\\A' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/alpha',
  76. ),
  77. 'NamespaceCollision\A\B\Bar',
  78. '->loadClass() loads NamespaceCollision\A\B\Bar from beta.',
  79. ),
  80. );
  81. }
  82. /**
  83. * @dataProvider prefixCollisionClassProvider
  84. */
  85. public function testLoadClassPrefixCollision($prefixes, $className, $message)
  86. {
  87. $loader = new UniversalClassLoader();
  88. $loader->registerPrefixes($prefixes);
  89. $loader->loadClass($className);
  90. $this->assertTrue(class_exists($className), $message);
  91. }
  92. public static function prefixCollisionClassProvider()
  93. {
  94. return array(
  95. array(
  96. array(
  97. 'PrefixCollision_A_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/alpha',
  98. 'PrefixCollision_A_B_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/beta',
  99. ),
  100. 'PrefixCollision_A_Foo',
  101. '->loadClass() loads PrefixCollision_A_Foo from alpha.',
  102. ),
  103. array(
  104. array(
  105. 'PrefixCollision_A_B_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/beta',
  106. 'PrefixCollision_A_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/alpha',
  107. ),
  108. 'PrefixCollision_A_Bar',
  109. '->loadClass() loads PrefixCollision_A_Bar from alpha.',
  110. ),
  111. array(
  112. array(
  113. 'PrefixCollision_A_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/alpha',
  114. 'PrefixCollision_A_B_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/beta',
  115. ),
  116. 'PrefixCollision_A_B_Foo',
  117. '->loadClass() loads PrefixCollision_A_B_Foo from beta.',
  118. ),
  119. array(
  120. array(
  121. 'PrefixCollision_A_B_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/beta',
  122. 'PrefixCollision_A_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/alpha',
  123. ),
  124. 'PrefixCollision_A_B_Bar',
  125. '->loadClass() loads PrefixCollision_A_B_Bar from beta.',
  126. ),
  127. );
  128. }
  129. }