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