1<?php
2/**
3 * CakeBaseReporter contains common functionality to all cake test suite reporters.
4 *
5 * CakePHP(tm) Tests <https://book.cakephp.org/2.0/en/development/testing.html>
6 * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
7 *
8 * Licensed under The MIT License
9 * For full copyright and license information, please see the LICENSE.txt
10 * Redistributions of files must retain the above copyright notice
11 *
12 * @copyright     Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
13 * @link          https://cakephp.org CakePHP(tm) Project
14 * @since         CakePHP(tm) v 1.3
15 * @license       https://opensource.org/licenses/mit-license.php MIT License
16 */
17
18if (!class_exists('PHPUnit_TextUI_ResultPrinter')) {
19	require_once 'PHPUnit/TextUI/ResultPrinter.php';
20}
21
22/**
23 * CakeBaseReporter contains common reporting features used in the CakePHP Test suite
24 *
25 * @package       Cake.TestSuite.Reporter
26 */
27class CakeBaseReporter extends PHPUnit_TextUI_ResultPrinter {
28
29/**
30 * Headers sent
31 *
32 * @var bool
33 */
34	protected $_headerSent = false;
35
36/**
37 * Array of request parameters. Usually parsed GET params.
38 *
39 * @var array
40 */
41	public $params = array();
42
43/**
44 * Character set for the output of test reporting.
45 *
46 * @var string
47 */
48	protected $_characterSet;
49
50/**
51 * Does nothing yet. The first output will
52 * be sent on the first test start.
53 *
54 * ### Params
55 *
56 * - show_passes - Should passes be shown
57 * - plugin - Plugin test being run?
58 * - core - Core test being run.
59 * - case - The case being run
60 * - codeCoverage - Whether the case/group being run is being code covered.
61 *
62 * @param string $charset The character set to output with. Defaults to UTF-8
63 * @param array $params Array of request parameters the reporter should use. See above.
64 */
65	public function __construct($charset = 'utf-8', $params = array()) {
66		if (!$charset) {
67			$charset = 'utf-8';
68		}
69		$this->_characterSet = $charset;
70		$this->params = $params;
71	}
72
73/**
74 * Retrieves a list of test cases from the active Manager class,
75 * displaying it in the correct format for the reporter subclass
76 *
77 * @return mixed
78 */
79	public function testCaseList() {
80		$testList = CakeTestLoader::generateTestList($this->params);
81		return $testList;
82	}
83
84/**
85 * Paints the start of the response from the test suite.
86 * Used to paint things like head elements in an html page.
87 *
88 * @return void
89 */
90	public function paintDocumentStart() {
91	}
92
93/**
94 * Paints the end of the response from the test suite.
95 * Used to paint things like </body> in an html page.
96 *
97 * @return void
98 */
99	public function paintDocumentEnd() {
100	}
101
102/**
103 * Paint a list of test sets, core, app, and plugin test sets
104 * available.
105 *
106 * @return void
107 */
108	public function paintTestMenu() {
109	}
110
111/**
112 * Get the baseUrl if one is available.
113 *
114 * @return string The base URL for the request.
115 */
116	public function baseUrl() {
117		if (!empty($_SERVER['PHP_SELF'])) {
118			return $_SERVER['PHP_SELF'];
119		}
120		return '';
121	}
122
123/**
124 * Print result
125 *
126 * @param PHPUnit_Framework_TestResult $result The result object
127 * @return void
128 */
129	public function printResult(PHPUnit_Framework_TestResult $result) {
130		$this->paintFooter($result);
131	}
132
133/**
134 * Paint result
135 *
136 * @param PHPUnit_Framework_TestResult $result The result object
137 * @return void
138 */
139	public function paintResult(PHPUnit_Framework_TestResult $result) {
140		$this->paintFooter($result);
141	}
142
143/**
144 * An error occurred.
145 *
146 * @param PHPUnit_Framework_Test $test The test to add an error for.
147 * @param Exception $e The exception object to add.
148 * @param float $time The current time.
149 * @return void
150 */
151	public function addError(PHPUnit_Framework_Test $test, Exception $e, $time) {
152		$this->paintException($e, $test);
153	}
154
155/**
156 * A failure occurred.
157 *
158 * @param PHPUnit_Framework_Test $test The test that failed
159 * @param PHPUnit_Framework_AssertionFailedError $e The assertion that failed.
160 * @param float $time The current time.
161 * @return void
162 */
163	public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time) {
164		$this->paintFail($e, $test);
165	}
166
167/**
168 * Incomplete test.
169 *
170 * @param PHPUnit_Framework_Test $test The test that was incomplete.
171 * @param Exception $e The incomplete exception
172 * @param float $time The current time.
173 * @return void
174 */
175	public function addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e, $time) {
176		$this->paintSkip($e, $test);
177	}
178
179/**
180 * Skipped test.
181 *
182 * @param PHPUnit_Framework_Test $test The test that failed.
183 * @param Exception $e The skip object.
184 * @param float $time The current time.
185 * @return void
186 */
187	public function addSkippedTest(PHPUnit_Framework_Test $test, Exception $e, $time) {
188		$this->paintSkip($e, $test);
189	}
190
191/**
192 * A test suite started.
193 *
194 * @param PHPUnit_Framework_TestSuite $suite The suite to start
195 * @return void
196 */
197	public function startTestSuite(PHPUnit_Framework_TestSuite $suite) {
198		if (!$this->_headerSent) {
199			echo $this->paintHeader();
200		}
201		echo __d('cake_dev', 'Running  %s', $suite->getName()) . "\n";
202	}
203
204/**
205 * A test suite ended.
206 *
207 * @param PHPUnit_Framework_TestSuite $suite The suite that ended.
208 * @return void
209 */
210	public function endTestSuite(PHPUnit_Framework_TestSuite $suite) {
211	}
212
213/**
214 * A test started.
215 *
216 * @param PHPUnit_Framework_Test $test The test that started.
217 * @return void
218 */
219	public function startTest(PHPUnit_Framework_Test $test) {
220	}
221
222/**
223 * A test ended.
224 *
225 * @param PHPUnit_Framework_Test $test The test that ended
226 * @param float $time The current time.
227 * @return void
228 */
229	public function endTest(PHPUnit_Framework_Test $test, $time) {
230		$this->numAssertions += $test->getNumAssertions();
231		if ($test->hasFailed()) {
232			return;
233		}
234		$this->paintPass($test, $time);
235	}
236
237}
238