1<?php
2
3require_once DOKU_INC.'inc/DifferenceEngine.php';
4
5/**
6 * Class difference_engine_test
7 */
8class difference_engine_test extends DokuWikiTest {
9    public $x = "zzz\n\naaa\n\nbbb\n\nccc\n\nddd\n\nddd\n\nddd\n\neee\n\nfff";
10    public $y = "ddd\n\naaa\n\nbbb\n\nbbb\n\nccc\n\nccc\n\neee";
11
12    function test_render_table(){
13        $diff = new Diff(explode("\n", $this->x), explode("\n", $this->y));
14        $diffformatter = new TableDiffFormatter();
15        $actual = $diffformatter->format($diff);
16        $expected = '<tr><td class="diff-blockheader" colspan="2">Line 1:</td>
17<td class="diff-blockheader" colspan="2">Line 1:</td>
18</tr>
19<tr><td class="diff-lineheader">-</td><td class="diff-deletedline"><strong class="diff-mark">zzz</strong></td><td class="diff-lineheader">+</td><td class="diff-addedline"><strong class="diff-mark">ddd</strong></td></tr>
20<tr><td class="diff-lineheader">&#160;</td><td class="diff-context"></td><td class="diff-lineheader">&#160;</td><td class="diff-context"></td></tr>
21<tr><td class="diff-lineheader">&#160;</td><td class="diff-context">aaa</td><td class="diff-lineheader">&#160;</td><td class="diff-context">aaa</td></tr>
22<tr><td colspan="2">&#160;</td><td class="diff-lineheader">+</td><td class="diff-addedline"></td></tr>
23<tr><td colspan="2">&#160;</td><td class="diff-lineheader">+</td><td class="diff-addedline">bbb</td></tr>
24<tr><td class="diff-lineheader">&#160;</td><td class="diff-context"></td><td class="diff-lineheader">&#160;</td><td class="diff-context"></td></tr>
25<tr><td class="diff-lineheader">&#160;</td><td class="diff-context">bbb</td><td class="diff-lineheader">&#160;</td><td class="diff-context">bbb</td></tr>
26<tr><td class="diff-blockheader" colspan="2">Line 7:</td>
27<td class="diff-blockheader" colspan="2">Line 9:</td>
28</tr>
29<tr><td class="diff-lineheader">&#160;</td><td class="diff-context">ccc</td><td class="diff-lineheader">&#160;</td><td class="diff-context">ccc</td></tr>
30<tr><td class="diff-lineheader">&#160;</td><td class="diff-context"></td><td class="diff-lineheader">&#160;</td><td class="diff-context"></td></tr>
31<tr><td class="diff-lineheader">-</td><td class="diff-deletedline"><strong class="diff-mark">ddd </strong></td><td class="diff-lineheader">+</td><td class="diff-addedline"><strong class="diff-mark">ccc</strong></td></tr>
32<tr><td class="diff-lineheader">-</td><td class="diff-deletedline"><strong class="diff-mark"> </strong></td><td class="diff-lineheader">+</td><td class="diff-addedline"></td></tr>
33<tr><td class="diff-lineheader">-</td><td class="diff-deletedline"><strong class="diff-mark">ddd </strong></td><td class="diff-lineheader">+</td><td class="diff-addedline"></td></tr>
34<tr><td class="diff-lineheader">-</td><td class="diff-deletedline"><strong class="diff-mark"> </strong></td><td class="diff-lineheader">+</td><td class="diff-addedline"></td></tr>
35<tr><td class="diff-lineheader">-</td><td class="diff-deletedline"><strong class="diff-mark">ddd</strong></td><td class="diff-lineheader">+</td><td class="diff-addedline"></td></tr>
36<tr><td class="diff-lineheader">&#160;</td><td class="diff-context"></td><td class="diff-lineheader">&#160;</td><td class="diff-context"></td></tr>
37<tr><td class="diff-lineheader">&#160;</td><td class="diff-context">eee</td><td class="diff-lineheader">&#160;</td><td class="diff-context">eee</td></tr>
38<tr><td class="diff-lineheader">-</td><td class="diff-deletedline"></td><td colspan="2">&#160;</td></tr>
39<tr><td class="diff-lineheader">-</td><td class="diff-deletedline">fff</td><td colspan="2">&#160;</td></tr>
40';
41        $this->assertEquals($expected, $actual);
42    }
43
44    function test_render_inline(){
45        $diff = new Diff(explode("\n", $this->x), explode("\n", $this->y));
46        $diffformatter = new InlineDiffFormatter();
47        $actual = $diffformatter->format($diff);
48        $expected = '<tr><td colspan="2" class="diff-blockheader">@@ Line -1,5 +1,7 @@&#160;<span class="diff-deletedline"><del>removed</del></span>&#160;<span class="diff-addedline">created</span></td></tr>
49
50<tr><td class="diff-lineheader">&#160;</td><td><span class="diff-deletedline"><del>zzz</del></span><span class="diff-addedline">ddd</span></td></tr>
51<tr><td class="diff-lineheader">&#160;</td><td class="diff-context"></td></tr>
52<tr><td class="diff-lineheader">&#160;</td><td class="diff-context">aaa</td></tr>
53<tr><td class="diff-lineheader">&#160;</td><td class="diff-addedline"></td></tr>
54<tr><td class="diff-lineheader">&#160;</td><td class="diff-addedline">bbb</td></tr>
55<tr><td class="diff-lineheader">&#160;</td><td class="diff-context"></td></tr>
56<tr><td class="diff-lineheader">&#160;</td><td class="diff-context">bbb</td></tr>
57<tr><td colspan="2" class="diff-blockheader">@@ Line -7,11 +9,5 @@&#160;<span class="diff-deletedline"><del>removed</del></span>&#160;<span class="diff-addedline">created</span></td></tr>
58
59<tr><td class="diff-lineheader">&#160;</td><td class="diff-context">ccc</td></tr>
60<tr><td class="diff-lineheader">&#160;</td><td class="diff-context"></td></tr>
61<tr><td class="diff-lineheader">&#160;</td><td><span class="diff-deletedline"><del>ddd </del></span></td></tr>
62<tr><td class="diff-lineheader">&#160;</td><td><span class="diff-deletedline"><del> </del></span></td></tr>
63<tr><td class="diff-lineheader">&#160;</td><td><span class="diff-deletedline"><del>ddd </del></span></td></tr>
64<tr><td class="diff-lineheader">&#160;</td><td><span class="diff-deletedline"><del> </del></span></td></tr>
65<tr><td class="diff-lineheader">&#160;</td><td><span class="diff-deletedline"><del>ddd</del></span><span class="diff-addedline">ccc</span></td></tr>
66<tr><td class="diff-lineheader">&#160;</td><td class="diff-context"></td></tr>
67<tr><td class="diff-lineheader">&#160;</td><td class="diff-context">eee</td></tr>
68<tr><td class="diff-lineheader">&#160;</td><td class="diff-deletedline"><del></del></td></tr>
69<tr><td class="diff-lineheader">&#160;</td><td class="diff-deletedline"><del>fff</del></td></tr>
70';
71        $this->assertEquals($expected, $actual);
72    }
73
74    function test_engine_diag(){
75        // initialize
76        $eng = new _DiffEngine;
77        $eng->diff(explode("\n", $this->x), explode("\n", $this->y));
78        // check
79        $this->assertEquals(
80            array(9, array(array(0,0),array(1,2),array(3,4),array(4,5),array(5,7),array(6,9),array(7,10),array(9,12),array(15,13))),
81            $eng->_diag(0, 15, 0, 13, 8)
82        );
83    }
84}
85//Setup VIM: ex: et ts=4 :
86