]+)~', $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";
} elseif ($_GET["coverage"] === "0") {
mysql_query("DROP TABLE IF EXISTS adminer_test.coverage");
mysql_query("CREATE TABLE adminer_test.coverage (
filename varchar(100) NOT NULL,
coverage_serialize mediumtext NOT NULL,
PRIMARY KEY (filename)
)");
echo "Coverage started.
\n";
} elseif (preg_match('~^(adminer|editor)/(include/)?[-_.a-z0-9]+$~i', $_GET["coverage"])) {
// highlight single file
$filename = $_GET["coverage"];
$row = mysql_fetch_row(mysql_query("SELECT coverage_serialize FROM adminer_test.coverage WHERE filename = '" . mysql_real_escape_string(realpath($filename)) . "'"));
$cov = ($row ? unserialize($row[0]) : array());
$file = explode("
", highlight_file($filename, true));
unset($prev_color);
$s = "";
for ($l=0; $l <= count($file); $l++) {
$line = $file[$l];
$color = "#C0FFC0"; // tested
switch ($cov[$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 "" . preg_replace('~ .*~', '', $tag) . ">";
}
echo "
\n";
$s = ($open_tags ? "<" . implode("><", $open_tags) . ">" : "");
$prev_color = $color;
}
$s .= "$line
\n";
}
} else {
// display list of files
$result = mysql_query("SELECT filename, coverage_serialize FROM adminer_test.coverage");
if ($result) {
echo "\n";
$coverage = array();
while ($row = mysql_fetch_assoc($result)) {
$coverage[$row["filename"]] = unserialize($row["coverage_serialize"]);
}
mysql_free_result($result);
foreach (array_merge(glob("adminer/*.php"), glob("adminer/include/*.php"), glob("editor/*.php"), glob("editor/include/*.php")) as $filename) {
$cov = $coverage[realpath($filename)];
$ratio = 0;
if (is_array($cov)) {
$values = array_count_values($cov);
$ratio = round(100 - 100 * $values[-1] / count($cov));
}
echo "$ratio% | $filename |
\n";
}
echo "
\n";
}
echo "Start new coverage
\n";
}
?>