]> source.dussan.org Git - nextcloud-server.git/commitdiff
test case library and start of filesystem test
authorRobin Appelman <icewind1991@gmail.com>
Sat, 11 Jun 2011 22:58:47 +0000 (00:58 +0200)
committerRobin Appelman <icewind1991@gmail.com>
Sat, 11 Jun 2011 23:06:27 +0000 (01:06 +0200)
lib/testcase.php [new file with mode: 0644]
tests/index.php [new file with mode: 0644]
tests/lib/filesystem.php [new file with mode: 0644]
tests/templates/index.php [new file with mode: 0644]

diff --git a/lib/testcase.php b/lib/testcase.php
new file mode 100644 (file)
index 0000000..19494dc
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+
+/**
+* ownCloud
+*
+* @author Robin Appelman
+* @copyright 2010 Robin Appelman icewind1991@gmailc.om
+*
+* 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/>.
+*
+*/
+
+
+/**
+ * base class for unit tests
+ */
+class OC_TestCase{
+       private $tests; //array of all tests in this test case
+       
+       public function __construct(){
+               $this->tests=array();
+               $this->results=array();
+               $functions=get_class_methods(get_class($this));
+               $exclude=get_class_methods('OC_TestCase');
+               foreach($functions as $function){
+                       if(array_search($function,$exclude)===false){
+                               $this->tests[]=$function;
+                       }
+               }
+       }
+       
+       public function getTests(){
+               return $this->tests;
+       }
+       
+       /**
+        * function that gets called before each test
+        */
+       private function setup(){
+       }
+
+       /**
+        * function that gets called after each test
+        */
+       private function tearDown(){
+       }
+       
+       /**
+        * check if the result equals the expected result
+        * @param mixed $expected the expected result
+        * @param mixed $result the actual result
+        * @param string $error (optional) the error message to display if the result isn't expected
+        */
+       protected function assertEquals($expected,$result,$error=''){
+               if($expected!==$result){
+                       if($expected===true){
+                               $expected='true';
+                       }
+                       if($expected===false){
+                               $expected='false';
+                       }
+                       if($result===true){
+                               $result='true';
+                       }
+                       if($result===false){
+                               $result='false';
+                       }
+                       if($error==''){
+                               $error="Unexpected result, expected '$expected' but was '$result'";
+                       }
+                       throw new Exception($error);
+               }
+       }
+
+       /**
+        * fail the test
+        * @param string $error the error message
+        */
+       protected function fail($error){
+               throw new Exception($error);
+       }
+}
\ No newline at end of file
diff --git a/tests/index.php b/tests/index.php
new file mode 100644 (file)
index 0000000..5e0dbc2
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+/**
+* ownCloud
+*
+* @author Robin Appelman
+* @copyright 2010 Robin Appelman icewind1991@gmailc.om
+*
+* 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/>.
+*
+*/
+
+
+/**
+ * run all test cases
+ */
+ $RUNTIME_NOSETUPFS=true;
+require_once('../lib/base.php');
+require_once('testcase.php');
+require_once('template.php');
+
+$testCases=loadFiles(__DIR__,array('index.php','templates'));
+
+$testResults=array();
+foreach($testCases as $testCaseClass){
+       $testCase=new $testCaseClass();
+       $results=array();
+       foreach($testCase->getTests() as $test){
+               $testCase->setup();
+               try{
+                       $testCase->$test();
+                       $results[$test]='Ok';
+               }catch(Exception $e){
+                       $results[$test]=$e->getMessage();
+               }
+               $testCase->tearDown();
+       }
+       $testResults[$testCaseClass]=$results;
+}
+
+$tmpl = new OC_TEMPLATE( 'tests', 'index');
+$tmpl->assign('tests',$testResults);
+$tmpl->printPage();
+
+/**
+ * recursively load all files in a folder
+ * @param string $path
+ * @param array $exclude list of files to exclude
+ */
+function loadFiles($path,$exclude=false){
+       $results=array();
+       if(!$exclude){
+               $exclude=array();
+       }
+       $dh=opendir($path);
+       while($file=readdir($dh)){
+               if($file!='.' && $file!='..' && array_search($file,$exclude)===false){
+                       if(is_file($path.'/'.$file)){
+                               $result=require_once($path.'/'.$file);
+                               $results[]=$result;
+                       }else{
+                               $subResults=loadFiles($path.'/'.$file);
+                               $results=array_merge($results,$subResults);
+                       }
+               }
+       }
+       return $results;
+}
+?>
\ No newline at end of file
diff --git a/tests/lib/filesystem.php b/tests/lib/filesystem.php
new file mode 100644 (file)
index 0000000..a1ded47
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+class OC_FILEYSYSTEM_Test extends OC_TestCase
+{
+       public function setup(){
+               OC_UTIL::setupFS('testuser','testcase');
+       }
+       
+       public function isDir(){
+               $this->assertEquals(true, OC_FILESYSTEM::is_dir('/'),'Root is not a directory');
+       }
+       
+       public function fileExists(){
+               $this->assertEquals(false, OC_FILESYSTEM::file_exists('/dummy'),'Unexpected result with non-existing file');
+               OC_FILESYSTEM::file_put_contents('/dummy','foo');
+               $this->assertEquals(true, OC_FILESYSTEM::file_exists('/dummy'),'Unexpected result with existing file');
+       }
+
+       public function mkdir(){
+               OC_FILESYSTEM::mkdir('/dummy');
+               $this->assertEquals(true, OC_FILESYSTEM::file_exists('/dummy'),'No such file or directory after creating folder');
+               $this->assertEquals(true, OC_FILESYSTEM::is_dir('/dummy'),'File created instead of filder');
+       }
+       
+       public function tearDown(){
+               OC_FILESYSTEM::chroot('');
+               OC_FILESYSTEM::delTree('/testuser');
+               OC_UTIL::tearDownFS();
+       }
+}
+return 'OC_FILEYSYSTEM_Test';
+?>
\ No newline at end of file
diff --git a/tests/templates/index.php b/tests/templates/index.php
new file mode 100644 (file)
index 0000000..b8d3dac
--- /dev/null
@@ -0,0 +1,11 @@
+<?php foreach($_['tests'] as $name=>$results):?>
+       <h2><?php echo $name;?></h2>
+       <ul>
+               <?php foreach($results as $test=>$result):?>
+                       <li>
+                               <b><?php echo $test;?></b>
+                               <?php echo $result;?>
+                       </il>
+               <?php endforeach ?>
+       </ul>
+<?php endforeach ?>
\ No newline at end of file