11import cut from '../dist/htmldiff.js' ;
22
3+ const tableBasic = `<table>
4+ <thead>
5+ <tr>
6+ <th id="col1">col1</th>
7+ <th id="col2">col2</th>
8+ </tr>
9+ </thead>
10+ <tbody>
11+ <tr>
12+ <td>a</td>
13+ <td>b</td>
14+ </tr>
15+ <tr>
16+ <td>c</td>
17+ <td>d</td>
18+ </tr>
19+ </tbody>
20+ </table>` ;
21+
22+ const tableBasicEdited = `<table>
23+ <thead>
24+ <tr>
25+ <th id="col1">col1</th>
26+ <th id="col2">col2</th>
27+ </tr>
28+ </thead>
29+ <tbody>
30+ <tr>
31+ <td>aa</td>
32+ <td>b</td>
33+ </tr>
34+ <tr>
35+ <td>c</td>
36+ <td>dd</td>
37+ </tr>
38+ </tbody>
39+ </table>` ;
40+
41+ const basicEditDiff = `<table>
42+ <thead>
43+ <tr>
44+ <th id="col1">col1</th>
45+ <th id="col2">col2</th>
46+ </tr>
47+ </thead>
48+ <tbody>
49+ <tr>
50+ <td><del data-operation-index="1">a</del><ins data-operation-index="1">aa</ins></td>
51+ <td>b</td>
52+ </tr>
53+ <tr>
54+ <td>c</td>
55+ <td><del data-operation-index="3">d</del><ins data-operation-index="3">dd</ins></td>
56+ </tr>
57+ </tbody>
58+ </table>` ;
59+
60+ const tableFancy = `<table>
61+ <thead>
62+ <tr>
63+ <th id="col1">col1</th>
64+ <th id="col2">col2</th>
65+ </tr>
66+ </thead>
67+ <tbody>
68+ <tr>
69+ <td><p>a</p><p>aa</p></td>
70+ <td>b<br>bb</td>
71+ </tr>
72+ <tr>
73+ <td><ul><li>c</li><li>cc</li></ul></td>
74+ <td><ol><li>c</li><li>cc</li></ol></td>
75+ </tr>
76+ </tbody>
77+ </table>` ;
78+
79+ const tableFancyEdited = `<table>
80+ <thead>
81+ <tr>
82+ <th id="col1">col1</th>
83+ <th id="col2">col2</th>
84+ </tr>
85+ </thead>
86+ <tbody>
87+ <tr>
88+ <td><p>a</p><p>aa</p></td>
89+ <td>b<br>bb</td>
90+ </tr>
91+ <tr>
92+ <td><ul><li>c</li><li>cc</li></ul></td>
93+ <td><ol><li>d</li><li>cc</li></ol></td>
94+ </tr>
95+ </tbody>
96+ </table>` ;
97+
98+ const fancyEditDiff = `<table>
99+ <thead>
100+ <tr>
101+ <th id="col1">col1</th>
102+ <th id="col2">col2</th>
103+ </tr>
104+ </thead>
105+ <tbody>
106+ <tr>
107+ <td><p>a</p><p>aa</p></td>
108+ <td>b<br></br>bb</td>
109+ </tr>
110+ <tr>
111+ <td><ul><li>c</li><li>cc</li></ul></td>
112+ <td><ol><li><del data-operation-index="1">c</del><ins data-operation-index="1">d</ins></li><li>cc</li></ol></td>
113+ </tr>
114+ </tbody>
115+ </table>` ;
116+
117+ const basicToFancy = `<table>
118+ <thead>
119+ <tr>
120+ <th id="col1">col1</th>
121+ <th id="col2">col2</th>
122+ </tr>
123+ </thead>
124+ <tbody>
125+ <tr>
126+ <td><del data-operation-index="1">a</del></td><td><del data-operation-index="1">b</del><p data-diff-node="ins" data-operation-index="1"><ins data-operation-index="1">a</ins></p><p data-diff-node="ins" data-operation-index="1"><ins data-operation-index="1">aa</ins></p></td><td><ins data-operation-index="1">b</ins><br data-diff-node="ins" data-operation-index="1"></br><ins data-operation-index="1">bb</ins></td>
127+ </tr>
128+ <tr>
129+ <td><del data-operation-index="3">c</del></td><td><del data-operation-index="3">d</del><ul data-diff-node="ins" data-operation-index="3"><li data-diff-node="ins" data-operation-index="3"><ins data-operation-index="3">c</ins></li><li data-diff-node="ins" data-operation-index="3"><ins data-operation-index="3">cc</ins></li></ul></td><td><ol data-diff-node="ins" data-operation-index="3"><li data-diff-node="ins" data-operation-index="3"><ins data-operation-index="3">c</ins></li><li data-diff-node="ins" data-operation-index="3"><ins data-operation-index="3">cc</ins></li></ol></td>
130+ </tr>
131+ </tbody>
132+ </table>` ;
133+
134+ const fancyToBasic = `<table>
135+ <thead>
136+ <tr>
137+ <th id="col1">col1</th>
138+ <th id="col2">col2</th>
139+ </tr>
140+ </thead>
141+ <tbody>
142+ <tr>
143+ <td><del data-operation-index="1">a</del></td><td><del data-operation-index="1">b</del><p data-diff-node="ins" data-operation-index="1"><ins data-operation-index="1">a</ins></p><p data-diff-node="ins" data-operation-index="1"><ins data-operation-index="1">aa</ins></p></td><td><ins data-operation-index="1">b</ins><br data-diff-node="ins" data-operation-index="1"></br><ins data-operation-index="1">bb</ins></td>
144+ </tr>
145+ <tr>
146+ <td><del data-operation-index="3">c</del></td><td><del data-operation-index="3">d</del><ul data-diff-node="ins" data-operation-index="3"><li data-diff-node="ins" data-operation-index="3"><ins data-operation-index="3">c</ins></li><li data-diff-node="ins" data-operation-index="3"><ins data-operation-index="3">cc</ins></li></ul></td><td><ol data-diff-node="ins" data-operation-index="3"><li data-diff-node="ins" data-operation-index="3"><ins data-operation-index="3">c</ins></li><li data-diff-node="ins" data-operation-index="3"><ins data-operation-index="3">cc</ins></li></ol></td>
147+ </tr>
148+ </tbody>
149+ </table>` ;
150+
151+ const textWithSimilarities = `<p>a</p><p>aa</p>` ;
152+
3153describe ( 'Pain Games' , function ( ) {
4154 let res ;
5155
@@ -47,7 +197,76 @@ describe('Pain Games', function(){
47197 expect ( res ) . to . equal ( 'here <strong>is a </strong><del data-operation-index="1"><strong>bunch of</strong> styled</del>' +
48198 '<ins data-operation-index="1"><em><strong>bunch of</strong> styled</em></ins> text string' ) ;
49199 } ) ;
50- }
200+ } ) ;
201+
202+ describe ( 'table -- basic' , function ( ) {
203+ it ( 'should do alright adding a table' , function ( ) {
204+ res = cut ( textWithSimilarities , tableBasic ) ;
205+ expect ( res ) . to . equal ( // string concatenation done purely for readability
206+ '<p data-diff-node="del" data-operation-index="0"><del data-operation-index="0">a</del></p>' +
207+ '<p data-diff-node="del" data-operation-index="0"><del data-operation-index="0">aa</del></p>' +
208+ '<table data-diff-node="ins" data-operation-index="0">' +
209+ '<thead data-diff-node="ins" data-operation-index="0"><tr data-diff-node="ins" data-operation-index="0">' +
210+ '<th id="col1" data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">col1</ins></th>' +
211+ '<th id="col2" data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">col2</ins></th>' +
212+ '</tr></thead>' +
213+ '<tbody data-diff-node="ins" data-operation-index="0">' +
214+ '<tr data-diff-node="ins" data-operation-index="0">' +
215+ '<td data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">a</ins></td>' +
216+ '<td data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">b</ins></td>' +
217+ '</tr>' +
218+ '<tr data-diff-node="ins" data-operation-index="0">' +
219+ '<td data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">c</ins></td>' +
220+ '<td data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">d</ins></td>' +
221+ '</tr>' +
222+ '</tbody>' +
223+ '</table>'
224+ ) ;
225+ } ) ;
226+ it ( 'should do alright with editing one table cell' , function ( ) {
227+ res = cut ( tableBasic , tableBasicEdited ) ;
228+ expect ( res ) . to . equal ( basicEditDiff ) ;
229+ } ) ;
230+ } ) ;
231+
232+ describe ( 'table -- fancy' , function ( ) {
233+ it ( 'should do alright adding a fancy table with similar text' , function ( ) {
234+ res = cut ( textWithSimilarities , tableFancy ) ;
235+ expect ( res ) . to . equal ( // string concatenation done purely for readability
236+ '<p data-diff-node="del" data-operation-index="0"><del data-operation-index="0">a</del></p>' +
237+ '<p data-diff-node="del" data-operation-index="0"><del data-operation-index="0">aa</del></p>' +
238+ '<table data-diff-node="ins" data-operation-index="0">' +
239+ '<thead data-diff-node="ins" data-operation-index="0">' +
240+ '<tr data-diff-node="ins" data-operation-index="0">' +
241+ '<th id="col1" data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">col1</ins></th>' +
242+ '<th id="col2" data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">col2</ins></th>' +
243+ '</tr>' +
244+ '</thead>' +
245+ '<tbody data-diff-node="ins" data-operation-index="0">' +
246+ '<tr data-diff-node="ins" data-operation-index="0">' +
247+ '<td data-diff-node="ins" data-operation-index="0"><p data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">a</ins></p><p data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">aa</ins></p></td>' +
248+ '<td data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">b</ins><br data-diff-node="ins" data-operation-index="0"></br><ins data-operation-index="0">bb</ins></td>' +
249+ '</tr>' +
250+ '<tr data-diff-node="ins" data-operation-index="0">' +
251+ '<td data-diff-node="ins" data-operation-index="0"><ul data-diff-node="ins" data-operation-index="0"><li data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">c</ins></li><li data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">cc</ins></li></ul></td>' +
252+ '<td data-diff-node="ins" data-operation-index="0"><ol data-diff-node="ins" data-operation-index="0"><li data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">c</ins></li><li data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">cc</ins></li></ol></td>' +
253+ '</tr>' +
254+ '</tbody>' +
255+ '</table>'
256+ ) ;
257+ } ) ;
258+ it ( 'should do alright with editing one fancy table cell' , function ( ) {
259+ res = cut ( tableFancy , tableFancyEdited ) ;
260+ expect ( res ) . to . equal ( fancyEditDiff ) ;
261+ } ) ;
262+ it ( 'should do alright converting a basic table to a fancy one' , function ( ) {
263+ res = cut ( tableBasic , tableFancy ) ;
264+ expect ( res ) . to . equal ( basicToFancy ) ;
265+ } ) ;
266+ it ( 'should do alright converting a fancy table to a basic one' , function ( ) {
267+ res = cut ( tableBasic , tableFancy ) ;
268+ expect ( res ) . to . equal ( fancyToBasic ) ;
269+ } ) ;
270+ } ) ;
51271
52- ) ;
53272} ) ;
0 commit comments