protected function _removeListener($event, callable $listener) { foreach ($this->listeners as $ev => $_listeners) { if (preg_match('%' . $ev . '%i', $event)) { parent::removeListener($ev, $listener); } } }
/** * @expectedException \InvalidArgumentException */ function testRemoveListenerNotFound() { $self = $this; $ok = false; $eventEmitter = new EventEmitter(); $eventEmitter->removeListener('test', function () { }); }
public function testOff() { $closure = function () { }; $closure1 = function () { }; $this->event->addListener('test', $closure); $this->event->addListener('test', $closure1); $this->assertEquals(array($closure, $closure1), $this->event->listeners('test')); $this->event->removeListener('test', $closure); $this->assertEquals(array(1 => $closure1), $this->event->listeners('test')); }
function testUnregisterMultipleEvents() { $argResult = 0; $callback = function () use(&$argResult) { $argResult++; }; $ee = new EventEmitter(); $ee->on(['foo', 'bar', 'qux'], $callback); $ee->removeListener(['foo', 'bar'], $callback); $ee->emit('foo'); $ee->emit('bar'); $ee->emit('qux'); $this->assertEquals(1, $argResult); }
<?php require '../vendor/autoload.php'; $listener = new EventEmitter(); /* $listener->on( 'hello', function( $data, $callback ){ print "Callback\n"; }); $listener->on( 'hello', function( $data, $callback ){ print "Callback 2\n"; }); $listener->on( 'hello', function( $data, $callback ){ print "Callback !!\n"; }); */ $remove_fn = function ($data, $callback) { print "Callback 3\n"; $callback(); }; $listener->on('hello', $remove_fn); $listener->emit('hello', 'second_arg', function () { print "emit_callback\n"; }); $listener->on('goodbye', function () { print "Goodbye world\n"; }); $listener->removeListener('hello', $remove_fn); $listener->emit('hello', 'second_arg', function () { print "emit_callback second time trhough\n"; }); $listener->emit('goodbye');
function testRemoveListenerTwice() { $result = false; $callBack = function () use(&$result) { $result = true; }; $ee = new EventEmitter(); $ee->on('foo', $callBack); $ee->emit('foo'); $this->assertTrue($result); $result = false; $this->assertTrue($ee->removeListener('foo', $callBack)); $this->assertFalse($ee->removeListener('foo', $callBack)); $ee->emit('foo'); $this->assertFalse($result); }