ZfExtensionManagerSfContainerTest.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. namespace Drupal\Tests\Component\Bridge;
  3. use Drupal\Component\Bridge\ZfExtensionManagerSfContainer;
  4. use PHPUnit\Framework\TestCase;
  5. use Symfony\Component\DependencyInjection\ContainerBuilder;
  6. use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException;
  7. use Zend\Feed\Reader\Extension\Atom\Entry;
  8. use Zend\Feed\Reader\StandaloneExtensionManager;
  9. /**
  10. * @coversDefaultClass \Drupal\Component\Bridge\ZfExtensionManagerSfContainer
  11. * @group Bridge
  12. */
  13. class ZfExtensionManagerSfContainerTest extends TestCase {
  14. /**
  15. * @covers ::setContainer
  16. * @covers ::setStandalone
  17. * @covers ::get
  18. */
  19. public function testGet() {
  20. $service = new \stdClass();
  21. $service->value = 'myvalue';
  22. $container = new ContainerBuilder();
  23. $container->set('foo', $service);
  24. $bridge = new ZfExtensionManagerSfContainer();
  25. $bridge->setContainer($container);
  26. $this->assertEquals($service, $bridge->get('foo'));
  27. $bridge->setStandalone(StandaloneExtensionManager::class);
  28. $this->assertInstanceOf(Entry::class, $bridge->get('Atom\Entry'));
  29. // Ensure that the container is checked first.
  30. $container->set('atomentry', $service);
  31. $this->assertEquals($service, $bridge->get('Atom\Entry'));
  32. }
  33. /**
  34. * @covers ::setContainer
  35. * @covers ::setStandalone
  36. * @covers ::has
  37. */
  38. public function testHas() {
  39. $service = new \stdClass();
  40. $service->value = 'myvalue';
  41. $container = new ContainerBuilder();
  42. $container->set('foo', $service);
  43. $bridge = new ZfExtensionManagerSfContainer();
  44. $bridge->setContainer($container);
  45. $this->assertTrue($bridge->has('foo'));
  46. $this->assertFalse($bridge->has('bar'));
  47. $this->assertFalse($bridge->has('Atom\Entry'));
  48. $bridge->setStandalone(StandaloneExtensionManager::class);
  49. $this->assertTrue($bridge->has('Atom\Entry'));
  50. }
  51. /**
  52. * @covers ::setStandalone
  53. */
  54. public function testSetStandaloneException() {
  55. if (method_exists($this, 'expectException')) {
  56. $this->expectException(\RuntimeException::class);
  57. $this->expectExceptionMessage('Drupal\Tests\Component\Bridge\ZfExtensionManagerSfContainerTest must implement Zend\Feed\Reader\ExtensionManagerInterface or Zend\Feed\Writer\ExtensionManagerInterface');
  58. }
  59. else {
  60. $this->setExpectedException(\RuntimeException::class, 'Drupal\Tests\Component\Bridge\ZfExtensionManagerSfContainerTest must implement Zend\Feed\Reader\ExtensionManagerInterface or Zend\Feed\Writer\ExtensionManagerInterface');
  61. }
  62. $bridge = new ZfExtensionManagerSfContainer();
  63. $bridge->setStandalone(static::class);
  64. }
  65. /**
  66. * @covers ::get
  67. */
  68. public function testGetContainerException() {
  69. if (method_exists($this, 'expectException')) {
  70. $this->expectException(ServiceNotFoundException::class);
  71. $this->expectExceptionMessage('You have requested a non-existent service "test.foo".');
  72. }
  73. else {
  74. $this->setExpectedException(ServiceNotFoundException::class, 'You have requested a non-existent service "test.foo".');
  75. }
  76. $container = new ContainerBuilder();
  77. $bridge = new ZfExtensionManagerSfContainer('test.');
  78. $bridge->setContainer($container);
  79. $bridge->setStandalone(StandaloneExtensionManager::class);
  80. $bridge->get('foo');
  81. }
  82. /**
  83. * @covers ::__construct
  84. * @covers ::has
  85. * @covers ::get
  86. */
  87. public function testPrefix() {
  88. $service = new \stdClass();
  89. $service->value = 'myvalue';
  90. $container = new ContainerBuilder();
  91. $container->set('foo.bar', $service);
  92. $bridge = new ZfExtensionManagerSfContainer('foo.');
  93. $bridge->setContainer($container);
  94. $this->assertTrue($bridge->has('bar'));
  95. $this->assertFalse($bridge->has('baz'));
  96. $this->assertEquals($service, $bridge->get('bar'));
  97. }
  98. /**
  99. * @covers ::canonicalizeName
  100. * @dataProvider canonicalizeNameProvider
  101. */
  102. public function testCanonicalizeName($name, $canonical_name) {
  103. $service = new \stdClass();
  104. $service->value = 'myvalue';
  105. $container = new ContainerBuilder();
  106. $container->set($canonical_name, $service);
  107. $bridge = new ZfExtensionManagerSfContainer();
  108. $bridge->setContainer($container);
  109. $this->assertTrue($bridge->has($name));
  110. $this->assertEquals($service, $bridge->get($name));
  111. }
  112. /**
  113. * Data provider for testReverseProxyEnabled.
  114. *
  115. * Replacements:
  116. * array('-' => '', '_' => '', ' ' => '', '\\' => '', '/' => '')
  117. */
  118. public function canonicalizeNameProvider() {
  119. return [
  120. [
  121. 'foobar',
  122. 'foobar',
  123. ],
  124. [
  125. 'foo-bar',
  126. 'foobar',
  127. ],
  128. [
  129. 'foo_bar',
  130. 'foobar',
  131. ],
  132. [
  133. 'foo bar',
  134. 'foobar',
  135. ],
  136. [
  137. 'foo\\bar',
  138. 'foobar',
  139. ],
  140. [
  141. 'foo/bar',
  142. 'foobar',
  143. ],
  144. // There is also a strtolower in canonicalizeName.
  145. [
  146. 'Foo/bAr',
  147. 'foobar',
  148. ],
  149. [
  150. 'foo/-_\\ bar',
  151. 'foobar',
  152. ],
  153. ];
  154. }
  155. }