From 82fdf3a0de78bb0e1e48c0e440dd62be70aec945 Mon Sep 17 00:00:00 2001 From: Gabriel Zerbib Date: Thu, 3 Apr 2014 12:17:03 +0300 Subject: [PATCH] Display optional project name instead of absolute root in HTML renderer. Fixes #235 in sebastianbergmann/php-code-coverage Indent with space phpdoc --- src/CodeCoverage/Report/HTML.php | 27 +++++++++++-- src/CodeCoverage/Report/HTML/Renderer.php | 38 ++++++++++++++++++- .../Report/HTML/Renderer/Dashboard.php | 4 +- .../Report/HTML/Renderer/File.php | 8 +++- 4 files changed, 68 insertions(+), 9 deletions(-) diff --git a/src/CodeCoverage/Report/HTML.php b/src/CodeCoverage/Report/HTML.php index bbfa2e87f..e7bfc92c7 100644 --- a/src/CodeCoverage/Report/HTML.php +++ b/src/CodeCoverage/Report/HTML.php @@ -76,18 +76,31 @@ class PHP_CodeCoverage_Report_HTML */ private $highLowerBound; + /** + * @var string + */ + private $absoluteRoot; + /** + * @var string + */ + private $projectPrefix; + /** * Constructor. * * @param integer $lowUpperBound * @param integer $highLowerBound * @param string $generator + * @param string $absoluteRoot Optional: root path of the sources under analysis + * @param string $projectPrefix Optional: name of project, to display as replacement for absoluteRoot */ - public function __construct($lowUpperBound = 50, $highLowerBound = 90, $generator = '') + public function __construct($lowUpperBound = 50, $highLowerBound = 90, $generator = '', $absoluteRoot = null, $projectPrefix = null) { $this->generator = $generator; $this->highLowerBound = $highLowerBound; $this->lowUpperBound = $lowUpperBound; + $this->absoluteRoot = $absoluteRoot; + $this->projectPrefix = $projectPrefix; $this->templatePath = sprintf( '%s%sHTML%sRenderer%sTemplate%s', @@ -121,7 +134,9 @@ public function process(PHP_CodeCoverage $coverage, $target) $this->generator, $date, $this->lowUpperBound, - $this->highLowerBound + $this->highLowerBound, + $this->absoluteRoot, + $this->projectPrefix ); $directory = new PHP_CodeCoverage_Report_HTML_Renderer_Directory( @@ -129,7 +144,9 @@ public function process(PHP_CodeCoverage $coverage, $target) $this->generator, $date, $this->lowUpperBound, - $this->highLowerBound + $this->highLowerBound, + $this->absoluteRoot, + $this->projectPrefix ); $file = new PHP_CodeCoverage_Report_HTML_Renderer_File( @@ -137,7 +154,9 @@ public function process(PHP_CodeCoverage $coverage, $target) $this->generator, $date, $this->lowUpperBound, - $this->highLowerBound + $this->highLowerBound, + $this->absoluteRoot, + $this->projectPrefix ); $directory->render($report, $target . 'index.html'); diff --git a/src/CodeCoverage/Report/HTML/Renderer.php b/src/CodeCoverage/Report/HTML/Renderer.php index b0861e5ff..e8b055e3d 100644 --- a/src/CodeCoverage/Report/HTML/Renderer.php +++ b/src/CodeCoverage/Report/HTML/Renderer.php @@ -88,6 +88,16 @@ abstract class PHP_CodeCoverage_Report_HTML_Renderer */ protected $version; + /** + * @var string + */ + protected $absoluteRoot; + + /** + * @var string + */ + protected $projectPrefix; + /** * Constructor. * @@ -96,8 +106,10 @@ abstract class PHP_CodeCoverage_Report_HTML_Renderer * @param string $date * @param integer $lowUpperBound * @param integer $highLowerBound + * @param string $absoluteRoot Optional: root path of the sources under analysis + * @param string $projectPrefix Optional: name of project, to display as replacement for absoluteRoot */ - public function __construct($templatePath, $generator, $date, $lowUpperBound, $highLowerBound) + public function __construct($templatePath, $generator, $date, $lowUpperBound, $highLowerBound, $absoluteRoot = null, $projectPrefix = null) { $version = new SebastianBergmann\Version('3.0', __DIR__); @@ -107,6 +119,8 @@ public function __construct($templatePath, $generator, $date, $lowUpperBound, $h $this->lowUpperBound = $lowUpperBound; $this->highLowerBound = $highLowerBound; $this->version = $version->getVersion(); + $this->absoluteRoot = $absoluteRoot; + $this->projectPrefix = $projectPrefix; } /** @@ -251,7 +265,7 @@ protected function getActiveBreadcrumb(PHP_CodeCoverage_Report_Node $node) { $buffer = sprintf( '
  • %s
  • ' . "\n", - $node->getName() + $this->stripProjectPrefixFromNodeName($node) ); if ($node instanceof PHP_CodeCoverage_Report_Node_Directory) { @@ -261,6 +275,26 @@ protected function getActiveBreadcrumb(PHP_CodeCoverage_Report_Node $node) return $buffer; } + /** + * An evolved version of PHP_CodeCoverage_Report_Node::getName(), which replaces + * the optional absoluteRoot prefix in the node's full path, with specified + * project name. + * @param PHP_CodeCoverage_Report_Node $node + * @return string + */ + protected function stripProjectPrefixFromNodeName(PHP_CodeCoverage_Report_Node $node) + { + if ($this->absoluteRoot) { + return preg_replace( + '#^' . $this->absoluteRoot . '#', + $this->projectPrefix, + $node->getName()); + } + else + return $node->getName(); + } + + /** * @param PHP_CodeCoverage_Report_Node $node * @param $pathToRoot diff --git a/src/CodeCoverage/Report/HTML/Renderer/Dashboard.php b/src/CodeCoverage/Report/HTML/Renderer/Dashboard.php index 64ee80e89..6268127fc 100644 --- a/src/CodeCoverage/Report/HTML/Renderer/Dashboard.php +++ b/src/CodeCoverage/Report/HTML/Renderer/Dashboard.php @@ -328,7 +328,9 @@ protected function getActiveBreadcrumb(PHP_CodeCoverage_Report_Node $node) '
  • %s
  • ' . "\n" . '
  • (Dashboard)
  • ' . "\n", $node->getId(), - $node->getName() + //Do not always print the full absolute path of $node here: + //optionally replace prefix + $this->stripProjectPrefixFromNodeName($node) ); } } diff --git a/src/CodeCoverage/Report/HTML/Renderer/File.php b/src/CodeCoverage/Report/HTML/Renderer/File.php index b8a119655..525edaae6 100644 --- a/src/CodeCoverage/Report/HTML/Renderer/File.php +++ b/src/CodeCoverage/Report/HTML/Renderer/File.php @@ -86,15 +86,19 @@ class PHP_CodeCoverage_Report_HTML_Renderer_File extends PHP_CodeCoverage_Report * @param string $date * @param integer $lowUpperBound * @param integer $highLowerBound + * @param string $absoluteRoot Optional: see parent + * @param string $projectPrefix Optional: see parent */ - public function __construct($templatePath, $generator, $date, $lowUpperBound, $highLowerBound) + public function __construct($templatePath, $generator, $date, $lowUpperBound, $highLowerBound, $absoluteRoot = null, $projectPrefix = null) { parent::__construct( $templatePath, $generator, $date, $lowUpperBound, - $highLowerBound + $highLowerBound, + $absoluteRoot, + $projectPrefix ); }