1<?php
2/**
3 * Generates code coverage reports in Simple plain text from data obtained from PHPUnit
4 *
5 * PHP5
6 *
7 * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
8 * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
9 *
10 * Licensed under The MIT License
11 * For full copyright and license information, please see the LICENSE.txt
12 * Redistributions of files must retain the above copyright notice.
13 *
14 * @copyright     Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
15 * @link          https://cakephp.org CakePHP(tm) Project
16 * @package       Cake.TestSuite.Coverage
17 * @since         CakePHP(tm) v 2.0
18 * @license       https://opensource.org/licenses/mit-license.php MIT License
19 */
20
21App::uses('BaseCoverageReport', 'TestSuite/Coverage');
22
23/**
24 * Generates code coverage reports in Simple plain text from data obtained from PHPUnit
25 *
26 * @package       Cake.TestSuite.Coverage
27 */
28class TextCoverageReport extends BaseCoverageReport {
29
30/**
31 * Generates report text to display.
32 *
33 * @return string compiled plain text report.
34 */
35	public function report() {
36		$pathFilter = $this->getPathFilter();
37		$coverageData = $this->filterCoverageDataByPath($pathFilter);
38		if (empty($coverageData)) {
39			return 'No files to generate coverage for';
40		}
41		$output = "\nCoverage Report:\n\n";
42		foreach ($coverageData as $file => $coverageData) {
43			$fileData = file($file);
44			$output .= $this->generateDiff($file, $fileData, $coverageData);
45		}
46		return $output;
47	}
48
49/**
50 * Generates a 'diff' report for a file.
51 * Since diffs are too big for plain text reports a simple file => % covered is done.
52 *
53 * @param string $filename Name of the file having coverage generated
54 * @param array $fileLines File data as an array. See file() for how to get one of these.
55 * @param array $coverageData Array of coverage data to use to generate HTML diffs with
56 * @return string
57 */
58	public function generateDiff($filename, $fileLines, $coverageData) {
59		list($covered, $total) = $this->_calculateCoveredLines($fileLines, $coverageData);
60		$percentCovered = round(100 * $covered / $total, 2);
61		return "$filename : $percentCovered%\n";
62	}
63
64}
65