diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2014-12-23 15:36:55 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2014-12-23 15:36:55 +0100 |
commit | 40330bf4927b5b9bcfcfe5833f13d575c1ee18d4 (patch) | |
tree | 5400cce05ffb1f1ab54d2a4832a1f8e068278a2f /tests | |
parent | ddcb42271f569f1f5c5ef71ba7413c57bb13cef3 (diff) | |
parent | f1951237653ffbbf7fd75f815f401783658cec5e (diff) | |
download | nextcloud-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.php | 45 | ||||
-rw-r--r-- | tests/lib/appframework/utility/SimpleContainerTest.php | 167 |
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' + ); + } + + +} |