EventDispatcherTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. /*
  3. * This file is part of the symfony package.
  4. * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
  5. *
  6. * For the full copyright and license information, please view the LICENSE
  7. * file that was distributed with this source code.
  8. */
  9. require_once __DIR__.'/../../../bootstrap.php';
  10. use Symfony\Components\EventDispatcher\Event;
  11. use Symfony\Components\EventDispatcher\EventDispatcher;
  12. $t = new LimeTest(19);
  13. $dispatcher = new EventDispatcher();
  14. // ->connect() ->disconnect()
  15. $t->diag('->connect() ->disconnect()');
  16. $dispatcher->connect('bar', 'listenToBar');
  17. $t->is($dispatcher->getListeners('bar'), array('listenToBar'), '->connect() connects a listener to an event name');
  18. $dispatcher->connect('bar', 'listenToBarBar');
  19. $t->is($dispatcher->getListeners('bar'), array('listenToBar', 'listenToBarBar'), '->connect() can connect several listeners for the same event name');
  20. $dispatcher->connect('barbar', 'listenToBarBar');
  21. $dispatcher->disconnect('bar', 'listenToBarBar');
  22. $t->is($dispatcher->getListeners('bar'), array('listenToBar'), '->disconnect() disconnects a listener for an event name');
  23. $t->is($dispatcher->getListeners('barbar'), array('listenToBarBar'), '->disconnect() disconnects a listener for an event name');
  24. $t->ok($dispatcher->disconnect('foobar', 'listen') === false, '->disconnect() returns false if the listener does not exist');
  25. // ->getListeners() ->hasListeners()
  26. $t->diag('->getListeners() ->hasListeners()');
  27. $t->is($dispatcher->hasListeners('foo'), false, '->hasListeners() returns false if the event has no listener');
  28. $dispatcher->connect('foo', 'listenToFoo');
  29. $t->is($dispatcher->hasListeners('foo'), true, '->hasListeners() returns true if the event has some listeners');
  30. $dispatcher->disconnect('foo', 'listenToFoo');
  31. $t->is($dispatcher->hasListeners('foo'), false, '->hasListeners() returns false if the event has no listener');
  32. $t->is($dispatcher->getListeners('bar'), array('listenToBar'), '->getListeners() returns an array of listeners connected to the given event name');
  33. $t->is($dispatcher->getListeners('foobar'), array(), '->getListeners() returns an empty array if no listener are connected to the given event name');
  34. $listener = new Listener();
  35. // ->notify()
  36. $t->diag('->notify()');
  37. $listener->reset();
  38. $dispatcher = new EventDispatcher();
  39. $dispatcher->connect('foo', array($listener, 'listenToFoo'));
  40. $dispatcher->connect('foo', array($listener, 'listenToFooBis'));
  41. $e = $dispatcher->notify($event = new Event(new stdClass(), 'foo'));
  42. $t->is($listener->getValue(), 'listenToFoolistenToFooBis', '->notify() notifies all registered listeners in order');
  43. $t->is($e, $event, '->notify() returns the event object');
  44. $listener->reset();
  45. $dispatcher = new EventDispatcher();
  46. $dispatcher->connect('foo', array($listener, 'listenToFooBis'));
  47. $dispatcher->connect('foo', array($listener, 'listenToFoo'));
  48. $dispatcher->notify(new Event(new stdClass(), 'foo'));
  49. $t->is($listener->getValue(), 'listenToFooBislistenToFoo', '->notify() notifies all registered listeners in order');
  50. // ->notifyUntil()
  51. $t->diag('->notifyUntil()');
  52. $listener->reset();
  53. $dispatcher = new EventDispatcher();
  54. $dispatcher->connect('foo', array($listener, 'listenToFoo'));
  55. $dispatcher->connect('foo', array($listener, 'listenToFooBis'));
  56. $e = $dispatcher->notifyUntil($event = new Event(new stdClass(), 'foo'));
  57. $t->is($listener->getValue(), 'listenToFoolistenToFooBis', '->notifyUntil() notifies all registered listeners in order and stops if it returns true');
  58. $t->is($e, $event, '->notifyUntil() returns the event object');
  59. $listener->reset();
  60. $dispatcher = new EventDispatcher();
  61. $dispatcher->connect('foo', array($listener, 'listenToFooBis'));
  62. $dispatcher->connect('foo', array($listener, 'listenToFoo'));
  63. $e = $dispatcher->notifyUntil($event = new Event(new stdClass(), 'foo'));
  64. $t->is($listener->getValue(), 'listenToFooBis', '->notifyUntil() notifies all registered listeners in order and stops if it returns true');
  65. // ->filter()
  66. $t->diag('->filter()');
  67. $listener->reset();
  68. $dispatcher = new EventDispatcher();
  69. $dispatcher->connect('foo', array($listener, 'filterFoo'));
  70. $dispatcher->connect('foo', array($listener, 'filterFooBis'));
  71. $e = $dispatcher->filter($event = new Event(new stdClass(), 'foo'), 'foo');
  72. $t->is($e->getReturnValue(), '-*foo*-', '->filter() filters a value');
  73. $t->is($e, $event, '->filter() returns the event object');
  74. $listener->reset();
  75. $dispatcher = new EventDispatcher();
  76. $dispatcher->connect('foo', array($listener, 'filterFooBis'));
  77. $dispatcher->connect('foo', array($listener, 'filterFoo'));
  78. $e = $dispatcher->filter($event = new Event(new stdClass(), 'foo'), 'foo');
  79. $t->is($e->getReturnValue(), '*-foo-*', '->filter() filters a value');
  80. class Listener
  81. {
  82. protected
  83. $value = '';
  84. function filterFoo(Event $event, $foo)
  85. {
  86. return "*$foo*";
  87. }
  88. function filterFooBis(Event $event, $foo)
  89. {
  90. return "-$foo-";
  91. }
  92. function listenToFoo(Event $event)
  93. {
  94. $this->value .= 'listenToFoo';
  95. }
  96. function listenToFooBis(Event $event)
  97. {
  98. $this->value .= 'listenToFooBis';
  99. return true;
  100. }
  101. function getValue()
  102. {
  103. return $this->value;
  104. }
  105. function reset()
  106. {
  107. $this->value = '';
  108. }
  109. }