Skip to content

Commit bda4229

Browse files
committed
renderer
0 parents  commit bda4229

File tree

6 files changed

+155
-0
lines changed

6 files changed

+155
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
vendor

composer.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"require": {
3+
"sebastian/diff": "^1.4"
4+
},
5+
"autoload": {
6+
"psr-4": {
7+
"Sokil\\Diff\\": "src/"
8+
}
9+
}
10+
}

composer.lock

Lines changed: 71 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Renderer.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
namespace Sokil\Diff;
4+
5+
use SebastianBergmann\Diff\Differ;
6+
7+
class Renderer
8+
{
9+
private $differ;
10+
11+
public function __construct()
12+
{
13+
$this->differ = new Differ('', false);
14+
}
15+
16+
/**
17+
* @param array|string $from
18+
* @param array|string $to
19+
* @return string highlighted diff
20+
*/
21+
public function render($from, $to)
22+
{
23+
$diff = $this->differ->diffToArray($from, $to);
24+
25+
foreach ($diff as &$line) {
26+
switch ($line[1]) {
27+
case 0: // NOT CHANGED
28+
$line = $line[0];
29+
break;
30+
case 1: // ADDED
31+
$line = '<ins>' . $line[0] . '</ins>';
32+
break;
33+
case 2: // REMOVED
34+
$line = '<del>' . $line[0] . '</del>';
35+
break;
36+
}
37+
}
38+
39+
return implode(PHP_EOL, $diff);
40+
}
41+
}

tests/RendererTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
namespace Sokil\Diff;
4+
5+
class RendererTest extends \PHPUnit_Framework_TestCase
6+
{
7+
public function testRender()
8+
{
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+
}

tests/phpunit.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0"?>
2+
<phpunit colors="true" bootstrap="../vendor/autoload.php">
3+
<testsuites>
4+
<testsuite name="AllTests">
5+
<directory>.</directory>
6+
</testsuite>
7+
</testsuites>
8+
</phpunit>

0 commit comments

Comments
 (0)