]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/PHPUnit/PHP/CodeCoverage/Report/HTML/Renderer/Directory.php
Merge branch 'master' of github.com:sugarcrm/sugarcrm_dev
[Github/sugarcrm.git] / tests / PHPUnit / PHP / CodeCoverage / Report / HTML / Renderer / Directory.php
1 <?php
2 /**
3  * PHP_CodeCoverage
4  *
5  * Copyright (c) 2009-2011, Sebastian Bergmann <sb@sebastian-bergmann.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 <sb@sebastian-bergmann.de>
40  * @copyright  2009-2011 Sebastian Bergmann <sb@sebastian-bergmann.de>
41  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD 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 <sb@sebastian-bergmann.de>
52  * @copyright  2009-2011 Sebastian Bergmann <sb@sebastian-bergmann.de>
53  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
54  * @version    Release: 1.1.1
55  * @link       http://github.com/sebastianbergmann/php-code-coverage
56  * @since      Class available since Release 1.1.0
57  */
58 class PHP_CodeCoverage_Report_HTML_Renderer_Directory extends PHP_CodeCoverage_Report_HTML_Renderer
59 {
60     /**
61      * @param PHP_CodeCoverage_Report_Node_Directory $node
62      * @param string                                 $file
63      * @param string                                 $title
64      */
65     public function render(PHP_CodeCoverage_Report_Node_Directory $node, $file, $title = NULL)
66     {
67         if ($title === NULL) {
68             $title = $node->getName();
69         }
70
71         $template = new Text_Template($this->templatePath . 'directory.html');
72
73         $this->setCommonTemplateVariables($template, $title, $node);
74
75         $items = $this->renderItem($node, TRUE);
76
77         foreach ($node->getDirectories() as $item) {
78             $items .= $this->renderItem($item);
79         }
80
81         foreach ($node->getFiles() as $item) {
82             $items .= $this->renderItem($item);
83         }
84
85         $template->setVar(
86           array(
87             'id'    => $node->getId(),
88             'items' => $items
89           )
90         );
91
92         $template->renderTo($file);
93     }
94
95     /**
96      * @param  PHP_CodeCoverage_Report_Node $item
97      * @param  boolean                      $total
98      * @return string
99      */
100     protected function renderItem(PHP_CodeCoverage_Report_Node $item, $total = FALSE)
101     {
102         $data = array(
103           'numClasses'                   => $item->getNumClasses(),
104           'numTestedClasses'             => $item->getNumTestedClasses(),
105           'numMethods'                   => $item->getNumMethods(),
106           'numTestedMethods'             => $item->getNumTestedMethods(),
107           'linesExecutedPercent'         => $item->getLineExecutedPercent(FALSE),
108           'linesExecutedPercentAsString' => $item->getLineExecutedPercent(),
109           'numExecutedLines'             => $item->getNumExecutedLines(),
110           'numExecutableLines'           => $item->getNumExecutableLines(),
111           'testedMethodsPercent'         => $item->getTestedMethodsPercent(FALSE),
112           'testedMethodsPercentAsString' => $item->getTestedMethodsPercent(),
113           'testedClassesPercent'         => $item->getTestedClassesPercent(FALSE),
114           'testedClassesPercentAsString' => $item->getTestedClassesPercent()
115         );
116
117         if ($total) {
118             $data['itemClass'] = 'coverDirectory';
119             $data['name']      = 'Total';
120         } else {
121             $data['name'] = sprintf(
122               '<a href="%s.html">%s</a>',
123               $item->getId(),
124               $item->getName()
125             );
126
127             if ($item instanceof PHP_CodeCoverage_Report_Node_Directory) {
128                 $data['icon']      = '<img alt="directory" src="directory.png"/> ';
129                 $data['itemClass'] = 'coverDirectory';
130             } else {
131                 $data['icon']      = '<img alt="file" src="file.png"/> ';
132                 $data['itemClass'] = 'coverFile';
133             }
134         }
135
136         return $this->renderItemTemplate(
137           new Text_Template($this->templatePath . 'directory_item.html'),
138           $data
139         );
140     }
141 }