@@ -162,5 +162,121 @@ describe('findMatchingBlocks', function(){
162
162
expect ( res [ 2 ] . length ) . eql ( 1 ) ;
163
163
} ) ;
164
164
} ) ;
165
+
166
+ describe ( 'HTML special case' , function ( ) {
167
+ beforeEach ( function ( ) {
168
+ const before = htmlToTokens ( '<div>Hello <p>foo</p> world! Hello Earth!</div>' ) ;
169
+ const after = htmlToTokens ( '<div>Hello <p>foo</p> world! <p>bar</p> baz!</div>' ) ;
170
+ segment = createSegment ( before , after , 0 , 0 ) ;
171
+ res = cut ( segment ) ;
172
+ } ) ;
173
+
174
+ it ( 'should return 2 matches' , function ( ) {
175
+ expect ( res . length ) . to . equal ( 2 ) ;
176
+ } ) ;
177
+
178
+ it ( 'should match "<div>Hello <p>foo</p> world!"' , function ( ) {
179
+ expect ( res [ 0 ] . startInBefore ) . eql ( 0 ) ;
180
+ expect ( res [ 0 ] . startInAfter ) . eql ( 0 ) ;
181
+ expect ( res [ 0 ] . endInBefore ) . eql ( 8 ) ;
182
+ expect ( res [ 0 ] . endInAfter ) . eql ( 8 ) ;
183
+ expect ( res [ 0 ] . length ) . eql ( 9 ) ;
184
+ } ) ;
185
+
186
+ it ( 'should match "</div>"' , function ( ) {
187
+ expect ( res [ 1 ] . startInBefore ) . eql ( 12 ) ;
188
+ expect ( res [ 1 ] . startInAfter ) . eql ( 14 ) ;
189
+ expect ( res [ 1 ] . endInBefore ) . eql ( 12 ) ;
190
+ expect ( res [ 1 ] . endInAfter ) . eql ( 14 ) ;
191
+ expect ( res [ 1 ] . length ) . eql ( 1 ) ;
192
+ } ) ;
193
+ } ) ;
194
+
195
+ describe ( 'HTML special case -- reverse' , function ( ) {
196
+ beforeEach ( function ( ) {
197
+ const before = htmlToTokens ( '<div>Hello <p>foo</p> world! <p>bar</p> baz!</div>' ) ;
198
+ const after = htmlToTokens ( '<div>Hello <p>foo</p> world! Hello Earth!</div>' ) ;
199
+ segment = createSegment ( before , after , 0 , 0 ) ;
200
+ res = cut ( segment ) ;
201
+ } ) ;
202
+
203
+ it ( 'should return 2 matches' , function ( ) {
204
+ expect ( res . length ) . to . equal ( 2 ) ;
205
+ } ) ;
206
+
207
+ it ( 'should match "<div>Hello <p>foo</p> world!"' , function ( ) {
208
+ expect ( res [ 0 ] . startInBefore ) . eql ( 0 ) ;
209
+ expect ( res [ 0 ] . startInAfter ) . eql ( 0 ) ;
210
+ expect ( res [ 0 ] . endInBefore ) . eql ( 8 ) ;
211
+ expect ( res [ 0 ] . endInAfter ) . eql ( 8 ) ;
212
+ expect ( res [ 0 ] . length ) . eql ( 9 ) ;
213
+ } ) ;
214
+
215
+ it ( 'should match "</div>"' , function ( ) {
216
+ expect ( res [ 1 ] . startInBefore ) . eql ( 14 ) ;
217
+ expect ( res [ 1 ] . startInAfter ) . eql ( 12 ) ;
218
+ expect ( res [ 1 ] . endInBefore ) . eql ( 14 ) ;
219
+ expect ( res [ 1 ] . endInAfter ) . eql ( 12 ) ;
220
+ expect ( res [ 1 ] . length ) . eql ( 1 ) ;
221
+ } ) ;
222
+ } ) ;
223
+
224
+ describe ( 'HTML special case with blockquote' , function ( ) {
225
+ beforeEach ( function ( ) {
226
+ const before = htmlToTokens ( '<div>Hello <p>foo</p> world! <blockquote>Hello Earth!</blockquote></div>' ) ;
227
+ const after = htmlToTokens ( '<div>Hello <p>foo</p> world! <p>Hello Earth!</p></div>' ) ;
228
+ segment = createSegment ( before , after , 0 , 0 ) ;
229
+ res = cut ( segment ) ;
230
+ } ) ;
231
+
232
+ it ( 'should return 2 matches' , function ( ) {
233
+ expect ( res . length ) . to . equal ( 2 ) ;
234
+ } ) ;
235
+
236
+ it ( 'should match "<div>Hello <p>foo</p> world!"' , function ( ) {
237
+ expect ( res [ 0 ] . startInBefore ) . eql ( 0 ) ;
238
+ expect ( res [ 0 ] . startInAfter ) . eql ( 0 ) ;
239
+ expect ( res [ 0 ] . endInBefore ) . eql ( 8 ) ;
240
+ expect ( res [ 0 ] . endInAfter ) . eql ( 8 ) ;
241
+ expect ( res [ 0 ] . length ) . eql ( 9 ) ;
242
+ } ) ;
243
+
244
+ it ( 'should match "</div>"' , function ( ) {
245
+ expect ( res [ 1 ] . startInBefore ) . eql ( 14 ) ;
246
+ expect ( res [ 1 ] . startInAfter ) . eql ( 14 ) ;
247
+ expect ( res [ 1 ] . endInBefore ) . eql ( 14 ) ;
248
+ expect ( res [ 1 ] . endInAfter ) . eql ( 14 ) ;
249
+ expect ( res [ 1 ] . length ) . eql ( 1 ) ;
250
+ } ) ;
251
+ } ) ;
252
+
253
+ describe ( 'HTML special case with blockquote -- reverse' , function ( ) {
254
+ beforeEach ( function ( ) {
255
+ const before = htmlToTokens ( '<div>Hello <p>foo</p> world! <p>Hello Earth!</p></div>' ) ;
256
+ const after = htmlToTokens ( '<div>Hello <p>foo</p> world! <blockquote>Hello Earth!</blockquote></div>' ) ;
257
+ segment = createSegment ( before , after , 0 , 0 ) ;
258
+ res = cut ( segment ) ;
259
+ } ) ;
260
+
261
+ it ( 'should return 2 matches' , function ( ) {
262
+ expect ( res . length ) . to . equal ( 2 ) ;
263
+ } ) ;
264
+
265
+ it ( 'should match "<div>Hello <p>foo</p> world!"' , function ( ) {
266
+ expect ( res [ 0 ] . startInBefore ) . eql ( 0 ) ;
267
+ expect ( res [ 0 ] . startInAfter ) . eql ( 0 ) ;
268
+ expect ( res [ 0 ] . endInBefore ) . eql ( 8 ) ;
269
+ expect ( res [ 0 ] . endInAfter ) . eql ( 8 ) ;
270
+ expect ( res [ 0 ] . length ) . eql ( 9 ) ;
271
+ } ) ;
272
+
273
+ it ( 'should match "</div>"' , function ( ) {
274
+ expect ( res [ 1 ] . startInBefore ) . eql ( 14 ) ;
275
+ expect ( res [ 1 ] . startInAfter ) . eql ( 14 ) ;
276
+ expect ( res [ 1 ] . endInBefore ) . eql ( 14 ) ;
277
+ expect ( res [ 1 ] . endInAfter ) . eql ( 14 ) ;
278
+ expect ( res [ 1 ] . length ) . eql ( 1 ) ;
279
+ } ) ;
280
+ } ) ;
165
281
} ) ;
166
282
} ) ;
0 commit comments