1<?php 2/** 3 * PHP_CodeCoverage 4 * 5 * Copyright (c) 2009-2013, Sebastian Bergmann <sebastian@phpunit.de>. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * * Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 15 * * Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in 17 * the documentation and/or other materials provided with the 18 * distribution. 19 * 20 * * Neither the name of Sebastian Bergmann nor the names of his 21 * contributors may be used to endorse or promote products derived 22 * from this software without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 25 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 26 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 27 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 28 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 29 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 30 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 31 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 34 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 35 * POSSIBILITY OF SUCH DAMAGE. 36 * 37 * @category PHP 38 * @package CodeCoverage 39 * @author Sebastian Bergmann <sebastian@phpunit.de> 40 * @copyright 2009-2013 Sebastian Bergmann <sebastian@phpunit.de> 41 * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License 42 * @link http://github.com/sebastianbergmann/php-code-coverage 43 * @since File available since Release 1.1.0 44 */ 45 46/** 47 * Renders a PHP_CodeCoverage_Report_Node_Directory node. 48 * 49 * @category PHP 50 * @package CodeCoverage 51 * @author Sebastian Bergmann <sebastian@phpunit.de> 52 * @copyright 2009-2013 Sebastian Bergmann <sebastian@phpunit.de> 53 * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License 54 * @link http://github.com/sebastianbergmann/php-code-coverage 55 * @since Class available since Release 1.1.0 56 */ 57class PHP_CodeCoverage_Report_HTML_Renderer_Directory extends PHP_CodeCoverage_Report_HTML_Renderer 58{ 59 /** 60 * @param PHP_CodeCoverage_Report_Node_Directory $node 61 * @param string $file 62 */ 63 public function render(PHP_CodeCoverage_Report_Node_Directory $node, $file) 64 { 65 $template = new Text_Template($this->templatePath . 'directory.html'); 66 67 $this->setCommonTemplateVariables($template, $node); 68 69 $items = $this->renderItem($node, TRUE); 70 71 foreach ($node->getDirectories() as $item) { 72 $items .= $this->renderItem($item); 73 } 74 75 foreach ($node->getFiles() as $item) { 76 $items .= $this->renderItem($item); 77 } 78 79 $template->setVar( 80 array( 81 'id' => $node->getId(), 82 'items' => $items 83 ) 84 ); 85 86 $template->renderTo($file); 87 } 88 89 /** 90 * @param PHP_CodeCoverage_Report_Node $item 91 * @param boolean $total 92 * @return string 93 */ 94 protected function renderItem(PHP_CodeCoverage_Report_Node $item, $total = FALSE) 95 { 96 $data = array( 97 'numClasses' => $item->getNumClassesAndTraits(), 98 'numTestedClasses' => $item->getNumTestedClassesAndTraits(), 99 'numMethods' => $item->getNumMethods(), 100 'numTestedMethods' => $item->getNumTestedMethods(), 101 'linesExecutedPercent' => $item->getLineExecutedPercent(FALSE), 102 'linesExecutedPercentAsString' => $item->getLineExecutedPercent(), 103 'numExecutedLines' => $item->getNumExecutedLines(), 104 'numExecutableLines' => $item->getNumExecutableLines(), 105 'testedMethodsPercent' => $item->getTestedMethodsPercent(FALSE), 106 'testedMethodsPercentAsString' => $item->getTestedMethodsPercent(), 107 'testedClassesPercent' => $item->getTestedClassesAndTraitsPercent(FALSE), 108 'testedClassesPercentAsString' => $item->getTestedClassesAndTraitsPercent() 109 ); 110 111 if ($total) { 112 $data['name'] = 'Total'; 113 } else { 114 $data['name'] = sprintf( 115 '<a href="%s.html">%s</a>', 116 $item->getId(), 117 $item->getName() 118 ); 119 120 if ($item instanceof PHP_CodeCoverage_Report_Node_Directory) { 121 $data['icon'] = '<i class="icon-folder-open"></i> '; 122 } else { 123 $data['icon'] = '<i class="icon-file"></i> '; 124 } 125 } 126 127 return $this->renderItemTemplate( 128 new Text_Template($this->templatePath . 'directory_item.html'), 129 $data 130 ); 131 } 132} 133