PageRenderTime 58ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/ZendTest/EventManager/StaticEventManagerTest.php

https://bitbucket.org/saifshuvo/zf2
PHP | 334 lines | 282 code | 35 blank | 17 comment | 4 complexity | 90930bb740e1ffbae1ea3f3e70fbe55a 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-2013 Zend Technologies USA Inc. (http://www.zend.com)
  7. * @license http://framework.zend.com/license/new-bsd New BSD License
  8. * @package Zend_EventManager
  9. */
  10. namespace ZendTest\EventManager;
  11. use PHPUnit_Framework_TestCase as TestCase;
  12. use stdClass;
  13. use Zend\EventManager\EventManager;
  14. use Zend\EventManager\StaticEventManager;
  15. /**
  16. * @category Zend
  17. * @package Zend_EventManager
  18. * @subpackage UnitTests
  19. * @group Zend_EventManager
  20. */
  21. class StaticEventManagerTest extends TestCase
  22. {
  23. public function setUp()
  24. {
  25. StaticEventManager::resetInstance();
  26. }
  27. public function tearDown()
  28. {
  29. StaticEventManager::resetInstance();
  30. }
  31. public function testOperatesAsASingleton()
  32. {
  33. $expected = StaticEventManager::getInstance();
  34. $test = StaticEventManager::getInstance();
  35. $this->assertSame($expected, $test);
  36. }
  37. public function testCanResetInstance()
  38. {
  39. $original = StaticEventManager::getInstance();
  40. StaticEventManager::resetInstance();
  41. $test = StaticEventManager::getInstance();
  42. $this->assertNotSame($original, $test);
  43. }
  44. public function testSingletonInstanceIsInstanceOfClass()
  45. {
  46. $this->assertInstanceOf('Zend\EventManager\StaticEventManager', StaticEventManager::getInstance());
  47. }
  48. public function testCanAttachCallbackToEvent()
  49. {
  50. $events = StaticEventManager::getInstance();
  51. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  52. $this->assertContains('bar', $events->getEvents('foo'));
  53. $expected = array($this, __FUNCTION__);
  54. $found = false;
  55. $listeners = $events->getListeners('foo', 'bar');
  56. $this->assertInstanceOf('Zend\Stdlib\PriorityQueue', $listeners);
  57. $this->assertTrue(0 < count($listeners), 'Empty listeners!');
  58. foreach ($listeners as $listener) {
  59. if ($expected === $listener->getCallback()) {
  60. $found = true;
  61. break;
  62. }
  63. }
  64. $this->assertTrue($found, 'Did not find listener!');
  65. }
  66. public function testCanAttachCallbackToMultipleEventsAtOnce()
  67. {
  68. $events = StaticEventManager::getInstance();
  69. $events->attach('bar', array('foo', 'test'), array($this, __FUNCTION__));
  70. $this->assertContains('foo', $events->getEvents('bar'));
  71. $this->assertContains('test', $events->getEvents('bar'));
  72. $expected = array($this, __FUNCTION__);
  73. foreach (array('foo', 'test') as $event) {
  74. $found = false;
  75. $listeners = $events->getListeners('bar', $event);
  76. $this->assertInstanceOf('Zend\Stdlib\PriorityQueue', $listeners);
  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. }
  87. public function testCanAttachSameEventToMultipleResourcesAtOnce()
  88. {
  89. $events = StaticEventManager::getInstance();
  90. $events->attach(array('foo', 'test'), 'bar', array($this, __FUNCTION__));
  91. $this->assertContains('bar', $events->getEvents('foo'));
  92. $this->assertContains('bar', $events->getEvents('test'));
  93. $expected = array($this, __FUNCTION__);
  94. foreach (array('foo', 'test') as $id) {
  95. $found = false;
  96. $listeners = $events->getListeners($id, 'bar');
  97. $this->assertInstanceOf('Zend\Stdlib\PriorityQueue', $listeners);
  98. $this->assertTrue(0 < count($listeners), 'Empty listeners!');
  99. foreach ($listeners as $listener) {
  100. if ($expected === $listener->getCallback()) {
  101. $found = true;
  102. break;
  103. }
  104. }
  105. $this->assertTrue($found, 'Did not find listener!');
  106. }
  107. }
  108. public function testCanAttachCallbackToMultipleEventsOnMultipleResourcesAtOnce()
  109. {
  110. $events = StaticEventManager::getInstance();
  111. $events->attach(array('bar', 'baz'), array('foo', 'test'), array($this, __FUNCTION__));
  112. $this->assertContains('foo', $events->getEvents('bar'));
  113. $this->assertContains('test', $events->getEvents('bar'));
  114. $expected = array($this, __FUNCTION__);
  115. foreach (array('bar', 'baz') as $resource) {
  116. foreach (array('foo', 'test') as $event) {
  117. $found = false;
  118. $listeners = $events->getListeners($resource, $event);
  119. $this->assertInstanceOf('Zend\Stdlib\PriorityQueue', $listeners);
  120. $this->assertTrue(0 < count($listeners), 'Empty listeners!');
  121. foreach ($listeners as $listener) {
  122. if ($expected === $listener->getCallback()) {
  123. $found = true;
  124. break;
  125. }
  126. }
  127. $this->assertTrue($found, 'Did not find listener!');
  128. }
  129. }
  130. }
  131. public function testListenersAttachedUsingWildcardEventWillBeTriggeredByResource()
  132. {
  133. $test = new stdClass;
  134. $test->events = array();
  135. $callback = function ($e) use ($test) {
  136. $test->events[] = $e->getName();
  137. };
  138. $staticEvents = StaticEventManager::getInstance();
  139. $staticEvents->attach('bar', '*', $callback);
  140. $events = new EventManager('bar');
  141. $events->setSharedManager($staticEvents);
  142. foreach (array('foo', 'bar', 'baz') as $event) {
  143. $events->trigger($event);
  144. $this->assertContains($event, $test->events);
  145. }
  146. }
  147. public function testCanDetachListenerFromResource()
  148. {
  149. $events = StaticEventManager::getInstance();
  150. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  151. foreach ($events->getListeners('foo', 'bar') as $listener) {
  152. // only one; retrieving it so we can detach
  153. }
  154. $events->detach('foo', $listener);
  155. $listeners = $events->getListeners('foo', 'bar');
  156. $this->assertEquals(0, count($listeners));
  157. }
  158. public function testCanGetEventsByResource()
  159. {
  160. $events = StaticEventManager::getInstance();
  161. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  162. $this->assertEquals(array('bar'), $events->getEvents('foo'));
  163. }
  164. public function testCanGetEventsByWildcard()
  165. {
  166. $events = StaticEventManager::getInstance();
  167. $events->attach('*', 'bar', array($this, __FUNCTION__));
  168. $this->assertEquals(array('bar'), $events->getEvents('foo'));
  169. }
  170. public function testCanGetListenersByResourceAndEvent()
  171. {
  172. $events = StaticEventManager::getInstance();
  173. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  174. $listeners = $events->getListeners('foo', 'bar');
  175. $this->assertInstanceOf('Zend\Stdlib\PriorityQueue', $listeners);
  176. $this->assertEquals(1, count($listeners));
  177. }
  178. public function testCanNotGetListenersByResourceAndEventWithWildcard()
  179. {
  180. $events = StaticEventManager::getInstance();
  181. $events->attach('*', 'bar', array($this, __FUNCTION__));
  182. $listeners = $events->getListeners('foo', 'bar');
  183. $this->assertFalse($listeners);
  184. }
  185. public function testCanGetListenersByWildcardAndEvent()
  186. {
  187. $events = StaticEventManager::getInstance();
  188. $events->attach('*', 'bar', array($this, __FUNCTION__));
  189. $listeners = $events->getListeners('*', 'bar');
  190. $this->assertInstanceOf('Zend\Stdlib\PriorityQueue', $listeners);
  191. $this->assertEquals(1, count($listeners));
  192. }
  193. public function testCanClearListenersByResource()
  194. {
  195. $events = StaticEventManager::getInstance();
  196. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  197. $events->attach('foo', 'baz', array($this, __FUNCTION__));
  198. $events->clearListeners('foo');
  199. $this->assertFalse($events->getListeners('foo', 'bar'));
  200. $this->assertFalse($events->getListeners('foo', 'baz'));
  201. }
  202. public function testCanClearListenersByResourceAndEvent()
  203. {
  204. $events = StaticEventManager::getInstance();
  205. $events->attach('foo', 'bar', array($this, __FUNCTION__));
  206. $events->attach('foo', 'baz', array($this, __FUNCTION__));
  207. $events->attach('foo', 'bat', array($this, __FUNCTION__));
  208. $events->clearListeners('foo', 'baz');
  209. $this->assertInstanceOf('Zend\Stdlib\PriorityQueue', $events->getListeners('foo', 'baz'));
  210. $this->assertEquals(0, count($events->getListeners('foo', 'baz')));
  211. $this->assertInstanceOf('Zend\Stdlib\PriorityQueue', $events->getListeners('foo', 'bar'));
  212. $this->assertEquals(1, count($events->getListeners('foo', 'bar')));
  213. $this->assertInstanceOf('Zend\Stdlib\PriorityQueue', $events->getListeners('foo', 'bat'));
  214. $this->assertEquals(1, count($events->getListeners('foo', 'bat')));
  215. }
  216. public function testCanPassArrayOfIdentifiersToConstructor()
  217. {
  218. $identifiers = array('foo', 'bar');
  219. $manager = new EventManager($identifiers);
  220. }
  221. public function testListenersAttachedToAnyIdentifierProvidedToEventManagerWillBeTriggered()
  222. {
  223. $identifiers = array('foo', 'bar');
  224. $events = StaticEventManager::getInstance();
  225. $manager = new EventManager($identifiers);
  226. $manager->setSharedManager($events);
  227. $test = new \stdClass;
  228. $test->triggered = 0;
  229. $events->attach('foo', 'bar', function ($e) use ($test) {
  230. $test->triggered++;
  231. });
  232. $events->attach('bar', 'bar', function ($e) use ($test) {
  233. $test->triggered++;
  234. });
  235. $manager->trigger('bar', $this, array());
  236. $this->assertEquals(2, $test->triggered);
  237. }
  238. public function testListenersAttachedToWildcardsWillBeTriggered()
  239. {
  240. $identifiers = array('foo', 'bar');
  241. $events = StaticEventManager::getInstance();
  242. $manager = new EventManager($identifiers);
  243. $manager->setSharedManager($events);
  244. $test = new \stdClass;
  245. $test->triggered = 0;
  246. $events->attach('*', 'bar', function ($e) use ($test) {
  247. $test->triggered++;
  248. });
  249. //Tests one can have multiple wildcards attached
  250. $events->attach('*', 'bar', function ($e) use ($test) {
  251. $test->triggered++;
  252. });
  253. $manager->trigger('bar', $this, array());
  254. $this->assertEquals(2, $test->triggered);
  255. }
  256. public function testListenersAttachedToAnyIdentifierProvidedToEventManagerOrWildcardsWillBeTriggered()
  257. {
  258. $identifiers = array('foo', 'bar');
  259. $events = StaticEventManager::getInstance();
  260. $manager = new EventManager($identifiers);
  261. $manager->setSharedManager($events);
  262. $test = new \stdClass;
  263. $test->triggered = 0;
  264. $events->attach('foo', 'bar', function ($e) use ($test) {
  265. $test->triggered++;
  266. });
  267. $events->attach('bar', 'bar', function ($e) use ($test) {
  268. $test->triggered++;
  269. });
  270. $events->attach('*', 'bar', function ($e) use ($test) {
  271. $test->triggered++;
  272. });
  273. //Tests one can have multiple wildcards attached
  274. $events->attach('*', 'bar', function ($e) use ($test) {
  275. $test->triggered++;
  276. });
  277. $manager->trigger('bar', $this, array());
  278. $this->assertEquals(4, $test->triggered);
  279. }
  280. public function testCanAttachListenerAggregate()
  281. {
  282. $staticManager = StaticEventManager::getInstance();
  283. $aggregate = new TestAsset\SharedMockAggregate('bazinga');
  284. $staticManager->attachAggregate($aggregate);
  285. $events = $staticManager->getEvents('bazinga');
  286. $this->assertCount(2, $events);
  287. }
  288. public function testCanDetachListenerAggregate()
  289. {
  290. $staticManager = StaticEventManager::getInstance();
  291. $aggregate = new TestAsset\SharedMockAggregate('bazinga');
  292. $staticManager->attachAggregate($aggregate);
  293. $events = $staticManager->getEvents('bazinga');
  294. $this->assertCount(2, $events);
  295. $staticManager->detachAggregate($aggregate);
  296. $events = $staticManager->getEvents('bazinga');
  297. $this->assertCount(0, $events);
  298. }
  299. }