Skip to content

Commit c91dee3

Browse files
committed
use change as argument of renderer
1 parent fa0436a commit c91dee3

File tree

3 files changed

+132
-96
lines changed

3 files changed

+132
-96
lines changed

src/Change.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
namespace Sokil\Diff;
4+
5+
class Change
6+
{
7+
private $oldValue;
8+
9+
private $newValue;
10+
11+
/**
12+
* @param array|string $oldValue
13+
* @param array|string $newValue
14+
*/
15+
public function __construct($oldValue, $newValue)
16+
{
17+
// old value
18+
if (!is_array($oldValue)) {
19+
$oldValue = (string)$oldValue;
20+
}
21+
$this->oldValue = $oldValue;
22+
23+
// new value
24+
if (!is_array($newValue)) {
25+
$newValue = (string)$newValue;
26+
}
27+
$this->newValue = $newValue;
28+
}
29+
30+
/**
31+
* @return array|string
32+
*/
33+
public function getOldValue()
34+
{
35+
return $this->oldValue;
36+
}
37+
38+
/**
39+
* @return array|string
40+
*/
41+
public function getNewValue()
42+
{
43+
return $this->newValue;
44+
}
45+
}

src/Renderer.php

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -101,22 +101,13 @@ public function setFormat($format)
101101
}
102102

