]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/PHPUnit/PHPUnit/Extensions/Story/ResultPrinter/HTML.php
Release 6.2.1
[Github/sugarcrm.git] / tests / PHPUnit / PHPUnit / Extensions / Story / ResultPrinter / HTML.php
1 <?php
2 /**
3  * PHPUnit
4  *
5  * Copyright (c) 2002-2011, 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  * @package    PHPUnit
38  * @subpackage Extensions_Story
39  * @author     Mattis Stordalen Flister <mattis@xait.no>
40  * @author     Sebastian Bergmann <sebastian@phpunit.de>
41  * @copyright  2002-2011 Sebastian Bergmann <sebastian@phpunit.de>
42  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
43  * @link       http://www.phpunit.de/
44  * @since      File available since Release 3.3.0
45  */
46
47 /**
48  * Prints stories in HTML format.
49  *
50  * @package    PHPUnit
51  * @subpackage Extensions_Story
52  * @author     Mattis Stordalen Flister <mattis@xait.no>
53  * @author     Sebastian Bergmann <sebastian@phpunit.de>
54  * @copyright  2002-2011 Sebastian Bergmann <sebastian@phpunit.de>
55  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
56  * @version    Release: 3.5.14
57  * @link       http://www.phpunit.de/
58  * @since      Class available since Release 3.3.0
59  */
60 class PHPUnit_Extensions_Story_ResultPrinter_HTML extends PHPUnit_Extensions_Story_ResultPrinter
61 {
62     /**
63      * @var boolean
64      */
65     protected $printsHTML = TRUE;
66
67     /**
68      * @var integer
69      */
70     protected $id = 0;
71
72     /**
73      * @var string
74      */
75     protected $scenarios = '';
76
77     /**
78      * @var string
79      */
80     protected $templatePath;
81
82     /**
83      * Constructor.
84      *
85      * @param  mixed   $out
86      * @throws InvalidArgumentException
87      */
88     public function __construct($out = NULL)
89     {
90         parent::__construct($out);
91
92         $this->templatePath = sprintf(
93           '%s%sTemplate%s',
94
95           dirname(__FILE__),
96           DIRECTORY_SEPARATOR,
97           DIRECTORY_SEPARATOR
98         );
99     }
100
101     /**
102      * Handler for 'start class' event.
103      *
104      * @param  string $name
105      */
106     protected function startClass($name)
107     {
108         $scenarioHeaderTemplate = new Text_Template(
109           $this->templatePath . 'scenario_header.html'
110         );
111
112         $scenarioHeaderTemplate->setVar(
113           array(
114             'name' => $this->currentTestClassPrettified
115           )
116         );
117
118         $this->scenarios .= $scenarioHeaderTemplate->render();
119     }
120
121     /**
122      * Handler for 'on test' event.
123      *
124      * @param  string  $name
125      * @param  boolean $success
126      * @param  array   $steps
127      */
128     protected function onTest($name, $success = TRUE, array $steps = array())
129     {
130         if ($this->testStatus == PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE) {
131             $scenarioStatus = 'scenarioFailed';
132         }
133
134         else if ($this->testStatus == PHPUnit_Runner_BaseTestRunner::STATUS_SKIPPED) {
135             $scenarioStatus = 'scenarioSkipped';
136         }
137
138         else if ($this->testStatus == PHPUnit_Runner_BaseTestRunner::STATUS_INCOMPLETE) {
139             $scenarioStatus = 'scenarioIncomplete';
140         }
141
142         else {
143             $scenarioStatus = 'scenarioSuccess';
144         }
145
146         $lastStepName = '';
147         $stepsBuffer  = '';
148
149         foreach ($steps as $step) {
150             $currentStepName = $step->getName();
151
152             if ($lastStepName == $currentStepName) {
153                 $stepText = 'and';
154             } else {
155                 $stepText = $currentStepName;
156             }
157
158             $lastStepName = $currentStepName;
159
160             $stepTemplate = new Text_Template(
161               $this->templatePath . 'step.html'
162             );
163
164             $stepTemplate->setVar(
165               array(
166                 'text'   => $stepText,
167                 'action' => $step->getAction() . ' ' . $step->getArguments(TRUE),
168               )
169             );
170
171             $stepsBuffer .= $stepTemplate->render();
172         }
173
174         $scenarioTemplate = new Text_Template(
175           $this->templatePath . 'scenario.html'
176         );
177
178         $scenarioTemplate->setVar(
179           array(
180             'id'             => ++$this->id,
181             'name'           => $name,
182             'scenarioStatus' => $scenarioStatus,
183             'steps'          => $stepsBuffer,
184           )
185         );
186
187         $this->scenarios .= $scenarioTemplate->render();
188     }
189
190     /**
191      * Handler for 'end run' event.
192      *
193      */
194     protected function endRun()
195     {
196         $scenariosTemplate = new Text_Template(
197           $this->templatePath . 'scenarios.html'
198         );
199
200         $scenariosTemplate->setVar(
201           array(
202             'scenarios'           => $this->scenarios,
203             'successfulScenarios' => $this->successful,
204             'failedScenarios'     => $this->failed,
205             'skippedScenarios'    => $this->skipped,
206             'incompleteScenarios' => $this->incomplete
207           )
208         );
209
210         $this->write($scenariosTemplate->render());
211     }
212 }