summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Benchmark/CliOutputFormatter.php
blob: 9afd54841668542edadd8d04106225983d9e3d0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php

namespace SMW\Tests\Benchmark;

/**
 * @license GNU GPL v2+
 * @since 2.5
 *
 * @author mwjames
 */
class CliOutputFormatter {

	const FORMAT_TREE = 'format.tree';
	const FORMAT_JSON = 'format.json';

	/**
	 * @var string
	 */
	private $formatType;

	/**
	 * @since 2.5
	 *
	 * @param string $formatType
	 */
	public function __construct( $formatType = self::FORMAT_TREE ) {
		$this->formatType = $formatType;
	}

	/**
	 * @since 2.5
	 *
	 * @param array $report
	 */
	public function format( array $report  ) {

		if ( $this->formatType === self::FORMAT_TREE ) {
			return $this->doFormatAsTree( $report );
		}

		return json_encode( $report, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT );
	}

	private function doFormatAsTree( $report, $label = '', $level = 1 ) {
		$output = '';

		if ( is_string( $label ) && $label !== '' ) {
			$output .= sprintf( "%s- %s\n", str_repeat( ' ', $level ), $label );
			$level++;
		}

		foreach ( $report as $key => $value ) {

			$isDeeper = false;

			if ( is_array( $value ) ) {
				foreach ( $value as $p => $v ) {
					if ( is_array( $v ) ) {
						$isDeeper = true;
					}
				}
			}

			if ( $isDeeper ) {
				$output .= $this->doFormatAsTree( $value, $key, $level + 1 );
			} else {
				$output .= sprintf( "%s- %s: %s\n", str_repeat( ' ', $level ), $key, json_encode( $value, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ) );
			}
		}

		return $output;
	}

}