diff --git a/lib/testcase.php b/lib/testcase.php new file mode 100644 index 0000000000..19494dc2f1 --- /dev/null +++ b/lib/testcase.php @@ -0,0 +1,93 @@ +. +* +*/ + + +/** + * 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 0000000000..5e0dbc2c83 --- /dev/null +++ b/tests/index.php @@ -0,0 +1,79 @@ +. +* +*/ + + +/** + * 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 0000000000..a1ded471a6 --- /dev/null +++ b/tests/lib/filesystem.php @@ -0,0 +1,31 @@ +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 0000000000..b8d3dac066 --- /dev/null +++ b/tests/templates/index.php @@ -0,0 +1,11 @@ +$results):?> +

+ + \ No newline at end of file