scratch

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 114  →  ?path2? @ 115
/vendor/evenement/evenement/tests/Evenement/Tests/EventEmitterTest.php
@@ -0,0 +1,235 @@
<?php
 
/*
* This file is part of Evenement.
*
* (c) Igor Wiedler <igor@wiedler.ch>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
 
namespace Evenement\Tests;
 
use Evenement\EventEmitter;
 
class EventEmitterTest extends \PHPUnit_Framework_TestCase
{
private $emitter;
 
public function setUp()
{
$this->emitter = new EventEmitter();
}
 
public function testAddListenerWithLambda()
{
$this->emitter->on('foo', function () {});
}
 
public function testAddListenerWithMethod()
{
$listener = new Listener();
$this->emitter->on('foo', [$listener, 'onFoo']);
}
 
public function testAddListenerWithStaticMethod()
{
$this->emitter->on('bar', ['Evenement\Tests\Listener', 'onBar']);
}
 
public function testAddListenerWithInvalidListener()
{
try {
$this->emitter->on('foo', 'not a callable');
$this->fail();
} catch (\Exception $e) {
}
}
 
public function testOnce()
{
$listenerCalled = 0;
 
$this->emitter->once('foo', function () use (&$listenerCalled) {
$listenerCalled++;
});
 
$this->assertSame(0, $listenerCalled);
 
$this->emitter->emit('foo');
 
$this->assertSame(1, $listenerCalled);
 
$this->emitter->emit('foo');
 
$this->assertSame(1, $listenerCalled);
}
 
public function testOnceWithArguments()
{
$capturedArgs = [];
 
$this->emitter->once('foo', function ($a, $b) use (&$capturedArgs) {
$capturedArgs = array($a, $b);
});
 
$this->emitter->emit('foo', array('a', 'b'));
 
$this->assertSame(array('a', 'b'), $capturedArgs);
}
 
public function testEmitWithoutArguments()
{
$listenerCalled = false;
 
$this->emitter->on('foo', function () use (&$listenerCalled) {
$listenerCalled = true;
});
 
$this->assertSame(false, $listenerCalled);
$this->emitter->emit('foo');
$this->assertSame(true, $listenerCalled);
}
 
public function testEmitWithOneArgument()
{
$test = $this;
 
$listenerCalled = false;
 
$this->emitter->on('foo', function ($value) use (&$listenerCalled, $test) {
$listenerCalled = true;
 
$test->assertSame('bar', $value);
});
 
$this->assertSame(false, $listenerCalled);
$this->emitter->emit('foo', ['bar']);
$this->assertSame(true, $listenerCalled);
}
 
public function testEmitWithTwoArguments()
{
$test = $this;
 
$listenerCalled = false;
 
$this->emitter->on('foo', function ($arg1, $arg2) use (&$listenerCalled, $test) {
$listenerCalled = true;
 
$test->assertSame('bar', $arg1);
$test->assertSame('baz', $arg2);
});
 
$this->assertSame(false, $listenerCalled);
$this->emitter->emit('foo', ['bar', 'baz']);
$this->assertSame(true, $listenerCalled);
}
 
public function testEmitWithNoListeners()
{
$this->emitter->emit('foo');
$this->emitter->emit('foo', ['bar']);
$this->emitter->emit('foo', ['bar', 'baz']);
}
 
public function testEmitWithTwoListeners()
{
$listenersCalled = 0;
 
$this->emitter->on('foo', function () use (&$listenersCalled) {
$listenersCalled++;
});
 
$this->emitter->on('foo', function () use (&$listenersCalled) {
$listenersCalled++;
});
 
$this->assertSame(0, $listenersCalled);
$this->emitter->emit('foo');
$this->assertSame(2, $listenersCalled);
}
 
public function testRemoveListenerMatching()
{
$listenersCalled = 0;
 
$listener = function () use (&$listenersCalled) {
$listenersCalled++;
};
 
$this->emitter->on('foo', $listener);
$this->emitter->removeListener('foo', $listener);
 
$this->assertSame(0, $listenersCalled);
$this->emitter->emit('foo');
$this->assertSame(0, $listenersCalled);
}
 
public function testRemoveListenerNotMatching()
{
$listenersCalled = 0;
 
$listener = function () use (&$listenersCalled) {
$listenersCalled++;
};
 
$this->emitter->on('foo', $listener);
$this->emitter->removeListener('bar', $listener);
 
$this->assertSame(0, $listenersCalled);
$this->emitter->emit('foo');
$this->assertSame(1, $listenersCalled);
}
 
public function testRemoveAllListenersMatching()
{
$listenersCalled = 0;
 
$this->emitter->on('foo', function () use (&$listenersCalled) {
$listenersCalled++;
});
 
$this->emitter->removeAllListeners('foo');
 
$this->assertSame(0, $listenersCalled);
$this->emitter->emit('foo');
$this->assertSame(0, $listenersCalled);
}
 
public function testRemoveAllListenersNotMatching()
{
$listenersCalled = 0;
 
$this->emitter->on('foo', function () use (&$listenersCalled) {
$listenersCalled++;
});
 
$this->emitter->removeAllListeners('bar');
 
$this->assertSame(0, $listenersCalled);
$this->emitter->emit('foo');
$this->assertSame(1, $listenersCalled);
}
 
public function testRemoveAllListenersWithoutArguments()
{
$listenersCalled = 0;
 
$this->emitter->on('foo', function () use (&$listenersCalled) {
$listenersCalled++;
});
 
$this->emitter->on('bar', function () use (&$listenersCalled) {
$listenersCalled++;
});
 
$this->emitter->removeAllListeners();
 
$this->assertSame(0, $listenersCalled);
$this->emitter->emit('foo');
$this->emitter->emit('bar');
$this->assertSame(0, $listenersCalled);
}
}
/vendor/evenement/evenement/tests/Evenement/Tests/Listener.php
@@ -0,0 +1,23 @@
<?php
 
/*
* This file is part of Evenement.
*
* (c) Igor Wiedler <igor@wiedler.ch>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
 
namespace Evenement\Tests;
 
class Listener
{
public function onFoo()
{
}
 
public static function onBar()
{
}
}