Open Journal Systems  3.3.0
mergeCoverageReportTool.php
Go to the documentation of this file.
1 <?php
17 define('INDEX_FILE_LOCATION', dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php');
18 require_once(dirname(dirname(__FILE__)) . '/classes/cliTool/CliTool.inc.php');
19 
21  var $target = '';
22  var $script = '';
23  var $coverageFiles = array();
24  var $phpUnit = '';
25 
31  function __construct($argv = array()) {
32  parent::__construct($argv);
33 
34  // Show the usage screen if explicitly requested or wrong
35  // number of command line arguments.
36  $wrongArgCount = (count($this->argv) < 2 ? true : false);
37  if ($wrongArgCount || $argv[0] == '-h') {
38  $this->usage();
39  if ($wrongArgCount) {
40  printf(PHP_EOL . 'Wrong number of arguments!' . PHP_EOL);
41  exit(1);
42  } else {
43  exit(0);
44  }
45  }
46 
47  // Parse the command line arguments
48  $this->script = array_shift($argv);
49  $this->target = array_shift($argv);
50  if (!is_dir($this->target)) {
51  echo "Target directory $this->target dosn't exist" . PHP_EOL;
52  exit(1);
53  }
54  if (!is_writable($this->target)) {
55  echo "Target directory $this->target is not writable" . PHP_EOL;
56  exit(1);
57  }
58  $this->coverageFiles = $argv;
59  foreach ($this->coverageFiles as $file) {
60  if (!is_readable($file)) {
61  echo "Coverage file $file is not readable" . PHP_EOL;
62  exit(1);
63  }
64  }
65 
66  // Verify that $phpunit is a file
67  if (!($this->phpunit = exec('which phpunit') and is_readable($this->phpunit))) {
68  echo 'Couldn\'t find phpunit in $PATH' . PHP_EOL;
69  exit(1);
70  }
71  }
72 
76  function usage() {
77  echo 'Merges two or more phpunit coverage report files into one.' . PHP_EOL
78  . "Usage: {$this->scriptName} [target_directory] [coverage_report1] [coverage_report2] ..." . PHP_EOL;
79  }
80 
84  function execute() {
85  // Include phpunit; use output buffering to prevent the output of '#!/usr/bin/env php'
86  ob_start();
87  require $this->phpunit;
88  ob_end_clean();
89 
90  // Merge the coverage report files
91  echo 'Merging code coverage reports' . PHP_EOL;
92  foreach ($this->coverageFiles as $file) {
93  if (!is_readable($file)) {
94  echo "Code coverage file $file dosn't exist" . PHP_EOL;
95  exit(1);
96  }
97  echo 'Merging ' . $file . '...' . PHP_EOL;
98 
99  // Include the code coverage report; this will populate $coverage
100  include($file);
101 
102  if (isset($codeCoverage)) {
103  $codeCoverage->filter()->addFilesToWhitelist($coverage->filter()->getWhitelist());
104  $codeCoverage->merge($coverage);
105  } else {
106  $codeCoverage = $coverage;
107  }
108  }
109 
110  // Generate the HTML output
111  if (isset($codeCoverage)) {
112  echo 'Generating HTML coverage report' . PHP_EOL;
113  $writer = new PHP_CodeCoverage_Report_HTML();
114  $writer->process($codeCoverage, $this->target);
115  echo 'Finished merging coverage reports' . PHP_EOL;
116  }
117  }
118 }
119 
120 $tool = new MergeCoverageReportTool(isset($argv) ? $argv : array());
121 $tool->execute();
CommandLineTool
Initialization code for command-line scripts.
Definition: CliTool.inc.php:44
MergeCoverageReportTool\$phpUnit
$phpUnit
Definition: mergeCoverageReportTool.php:24
$tool
$tool
Definition: mergeCoverageReportTool.php:120
MergeCoverageReportTool\execute
execute()
Definition: mergeCoverageReportTool.php:84
MergeCoverageReportTool\__construct
__construct($argv=array())
Definition: mergeCoverageReportTool.php:31
MergeCoverageReportTool
Definition: mergeCoverageReportTool.php:20
MergeCoverageReportTool\usage
usage()
Definition: mergeCoverageReportTool.php:76
MergeCoverageReportTool\$coverageFiles
$coverageFiles
Definition: mergeCoverageReportTool.php:23
MergeCoverageReportTool\$target
$target
Definition: mergeCoverageReportTool.php:21
MergeCoverageReportTool\$script
$script
Definition: mergeCoverageReportTool.php:22
CommandLineTool\$argv
$argv
Definition: CliTool.inc.php:53