*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* In case of error:
*
*
*
*/
class MY_Unit_Test extends CI_Unit_Test {
var $titles = array ();
var $coverage;
protected $CI;
var $persistent_coverage_data = "coverage.data";
/**
* Constructor
*
* @access public
* @param
* array the array of loggable items
* @param
* string the log file path
* @param
* string the error threshold
* @param
* string the date formatting codes
*/
public function __construct() {
parent::__construct();
$str = "\n" . '
';
$str .= '{rows}';
$str .= "\n" . '
';
$str_rows = "\n\t" . '';
$str_rows .= "\n\t\t" . '{item} | ';
$str_rows .= "\n\t\t" . '{result} | ';
$str_rows .= "\n\t" . '
';
// xdebug_start_code_coverage();
$this->set_template($str);
// // Start coverage,
// $filter = new PHP_CodeCoverage_Filter;
// $filter->addDirectoryToBlacklist('system');
// $filter->addDirectoryToBlacklist('application/logs');
// $filter->addFileToBlacklist('application/libraries/DX_Auth.php');
// $filter->addFileToBlacklist('application/libraries/DX_Auth_Event.php');
// $this->coverage = new PHP_CodeCoverage(null, $filter);
// // if a coverage context is found reload it in order to merge
// // coverage sessions
// if (file_exists ($this->persistent_coverage_data)) {
// $s = file_get_contents($this->persistent_coverage_data);
// $this->coverage = unserialize($s);
// }
// $this->coverage->start("Unit tests suite");
}
/**
* Reset coverage
*/
public function reset_coverage() {
// $this->coverage = new PHP_CodeCoverage;
// if (file_exists ($this->persistent_coverage_data)) {
// unlink($this->persistent_coverage_data);
// }
// $this->coverage->start("Unit tests suite");
}
/**
* Save the coverage context
*/
public function save_coverage() {
// $this->coverage->stop();
// $s = serialize($this->coverage);
// file_put_contents($this->persistent_coverage_data, $s);
}
/**
* Display a title when testing is active
*/
public function header($str, $level = "4") {
$balise = "h" . $level;
$count = count($this->results);
$titles [$count] = array (
'header' => $str,
'level' => $level
);
return ($this->active) ? "<$balise>$str$balise>" . br() : "";
}
/**
* Run the tests
*
* Runs the supplied tests
*
* @access public
* @param
* mixed
* @param
* mixed
* @param
* string
* @return string TODO escape the parameters so the generated XML is still correct
*/
function run($test, $expected = TRUE, $test_name = 'undefined', $notes = '') {
if (! $this->active)
return "";
$res = parent::run($test, $expected, $test_name, $notes);
$count = count($this->results);
$result = $this->results [$count - 1] [0] ['result'];
if ($result == "failed")
$this->results [$count - 1] [0] ['notes'] .= " result=" . $test . ", expected=" . $expected;
return $res;
}
/**
* Generate a backtrace
*
* This lets us show file names and line numbers
*
* @access private
* @return array
*/
function _backtrace($level = 2) {
if (function_exists('debug_backtrace')) {
$back = debug_backtrace();
$file = (! isset($back [$level] ['file'])) ? '' : $back [$level] ['file'];
$line = (! isset($back [$level] ['line'])) ? '' : $back [$level] ['line'];
return array (
'file' => $file,
'line' => $line
);
}
return array (
'file' => 'Unknown',
'line' => 'Unknown'
);
}
/**
* cli_result
*
* Display the result in ASCII
*/
public function cli_result() {
$results = $this->result();
$passed = $failed = 0;
foreach ( $results as $row ) {
$result = $row ['Result'];
$name = $row ['Test Name'];
$file = $row ['File Name'];
$line = $row ['Line Number'];
$notes = isset($row ['Notes']) ? $row ['Notes'] : "";
$result = $row ['Result'];
if (preg_match('/.*\/application\/(.*)/', $file, $matches)) {
$file = $matches [1];
}
$str = sprintf("%-40s %-40s %6s %s", $file . ":" . $line, $name, $result, $notes);
echo $str . PHP_EOL;
if ($result == "Passed") {
$passed ++;
} else {
$failed ++;
}
}
$count = $passed + $failed;
echo "Tests total=$count, passed=$passed, failed=$failed" . PHP_EOL;
}
/**
* Generate coverage results
*/
public function coverage_result($type = "clover", $filename = "clover.xml") {
// $this->coverage->stop();
// # echo "generating $filename\n";
// $writer = new PHP_CodeCoverage_Report_Clover;
// $writer->process($this->coverage, $filename);
// # echo "generating HTML\n";
// $writer = new PHP_CodeCoverage_Report_HTML;
// $writer->process($this->coverage, 'code-coverage-report');
}
/**
*
* @param unknown $filename
* @param string $suitename
*/
public function XML_result($filename, $suitename = "Test suite") {
$results = $this->result();
$passed = $failed = 0;
foreach ( $results as $row ) {
$result = $row ['Result'];
$name = $row ['Test Name'];
$file = $row ['File Name'];
$line = $row ['Line Number'];
$notes = isset($row ['Notes']) ? $row ['Notes'] : "";
$result = $row ['Result'];
if (preg_match('/.*\/application\/(.*)/', $file, $matches)) {
$file = $matches [1];
}
$str = sprintf("%-40s %-40s %6s %s", $file . ":" . $line, $name, $result, $notes);
// echo $str .PHP_EOL;
if ($result == "Passed") {
$passed ++;
} else {
$failed ++;
}
}
$count = $passed + $failed;
// echo "Tests total=$count, passed=$passed, failed=$failed" . PHP_EOL;
$xml = '' . PHP_EOL;
$xml .= '