* * * * * * * * * * * * * * * * * * * * 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" . 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 .= '