StaticEventManagerTest.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  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-2012 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-2012 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->assertType('Zend_EventManager_StaticEventManager', Zend_EventManager_StaticEventManager::getInstance());
  65. }
  66. public function testCanAttachCallbackToEvent()
  67. {
  68. $events = Zend_EventManager_StaticEventManager::getInstance();
  69. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  70. $this->assertContains('bar', $events->getEvents('foo'));
  71. $expected = array($this, __FUNCTION__);
  72. $found = false;
  73. $listeners = $events->getListeners('foo', 'bar');
  74. $this->assertType('Zend_Stdlib_PriorityQueue', $listeners);
  75. $this->assertTrue(0 < count($listeners), 'Empty listeners!');
  76. foreach ($listeners as $listener) {
  77. if ($expected === $listener->getCallback()) {
  78. $found = true;
  79. break;
  80. }
  81. }
  82. $this->assertTrue($found, 'Did not find listener!');
  83. }
  84. public function testCanAttachCallbackToMultipleEventsAtOnce()
  85. {
  86. $events = Zend_EventManager_StaticEventManager::getInstance();
  87. $events->attach('bar', array('foo', 'test'), array($this, __FUNCTION__));
  88. $this->assertContains('foo', $events->getEvents('bar'));
  89. $this->assertContains('test', $events->getEvents('bar'));
  90. $expected = array($this, __FUNCTION__);
  91. foreach (array('foo', 'test') as $event) {
  92. $found = false;
  93. $listeners = $events->getListeners('bar', $event);
  94. $this->assertType('Zend_Stdlib_PriorityQueue', $listeners);
  95. $this->assertTrue(0 < count($listeners), 'Empty listeners!');
  96. foreach ($listeners as $listener) {
  97. if ($expected === $listener->getCallback()) {
  98. $found = true;
  99. break;
  100. }
  101. }
  102. $this->assertTrue($found, 'Did not find listener!');
  103. }
  104. }
  105. public function testCanAttachSameEventToMultipleResourcesAtOnce()
  106. {
  107. $events = Zend_EventManager_StaticEventManager::getInstance();
  108. $events->attach(array('foo', 'test'), 'bar', array($this, __FUNCTION__));
  109. $this->assertContains('bar', $events->getEvents('foo'));
  110. $this->assertContains('bar', $events->getEvents('test'));
  111. $expected = array($this, __FUNCTION__);
  112. foreach (array('foo', 'test') as $id) {
  113. $found = false;
  114. $listeners = $events->getListeners($id, 'bar');
  115. $this->assertType('Zend_Stdlib_PriorityQueue', $listeners);
  116. $this->assertTrue(0 < count($listeners), 'Empty listeners!');
  117. foreach ($listeners as $listener) {
  118. if ($expected === $listener->getCallback()) {
  119. $found = true;
  120. break;
  121. }
  122. }
  123. $this->assertTrue($found, 'Did not find listener!');
  124. }
  125. }
  126. public function testCanAttachCallbackToMultipleEventsOnMultipleResourcesAtOnce()
  127. {
  128. $events = Zend_EventManager_StaticEventManager::getInstance();
  129. $events->attach(array('bar', 'baz'), array('foo', 'test'), array($this, __FUNCTION__));
  130. $this->assertContains('foo', $events->getEvents('bar'));
  131. $this->assertContains('test', $events->getEvents('bar'));
  132. $expected = array($this, __FUNCTION__);
  133. foreach (array('bar', 'baz') as $resource) {
  134. foreach (array('foo', 'test') as $event) {
  135. $found = false;
  136. $listeners = $events->getListeners($resource, $event);
  137. $this->assertType('Zend_Stdlib_PriorityQueue', $listeners);
  138. $this->assertTrue(0 < count($listeners), 'Empty listeners!');
  139. foreach ($listeners as $listener) {
  140. if ($expected === $listener->getCallback()) {
  141. $found = true;
  142. break;
  143. }
  144. }
  145. $this->assertTrue($found, 'Did not find listener!');
  146. }
  147. }
  148. }
  149. public function testListenersAttachedUsingWildcardEventWillBeTriggeredByResource()
  150. {
  151. $this->test = new stdClass;
  152. $this->test->events = array();
  153. $callback = array($this, 'setEventName');
  154. $staticEvents = Zend_EventManager_StaticEventManager::getInstance();
  155. $staticEvents->attach('bar', '*', $callback);
  156. $events = new Zend_EventManager_EventManager('bar');
  157. foreach (array('foo', 'bar', 'baz') as $event) {
  158. $events->trigger($event);
  159. $this->assertContains($event, $this->test->events);
  160. }
  161. }
  162. public function testCanDetachListenerFromResource()
  163. {
  164. $events = Zend_EventManager_StaticEventManager::getInstance();
  165. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  166. foreach ($events->getListeners('foo', 'bar') as $listener) {
  167. // only one; retrieving it so we can detach
  168. }
  169. $events->detach('foo', $listener);
  170. $listeners = $events->getListeners('foo', 'bar');
  171. $this->assertEquals(0, count($listeners));
  172. }
  173. public function testCanGetEventsByResource()
  174. {
  175. $events = Zend_EventManager_StaticEventManager::getInstance();
  176. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  177. $this->assertEquals(array('bar'), $events->getEvents('foo'));
  178. }
  179. public function testCanGetListenersByResourceAndEvent()
  180. {
  181. $events = Zend_EventManager_StaticEventManager::getInstance();
  182. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  183. $listeners = $events->getListeners('foo', 'bar');
  184. $this->assertType('Zend_Stdlib_PriorityQueue', $listeners);
  185. $this->assertEquals(1, count($listeners));
  186. }
  187. public function testCanClearListenersByResource()
  188. {
  189. $events = Zend_EventManager_StaticEventManager::getInstance();
  190. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  191. $events->attach('foo', 'baz', array($this, __FUNCTION__));
  192. $events->clearListeners('foo');
  193. $this->assertFalse($events->getListeners('foo', 'bar'));
  194. $this->assertFalse($events->getListeners('foo', 'baz'));
  195. }
  196. public function testCanClearListenersByResourceAndEvent()
  197. {
  198. $events = Zend_EventManager_StaticEventManager::getInstance();
  199. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  200. $events->attach('foo', 'baz', array($this, __FUNCTION__));
  201. $events->attach('foo', 'bat', array($this, __FUNCTION__));
  202. $events->clearListeners('foo', 'baz');
  203. $this->assertType('Zend_Stdlib_PriorityQueue', $events->getListeners('foo', 'baz'));
  204. $this->assertEquals(0, count($events->getListeners('foo', 'baz')));
  205. $this->assertType('Zend_Stdlib_PriorityQueue', $events->getListeners('foo', 'bar'));
  206. $this->assertEquals(1, count($events->getListeners('foo', 'bar')));
  207. $this->assertType('Zend_Stdlib_PriorityQueue', $events->getListeners('foo', 'bat'));
  208. $this->assertEquals(1, count($events->getListeners('foo', 'bat')));
  209. }
  210. public function testCanPassArrayOfIdentifiersToConstructor()
  211. {
  212. $identifiers = array('foo', 'bar');
  213. $manager = new Zend_EventManager_EventManager($identifiers);
  214. }
  215. public function testListenersAttachedToAnyIdentifierProvidedToEventManagerWillBeTriggered()
  216. {
  217. $identifiers = array('foo', 'bar');
  218. $manager = new Zend_EventManager_EventManager($identifiers);
  219. $events = Zend_EventManager_StaticEventManager::getInstance();
  220. $this->test = new stdClass;
  221. $this->test->triggered = 0;
  222. $events->attach('foo', 'bar', array($this, 'advanceTriggered'));
  223. $events->attach('foo', 'bar', array($this, 'advanceTriggered'));
  224. $manager->trigger('bar', $this, array());
  225. $this->assertEquals(2, $this->test->triggered);
  226. }
  227. /*
  228. * Listeners used in tests
  229. */
  230. public function setEventName($e)
  231. {
  232. $this->test->events[] = $e->getName();
  233. }
  234. public function advanceTriggered($e)
  235. {
  236. $this->test->triggered++;
  237. }
  238. }
  239. if (PHPUnit_MAIN_METHOD == 'Zend_EventManager_StaticEventManagerTest::main') {
  240. Zend_EventManager_StaticEventManagerTest::main();
  241. }