summaryrefslogtreecommitdiffstats
path: root/tests/lib/Hooks
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@gmx.de>2016-05-20 15:38:20 +0200
committerThomas Müller <DeepDiver1975@users.noreply.github.com>2016-05-20 15:38:20 +0200
commit94ad54ec9b96d41a614fbbad4a97b34c41a6901f (patch)
treef3eb7cdda2704aaf0cd59d58efe66bcbd34cb67d /tests/lib/Hooks
parent2ef751b1ec28f7b5c7113af60ec8c9fa0ae1cf87 (diff)
downloadnextcloud-server-94ad54ec9b96d41a614fbbad4a97b34c41a6901f.tar.gz
nextcloud-server-94ad54ec9b96d41a614fbbad4a97b34c41a6901f.zip
Move tests/ to PSR-4 (#24731)
* Move a-b to PSR-4 * Move c-d to PSR-4 * Move e+g to PSR-4 * Move h-l to PSR-4 * Move m-r to PSR-4 * Move s-u to PSR-4 * Move files/ to PSR-4 * Move remaining tests to PSR-4 * Remove Test\ from old autoloader
Diffstat (limited to 'tests/lib/Hooks')
-rw-r--r--tests/lib/Hooks/BasicEmitterTest.php280
-rw-r--r--tests/lib/Hooks/ForwardingEmitterTest.php74
-rw-r--r--tests/lib/Hooks/LegacyEmitterTest.php57
3 files changed, 411 insertions, 0 deletions
diff --git a/tests/lib/Hooks/BasicEmitterTest.php b/tests/lib/Hooks/BasicEmitterTest.php
new file mode 100644
index 00000000000..2e6bd8100e3
--- /dev/null
+++ b/tests/lib/Hooks/BasicEmitterTest.php
@@ -0,0 +1,280 @@
+<?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;
+
+/**
+ * Class DummyEmitter
+ *
+ * class to make BasicEmitter::emit publicly available
+ *
+ * @package Test\Hooks
+ */
+class DummyEmitter extends \OC\Hooks\BasicEmitter {
+ public function emitEvent($scope, $method, $arguments = array()) {
+ $this->emit($scope, $method, $arguments);
+ }
+}
+
+/**
+ * Class EmittedException
+ *
+ * a dummy exception so we can check if an event is emitted
+ *
+ * @package Test\Hooks
+ */
+class EmittedException extends \Exception {
+}
+
+class BasicEmitterTest extends \Test\TestCase {
+ /**
+ * @var \OC\Hooks\Emitter $emitter
+ */
+ protected $emitter;
+
+ protected function setUp() {
+ parent::setUp();
+ $this->emitter = new DummyEmitter();
+ }
+
+ public function nonStaticCallBack() {
+ throw new EmittedException;
+ }
+
+ public static function staticCallBack() {
+ throw new EmittedException;
+ }
+
+ /**
+ * @expectedException \Test\Hooks\EmittedException
+ */
+ public function testAnonymousFunction() {
+ $this->emitter->listen('Test', 'test', function () {
+ throw new EmittedException;
+ });
+ $this->emitter->emitEvent('Test', 'test');
+ }
+
+ /**
+ * @expectedException \Test\Hooks\EmittedException
+ */
+ public function testStaticCallback() {
+ $this->emitter->listen('Test', 'test', array('\Test\Hooks\BasicEmitterTest', 'staticCallBack'));
+ $this->emitter->emitEvent('Test', 'test');
+ }
+
+ /**
+ * @expectedException \Test\Hooks\EmittedException
+ */
+ public function testNonStaticCallback() {
+ $this->emitter->listen('Test', 'test', array($this, 'nonStaticCallBack'));
+ $this->emitter->emitEvent('Test', 'test');
+ }
+
+ public function testOnlyCallOnce() {
+ $count = 0;
+ $listener = function () use (&$count) {
+ $count++;
+ };
+ $this->emitter->listen('Test', 'test', $listener);
+ $this->emitter->listen('Test', 'test', $listener);
+ $this->emitter->emitEvent('Test', 'test');
+ $this->assertEquals(1, $count, 'Listener called an invalid number of times (' . $count . ') expected 1');
+ }
+
+ public function testDifferentMethods() {
+ $count = 0;
+ $listener = function () use (&$count) {
+ $count++;
+ };
+ $this->emitter->listen('Test', 'test', $listener);
+ $this->emitter->listen('Test', 'foo', $listener);
+ $this->emitter->emitEvent('Test', 'test');
+ $this->emitter->emitEvent('Test', 'foo');
+ $this->assertEquals(2, $count, 'Listener called an invalid number of times (' . $count . ') expected 2');
+ }
+
+ public function testDifferentScopes() {
+ $count = 0;
+ $listener = function () use (&$count) {
+ $count++;
+ };
+ $this->emitter->listen('Test', 'test', $listener);
+ $this->emitter->listen('Bar', 'test', $listener);
+ $this->emitter->emitEvent('Test', 'test');
+ $this->emitter->emitEvent('Bar', 'test');
+ $this->assertEquals(2, $count, 'Listener called an invalid number of times (' . $count . ') expected 2');
+ }
+
+ public function testDifferentCallbacks() {
+ $count = 0;
+ $listener1 = function () use (&$count) {
+ $count++;
+ };
+ $listener2 = function () use (&$count) {
+ $count++;
+ };
+ $this->emitter->listen('Test', 'test', $listener1);
+ $this->emitter->listen('Test', 'test', $listener2);
+ $this->emitter->emitEvent('Test', 'test');
+ $this->assertEquals(2, $count, 'Listener called an invalid number of times (' . $count . ') expected 2');
+ }
+
+ /**
+ * @expectedException \Test\Hooks\EmittedException
+ */
+ public function testArguments() {
+ $this->emitter->listen('Test', 'test', function ($foo, $bar) {
+ if ($foo == 'foo' and $bar == 'bar') {
+ throw new EmittedException;
+ }
+ });
+ $this->emitter->emitEvent('Test', 'test', array('foo', 'bar'));
+ }
+
+ /**
+ * @expectedException \Test\Hooks\EmittedException
+ */
+ public function testNamedArguments() {
+ $this->emitter->listen('Test', 'test', function ($foo, $bar) {
+ if ($foo == 'foo' and $bar == 'bar') {
+ throw new EmittedException;
+ }
+ });
+ $this->emitter->emitEvent('Test', 'test', array('foo' => 'foo', 'bar' => 'bar'));
+ }
+
+ public function testRemoveAllSpecified() {
+ $listener = function () {
+ throw new EmittedException;
+ };
+ $this->emitter->listen('Test', 'test', $listener);
+ $this->emitter->removeListener('Test', 'test', $listener);
+ $this->emitter->emitEvent('Test', 'test');
+
+ $this->assertTrue(true);
+ }
+
+ public function testRemoveWildcardListener() {
+ $listener1 = function () {
+ throw new EmittedException;
+ };
+ $listener2 = function () {
+ throw new EmittedException;
+ };
+ $this->emitter->listen('Test', 'test', $listener1);
+ $this->emitter->listen('Test', 'test', $listener2);
+ $this->emitter->removeListener('Test', 'test');
+ $this->emitter->emitEvent('Test', 'test');
+
+ $this->assertTrue(true);
+ }
+
+ public function testRemoveWildcardMethod() {
+ $listener = function () {
+ throw new EmittedException;
+ };
+ $this->emitter->listen('Test', 'test', $listener);
+ $this->emitter->listen('Test', 'foo', $listener);
+ $this->emitter->removeListener('Test', null, $listener);
+ $this->emitter->emitEvent('Test', 'test');
+ $this->emitter->emitEvent('Test', 'foo');
+
+ $this->assertTrue(true);
+ }
+
+ public function testRemoveWildcardScope() {
+ $listener = function () {
+ throw new EmittedException;
+ };
+ $this->emitter->listen('Test', 'test', $listener);
+ $this->emitter->listen('Bar', 'test', $listener);
+ $this->emitter->removeListener(null, 'test', $listener);
+ $this->emitter->emitEvent('Test', 'test');
+ $this->emitter->emitEvent('Bar', 'test');
+
+ $this->assertTrue(true);
+ }
+
+ public function testRemoveWildcardScopeAndMethod() {
+ $listener = function () {
+ throw new EmittedException;
+ };
+ $this->emitter->listen('Test', 'test', $listener);
+ $this->emitter->listen('Test', 'foo', $listener);
+ $this->emitter->listen('Bar', 'foo', $listener);
+ $this->emitter->removeListener(null, null, $listener);
+ $this->emitter->emitEvent('Test', 'test');
+ $this->emitter->emitEvent('Test', 'foo');
+ $this->emitter->emitEvent('Bar', 'foo');
+
+ $this->assertTrue(true);
+ }
+
+ /**
+ * @expectedException \Test\Hooks\EmittedException
+ */
+ public function testRemoveKeepOtherCallback() {
+ $listener1 = function () {
+ throw new EmittedException;
+ };
+ $listener2 = function () {
+ throw new EmittedException;
+ };
+ $this->emitter->listen('Test', 'test', $listener1);
+ $this->emitter->listen('Test', 'test', $listener2);
+ $this->emitter->removeListener('Test', 'test', $listener1);
+ $this->emitter->emitEvent('Test', 'test');
+
+ $this->assertTrue(true);
+ }
+
+ /**
+ * @expectedException \Test\Hooks\EmittedException
+ */
+ public function testRemoveKeepOtherMethod() {
+ $listener = function () {
+ throw new EmittedException;
+ };
+ $this->emitter->listen('Test', 'test', $listener);
+ $this->emitter->listen('Test', 'foo', $listener);
+ $this->emitter->removeListener('Test', 'foo', $listener);
+ $this->emitter->emitEvent('Test', 'test');
+
+ $this->assertTrue(true);
+ }
+
+ /**
+ * @expectedException \Test\Hooks\EmittedException
+ */
+ public function testRemoveKeepOtherScope() {
+ $listener = function () {
+ throw new EmittedException;
+ };
+ $this->emitter->listen('Test', 'test', $listener);
+ $this->emitter->listen('Bar', 'test', $listener);
+ $this->emitter->removeListener('Bar', 'test', $listener);
+ $this->emitter->emitEvent('Test', 'test');
+
+ $this->assertTrue(true);
+ }
+
+ /**
+ * @expectedException \Test\Hooks\EmittedException
+ */
+ public function testRemoveNonExistingName() {
+ $listener = function () {
+ throw new EmittedException;
+ };
+ $this->emitter->listen('Test', 'test', $listener);
+ $this->emitter->removeListener('Bar', 'test', $listener);
+ $this->emitter->emitEvent('Test', 'test');
+
+ $this->assertTrue(true);
+ }
+}
diff --git a/tests/lib/Hooks/ForwardingEmitterTest.php b/tests/lib/Hooks/ForwardingEmitterTest.php
new file mode 100644
index 00000000000..ea8ee5c4121
--- /dev/null
+++ b/tests/lib/Hooks/ForwardingEmitterTest.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(\OC\Hooks\Emitter $emitter) {
+ parent::forward($emitter);
+ }
+}
+
+/**
+ * Class ForwardingEmitter
+ *
+ * allows forwarding all listen calls to other emitters
+ *
+ * @package OC\Hooks
+ */
+class ForwardingEmitterTest extends BasicEmitterTest {
+ 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);
+ }
+}
diff --git a/tests/lib/Hooks/LegacyEmitterTest.php b/tests/lib/Hooks/LegacyEmitterTest.php
new file mode 100644
index 00000000000..60a29f23245
--- /dev/null
+++ b/tests/lib/Hooks/LegacyEmitterTest.php
@@ -0,0 +1,57 @@
+<?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;
+
+/**
+ * Class DummyLegacyEmitter
+ *
+ * class to make LegacyEmitter::emit publicly available
+ *
+ * @package Test\Hooks
+ */
+class DummyLegacyEmitter extends \OC\Hooks\LegacyEmitter {
+ public function emitEvent($scope, $method, $arguments = array()) {
+ $this->emit($scope, $method, $arguments);
+ }
+}
+
+class LegacyEmitterTest extends BasicEmitterTest {
+
+ //we can't use exceptions here since OC_Hooks catches all exceptions
+ private static $emitted = false;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->emitter = new DummyLegacyEmitter();
+ self::$emitted = false;
+ \OC_Hook::clear('Test','test');
+ }
+
+ public static function staticLegacyCallBack() {
+ self::$emitted = true;
+ }
+
+ public static function staticLegacyArgumentsCallBack($arguments) {
+ if ($arguments['foo'] == 'foo' and $arguments['bar'] == 'bar')
+ self::$emitted = true;
+ }
+
+ public function testLegacyHook() {
+ \OC_Hook::connect('Test', 'test', '\Test\Hooks\LegacyEmitterTest', 'staticLegacyCallBack');
+ $this->emitter->emitEvent('Test', 'test');
+ $this->assertEquals(true, self::$emitted);
+ }
+
+ public function testLegacyArguments() {
+ \OC_Hook::connect('Test', 'test', '\Test\Hooks\LegacyEmitterTest', 'staticLegacyArgumentsCallBack');
+ $this->emitter->emitEvent('Test', 'test', array('foo' => 'foo', 'bar' => 'bar'));
+ $this->assertEquals(true, self::$emitted);
+ }
+}