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