aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMichael Gapczynski <mtgap@owncloud.com>2013-05-23 10:25:12 -0400
committerMichael Gapczynski <mtgap@owncloud.com>2013-05-23 10:25:12 -0400
commit30330b4343b5bca82b95d9df4a13651c8e91063d (patch)
tree68979fb843a309e43803935f53afe74fab2844e4 /tests
parent3b6d850e592bbc6db9d67d25ee700c0730c84376 (diff)
parent698862519de6b364da6c20a97d8c546204e80f3d (diff)
downloadnextcloud-server-30330b4343b5bca82b95d9df4a13651c8e91063d.tar.gz
nextcloud-server-30330b4343b5bca82b95d9df4a13651c8e91063d.zip
Merge branch 'master' into move-storages
Conflicts: tests/lib/files/view.php
Diffstat (limited to 'tests')
-rw-r--r--tests/lib/files/cache/cache.php17
-rw-r--r--tests/lib/files/cache/watcher.php10
-rw-r--r--tests/lib/files/view.php36
-rw-r--r--tests/lib/hooks/basicemitter.php261
-rw-r--r--tests/lib/hooks/legacyemitter.php55
-rw-r--r--tests/lib/vcategories.php11
6 files changed, 382 insertions, 8 deletions
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
index 4051a6e234b..1612a673838 100644
--- a/tests/lib/files/cache/cache.php
+++ b/tests/lib/files/cache/cache.php
@@ -211,6 +211,23 @@ class Cache extends \PHPUnit_Framework_TestCase {
$this->assertEquals(array($storageId, 'foo'), \OC\Files\Cache\Cache::getById($id));
}
+ function testStorageMTime() {
+ $data = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
+ $this->cache->put('foo', $data);
+ $cachedData = $this->cache->get('foo');
+ $this->assertEquals($data['mtime'], $cachedData['storage_mtime']);//if no storage_mtime is saved, mtime should be used
+
+ $this->cache->put('foo', array('storage_mtime' => 30));//when setting storage_mtime, mtime is also set
+ $cachedData = $this->cache->get('foo');
+ $this->assertEquals(30, $cachedData['storage_mtime']);
+ $this->assertEquals(30, $cachedData['mtime']);
+
+ $this->cache->put('foo', array('mtime' => 25));//setting mtime does not change storage_mtime
+ $cachedData = $this->cache->get('foo');
+ $this->assertEquals(30, $cachedData['storage_mtime']);
+ $this->assertEquals(25, $cachedData['mtime']);
+ }
+
function testLongId() {
$storage = new LongId(array());
$cache = $storage->getCache();
diff --git a/tests/lib/files/cache/watcher.php b/tests/lib/files/cache/watcher.php
index 8ef6ab44d10..e43c86ed438 100644
--- a/tests/lib/files/cache/watcher.php
+++ b/tests/lib/files/cache/watcher.php
@@ -35,7 +35,7 @@ class Watcher extends \PHPUnit_Framework_TestCase {
$updater = $storage->getWatcher();
//set the mtime to the past so it can detect an mtime change
- $cache->put('', array('mtime' => 10));
+ $cache->put('', array('storage_mtime' => 10));
$this->assertTrue($cache->inCache('folder/bar.txt'));
$this->assertTrue($cache->inCache('folder/bar2.txt'));
@@ -47,14 +47,14 @@ class Watcher extends \PHPUnit_Framework_TestCase {
$cachedData = $cache->get('bar.test');
$this->assertEquals(3, $cachedData['size']);
- $cache->put('bar.test', array('mtime' => 10));
+ $cache->put('bar.test', array('storage_mtime' => 10));
$storage->file_put_contents('bar.test', 'test data');
$updater->checkUpdate('bar.test');
$cachedData = $cache->get('bar.test');
$this->assertEquals(9, $cachedData['size']);
- $cache->put('folder', array('mtime' => 10));
+ $cache->put('folder', array('storage_mtime' => 10));
$storage->unlink('folder/bar2.txt');
$updater->checkUpdate('folder');
@@ -69,7 +69,7 @@ class Watcher extends \PHPUnit_Framework_TestCase {
$updater = $storage->getWatcher();
//set the mtime to the past so it can detect an mtime change
- $cache->put('', array('mtime' => 10));
+ $cache->put('', array('storage_mtime' => 10));
$storage->unlink('foo.txt');
$storage->rename('folder', 'foo.txt');
@@ -85,7 +85,7 @@ class Watcher extends \PHPUnit_Framework_TestCase {
$updater = $storage->getWatcher();
//set the mtime to the past so it can detect an mtime change
- $cache->put('foo.txt', array('mtime' => 10));
+ $cache->put('foo.txt', array('storage_mtime' => 10));
$storage->unlink('foo.txt');
$storage->rename('folder', 'foo.txt');
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index a51d99e793d..01f9a9cca11 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -7,6 +7,12 @@
namespace Test\Files;
+class TemporaryNoTouch extends \OC\Files\Storage\Temporary {
+ public function touch($path, $mtime = null) {
+ return false;
+ }
+}
+
class View extends \PHPUnit_Framework_TestCase {
/**
* @var \OC\Files\Storage\Storage[] $storages;
@@ -220,7 +226,7 @@ class View extends \PHPUnit_Framework_TestCase {
$cachedData = $rootView->getFileInfo('foo.txt');
$this->assertEquals(16, $cachedData['size']);
- $rootView->putFileInfo('foo.txt', array('mtime' => 10));
+ $rootView->putFileInfo('foo.txt', array('storage_mtime' => 10));
$storage1->file_put_contents('foo.txt', 'foo');
clearstatcache();
@@ -265,12 +271,36 @@ class View extends \PHPUnit_Framework_TestCase {
$this->assertTrue($rootView->file_exists('anotherfolder/bar.txt'));
}
+ function testTouch() {
+ $storage = $this->getTestStorage(true, '\Test\Files\TemporaryNoTouch');
+
+ \OC\Files\Filesystem::mount($storage, array(), '/');
+
+ $rootView = new \OC\Files\View('');
+ $oldCachedData = $rootView->getFileInfo('foo.txt');
+
+ $rootView->touch('foo.txt', 500);
+
+ $cachedData = $rootView->getFileInfo('foo.txt');
+ $this->assertEquals(500, $cachedData['mtime']);
+ $this->assertEquals($oldCachedData['storage_mtime'], $cachedData['storage_mtime']);
+
+ $rootView->putFileInfo('foo.txt', array('storage_mtime' => 1000)); //make sure the watcher detects the change
+ $rootView->file_put_contents('foo.txt', 'asd');
+ $cachedData = $rootView->getFileInfo('foo.txt');
+ $this->assertGreaterThanOrEqual($cachedData['mtime'], $oldCachedData['mtime']);
+ $this->assertEquals($cachedData['storage_mtime'], $cachedData['mtime']);
+ }
+
/**
* @param bool $scan
* @return \OC\Files\Storage\Storage
*/
- private function getTestStorage($scan = true) {
- $storage = new \OC\Files\Storage\Temporary(array());
+ private function getTestStorage($scan = true, $class = '\OC\Files\Storage\Temporary') {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ */
+ $storage = new $class(array());
$textData = "dummy file data\n";
$imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
$storage->mkdir('folder');
diff --git a/tests/lib/hooks/basicemitter.php b/tests/lib/hooks/basicemitter.php
new file mode 100644
index 00000000000..f48dc53c563
--- /dev/null
+++ b/tests/lib/hooks/basicemitter.php
@@ -0,0 +1,261 @@
+<?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 BasicEmitter extends \PHPUnit_Framework_TestCase {
+ /**
+ * @var \OC\Hooks\Emitter $emitter
+ */
+ protected $emitter;
+
+ public function 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\BasicEmitter', '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');
+ }
+
+ 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');
+ }
+
+ 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');
+ }
+
+ 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');
+ }
+
+ 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');
+ }
+
+ /**
+ * @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');
+ }
+
+ /**
+ * @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');
+ }
+
+ /**
+ * @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');
+ }
+
+ /**
+ * @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');
+ }
+}
diff --git a/tests/lib/hooks/legacyemitter.php b/tests/lib/hooks/legacyemitter.php
new file mode 100644
index 00000000000..a7bed879a72
--- /dev/null
+++ b/tests/lib/hooks/legacyemitter.php
@@ -0,0 +1,55 @@
+<?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 LegacyEmitter extends BasicEmitter {
+
+ //we can't use exceptions here since OC_Hooks catches all exceptions
+ private static $emitted = false;
+
+ public function 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\LegacyEmitter', 'staticLegacyCallBack');
+ $this->emitter->emitEvent('Test', 'test');
+ $this->assertEquals(true, self::$emitted);
+ }
+
+ public function testLegacyArguments() {
+ \OC_Hook::connect('Test', 'test', '\Test\Hooks\LegacyEmitter', 'staticLegacyArgumentsCallBack');
+ $this->emitter->emitEvent('Test', 'test', array('foo' => 'foo', 'bar' => 'bar'));
+ $this->assertEquals(true, self::$emitted);
+ }
+}
diff --git a/tests/lib/vcategories.php b/tests/lib/vcategories.php
index e79dd49870c..df5f600f20d 100644
--- a/tests/lib/vcategories.php
+++ b/tests/lib/vcategories.php
@@ -81,6 +81,17 @@ class Test_VCategories extends PHPUnit_Framework_TestCase {
}
+ public function testrenameCategory() {
+ $defcategories = array('Friends', 'Family', 'Wrok', 'Other');
+ $catmgr = new OC_VCategories($this->objectType, $this->user, $defcategories);
+
+ $this->assertTrue($catmgr->rename('Wrok', 'Work'));
+ $this->assertTrue($catmgr->hasCategory('Work'));
+ $this->assertFalse($catmgr->hasCategory('Wrok'));
+ $this->assertFalse($catmgr->rename('Wrok', 'Work'));
+
+ }
+
public function testAddToCategory() {
$objids = array(1, 2, 3, 4, 5, 6, 7, 8, 9);