Completed
Push — master ( 2698b2...437e5e )
by Andreas
02:19
created

Standard::addVerboseInformationToChangedTest()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 16
Code Lines 9

Duplication

Lines 16
Ratio 100 %

Importance

Changes 0
Metric Value
dl 16
loc 16
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 9
nc 3
nop 1
1
<?php
2
3
/**
4
 * Copyright (c) Andreas Heigl<[email protected]>
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a copy
7
 * of this software and associated documentation files (the "Software"), to deal
8
 * in the Software without restriction, including without limitation the rights
9
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
 * copies of the Software, and to permit persons to whom the Software is
11
 * furnished to do so, subject to the following conditions:
12
 *
13
 * The above copyright notice and this permission notice shall be included in
14
 * all copies or substantial portions of the Software.
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
 * THE SOFTWARE.
23
 *
24
 * @author    Andreas Heigl<[email protected]>
25
 * @copyright 2016-2016 Andreas Heigl
26
 * @license   http://www.opensource.org/licenses/mit-license.php MIT-License
27
 * @since     16.06.2016
28
 * @link      http://github.com/heiglandreas/org.heigl.junitdiff
29
 */
30
31
namespace Org_Heigl\JUnitDiff\Writer;
32
33
use Org_Heigl\JUnitDiff\MergeResult;
34
use Symfony\Component\Console\Output\Output;
35
use Symfony\Component\Console\Style\StyleInterface;
36
37
class Standard implements WriterInterface
38
{
39
    protected $style;
40
41
    private $verbosity;
42
43
    public function __construct(StyleInterface $style, $verbosity = Output::VERBOSITY_NORMAL)
44
    {
45
        $this->style = $style;
46
        $this->verbosity = $verbosity;
47
    }
48
49
    public function write(MergeResult $mergeResult)
50
    {
51
        $mergeResult->sort();
52
53
        foreach ($mergeResult as $key => $value) {
54
            if (! isset($value['base'])) {
55
                $this->writeAddedTest($key);
56
                continue;
57
            }
58
            if (! isset($value['current'])) {
59
                $this->writeRemovedTest($key);
60
                continue;
61
            }
62
63
            if ($value['base']['result'] != $value['current']['result']) {
64
                $this->writeChangedTest($value['base'], $value['current'], $key);
65
                continue;
66
            }
67
        }
68
    }
69
70
    /**
71
     * @param string $key
72
     *
73
     * @return void;
0 ignored issues
show
Documentation introduced by
The doc-type void; could not be parsed: Expected "|" or "end of type", but got ";" at position 4. (view supported doc-types)

This check marks PHPDoc comments that could not be parsed by our parser. To see which comment annotations we can parse, please refer to our documentation on supported doc-types.

Loading history...
74
     */
75
    private function writeAddedTest($key)
76
    {
77
        $this->style->text('<bg=green;fg=black>+</> ' . $key);
78
    }
79
80
    /**
81
     * @param string $key
82
     *
83
     * @return void
84
     */
85
    private function writeRemovedTest($key)
86
    {
87
        $this->style->text('<bg=red;fg=yellow>-</> ' . $key);
88
    }
89
90
    /**
91
     * @param array $base
92
     * @param array $current
93
     * @param string $key
94
     *
95
     * @return void
96
     */
97
    private function writeChangedTest($base, $current, $key)
98
    {
99
        $this->style->text(sprintf(
100
            '<bg=blue;fg=yellow>o</> %s changed from <fg=cyan>%s</> to <fg=magenta>%s</>',
101
            $key,
102
            $base['result'],
103
            $current['result']
104
        ));
105
106
        if ($base['result'] === 'success') {
107
            $this->addVerboseInformationToChangedTest($current);
108
            $this->addVeryVerboseInformationToChangedTest($current);
109
        }
110
111
    }
112
113 View Code Duplication
    private function addVerboseInformationToChangedTest($current)
114
    {
115
        if (! $current['message']) {
116
            return;
117
        }
118
119
        if ($this->verbosity < Output::VERBOSITY_VERBOSE) {
120
            return;
121
        }
122
123
        $this->style->text(sprintf(
124
            "\t<fg=yellow>%s</>: <fg=green>%s</>",
125
            $current['type'],
126
            $current['message']
127
        ));
128
    }
129
130 View Code Duplication
    private function addVeryVerboseInformationToChangedTest($current)
131
    {
132
        if (! $current['info']) {
133
            return;
134
        }
135
136
        if ($this->verbosity < Output::VERBOSITY_VERY_VERBOSE) {
137
            return;
138
        }
139
140
        $this->style->text(sprintf(
141
            "\t<fg=cyan>%s</>",
142
            $current['info']
143
        ));
144
    }
145
}
146