summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/testcase.php93
-rw-r--r--tests/index.php79
-rw-r--r--tests/lib/filesystem.php31
-rw-r--r--tests/templates/index.php11
4 files changed, 214 insertions, 0 deletions
diff --git a/lib/testcase.php b/lib/testcase.php
new file mode 100644
index 00000000000..19494dc2f19
--- /dev/null
+++ b/lib/testcase.php
@@ -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
index 00000000000..5e0dbc2c838
--- /dev/null
+++ b/tests/index.php
@@ -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
index 00000000000..a1ded471a65
--- /dev/null
+++ b/tests/lib/filesystem.php
@@ -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
index 00000000000..b8d3dac0666
--- /dev/null
+++ b/tests/templates/index.php
@@ -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