103103
/**
104-
* @param array|string $from
105-
* @param array|string $to
104+
* @param Change $change
106105
* @return string highlighted diff
107106
*/
108-
public function render($from, $to)
107+
public function render(Change $change)
109108
{
110-
if (!is_array($from)) {
111-
$from = (string)$from;
112-
}
113-
114-
if (!is_array($to)) {
115-
$to = (string)$to;
116-
}
117-
118109
// get diff
119-
$diff = $this->differ->diffToArray($from, $to);
110+
$diff = $this->differ->diffToArray($change->getOldValue(), $change->getNewValue());
120111

121112
// render diff
122113
foreach ($diff as &$line) {

tests/RendererTest.php

Lines changed: 84 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -4,97 +4,97 @@
44

55
class RendererTest extends \PHPUnit_Framework_TestCase
66
{
7-
public function testRender()
7+
public function renderChangeDataProvider()
88
{
9-
$expectedDiff = implode(PHP_EOL, [
10-
'line1',
11-
'<del>line2</del>',
12-
'<ins>line2changed</ins>',
13-
'line3'
14-
]);
15-
16-
$diffRenderer = new Renderer();
17-
$actualDiff = $diffRenderer->render(
18-
implode(PHP_EOL, ['line1', 'line2', 'line3']),
19-
implode(PHP_EOL, ['line1', 'line2changed', 'line3'])
20-
);
21-
22-
$this->assertEquals($expectedDiff, $actualDiff);
23-
}
24-
25-
public function testRender_CustomFullySpecifiedFormat()
26-
{
27-
$expectedDiff = implode(PHP_EOL, [
28-
'line1',
29-
'<del style="background: #ffe7e7;">line2</del>',
30-
'<ins style="background: #ddfade;">line2changed</ins>',
31-
'line3'
32-
]);
33-
34-
$diffRenderer = new Renderer([
35-
'format' => [
36-
'insert' => [
37-
'tag' => 'ins',
38-
'attributes' => 'style="background: #ddfade;"',
9+
return [
10+
'DefaultFormat' => [
11+
[
12+
'line1',
13+
'<del>line2</del>',
14+
'<ins>line2changed</ins>',
15+
'line3'
3916
],
40-
'delete' => [
41-
'tag' => 'del',
42-
'attributes' => 'style="background: #ffe7e7;"',
17+
['line1', 'line2', 'line3'],
18+
['line1', 'line2changed', 'line3'],
19+
[],
20+
],
21+
'CustomFullySpecifiedFormat' => [
22+
[
23+
'line1',
24+
'<del style="background: #ffe7e7;">line2</del>',
25+
'<ins style="background: #ddfade;">line2changed</ins>',
26+
'line3'
27+
],
28+
['line1', 'line2', 'line3'],
29+
['line1', 'line2changed', 'line3'],
30+
[
31+
'format' => [
32+
'insert' => [
33+
'tag' => 'ins',
34+
'attributes' => 'style="background: #ddfade;"',
35+
],
36+
'delete' => [
37+
'tag' => 'del',
38+
'attributes' => 'style="background: #ffe7e7;"',
39+
]
40+
]
4341
]
44-
]
45-
]);
46-
47-
$actualDiff = $diffRenderer->render(
48-
implode(PHP_EOL, ['line1', 'line2', 'line3']),
49-
implode(PHP_EOL, ['line1', 'line2changed', 'line3'])
50-
);
51-
52-
$this->assertEquals($expectedDiff, $actualDiff);
53-
}
54-
55-
public function testRender_CustomPartlySpecifiedFormat()
56-
{
57-
$expectedDiff = implode(PHP_EOL, [
58-
'line1',
59-
'<del>line2</del>',
60-
'<ins class="insert">line2changed</ins>',
61-
'line3'
62-
]);
63-
64-
$diffRenderer = new Renderer([
65-
'format' => [
66-
'insert' => [
67-
'attributes' => 'class="insert"',
42+
],
43+
'CustomPartlySpecifiedFormat' => [
44+
[
45+
'line1',
46+
'<del>line2</del>',
47+
'<ins class="insert">line2changed</ins>',
48+
'line3'
6849
],
69-
]
70-
]);
71-
72-
$actualDiff = $diffRenderer->render(
73-
implode(PHP_EOL, ['line1', 'line2', 'line3']),
74-
implode(PHP_EOL, ['line1', 'line2changed', 'line3'])
75-
);
76-
77-
$this->assertEquals($expectedDiff, $actualDiff);
50+
['line1', 'line2', 'line3'],
51+
['line1', 'line2changed', 'line3'],
52+
[
53+
'format' => [
54+
'insert' => [
55+
'attributes' => 'class="insert"',
56+
],
57+
]
58+
],
59+
],
60+
'CustomNumericFormat' => [
61+
[
62+
'line1',
63+
'<del style="background: #ffe7e7;">line2</del>',
64+
'<ins style="background: #ddfade;">line2changed</ins>',
65+
'line3'
66+
],
67+
['line1', 'line2', 'line3'],
68+
['line1', 'line2changed', 'line3'],
69+
[
70+
'format' => Renderer::FORMAT_COLOUR
71+
]
72+
],
73+
];
7874
}
7975

80-
public function testRender_CustomNumericFormat()
81-
{
82-
$expectedDiff = implode(PHP_EOL, [
83-
'line1',
84-
'<del style="background: #ffe7e7;">line2</del>',
85-
'<ins style="background: #ddfade;">line2changed</ins>',
86-
'line3'
87-
]);
88-
89-
$diffRenderer = new Renderer([
90-
'format' => Renderer::FORMAT_COLOUR
91-
]);
92-
93-
$actualDiff = $diffRenderer->render(
94-
implode(PHP_EOL, ['line1', 'line2', 'line3']),
95-
implode(PHP_EOL, ['line1', 'line2changed', 'line3'])
96-
);
76+
/**
77+
* @dataProvider renderChangeDataProvider
78+
* @param $expectedDiff
79+
* @param $oldValue
80+
* @param $newValue
81+
* @param array|null $renderOptions
82+
*/
83+
public function testRender_ChanageValueStringType(
84+
$expectedDiff,
85+
$oldValue,
86+
$newValue,
87+
array $renderOptions = null
88+
) {
89+
$expectedDiff = implode(PHP_EOL, $expectedDiff);
90+
91+
$diffRenderer = new Renderer($renderOptions);
92+
$actualDiff = $diffRenderer->render(new Change(
93+
implode(PHP_EOL, $oldValue),
94+
implode(PHP_EOL, $newValue)
95+
));
9796

9897
$this->assertEquals($expectedDiff, $actualDiff);
9998
}
99+
100100
}

0 commit comments

Comments
 (0)