Mistpark/simplepie/test/unit_test/unit_test.php
2010-07-05 03:34:42 -07:00

126 lines
2.3 KiB
PHP

<?php
/**
* @package Unit Test
* @author Geoffrey Sneddon <geoffers@gmail.com>
* @version $Id: unit_test.php 6 2007-04-23 15:15:40Z gsnedders $
* @license http://www.opensource.org/licenses/zlib-license.php zlib/libpng license
* @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License
* @copyright Copyright © 2007, Geoffrey Sneddon
*/
class Unit_Test
{
var $passed;
var $failed;
var $success_callback;
var $fail_callback;
function Unit_Test($success, $fail)
{
$this->success_callback = $success;
$this->fail_callback = $fail;
}
function do_test($callback, $dir, $vars = 'data')
{
$files = $this->get_files($dir);
foreach ($files as $file)
{
$istest = true;
$debug = false;
include $file;
if ($istest)
{
$args = compact($vars);
$result = call_user_func_array($callback, $args);
$this->run_test($file, $result === $expected);
if ($debug)
{
var_dump($file, $args, $result, $expected);
}
}
}
}
function run_test($file, $success)
{
if ($success)
{
$this->passed++;
call_user_func($this->success_callback, $file);
}
else
{
$this->failed++;
call_user_func($this->fail_callback, $file);
}
}
function passed()
{
return $this->passed;
}
function failed()
{
return $this->failed;
}
function total()
{
return $this->passed + $this->failed;
}
function get_files($dir)
{
static $extension = null;
if (!$extension)
{
$extension = pathinfo(__FILE__, PATHINFO_EXTENSION);
}
$files = array();
if ($dh = opendir($dir))
{
while (($file = readdir($dh)) !== false)
{
if (substr($file, 0, 1) != '.')
{
$files[] = "$dir/$file";
}
}
closedir($dh);
usort($files, array(&$this, 'sort_files'));
foreach ($files as $file)
{
if (is_dir($file))
{
array_splice($files, array_search($file, $files), 0, $this->get_files($file));
}
if (pathinfo($file, PATHINFO_EXTENSION) != $extension)
{
unset($files[array_search($file, $files)]);
}
}
}
return $files;
}
function sort_files(&$a, &$b)
{
if (is_dir($a) && is_dir($b) || !(is_dir($a) || is_dir($b)))
{
return strnatcasecmp($a, $b);
}
else if (is_dir($a))
{
return 1;
}
else if (is_dir($b))
{
return -1;
}
}
}
?>