]+)~', $s, $matches); foreach ($matches[1] as $val) { if ($val{0} == "/") { array_pop($return); } elseif (substr($val, -1) != "/") { $return[] = $val; } } return $return; } if (!extension_loaded("xdebug")) { echo "

Xdebug has to be enabled.

\n"; } if ($_GET["start"]) { $_SESSION["coverage"] = array(); xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE); include "./index.php"; header("Location: ."); exit; } if ($_GET["filename"]) { $filename = basename($_GET["filename"]); $coverage = $_SESSION["coverage"][realpath($filename)]; $file = explode("
", highlight_file($filename, true)); unset($prev_color); $s = ""; for ($l=0; $l <= count($file); $l++) { $line = $file[$l]; $color = "#C0FFC0"; // tested switch ($coverage[$l+1]) { case -1: $color = "#FFC0C0"; break; // untested case -2: $color = "Silver"; break; // dead code case null: $color = ""; break; // not executable } if (!isset($prev_color)) { $prev_color = $color; } if ($prev_color != $color || !isset($line)) { echo "" . $s; $open_tags = xhtml_open_tags($s); foreach (array_reverse($open_tags) as $tag) { echo ""; } echo "\n"; $s = ($open_tags ? "<" . implode("><", $open_tags) . ">" : ""); $prev_color = $color; } $s .= "$line
\n"; } } else { echo "\n"; foreach (glob("*.php") as $filename) { if ($filename{0} != "_") { $coverage = $_SESSION["coverage"][realpath($filename)]; echo "\n"; } } echo "
" . round(100 - 100 * $ratio); } else { echo "#FFC0C0;'>0"; } echo "%$filename
\n"; echo "

Start new coverage (requires Xdebug)

\n"; }