You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
postfixadmin/tests/simpletest/eclipse.php

183 lines
4.5 KiB
PHP

<?php
/**
* base include file for eclipse plugin
* @package SimpleTest
* @subpackage Eclipse
* @version $Id: eclipse.php,v 1.11 2006/12/10 00:38:30 stevenbalthazor Exp $
*/
/**#@+
* simpletest include files
*/
include_once 'unit_tester.php';
include_once 'test_case.php';
include_once 'invoker.php';
include_once 'socket.php';
include_once 'mock_objects.php';
/**#@-*/
/**
* base reported class for eclipse plugin
* @package SimpleTest
* @subpackage Eclipse
*/
class EclipseReporter extends SimpleScorer {
function EclipseReporter(&$listener,$cc=false){
$this->_listener = &$listener;
$this->SimpleScorer();
$this->_case = "";
$this->_group = "";
$this->_method = "";
$this->_cc = $cc;
$this->_error = false;
$this->_fail = false;
}
function getDumper() {
return new SimpleDumper();
}
function &createListener($port,$host="127.0.0.1"){
$tmplistener = & new SimpleSocket($host,$port,5);
return $tmplistener;
}
function &createInvoker(&$invoker){
$eclinvoker = & new EclipseInvoker( $invoker, $this->_listener);
return $eclinvoker;
}
function escapeVal($val){
$needle = array("\\","\"","/","\b","\f","\n","\r","\t");
$replace = array('\\\\','\"','\/','\b','\f','\n','\r','\t');
return str_replace($needle,$replace,$val);
}
function paintPass($message){
//get the first passing item -- so that clicking the test item goes to first pass
if (!$this->_pass){
$this->_message = $this->escapeVal($message);
}
$this->_pass = true;
}
function paintFail($message){
//only get the first failure or error
if (!$this->_fail && !$this->_error){
$this->_fail = true;
$this->_message = $this->escapeVal($message);
$this->_listener->write('{status:"fail",message:"'.$this->_message.'",group:"'.$this->_group.'",case:"'.$this->_case.'",method:"'.$this->_method.'"}');
}
}
function paintError($message){
//only get the first failure or error
if (!$this->_fail && !$this->_error){
$this->_error = true;
$this->_message = $this->escapeVal($message);
$this->_listener->write('{status:"error",message:"'.$this->_message.'",group:"'.$this->_group.'",case:"'.$this->_case.'",method:"'.$this->_method.'"}');
}
}
function paintHeader($method){
}
function paintFooter($method){
}
function paintMethodStart($method) {
$this->_pass = false;
$this->_fail = false;
$this->_error = false;
$this->_method = $this->escapeVal($method);
}
function paintMethodEnd($method){
if ($this->_fail || $this->_error || !$this->_pass){
//do nothing
}else{
//this ensures we only get one message per method that passes
$this->_listener->write('{status:"pass",message:"'.$this->_message.'",group:"'.$this->_group.'",case:"'.$this->_case.'",method:"'.$this->_method.'"}');
}
}
function paintCaseStart($case){
$this->_case = $this->escapeVal($case);
}
function paintCaseEnd($case){
$this->_case = "";
}
function paintGroupStart($group,$size){
$this->_group = $this->escapeVal($group);
if ($this->_cc){
if (extension_loaded('xdebug')){
xdebug_start_code_coverage(XDEBUG_CC_UNUSED| XDEBUG_CC_DEAD_CODE);
}
}
}
function paintGroupEnd($group){
$this->_group = "";
$cc = "";
if ($this->_cc){
if (extension_loaded('xdebug')){
$arrfiles = xdebug_get_code_coverage();
xdebug_stop_code_coverage();
$thisdir = dirname(__FILE__);
$thisdirlen = strlen($thisdir);
foreach ($arrfiles as $index=>$file){
if (substr($index,0,$thisdirlen)===$thisdir){
continue;
}
$lcnt = 0;
$ccnt = 0;
foreach ($file as $line){
if ($line == -2){
continue;
}
$lcnt++;
if ($line==1){
$ccnt++;
}
}
if ($lcnt > 0){
$cc.=round(($ccnt/$lcnt)*100,2).'%';
}else{
$cc.="0.00%";
}
$cc.= "\t".$index."\n";
}
}
}
$this->_listener->write('{status:"coverage",message:"'.EclipseReporter::escapeVal($cc).'"}');
}
}
/**
* base invoker class for eclipse plugin
* @package SimpleTest
* @subpackage Eclipse
*/
class EclipseInvoker extends SimpleInvokerDecorator{
function EclipseInvoker(&$invoker,&$listener) {
$this->_listener = &$listener;
$this->SimpleInvokerDecorator($invoker);
}
function before($method){
ob_start();
$this->_invoker->before($method);
}
function after($method) {
$this->_invoker->after($method);
$output = ob_get_contents();
ob_end_clean();
if ($output!==""){
$result = $this->_listener->write('{status:"info",message:"'.EclipseReporter::escapeVal($output).'"}');
}
}
}
?>