Show coverage percentages in table of contents

Summary:
Rough cut -- this needs style / color / tooltips, etc. Show raw coverage and "modified coverage" (coverage on lines you touched) in the table of contents.

https://secure.phabricator.com/file/data/id3apce5p5gevkee6tg2/PHID-FILE-kxcxlbsej454t4xiht2o/Screen_Shot_2012-03-12_at_3.30.30_PM.png

Test Plan: See screenshot above.

Reviewers: tuomaspelkonen, btrahan, zeeg

Reviewed By: tuomaspelkonen

CC: aran, epriestley

Maniphest Tasks: T965

Differential Revision: https://secure.phabricator.com/D1864
This commit is contained in:
epriestley
2012-03-12 17:06:55 -07:00
parent 09c1bd34f1
commit 85bdcbdd43
8 changed files with 217 additions and 56 deletions

View File

@@ -26,6 +26,7 @@ final class DifferentialDiffTableOfContentsView extends AphrontView {
private $renderURI = '/differential/changeset/';
private $revisionID;
private $whitespace;
private $unitTestData;
public function setChangesets($changesets) {
$this->changesets = $changesets;
@@ -42,6 +43,11 @@ final class DifferentialDiffTableOfContentsView extends AphrontView {
return $this;
}
public function setUnitTestData($unit_test_data) {
$this->unitTestData = $unit_test_data;
return $this;
}
public function setUser(PhabricatorUser $user) {
$this->user = $user;
return $this;
@@ -74,6 +80,23 @@ final class DifferentialDiffTableOfContentsView extends AphrontView {
$rows = array();
$coverage = array();
if ($this->unitTestData) {
$coverage_by_file = array();
foreach ($this->unitTestData as $result) {
$test_coverage = idx($result, 'coverage');
if (!$test_coverage) {
continue;
}
foreach ($test_coverage as $file => $results) {
$coverage_by_file[$file][] = $results;
}
}
foreach ($coverage_by_file as $file => $coverages) {
$coverage[$file] = ArcanistUnitTestResult::mergeCoverage($coverages);
}
}
$changesets = $this->changesets;
$paths = array();
foreach ($changesets as $changeset) {
@@ -129,6 +152,20 @@ final class DifferentialDiffTableOfContentsView extends AphrontView {
? null
: '<span title="Properties Changed">M</span>';
$fname = $changeset->getFilename();
$cov = $this->renderCoverage($coverage, $fname);
if ($cov === null) {
$mcov = $cov = '<em>-</em>';
} else {
$mcov = phutil_render_tag(
'div',
array(
'id' => 'differential-mcoverage-'.md5($fname),
'class' => 'differential-mcoverage-loading',
),
'Loading...');
}
$rows[] =
'<tr>'.
'<td class="differential-toc-char" title='.$chartitle.'>'.$char.
@@ -136,6 +173,8 @@ final class DifferentialDiffTableOfContentsView extends AphrontView {
'<td class="differential-toc-prop">'.$pchar.'</td>'.
'<td class="differential-toc-ftype">'.$desc.'</td>'.
'<td class="differential-toc-file">'.$link.$lines.'</td>'.
'<td class="differential-toc-cov">'.$cov.'</td>'.
'<td class="differential-toc-mcov">'.$mcov.'</td>'.
'</tr>';
if ($meta) {
$rows[] =
@@ -172,11 +211,36 @@ final class DifferentialDiffTableOfContentsView extends AphrontView {
$editor_link.
'<h1>Table of Contents</h1>'.
'<table>'.
'<tr>'.
'<th></th>'.
'<th></th>'.
'<th></th>'.
'<th>Path</th>'.
'<th class="differential-toc-cov">Coverage (All)</th>'.
'<th class="differential-toc-mcov">Coverage (Touched)</th>'.
'</tr>'.
implode("\n", $rows).
'</table>'.
'</div>';
}
private function renderCoverage(array $coverage, $file) {
$info = idx($coverage, $file);
if (!$info) {
return null;
}
$not_covered = substr_count($info, 'U');
$covered = substr_count($info, 'C');
if (!$not_covered && !$covered) {
return null;
}
return sprintf('%d%%', 100 * ($covered / ($covered + $not_covered)));
}
private function renderChangesetLink(DifferentialChangeset $changeset) {
$display_file = $changeset->getDisplayFilename();