StaticEventManagerTest.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_EventManager
  17. * @subpackage UnitTests
  18. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  19. * @license http://framework.zend.com/license/new-bsd New BSD License
  20. */
  21. if (!defined('PHPUnit_MAIN_METHOD')) {
  22. define('PHPUnit_MAIN_METHOD', 'Zend_EventManager_StaticEventManagerTest::main');
  23. }
  24. require_once 'Zend/EventManager/EventManager.php';
  25. require_once 'Zend/EventManager/StaticEventManager.php';
  26. /**
  27. * @category Zend
  28. * @package Zend_EventManager
  29. * @subpackage UnitTests
  30. * @group Zend_EventManager
  31. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  32. * @license http://framework.zend.com/license/new-bsd New BSD License
  33. */
  34. class Zend_EventManager_StaticEventManagerTest extends PHPUnit_Framework_TestCase
  35. {
  36. public static function main()
  37. {
  38. $suite = new PHPUnit_Framework_TestSuite(__CLASS__);
  39. $result = PHPUnit_TextUI_TestRunner::run($suite);
  40. }
  41. public function setUp()
  42. {
  43. Zend_EventManager_StaticEventManager::resetInstance();
  44. }
  45. public function tearDown()
  46. {
  47. Zend_EventManager_StaticEventManager::resetInstance();
  48. }
  49. public function testOperatesAsASingleton()
  50. {
  51. $expected = Zend_EventManager_StaticEventManager::getInstance();
  52. $test = Zend_EventManager_StaticEventManager::getInstance();
  53. $this->assertSame($expected, $test);
  54. }
  55. public function testCanResetInstance()
  56. {
  57. $original = Zend_EventManager_StaticEventManager::getInstance();
  58. Zend_EventManager_StaticEventManager::resetInstance();
  59. $test = Zend_EventManager_StaticEventManager::getInstance();
  60. $this->assertNotSame($original, $test);
  61. }
  62. public function testSingletonInstanceIsInstanceOfClass()
  63. {
  64. $this->assertTrue(
  65. Zend_EventManager_StaticEventManager::getInstance() instanceof Zend_EventManager_StaticEventManager
  66. );
  67. }
  68. public function testCanAttachCallbackToEvent()
  69. {
  70. $events = Zend_EventManager_StaticEventManager::getInstance();
  71. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  72. $this->assertContains('bar', $events->getEvents('foo'));
  73. $expected = array($this, __FUNCTION__);
  74. $found = false;
  75. $listeners = $events->getListeners('foo', 'bar');
  76. $this->assertTrue($listeners instanceof Zend_Stdlib_PriorityQueue);
  77. $this->assertTrue(0 < count($listeners), 'Empty listeners!');
  78. foreach ($listeners as $listener) {
  79. if ($expected === $listener->getCallback()) {
  80. $found = true;
  81. break;
  82. }
  83. }
  84. $this->assertTrue($found, 'Did not find listener!');
  85. }
  86. public function testCanAttachCallbackToMultipleEventsAtOnce()
  87. {
  88. $events = Zend_EventManager_StaticEventManager::getInstance();
  89. $events->attach('bar', array('foo', 'test'), array($this, __FUNCTION__));
  90. $this->assertContains('foo', $events->getEvents('bar'));
  91. $this->assertContains('test', $events->getEvents('bar'));
  92. $expected = array($this, __FUNCTION__);
  93. foreach (array('foo', 'test') as $event) {
  94. $found = false;
  95. $listeners = $events->getListeners('bar', $event);
  96. $this->assertTrue($listeners instanceof Zend_Stdlib_PriorityQueue);
  97. $this->assertTrue(0 < count($listeners), 'Empty listeners!');
  98. foreach ($listeners as $listener) {
  99. if ($expected === $listener->getCallback()) {
  100. $found = true;
  101. break;
  102. }
  103. }
  104. $this->assertTrue($found, 'Did not find listener!');
  105. }
  106. }
  107. public function testCanAttachSameEventToMultipleResourcesAtOnce()
  108. {
  109. $events = Zend_EventManager_StaticEventManager::getInstance();
  110. $events->attach(array('foo', 'test'), 'bar', array($this, __FUNCTION__));
  111. $this->assertContains('bar', $events->getEvents('foo'));
  112. $this->assertContains('bar', $events->getEvents('test'));
  113. $expected = array($this, __FUNCTION__);
  114. foreach (array('foo', 'test') as $id) {
  115. $found = false;
  116. $listeners = $events->getListeners($id, 'bar');
  117. $this->assertTrue($listeners instanceof Zend_Stdlib_PriorityQueue);
  118. $this->assertTrue(0 < count($listeners), 'Empty listeners!');
  119. foreach ($listeners as $listener) {
  120. if ($expected === $listener->getCallback()) {
  121. $found = true;
  122. break;
  123. }
  124. }
  125. $this->assertTrue($found, 'Did not find listener!');
  126. }
  127. }
  128. public function testCanAttachCallbackToMultipleEventsOnMultipleResourcesAtOnce()
  129. {
  130. $events = Zend_EventManager_StaticEventManager::getInstance();
  131. $events->attach(array('bar', 'baz'), array('foo', 'test'), array($this, __FUNCTION__));
  132. $this->assertContains('foo', $events->getEvents('bar'));
  133. $this->assertContains('test', $events->getEvents('bar'));
  134. $expected = array($this, __FUNCTION__);
  135. foreach (array('bar', 'baz') as $resource) {
  136. foreach (array('foo', 'test') as $event) {
  137. $found = false;
  138. $listeners = $events->getListeners($resource, $event);
  139. $this->assertTrue($listeners instanceof Zend_Stdlib_PriorityQueue);
  140. $this->assertTrue(0 < count($listeners), 'Empty listeners!');
  141. foreach ($listeners as $listener) {
  142. if ($expected === $listener->getCallback()) {
  143. $found = true;
  144. break;
  145. }
  146. }
  147. $this->assertTrue($found, 'Did not find listener!');
  148. }
  149. }
  150. }
  151. public function testListenersAttachedUsingWildcardEventWillBeTriggeredByResource()
  152. {
  153. $this->test = new stdClass;
  154. $this->test->events = array();
  155. $callback = array($this, 'setEventName');
  156. $staticEvents = Zend_EventManager_StaticEventManager::getInstance();
  157. $staticEvents->attach('bar', '*', $callback);
  158. $events = new Zend_EventManager_EventManager('bar');
  159. foreach (array('foo', 'bar', 'baz') as $event) {
  160. $events->trigger($event);
  161. $this->assertContains($event, $this->test->events);
  162. }
  163. }
  164. public function testCanDetachListenerFromResource()
  165. {
  166. $events = Zend_EventManager_StaticEventManager::getInstance();
  167. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  168. foreach ($events->getListeners('foo', 'bar') as $listener) {
  169. // only one; retrieving it so we can detach
  170. }
  171. $events->detach('foo', $listener);
  172. $listeners = $events->getListeners('foo', 'bar');
  173. $this->assertEquals(0, count($listeners));
  174. }
  175. public function testCanGetEventsByResource()
  176. {
  177. $events = Zend_EventManager_StaticEventManager::getInstance();
  178. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  179. $this->assertEquals(array('bar'), $events->getEvents('foo'));
  180. }
  181. public function testCanGetListenersByResourceAndEvent()
  182. {
  183. $events = Zend_EventManager_StaticEventManager::getInstance();
  184. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  185. $listeners = $events->getListeners('foo', 'bar');
  186. $this->assertTrue($listeners instanceof Zend_Stdlib_PriorityQueue);
  187. $this->assertEquals(1, count($listeners));
  188. }
  189. public function testCanClearListenersByResource()
  190. {
  191. $events = Zend_EventManager_StaticEventManager::getInstance();
  192. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  193. $events->attach('foo', 'baz', array($this, __FUNCTION__));
  194. $events->clearListeners('foo');
  195. $this->assertFalse($events->getListeners('foo', 'bar'));
  196. $this->assertFalse($events->getListeners('foo', 'baz'));
  197. }
  198. public function testCanClearListenersByResourceAndEvent()
  199. {
  200. $events = Zend_EventManager_StaticEventManager::getInstance();
  201. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  202. $events->attach('foo', 'baz', array($this, __FUNCTION__));
  203. $events->attach('foo', 'bat', array($this, __FUNCTION__));
  204. $events->clearListeners('foo', 'baz');
  205. $this->assertTrue($events->getListeners('foo', 'baz') instanceof Zend_Stdlib_PriorityQueue);
  206. $this->assertEquals(0, count($events->getListeners('foo', 'baz')));
  207. $this->assertTrue($events->getListeners('foo', 'bar') instanceof Zend_Stdlib_PriorityQueue);
  208. $this->assertEquals(1, count($events->getListeners('foo', 'bar')));
  209. $this->assertTrue($events->getListeners('foo', 'bat') instanceof Zend_Stdlib_PriorityQueue);
  210. $this->assertEquals(1, count($events->getListeners('foo', 'bat')));
  211. }
  212. public function testCanPassArrayOfIdentifiersToConstructor()
  213. {
  214. $identifiers = array('foo', 'bar');
  215. $manager = new Zend_EventManager_EventManager($identifiers);
  216. }
  217. public function testListenersAttachedToAnyIdentifierProvidedToEventManagerWillBeTriggered()
  218. {
  219. $identifiers = array('foo', 'bar');
  220. $manager = new Zend_EventManager_EventManager($identifiers);
  221. $events = Zend_EventManager_StaticEventManager::getInstance();
  222. $this->test = new stdClass;
  223. $this->test->triggered = 0;
  224. $events->attach('foo', 'bar', array($this, 'advanceTriggered'));
  225. $events->attach('foo', 'bar', array($this, 'advanceTriggered'));
  226. $manager->trigger('bar', $this, array());
  227. $this->assertEquals(2, $this->test->triggered);
  228. }
  229. /*
  230. * Listeners used in tests
  231. */
  232. public function setEventName($e)
  233. {
  234. $this->test->events[] = $e->getName();
  235. }
  236. public function advanceTriggered($e)
  237. {
  238. $this->test->triggered++;
  239. }
  240. }
  241. if (PHPUnit_MAIN_METHOD == 'Zend_EventManager_StaticEventManagerTest::main') {
  242. Zend_EventManager_StaticEventManagerTest::main();
  243. }