Xdebug+Geshiでコードカバレッジ

http://d.hatena.ne.jp/bobchin/20050805 で試そうと思っていたことを試してみる。
環境は相変わらずWindowsで、PHP 4.4.0です。

Xdebugの設定

zend_extension_ts="d:/php/extensions/xdebug-4.4dev-2.0dev.dll"

テスト環境

テスト対象クラス

<?php

class SampleObject {

    var $_str;
    
    function SampleObject($str = "")
    {
        $this->_str = $str;
    }
    
    function output()
    {
        print $this->_str . "\n";
    }
    
    function setStr($str)
    {
        $this->_str = $str;
    }
    
    function getStr()
    {
        return $this->_str;
    }
    
}

?>

テストクラス

<?php

require_once('simpletest/unit_tester.php');
require_once('simpletest/reporter.php');
require_once 'SampleObject.php';

class SampleObjectTest extends UnitTestCase {
    
    var $_obj;
    
    function SampleObjectTest()
    {
        $this->UnitTestCase('SampleObjectTest');
    }

    function setUp()
    {
        $this->_obj = new SampleObject("テスト");
    }
    
    function tearDown()
    {
        unset($this->_obj);
    }
    

    function testOutput()
    {
    }
    
    function testSetStr()
    {
    }
    
    function testGetStr()
    {
        $result = $this->_obj->getStr();
        $expect = "テスト";
        $this->assertEqual($result, $expect);
    }
}

?>

テスト実行クラス

<?php

require_once 'SampleObjectTest.php';
require_once('geshi/geshi.php');

xdebug_start_code_coverage();

$test  = new SampleObjectTest();
if (php_sapi_name() == "cli") {
    $reporter = new TextReporter();
} else {
    $reporter = new HtmlReporter();
}
$test->run($reporter);

$coverage = xdebug_get_code_coverage();
xdebug_stop_code_coverage();

$file_to_print = realpath('SampleObject.php');
$geshi = new GeSHi(file_get_contents($file_to_print), 'php', 'geshi/geshi');
$geshi->highlight_lines_extra(array_keys($coverage[$file_to_print]));
echo $geshi->parse_code();

?>