1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\Event; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehlerclass EventEmitterTest extends \PHPUnit_Framework_TestCase { 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehler function testInit() { 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehler $ee = new EventEmitter(); 10*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\Event\\EventEmitter', $ee); 11*a1a3b679SAndreas Boehler 12*a1a3b679SAndreas Boehler } 13*a1a3b679SAndreas Boehler 14*a1a3b679SAndreas Boehler function testListeners() { 15*a1a3b679SAndreas Boehler 16*a1a3b679SAndreas Boehler $ee = new EventEmitter(); 17*a1a3b679SAndreas Boehler 18*a1a3b679SAndreas Boehler $callback1 = function() { }; 19*a1a3b679SAndreas Boehler $callback2 = function() { }; 20*a1a3b679SAndreas Boehler $ee->on('foo', $callback1, 200); 21*a1a3b679SAndreas Boehler $ee->on('foo', $callback2, 100); 22*a1a3b679SAndreas Boehler 23*a1a3b679SAndreas Boehler $this->assertEquals([$callback2, $callback1], $ee->listeners('foo')); 24*a1a3b679SAndreas Boehler 25*a1a3b679SAndreas Boehler } 26*a1a3b679SAndreas Boehler 27*a1a3b679SAndreas Boehler /** 28*a1a3b679SAndreas Boehler * @depends testInit 29*a1a3b679SAndreas Boehler */ 30*a1a3b679SAndreas Boehler function testHandleEvent() { 31*a1a3b679SAndreas Boehler 32*a1a3b679SAndreas Boehler $argResult = null; 33*a1a3b679SAndreas Boehler 34*a1a3b679SAndreas Boehler $ee = new EventEmitter(); 35*a1a3b679SAndreas Boehler $ee->on('foo', function($arg) use (&$argResult) { 36*a1a3b679SAndreas Boehler 37*a1a3b679SAndreas Boehler $argResult = $arg; 38*a1a3b679SAndreas Boehler 39*a1a3b679SAndreas Boehler }); 40*a1a3b679SAndreas Boehler 41*a1a3b679SAndreas Boehler $this->assertTrue( 42*a1a3b679SAndreas Boehler $ee->emit('foo', ['bar']) 43*a1a3b679SAndreas Boehler ); 44*a1a3b679SAndreas Boehler 45*a1a3b679SAndreas Boehler $this->assertEquals('bar', $argResult); 46*a1a3b679SAndreas Boehler 47*a1a3b679SAndreas Boehler } 48*a1a3b679SAndreas Boehler 49*a1a3b679SAndreas Boehler /** 50*a1a3b679SAndreas Boehler * @depends testHandleEvent 51*a1a3b679SAndreas Boehler */ 52*a1a3b679SAndreas Boehler function testCancelEvent() { 53*a1a3b679SAndreas Boehler 54*a1a3b679SAndreas Boehler $argResult = 0; 55*a1a3b679SAndreas Boehler 56*a1a3b679SAndreas Boehler $ee = new EventEmitter(); 57*a1a3b679SAndreas Boehler $ee->on('foo', function($arg) use (&$argResult) { 58*a1a3b679SAndreas Boehler 59*a1a3b679SAndreas Boehler $argResult = 1; 60*a1a3b679SAndreas Boehler return false; 61*a1a3b679SAndreas Boehler 62*a1a3b679SAndreas Boehler }); 63*a1a3b679SAndreas Boehler $ee->on('foo', function($arg) use (&$argResult) { 64*a1a3b679SAndreas Boehler 65*a1a3b679SAndreas Boehler $argResult = 2; 66*a1a3b679SAndreas Boehler 67*a1a3b679SAndreas Boehler }); 68*a1a3b679SAndreas Boehler 69*a1a3b679SAndreas Boehler $this->assertFalse( 70*a1a3b679SAndreas Boehler $ee->emit('foo', ['bar']) 71*a1a3b679SAndreas Boehler ); 72*a1a3b679SAndreas Boehler 73*a1a3b679SAndreas Boehler $this->assertEquals(1, $argResult); 74*a1a3b679SAndreas Boehler 75*a1a3b679SAndreas Boehler } 76*a1a3b679SAndreas Boehler 77*a1a3b679SAndreas Boehler /** 78*a1a3b679SAndreas Boehler * @depends testCancelEvent 79*a1a3b679SAndreas Boehler */ 80*a1a3b679SAndreas Boehler function testPriority() { 81*a1a3b679SAndreas Boehler 82*a1a3b679SAndreas Boehler $argResult = 0; 83*a1a3b679SAndreas Boehler 84*a1a3b679SAndreas Boehler $ee = new EventEmitter(); 85*a1a3b679SAndreas Boehler $ee->on('foo', function($arg) use (&$argResult) { 86*a1a3b679SAndreas Boehler 87*a1a3b679SAndreas Boehler $argResult = 1; 88*a1a3b679SAndreas Boehler return false; 89*a1a3b679SAndreas Boehler 90*a1a3b679SAndreas Boehler }); 91*a1a3b679SAndreas Boehler $ee->on('foo', function($arg) use (&$argResult) { 92*a1a3b679SAndreas Boehler 93*a1a3b679SAndreas Boehler $argResult = 2; 94*a1a3b679SAndreas Boehler return false; 95*a1a3b679SAndreas Boehler 96*a1a3b679SAndreas Boehler }, 1); 97*a1a3b679SAndreas Boehler 98*a1a3b679SAndreas Boehler $this->assertFalse( 99*a1a3b679SAndreas Boehler $ee->emit('foo', ['bar']) 100*a1a3b679SAndreas Boehler ); 101*a1a3b679SAndreas Boehler 102*a1a3b679SAndreas Boehler $this->assertEquals(2, $argResult); 103*a1a3b679SAndreas Boehler 104*a1a3b679SAndreas Boehler } 105*a1a3b679SAndreas Boehler 106*a1a3b679SAndreas Boehler /** 107*a1a3b679SAndreas Boehler * @depends testPriority 108*a1a3b679SAndreas Boehler */ 109*a1a3b679SAndreas Boehler function testPriority2() { 110*a1a3b679SAndreas Boehler 111*a1a3b679SAndreas Boehler $result = []; 112*a1a3b679SAndreas Boehler $ee = new EventEmitter(); 113*a1a3b679SAndreas Boehler 114*a1a3b679SAndreas Boehler $ee->on('foo', function() use (&$result) { 115*a1a3b679SAndreas Boehler 116*a1a3b679SAndreas Boehler $result[] = 'a'; 117*a1a3b679SAndreas Boehler 118*a1a3b679SAndreas Boehler }, 200); 119*a1a3b679SAndreas Boehler $ee->on('foo', function() use (&$result) { 120*a1a3b679SAndreas Boehler 121*a1a3b679SAndreas Boehler $result[] = 'b'; 122*a1a3b679SAndreas Boehler 123*a1a3b679SAndreas Boehler }, 50); 124*a1a3b679SAndreas Boehler $ee->on('foo', function() use (&$result) { 125*a1a3b679SAndreas Boehler 126*a1a3b679SAndreas Boehler $result[] = 'c'; 127*a1a3b679SAndreas Boehler 128*a1a3b679SAndreas Boehler }, 300); 129*a1a3b679SAndreas Boehler $ee->on('foo', function() use (&$result) { 130*a1a3b679SAndreas Boehler 131*a1a3b679SAndreas Boehler $result[] = 'd'; 132*a1a3b679SAndreas Boehler 133*a1a3b679SAndreas Boehler }); 134*a1a3b679SAndreas Boehler 135*a1a3b679SAndreas Boehler $ee->emit('foo'); 136*a1a3b679SAndreas Boehler $this->assertEquals(['b', 'd', 'a', 'c'], $result); 137*a1a3b679SAndreas Boehler 138*a1a3b679SAndreas Boehler } 139*a1a3b679SAndreas Boehler 140*a1a3b679SAndreas Boehler function testRemoveListener() { 141*a1a3b679SAndreas Boehler 142*a1a3b679SAndreas Boehler $result = false; 143*a1a3b679SAndreas Boehler 144*a1a3b679SAndreas Boehler $callBack = function() use (&$result) { 145*a1a3b679SAndreas Boehler 146*a1a3b679SAndreas Boehler $result = true; 147*a1a3b679SAndreas Boehler 148*a1a3b679SAndreas Boehler }; 149*a1a3b679SAndreas Boehler 150*a1a3b679SAndreas Boehler $ee = new EventEmitter(); 151*a1a3b679SAndreas Boehler 152*a1a3b679SAndreas Boehler $ee->on('foo', $callBack); 153*a1a3b679SAndreas Boehler 154*a1a3b679SAndreas Boehler $ee->emit('foo'); 155*a1a3b679SAndreas Boehler $this->assertTrue($result); 156*a1a3b679SAndreas Boehler $result = false; 157*a1a3b679SAndreas Boehler 158*a1a3b679SAndreas Boehler $this->assertTrue( 159*a1a3b679SAndreas Boehler $ee->removeListener('foo', $callBack) 160*a1a3b679SAndreas Boehler ); 161*a1a3b679SAndreas Boehler 162*a1a3b679SAndreas Boehler $ee->emit('foo'); 163*a1a3b679SAndreas Boehler $this->assertFalse($result); 164*a1a3b679SAndreas Boehler 165*a1a3b679SAndreas Boehler } 166*a1a3b679SAndreas Boehler 167*a1a3b679SAndreas Boehler function testRemoveUnknownListener() { 168*a1a3b679SAndreas Boehler 169*a1a3b679SAndreas Boehler $result = false; 170*a1a3b679SAndreas Boehler 171*a1a3b679SAndreas Boehler $callBack = function() use (&$result) { 172*a1a3b679SAndreas Boehler 173*a1a3b679SAndreas Boehler $result = true; 174*a1a3b679SAndreas Boehler 175*a1a3b679SAndreas Boehler }; 176*a1a3b679SAndreas Boehler 177*a1a3b679SAndreas Boehler $ee = new EventEmitter(); 178*a1a3b679SAndreas Boehler 179*a1a3b679SAndreas Boehler $ee->on('foo', $callBack); 180*a1a3b679SAndreas Boehler 181*a1a3b679SAndreas Boehler $ee->emit('foo'); 182*a1a3b679SAndreas Boehler $this->assertTrue($result); 183*a1a3b679SAndreas Boehler $result = false; 184*a1a3b679SAndreas Boehler 185*a1a3b679SAndreas Boehler $this->assertFalse($ee->removeListener('bar', $callBack)); 186*a1a3b679SAndreas Boehler 187*a1a3b679SAndreas Boehler $ee->emit('foo'); 188*a1a3b679SAndreas Boehler $this->assertTrue($result); 189*a1a3b679SAndreas Boehler 190*a1a3b679SAndreas Boehler } 191*a1a3b679SAndreas Boehler 192*a1a3b679SAndreas Boehler function testRemoveListenerTwice() { 193*a1a3b679SAndreas Boehler 194*a1a3b679SAndreas Boehler $result = false; 195*a1a3b679SAndreas Boehler 196*a1a3b679SAndreas Boehler $callBack = function() use (&$result) { 197*a1a3b679SAndreas Boehler 198*a1a3b679SAndreas Boehler $result = true; 199*a1a3b679SAndreas Boehler 200*a1a3b679SAndreas Boehler }; 201*a1a3b679SAndreas Boehler 202*a1a3b679SAndreas Boehler $ee = new EventEmitter(); 203*a1a3b679SAndreas Boehler 204*a1a3b679SAndreas Boehler $ee->on('foo', $callBack); 205*a1a3b679SAndreas Boehler 206*a1a3b679SAndreas Boehler $ee->emit('foo'); 207*a1a3b679SAndreas Boehler $this->assertTrue($result); 208*a1a3b679SAndreas Boehler $result = false; 209*a1a3b679SAndreas Boehler 210*a1a3b679SAndreas Boehler $this->assertTrue( 211*a1a3b679SAndreas Boehler $ee->removeListener('foo', $callBack) 212*a1a3b679SAndreas Boehler ); 213*a1a3b679SAndreas Boehler $this->assertFalse( 214*a1a3b679SAndreas Boehler $ee->removeListener('foo', $callBack) 215*a1a3b679SAndreas Boehler ); 216*a1a3b679SAndreas Boehler 217*a1a3b679SAndreas Boehler $ee->emit('foo'); 218*a1a3b679SAndreas Boehler $this->assertFalse($result); 219*a1a3b679SAndreas Boehler 220*a1a3b679SAndreas Boehler } 221*a1a3b679SAndreas Boehler 222*a1a3b679SAndreas Boehler function testRemoveAllListeners() { 223*a1a3b679SAndreas Boehler 224*a1a3b679SAndreas Boehler $result = false; 225*a1a3b679SAndreas Boehler $callBack = function() use (&$result) { 226*a1a3b679SAndreas Boehler 227*a1a3b679SAndreas Boehler $result = true; 228*a1a3b679SAndreas Boehler 229*a1a3b679SAndreas Boehler }; 230*a1a3b679SAndreas Boehler 231*a1a3b679SAndreas Boehler $ee = new EventEmitter(); 232*a1a3b679SAndreas Boehler $ee->on('foo', $callBack); 233*a1a3b679SAndreas Boehler 234*a1a3b679SAndreas Boehler $ee->emit('foo'); 235*a1a3b679SAndreas Boehler $this->assertTrue($result); 236*a1a3b679SAndreas Boehler $result = false; 237*a1a3b679SAndreas Boehler 238*a1a3b679SAndreas Boehler $ee->removeAllListeners('foo'); 239*a1a3b679SAndreas Boehler 240*a1a3b679SAndreas Boehler $ee->emit('foo'); 241*a1a3b679SAndreas Boehler $this->assertFalse($result); 242*a1a3b679SAndreas Boehler 243*a1a3b679SAndreas Boehler } 244*a1a3b679SAndreas Boehler 245*a1a3b679SAndreas Boehler function testRemoveAllListenersNoArg() { 246*a1a3b679SAndreas Boehler 247*a1a3b679SAndreas Boehler $result = false; 248*a1a3b679SAndreas Boehler 249*a1a3b679SAndreas Boehler $callBack = function() use (&$result) { 250*a1a3b679SAndreas Boehler 251*a1a3b679SAndreas Boehler $result = true; 252*a1a3b679SAndreas Boehler 253*a1a3b679SAndreas Boehler }; 254*a1a3b679SAndreas Boehler 255*a1a3b679SAndreas Boehler 256*a1a3b679SAndreas Boehler $ee = new EventEmitter(); 257*a1a3b679SAndreas Boehler $ee->on('foo', $callBack); 258*a1a3b679SAndreas Boehler 259*a1a3b679SAndreas Boehler $ee->emit('foo'); 260*a1a3b679SAndreas Boehler $this->assertTrue($result); 261*a1a3b679SAndreas Boehler $result = false; 262*a1a3b679SAndreas Boehler 263*a1a3b679SAndreas Boehler $ee->removeAllListeners(); 264*a1a3b679SAndreas Boehler 265*a1a3b679SAndreas Boehler $ee->emit('foo'); 266*a1a3b679SAndreas Boehler $this->assertFalse($result); 267*a1a3b679SAndreas Boehler 268*a1a3b679SAndreas Boehler } 269*a1a3b679SAndreas Boehler 270*a1a3b679SAndreas Boehler function testOnce() { 271*a1a3b679SAndreas Boehler 272*a1a3b679SAndreas Boehler $result = 0; 273*a1a3b679SAndreas Boehler 274*a1a3b679SAndreas Boehler $callBack = function() use (&$result) { 275*a1a3b679SAndreas Boehler 276*a1a3b679SAndreas Boehler $result++; 277*a1a3b679SAndreas Boehler 278*a1a3b679SAndreas Boehler }; 279*a1a3b679SAndreas Boehler 280*a1a3b679SAndreas Boehler $ee = new EventEmitter(); 281*a1a3b679SAndreas Boehler $ee->once('foo', $callBack); 282*a1a3b679SAndreas Boehler 283*a1a3b679SAndreas Boehler $ee->emit('foo'); 284*a1a3b679SAndreas Boehler $ee->emit('foo'); 285*a1a3b679SAndreas Boehler 286*a1a3b679SAndreas Boehler $this->assertEquals(1, $result); 287*a1a3b679SAndreas Boehler 288*a1a3b679SAndreas Boehler } 289*a1a3b679SAndreas Boehler 290*a1a3b679SAndreas Boehler /** 291*a1a3b679SAndreas Boehler * @depends testCancelEvent 292*a1a3b679SAndreas Boehler */ 293*a1a3b679SAndreas Boehler function testPriorityOnce() { 294*a1a3b679SAndreas Boehler 295*a1a3b679SAndreas Boehler $argResult = 0; 296*a1a3b679SAndreas Boehler 297*a1a3b679SAndreas Boehler $ee = new EventEmitter(); 298*a1a3b679SAndreas Boehler $ee->once('foo', function($arg) use (&$argResult) { 299*a1a3b679SAndreas Boehler 300*a1a3b679SAndreas Boehler $argResult = 1; 301*a1a3b679SAndreas Boehler return false; 302*a1a3b679SAndreas Boehler 303*a1a3b679SAndreas Boehler }); 304*a1a3b679SAndreas Boehler $ee->once('foo', function($arg) use (&$argResult) { 305*a1a3b679SAndreas Boehler 306*a1a3b679SAndreas Boehler $argResult = 2; 307*a1a3b679SAndreas Boehler return false; 308*a1a3b679SAndreas Boehler 309*a1a3b679SAndreas Boehler }, 1); 310*a1a3b679SAndreas Boehler 311*a1a3b679SAndreas Boehler $this->assertFalse( 312*a1a3b679SAndreas Boehler $ee->emit('foo', ['bar']) 313*a1a3b679SAndreas Boehler ); 314*a1a3b679SAndreas Boehler 315*a1a3b679SAndreas Boehler $this->assertEquals(2, $argResult); 316*a1a3b679SAndreas Boehler 317*a1a3b679SAndreas Boehler } 318*a1a3b679SAndreas Boehler} 319