diff options
author | icewind1991 <icewind1991@gmail.com> | 2013-07-10 10:38:28 -0700 |
---|---|---|
committer | icewind1991 <icewind1991@gmail.com> | 2013-07-10 10:38:28 -0700 |
commit | d134ba9a82a904ba317d4a6d9a75e46ab9249ddc (patch) | |
tree | 2ffada42661f96e0e5413af29ca21d3b77d25c89 /tests | |
parent | e2a5af4b9edb5cc15285c747e739ec1d58220613 (diff) | |
parent | 4a4e139c8391986ce54585f3292f3c2e40dd624d (diff) | |
download | nextcloud-server-d134ba9a82a904ba317d4a6d9a75e46ab9249ddc.tar.gz nextcloud-server-d134ba9a82a904ba317d4a6d9a75e46ab9249ddc.zip |
Merge pull request #3978 from owncloud/forwarding-emitter
add forwarding emitter for agregating multiple emitters
Diffstat (limited to 'tests')
-rw-r--r-- | tests/lib/hooks/forwardingemitter.php | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/tests/lib/hooks/forwardingemitter.php b/tests/lib/hooks/forwardingemitter.php new file mode 100644 index 00000000000..decf6bb354c --- /dev/null +++ b/tests/lib/hooks/forwardingemitter.php @@ -0,0 +1,74 @@ +<?php +/** + * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\Hooks; +use OC\Hooks\PublicEmitter; + +class DummyForwardingEmitter extends \OC\Hooks\ForwardingEmitter { + public function emitEvent($scope, $method, $arguments = array()) { + $this->emit($scope, $method, $arguments); + } + + /** + * @param \OC\Hooks\Emitter $emitter + */ + public function forward($emitter) { + parent::forward($emitter); + } +} + +/** + * Class ForwardingEmitter + * + * allows forwarding all listen calls to other emitters + * + * @package OC\Hooks + */ +class ForwardingEmitter extends BasicEmitter { + public function testSingleForward() { + $baseEmitter = new PublicEmitter(); + $forwardingEmitter = new DummyForwardingEmitter(); + $forwardingEmitter->forward($baseEmitter); + $hookCalled = false; + $forwardingEmitter->listen('Test', 'test', function () use (&$hookCalled) { + $hookCalled = true; + }); + $baseEmitter->emit('Test', 'test'); + $this->assertTrue($hookCalled); + } + + public function testMultipleForwards() { + $baseEmitter1 = new PublicEmitter(); + $baseEmitter2 = new PublicEmitter(); + $forwardingEmitter = new DummyForwardingEmitter(); + $forwardingEmitter->forward($baseEmitter1); + $forwardingEmitter->forward($baseEmitter2); + $hookCalled = 0; + $forwardingEmitter->listen('Test', 'test1', function () use (&$hookCalled) { + $hookCalled++; + }); + $forwardingEmitter->listen('Test', 'test2', function () use (&$hookCalled) { + $hookCalled++; + }); + $baseEmitter1->emit('Test', 'test1'); + $baseEmitter1->emit('Test', 'test2'); + $this->assertEquals(2, $hookCalled); + } + + public function testForwardExistingHooks() { + $baseEmitter = new PublicEmitter(); + $forwardingEmitter = new DummyForwardingEmitter(); + $hookCalled = false; + $forwardingEmitter->listen('Test', 'test', function () use (&$hookCalled) { + $hookCalled = true; + }); + $forwardingEmitter->forward($baseEmitter); + $baseEmitter->emit('Test', 'test'); + $this->assertTrue($hookCalled); + } +} |