Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
GrammaticalFeatureDiffVisualizer
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
3 / 3
5
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 visualize
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
3
 buildPathHeader
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace Wikibase\Lexeme\Presentation\Diff;
4
5use Diff\DiffOp\Diff\Diff;
6use Diff\DiffOp\DiffOp;
7
8/**
9 * @license GPL-2.0-or-later
10 */
11class GrammaticalFeatureDiffVisualizer {
12
13    /**
14     * @var ItemReferenceDifferenceVisualizer
15     */
16    private $itemRefDiffVisualizer;
17
18    public function __construct( ItemReferenceDifferenceVisualizer $itemRefDiffVisualizer ) {
19        $this->itemRefDiffVisualizer = $itemRefDiffVisualizer;
20    }
21
22    public function visualize( array $path, DiffOp $diff ) {
23        if ( $diff->isAtomic() ) {
24            return $this->itemRefDiffVisualizer->visualize(
25                $this->buildPathHeader( $path ),
26                new Diff( [ $diff ] )
27            );
28        }
29
30        $html = '';
31        // @phan-suppress-next-line PhanTypeNoPropertiesForeach
32        foreach ( $diff as $subOp ) {
33            $html .= $this->visualize(
34                $path,
35                $subOp
36            );
37        }
38
39        return $html;
40    }
41
42    private function buildPathHeader( $path ) {
43        return implode( ' / ', $path );
44    }
45
46}