/tests/ZendTest/ModuleManager/Listener/DefaultListenerAggregateTest.php

https://github.com/zucchi/zf2 · PHP · 118 lines · 90 code · 14 blank · 14 comment · 3 complexity · 940f47b49573924c7150650b01c44135 MD5 · raw file

  1. <?php
  2. /**
  3. * Zend Framework (http://framework.zend.com/)
  4. *
  5. * @link http://github.com/zendframework/zf2 for the canonical source repository
  6. * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  7. * @license http://framework.zend.com/license/new-bsd New BSD License
  8. * @package Zend_ModuleManager
  9. */
  10. namespace ZendTest\ModuleManager\Listener;
  11. use InvalidArgumentException;
  12. use PHPUnit_Framework_TestCase as TestCase;
  13. use Zend\EventManager\EventManager;
  14. use Zend\Loader\ModuleAutoloader;
  15. use Zend\Loader\AutoloaderFactory;
  16. use Zend\ModuleManager\Listener\ListenerOptions;
  17. use Zend\ModuleManager\Listener\DefaultListenerAggregate;
  18. use Zend\ModuleManager\ModuleManager;
  19. class DefaultListenerAggregateTest extends TestCase
  20. {
  21. public function setUp()
  22. {
  23. // Store original autoloaders
  24. $this->loaders = spl_autoload_functions();
  25. if (!is_array($this->loaders)) {
  26. // spl_autoload_functions does not return empty array when no
  27. // autoloaders registered...
  28. $this->loaders = array();
  29. }
  30. // Store original include_path
  31. $this->includePath = get_include_path();
  32. $this->defaultListeners = new DefaultListenerAggregate(
  33. new ListenerOptions(array(
  34. 'module_paths' => array(
  35. realpath(__DIR__ . '/TestAsset'),
  36. ),
  37. ))
  38. );
  39. }
  40. public function tearDown()
  41. {
  42. // Restore original autoloaders
  43. AutoloaderFactory::unregisterAutoloaders();
  44. $loaders = spl_autoload_functions();
  45. if (is_array($loaders)) {
  46. foreach ($loaders as $loader) {
  47. spl_autoload_unregister($loader);
  48. }
  49. }
  50. foreach ($this->loaders as $loader) {
  51. spl_autoload_register($loader);
  52. }
  53. // Restore original include_path
  54. set_include_path($this->includePath);
  55. }
  56. public function testDefaultListenerAggregateCanAttachItself()
  57. {
  58. $moduleManager = new ModuleManager(array('ListenerTestModule'));
  59. $moduleManager->getEventManager()->attachAggregate(new DefaultListenerAggregate);
  60. $events = $moduleManager->getEventManager()->getEvents();
  61. $expectedEvents = array(
  62. 'loadModules' => array(
  63. 'Zend\Loader\ModuleAutoloader',
  64. 'config-pre' => 'Zend\ModuleManager\Listener\ConfigListener',
  65. 'config-post' => 'Zend\ModuleManager\Listener\ConfigListener',
  66. 'Zend\ModuleManager\Listener\LocatorRegistrationListener',
  67. 'Zend\ModuleManager\ModuleManager',
  68. ),
  69. 'loadModule.resolve' => array(
  70. 'Zend\ModuleManager\Listener\ModuleResolverListener',
  71. ),
  72. 'loadModule' => array(
  73. 'Zend\ModuleManager\Listener\AutoloaderListener',
  74. 'Zend\ModuleManager\Listener\InitTrigger',
  75. 'Zend\ModuleManager\Listener\OnBootstrapListener',
  76. 'Zend\ModuleManager\Listener\ConfigListener',
  77. 'Zend\ModuleManager\Listener\LocatorRegistrationListener',
  78. ),
  79. );
  80. foreach ($expectedEvents as $event => $expectedListeners) {
  81. $this->assertContains($event, $events);
  82. $listeners = $moduleManager->getEventManager()->getListeners($event);
  83. $this->assertSame(count($expectedListeners), count($listeners));
  84. foreach ($listeners as $listener) {
  85. $callback = $listener->getCallback();
  86. if (is_array($callback)) {
  87. $callback = $callback[0];
  88. }
  89. $listenerClass = get_class($callback);
  90. $this->assertContains($listenerClass, $expectedListeners);
  91. }
  92. }
  93. }
  94. public function testDefaultListenerAggregateCanDetachItself()
  95. {
  96. $listenerAggregate = new DefaultListenerAggregate;
  97. $moduleManager = new ModuleManager(array('ListenerTestModule'));
  98. $this->assertEquals(1, count($moduleManager->getEventManager()->getEvents()));
  99. $listenerAggregate->attach($moduleManager->getEventManager());
  100. $this->assertEquals(3, count($moduleManager->getEventManager()->getEvents()));
  101. $listenerAggregate->detach($moduleManager->getEventManager());
  102. $this->assertEquals(1, count($moduleManager->getEventManager()->getEvents()));
  103. }
  104. }