1<?php 2/* 3 * This file is part of the PHP_CodeCoverage package. 4 * 5 * (c) Sebastian Bergmann <sebastian@phpunit.de> 6 * 7 * For the full copyright and license information, please view the LICENSE 8 * file that was distributed with this source code. 9 */ 10 11/** 12 * Renders a PHP_CodeCoverage_Report_Node_Directory node. 13 * 14 * @since Class available since Release 1.1.0 15 */ 16class PHP_CodeCoverage_Report_HTML_Renderer_Directory extends PHP_CodeCoverage_Report_HTML_Renderer 17{ 18 /** 19 * @param PHP_CodeCoverage_Report_Node_Directory $node 20 * @param string $file 21 */ 22 public function render(PHP_CodeCoverage_Report_Node_Directory $node, $file) 23 { 24 $template = new Text_Template($this->templatePath . 'directory.html', '{{', '}}'); 25 26 $this->setCommonTemplateVariables($template, $node); 27 28 $items = $this->renderItem($node, true); 29 30 foreach ($node->getDirectories() as $item) { 31 $items .= $this->renderItem($item); 32 } 33 34 foreach ($node->getFiles() as $item) { 35 $items .= $this->renderItem($item); 36 } 37 38 $template->setVar( 39 array( 40 'id' => $node->getId(), 41 'items' => $items 42 ) 43 ); 44 45 $template->renderTo($file); 46 } 47 48 /** 49 * @param PHP_CodeCoverage_Report_Node $item 50 * @param bool $total 51 * @return string 52 */ 53 protected function renderItem(PHP_CodeCoverage_Report_Node $item, $total = false) 54 { 55 $data = array( 56 'numClasses' => $item->getNumClassesAndTraits(), 57 'numTestedClasses' => $item->getNumTestedClassesAndTraits(), 58 'numMethods' => $item->getNumMethods(), 59 'numTestedMethods' => $item->getNumTestedMethods(), 60 'linesExecutedPercent' => $item->getLineExecutedPercent(false), 61 'linesExecutedPercentAsString' => $item->getLineExecutedPercent(), 62 'numExecutedLines' => $item->getNumExecutedLines(), 63 'numExecutableLines' => $item->getNumExecutableLines(), 64 'testedMethodsPercent' => $item->getTestedMethodsPercent(false), 65 'testedMethodsPercentAsString' => $item->getTestedMethodsPercent(), 66 'testedClassesPercent' => $item->getTestedClassesAndTraitsPercent(false), 67 'testedClassesPercentAsString' => $item->getTestedClassesAndTraitsPercent() 68 ); 69 70 if ($total) { 71 $data['name'] = 'Total'; 72 } else { 73 if ($item instanceof PHP_CodeCoverage_Report_Node_Directory) { 74 $data['name'] = sprintf( 75 '<a href="%s/index.html">%s</a>', 76 $item->getName(), 77 $item->getName() 78 ); 79 80 $data['icon'] = '<span class="glyphicon glyphicon-folder-open"></span> '; 81 } else { 82 $data['name'] = sprintf( 83 '<a href="%s.html">%s</a>', 84 $item->getName(), 85 $item->getName() 86 ); 87 88 $data['icon'] = '<span class="glyphicon glyphicon-file"></span> '; 89 } 90 } 91 92 return $this->renderItemTemplate( 93 new Text_Template($this->templatePath . 'directory_item.html', '{{', '}}'), 94 $data 95 ); 96 } 97} 98