78b4dd8a2e4960fb869505cf4ff9a42b553a1ebc
[civicrm-core.git] / Civi / CiUtil / Command / CompareCommand.php
1 <?php
2 namespace Civi\CiUtil\Command;
3
4 class CompareCommand {
5 public static function main($argv) {
6 if (empty($argv[1])) {
7 echo "summary: Compares the output of different test runs\n";
8 echo "usage: phpunit-compare [--out=txt|csv] [--phpunit-json|--jenkins-xml] <file1> <file2>...\n";
9 exit(1);
10 }
11
12 $parser = array('\Civi\CiUtil\PHPUnitParser', 'parseJsonResults');
13 $printerType = 'txt';
14 $suites = array(); // array('file' => string, 'results' => array)
15 for ($i = 1; $i < count($argv); $i++) {
16 switch ($argv[$i]) {
17 case '--phpunit-json':
18 $parser = array('\Civi\CiUtil\PHPUnitParser', 'parseJsonResults');
19 break;
20 case '--jenkins-xml':
21 $parser = array('\Civi\CiUtil\JenkinsParser', 'parseXmlResults');
22 break;
23 case '--csv':
24 $parser = array('\Civi\CiUtil\CSVParser', 'parseResults');
25 break;
26 case '--out=txt':
27 $printerType = 'txt';
28 break;
29 case '--out=csv':
30 $printerType = 'csv';
31 break;
32 default:
33 $suites[] = array(
34 'file' => $argv[$i],
35 'results' => call_user_func($parser, file_get_contents($argv[$i])),
36 );
37 }
38 }
39
40 $tests = array(); // array(string $name)
41 foreach ($suites as $suite) {
42 $tests = array_unique(array_merge(
43 $tests,
44 array_keys($suite['results'])
45 ));
46 }
47 sort($tests);
48
49 if ($printerType == 'csv') {
50 $printer = new \Civi\CiUtil\CsvPrinter('php://stdout', \Civi\CiUtil\Arrays::collect($suites, 'file'));
51 } else {
52 $printer = new \Civi\CiUtil\ComparisonPrinter(\Civi\CiUtil\Arrays::collect($suites, 'file'));
53 }
54 foreach ($tests as $test) {
55 $values = array();
56 foreach ($suites as $suite) {
57 $values[] = isset($suite['results'][$test]) ? $suite['results'][$test] : 'MISSING';
58 }
59
60 if (count(array_unique($values)) > 1) {
61 $printer->printRow($test, $values);
62 }
63 }
64 }
65 }