summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2014-12-23 15:36:55 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2014-12-23 15:36:55 +0100
commit40330bf4927b5b9bcfcfe5833f13d575c1ee18d4 (patch)
tree5400cce05ffb1f1ab54d2a4832a1f8e068278a2f /tests
parentddcb42271f569f1f5c5ef71ba7413c57bb13cef3 (diff)
parentf1951237653ffbbf7fd75f815f401783658cec5e (diff)
downloadnextcloud-server-40330bf4927b5b9bcfcfe5833f13d575c1ee18d4.tar.gz
nextcloud-server-40330bf4927b5b9bcfcfe5833f13d575c1ee18d4.zip
Merge pull request #12830 from owncloud/intelligent-container
Intelligent container
Diffstat (limited to 'tests')
-rw-r--r--tests/lib/appframework/AppTest.php45
-rw-r--r--tests/lib/appframework/utility/SimpleContainerTest.php167
2 files changed, 212 insertions, 0 deletions
diff --git a/tests/lib/appframework/AppTest.php b/tests/lib/appframework/AppTest.php
index 86128db118f..e60f3439f23 100644
--- a/tests/lib/appframework/AppTest.php
+++ b/tests/lib/appframework/AppTest.php
@@ -24,6 +24,17 @@
namespace OC\AppFramework;
+function rrmdir($directory) {
+ $files = array_diff(scandir($directory), array('.','..'));
+ foreach ($files as $file) {
+ if (is_dir($directory . '/' . $file)) {
+ rrmdir($directory . '/' . $file);
+ } else {
+ unlink($directory . '/' . $file);
+ }
+ }
+ return rmdir($directory);
+}
class AppTest extends \Test\TestCase {
@@ -36,6 +47,7 @@ class AppTest extends \Test\TestCase {
private $output;
private $controllerName;
private $controllerMethod;
+ private $appPath;
protected function setUp() {
parent::setUp();
@@ -59,6 +71,17 @@ class AppTest extends \Test\TestCase {
$this->container[$this->controllerName] = $this->controller;
$this->container['Dispatcher'] = $this->dispatcher;
$this->container['urlParams'] = array();
+
+ $this->appPath = __DIR__ . '/../../../apps/namespacetestapp/appinfo';
+ $infoXmlPath = $this->appPath . '/info.xml';
+ mkdir($this->appPath, 0777, true);
+
+ $xml = '<?xml version="1.0" encoding="UTF-8"?>' .
+ '<info>' .
+ '<id>namespacetestapp</id>' .
+ '<namespace>NameSpaceTestApp</namespace>' .
+ '</info>';
+ file_put_contents($infoXmlPath, $xml);
}
@@ -77,6 +100,28 @@ class AppTest extends \Test\TestCase {
}
+ public function testBuildAppNamespace() {
+ $ns = App::buildAppNamespace('someapp');
+ $this->assertEquals('OCA\Someapp', $ns);
+ }
+
+
+ public function testBuildAppNamespaceCore() {
+ $ns = App::buildAppNamespace('someapp', 'OC\\');
+ $this->assertEquals('OC\Someapp', $ns);
+ }
+
+
+ public function testBuildAppNamespaceInfoXml() {
+ $ns = App::buildAppNamespace('namespacetestapp', 'OCA\\');
+ $this->assertEquals('OCA\NameSpaceTestApp', $ns);
+ }
+
+
+ protected function tearDown() {
+ rrmdir($this->appPath);
+ }
+
/*
FIXME: this complains about shit headers which are already sent because
of the content length. Would be cool if someone could fix this
diff --git a/tests/lib/appframework/utility/SimpleContainerTest.php b/tests/lib/appframework/utility/SimpleContainerTest.php
new file mode 100644
index 00000000000..c5c522d911f
--- /dev/null
+++ b/tests/lib/appframework/utility/SimpleContainerTest.php
@@ -0,0 +1,167 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2014 Bernhard Posselt <dev@bernhard-posselt.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace Test\AppFramework\Utility;
+
+use OC\AppFramework\Utility\SimpleContainer;
+
+
+interface TestInterface {}
+
+class ClassEmptyConstructor implements IInterfaceConstructor {}
+
+class ClassSimpleConstructor implements IInterfaceConstructor {
+ public $test;
+ public function __construct($test) {
+ $this->test = $test;
+ }
+}
+
+class ClassComplexConstructor {
+ public $class;
+ public $test;
+ public function __construct(ClassSimpleConstructor $class, $test) {
+ $this->class = $class;
+ $this->test = $test;
+ }
+}
+
+interface IInterfaceConstructor {}
+class ClassInterfaceConstructor {
+ public $class;
+ public $test;
+ public function __construct(IInterfaceConstructor $class, $test) {
+ $this->class = $class;
+ $this->test = $test;
+ }
+}
+
+
+class SimpleContainerTest extends \Test\TestCase {
+
+
+ private $container;
+
+ public function setUp() {
+ $this->container = new SimpleContainer();
+ }
+
+
+ public function testRegister() {
+ $this->container->registerParameter('test', 'abc');
+ $this->assertEquals('abc', $this->container->query('test'));
+ }
+
+
+ /**
+ * @expectedException \OCP\AppFramework\QueryException
+ */
+ public function testNothingRegistered() {
+ $this->container->query('something really hard');
+ }
+
+
+ /**
+ * @expectedException \OCP\AppFramework\QueryException
+ */
+ public function testNotAClass() {
+ $this->container->query('Test\AppFramework\Utility\TestInterface');
+ }
+
+
+ public function testNoConstructorClass() {
+ $object = $this->container->query('Test\AppFramework\Utility\ClassEmptyConstructor');
+ $this->assertTrue($object instanceof ClassEmptyConstructor);
+ }
+
+
+ public function testInstancesOnlyOnce() {
+ $object = $this->container->query('Test\AppFramework\Utility\ClassEmptyConstructor');
+ $object2 = $this->container->query('Test\AppFramework\Utility\ClassEmptyConstructor');
+ $this->assertSame($object, $object2);
+ }
+
+ public function testConstructorSimple() {
+ $this->container->registerParameter('test', 'abc');
+ $object = $this->container->query(
+ 'Test\AppFramework\Utility\ClassSimpleConstructor'
+ );
+ $this->assertTrue($object instanceof ClassSimpleConstructor);
+ $this->assertEquals('abc', $object->test);
+ }
+
+
+ public function testConstructorComplex() {
+ $this->container->registerParameter('test', 'abc');
+ $object = $this->container->query(
+ 'Test\AppFramework\Utility\ClassComplexConstructor'
+ );
+ $this->assertTrue($object instanceof ClassComplexConstructor);
+ $this->assertEquals('abc', $object->class->test);
+ $this->assertEquals('abc', $object->test);
+ }
+
+
+ public function testConstructorComplexInterface() {
+ $this->container->registerParameter('test', 'abc');
+ $this->container->registerService(
+ 'Test\AppFramework\Utility\IInterfaceConstructor', function ($c) {
+ return $c->query('Test\AppFramework\Utility\ClassSimpleConstructor');
+ });
+ $object = $this->container->query(
+ 'Test\AppFramework\Utility\ClassInterfaceConstructor'
+ );
+ $this->assertTrue($object instanceof ClassInterfaceConstructor);
+ $this->assertEquals('abc', $object->class->test);
+ $this->assertEquals('abc', $object->test);
+ }
+
+
+ public function tesOverrideService() {
+ $this->container->registerParameter('test', 'abc');
+ $this->container->registerService(
+ 'Test\AppFramework\Utility\IInterfaceConstructor', function ($c) {
+ return $c->query('Test\AppFramework\Utility\ClassSimpleConstructor');
+ });
+ $this->container->registerService(
+ 'Test\AppFramework\Utility\IInterfaceConstructor', function ($c) {
+ return $c->query('Test\AppFramework\Utility\ClassEmptyConstructor');
+ });
+ $object = $this->container->query(
+ 'Test\AppFramework\Utility\ClassInterfaceConstructor'
+ );
+ $this->assertTrue($object instanceof ClassEmptyConstructor);
+ $this->assertEquals('abc', $object->test);
+ }
+
+
+ /**
+ * @expectedException \OCP\AppFramework\QueryException
+ */
+ public function testConstructorComplexNoTestParameterFound() {
+ $object = $this->container->query(
+ 'Test\AppFramework\Utility\ClassComplexConstructor'
+ );
+ }
+
+
+}