linematch_spec.lua (82350B)
1 local t = require('test.testutil') 2 local n = require('test.functional.testnvim')() 3 local Screen = require('test.functional.ui.screen') 4 5 local feed = n.feed 6 local clear = n.clear 7 local write_file = t.write_file 8 9 describe('Diff mode screen with 3 diffs open', function() 10 local fname = 'Xtest-functional-diff-screen-1' 11 local fname_2 = fname .. '.2' 12 local fname_3 = fname .. '.3' 13 local screen 14 15 local reread = function() 16 feed(':e<cr><c-w>w:e<cr><c-w>w:e<cr><c-w>w') 17 end 18 19 setup(function() 20 clear() 21 os.remove(fname) 22 os.remove(fname_2) 23 os.remove(fname_3) 24 end) 25 26 teardown(function() 27 os.remove(fname) 28 os.remove(fname_2) 29 os.remove(fname_3) 30 end) 31 32 before_each(function() 33 clear() 34 feed(':set diffopt=internal,filler,linematch:30<cr>') 35 feed(':e ' .. fname .. '<cr>') 36 feed(':vnew ' .. fname_2 .. '<cr>') 37 feed(':vnew ' .. fname_3 .. '<cr>') 38 feed(':windo diffthis<cr>') 39 40 screen = Screen.new(100, 16) 41 feed('<c-w>=') 42 feed(':windo set nu!<cr>') 43 end) 44 45 describe( 46 'setup the diff screen to look like a merge conflict with 3 files in diff mode', 47 function() 48 before_each(function() 49 local f1 = [[ 50 51 common line 52 AAA 53 AAA 54 AAA 55 ]] 56 local f2 = [[ 57 58 common line 59 <<<<<<< HEAD 60 AAA 61 AAA 62 AAA 63 ======= 64 BBB 65 BBB 66 BBB 67 >>>>>>> branch1 68 ]] 69 local f3 = [[ 70 71 common line 72 BBB 73 BBB 74 BBB 75 ]] 76 77 write_file(fname, f1, false) 78 write_file(fname_2, f2, false) 79 write_file(fname_3, f3, false) 80 reread() 81 end) 82 83 it('get from window 1', function() 84 feed('1<c-w>w') 85 feed(':2,6diffget screen-1.2<cr>') 86 screen:expect([[ 87 {7: }{8: 1 }^ │{7: }{8: 1 } │{7: }{8: 1 } | 88 {7: }{8: 2 }common line │{7: }{8: 2 }common line │{7: }{8: 2 }common line | 89 {7: }{8: 3 }{22:<<<<<<< HEAD }│{7: }{8: 3 }{22:<<<<<<< HEAD }│{7: }{8: }{23:---------------------------}| 90 {7: }{8: 4 } AAA │{7: }{8: 4 } AAA │{7: }{8: 3 } AAA | 91 {7: }{8: 5 } AAA │{7: }{8: 5 } AAA │{7: }{8: 4 } AAA | 92 {7: }{8: 6 } AAA │{7: }{8: 6 } AAA │{7: }{8: 5 } AAA | 93 {7: }{8: 7 }{22:======= }│{7: }{8: 7 }{22:======= }│{7: }{8: }{23:---------------------------}| 94 {7: }{8: 8 }{22: BBB }│{7: }{8: 8 }{22: BBB }│{7: }{8: }{23:---------------------------}| 95 {7: }{8: 9 }{22: BBB }│{7: }{8: 9 }{22: BBB }│{7: }{8: }{23:---------------------------}| 96 {7: }{8: 10 }{22: BBB }│{7: }{8: 10 }{22: BBB }│{7: }{8: }{23:---------------------------}| 97 {7: }{8: 11 }{22:>>>>>>> branch1 }│{7: }{8: 11 }{22:>>>>>>> branch1 }│{7: }{8: }{23:---------------------------}| 98 {1:~ }│{1:~ }│{1:~ }|*3 99 {3:<-functional-diff-screen-1.3 [+] }{2:<est-functional-diff-screen-1.2 Xtest-functional-diff-screen-1 }| 100 :2,6diffget screen-1.2 | 101 ]]) 102 end) 103 104 it('get from window 2', function() 105 feed('2<c-w>w') 106 feed(':5,7diffget screen-1.3<cr>') 107 screen:expect([[ 108 {7: }{8: 1 } │{7: }{8: 1 }^ │{7: }{8: 1 } | 109 {7: }{8: 2 }common line │{7: }{8: 2 }common line │{7: }{8: 2 }common line | 110 {7: }{8: }{23:---------------------------}│{7: }{8: 3 }{22:<<<<<<< HEAD }│{7: }{8: }{23:---------------------------}| 111 {7: }{8: }{23:---------------------------}│{7: }{8: 4 }{22: AAA }│{7: }{8: 3 }{22: AAA }| 112 {7: }{8: 3 }{22: BBB }│{7: }{8: 5 }{22: BBB }│{7: }{8: }{23:---------------------------}| 113 {7: }{8: 4 }{4: }{27:BBB}{4: }│{7: }{8: 6 }{4: }{27:BBB}{4: }│{7: }{8: 4 }{4: }{27:AAA}{4: }| 114 {7: }{8: 5 }{4: }{27:BBB}{4: }│{7: }{8: 7 }{4: }{27:BBB}{4: }│{7: }{8: 5 }{4: }{27:AAA}{4: }| 115 {7: }{8: }{23:---------------------------}│{7: }{8: 8 }{22:>>>>>>> branch1 }│{7: }{8: }{23:---------------------------}| 116 {1:~ }│{1:~ }│{1:~ }|*6 117 {2:Xtest-functional-diff-screen-1.3 }{3:<functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }| 118 :5,7diffget screen-1.3 | 119 ]]) 120 end) 121 122 it('get from window 3', function() 123 feed('3<c-w>w') 124 feed(':5,6diffget screen-1.2<cr>') 125 screen:expect([[ 126 {7: }{8: 1 } │{7: }{8: 1 } │{7: }{8: 1 }^ | 127 {7: }{8: 2 }common line │{7: }{8: 2 }common line │{7: }{8: 2 }common line | 128 {7: }{8: }{23:---------------------------}│{7: }{8: 3 }{22:<<<<<<< HEAD }│{7: }{8: }{23:---------------------------}| 129 {7: }{8: }{23:---------------------------}│{7: }{8: 4 }{22: AAA }│{7: }{8: 3 }{22: AAA }| 130 {7: }{8: }{23:---------------------------}│{7: }{8: 5 }{22: AAA }│{7: }{8: 4 }{22: AAA }| 131 {7: }{8: }{23:---------------------------}│{7: }{8: 6 }{22: AAA }│{7: }{8: 5 }{22: AAA }| 132 {7: }{8: }{23:---------------------------}│{7: }{8: 7 }{22:======= }│{7: }{8: 6 }{22:======= }| 133 {7: }{8: 3 } BBB │{7: }{8: 8 } BBB │{7: }{8: 7 } BBB | 134 {7: }{8: 4 } BBB │{7: }{8: 9 } BBB │{7: }{8: 8 } BBB | 135 {7: }{8: 5 } BBB │{7: }{8: 10 } BBB │{7: }{8: 9 } BBB | 136 {7: }{8: }{23:---------------------------}│{7: }{8: 11 }{22:>>>>>>> branch1 }│{7: }{8: 10 }{22:>>>>>>> branch1 }| 137 {1:~ }│{1:~ }│{1:~ }|*3 138 {2:Xtest-functional-diff-screen-1.3 <est-functional-diff-screen-1.2 }{3:<st-functional-diff-screen-1 [+] }| 139 :5,6diffget screen-1.2 | 140 ]]) 141 end) 142 143 it('put from window 2 - part', function() 144 feed('2<c-w>w') 145 feed(':6,8diffput screen-1<cr>') 146 screen:expect([[ 147 {7: }{8: 1 } │{7: }{8: 1 }^ │{7: }{8: 1 } | 148 {7: }{8: 2 }common line │{7: }{8: 2 }common line │{7: }{8: 2 }common line | 149 {7: }{8: }{23:---------------------------}│{7: }{8: 3 }{22:<<<<<<< HEAD }│{7: }{8: }{23:---------------------------}| 150 {7: }{8: }{23:---------------------------}│{7: }{8: 4 }{22: AAA }│{7: }{8: 3 }{22: AAA }| 151 {7: }{8: }{23:---------------------------}│{7: }{8: 5 }{22: AAA }│{7: }{8: 4 }{22: AAA }| 152 {7: }{8: }{23:---------------------------}│{7: }{8: 6 }{22: AAA }│{7: }{8: 5 }{22: AAA }| 153 {7: }{8: }{23:---------------------------}│{7: }{8: 7 }{22:======= }│{7: }{8: 6 }{22:======= }| 154 {7: }{8: 3 }{22: BBB }│{7: }{8: 8 }{22: BBB }│{7: }{8: }{23:---------------------------}| 155 {7: }{8: 4 }{22: BBB }│{7: }{8: 9 }{22: BBB }│{7: }{8: }{23:---------------------------}| 156 {7: }{8: 5 } BBB │{7: }{8: 10 } BBB │{7: }{8: 7 } BBB | 157 {7: }{8: }{23:---------------------------}│{7: }{8: 11 }{22:>>>>>>> branch1 }│{7: }{8: }{23:---------------------------}| 158 {1:~ }│{1:~ }│{1:~ }|*3 159 {2:Xtest-functional-diff-screen-1.3 }{3:<est-functional-diff-screen-1.2 }{2:<st-functional-diff-screen-1 [+] }| 160 :6,8diffput screen-1 | 161 ]]) 162 end) 163 164 it('put from window 2 - part to end', function() 165 feed('2<c-w>w') 166 feed(':6,11diffput screen-1<cr>') 167 screen:expect([[ 168 {7: }{8: 1 } │{7: }{8: 1 }^ │{7: }{8: 1 } | 169 {7: }{8: 2 }common line │{7: }{8: 2 }common line │{7: }{8: 2 }common line | 170 {7: }{8: }{23:---------------------------}│{7: }{8: 3 }{22:<<<<<<< HEAD }│{7: }{8: }{23:---------------------------}| 171 {7: }{8: }{23:---------------------------}│{7: }{8: 4 }{22: AAA }│{7: }{8: 3 }{22: AAA }| 172 {7: }{8: }{23:---------------------------}│{7: }{8: 5 }{22: AAA }│{7: }{8: 4 }{22: AAA }| 173 {7: }{8: }{23:---------------------------}│{7: }{8: 6 }{22: AAA }│{7: }{8: 5 }{22: AAA }| 174 {7: }{8: }{23:---------------------------}│{7: }{8: 7 }{22:======= }│{7: }{8: 6 }{22:======= }| 175 {7: }{8: 3 } BBB │{7: }{8: 8 } BBB │{7: }{8: 7 } BBB | 176 {7: }{8: 4 } BBB │{7: }{8: 9 } BBB │{7: }{8: 8 } BBB | 177 {7: }{8: 5 } BBB │{7: }{8: 10 } BBB │{7: }{8: 9 } BBB | 178 {7: }{8: }{23:---------------------------}│{7: }{8: 11 }{22:>>>>>>> branch1 }│{7: }{8: 10 }{22:>>>>>>> branch1 }| 179 {1:~ }│{1:~ }│{1:~ }|*3 180 {2:Xtest-functional-diff-screen-1.3 }{3:<est-functional-diff-screen-1.2 }{2:<st-functional-diff-screen-1 [+] }| 181 :6,11diffput screen-1 | 182 ]]) 183 end) 184 end 185 ) 186 end) 187 188 describe('Diff mode screen with 2 diffs open', function() 189 local fname = 'Xtest-functional-diff-screen-1' 190 local fname_2 = fname .. '.2' 191 local screen 192 193 local reread = function() 194 feed(':e<cr><c-w>w:e<cr><c-w>w:e<cr><c-w>w') 195 end 196 197 setup(function() 198 clear() 199 os.remove(fname) 200 os.remove(fname_2) 201 end) 202 203 teardown(function() 204 os.remove(fname) 205 os.remove(fname_2) 206 end) 207 208 before_each(function() 209 clear() 210 feed(':e ' .. fname .. '<cr>') 211 feed(':vnew ' .. fname_2 .. '<cr>') 212 feed(':windo diffthis<cr>') 213 214 screen = Screen.new(100, 20) 215 feed('<c-w>=') 216 feed(':windo set nu!<cr>') 217 end) 218 219 describe('setup a diff with 2 files and set linematch:30', function() 220 before_each(function() 221 feed(':set diffopt=internal,filler,linematch:30<cr>') 222 local f1 = [[ 223 224 common line 225 common line 226 227 DEFabc 228 xyz 229 xyz 230 xyz 231 DEFabc 232 DEFabc 233 DEFabc 234 common line 235 common line 236 DEF 237 common line 238 DEF 239 something 240 ]] 241 local f2 = [[ 242 243 common line 244 common line 245 246 ABCabc 247 ABCabc 248 ABCabc 249 ABCabc 250 common line 251 common line 252 common line 253 something 254 ]] 255 write_file(fname, f1, false) 256 write_file(fname_2, f2, false) 257 reread() 258 end) 259 260 it('get from window 1 from line 5 to 9', function() 261 feed('1<c-w>w') 262 feed(':5,9diffget<cr>') 263 screen:expect([[ 264 {7:+ }{8: 1 }{13:^+-- 7 lines: common line··················}│{7:+ }{8: 1 }{13:+-- 7 lines: common line···················}| 265 {7: }{8: 8 }xyz │{7: }{8: 8 }xyz | 266 {7: }{8: 9 }DEFabc │{7: }{8: 9 }DEFabc | 267 {7: }{8: 10 }DEFabc │{7: }{8: 10 }DEFabc | 268 {7: }{8: 11 }DEFabc │{7: }{8: 11 }DEFabc | 269 {7: }{8: 12 }common line │{7: }{8: 12 }common line | 270 {7: }{8: 13 }common line │{7: }{8: 13 }common line | 271 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }| 272 {7: }{8: 14 }common line │{7: }{8: 15 }common line | 273 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }| 274 {7: }{8: 15 }something │{7: }{8: 17 }something | 275 {1:~ }│{1:~ }|*7 276 {3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }| 277 :5,9diffget | 278 ]]) 279 end) 280 it('get from window 2 from line 5 to 10', function() 281 feed('2<c-w>w') 282 feed(':5,10diffget<cr>') 283 screen:expect([[ 284 {7:- }{8: 1 } │{7:- }{8: 1 }^ | 285 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 286 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 287 {7: }{8: 4 } │{7: }{8: 4 } | 288 {7: }{8: 5 }ABCabc │{7: }{8: 5 }ABCabc | 289 {7: }{8: 6 }ABCabc │{7: }{8: 6 }ABCabc | 290 {7: }{8: 7 }ABCabc │{7: }{8: 7 }ABCabc | 291 {7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 8 }{27:DEF}{4:abc }| 292 {7: }{8: 9 }common line │{7: }{8: 9 }common line | 293 {7: }{8: 10 }common line │{7: }{8: 10 }common line | 294 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 11 }{22:DEF }| 295 {7: }{8: 11 }common line │{7: }{8: 12 }common line | 296 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 13 }{22:DEF }| 297 {7: }{8: 12 }something │{7: }{8: 14 }something | 298 {1:~ }│{1:~ }|*4 299 {2:Xtest-functional-diff-screen-1.2 }{3:Xtest-functional-diff-screen-1 [+] }| 300 :5,10diffget | 301 ]]) 302 end) 303 it('get all from window 2', function() 304 feed('2<c-w>w') 305 feed(':4,17diffget<cr>') 306 screen:expect([[ 307 {7:+ }{8: 1 }{13:+-- 12 lines: common line··················}│{7:+ }{8: 1 }{13:^+-- 12 lines: common line···················}| 308 {1:~ }│{1:~ }|*17 309 {2:Xtest-functional-diff-screen-1.2 }{3:Xtest-functional-diff-screen-1 [+] }| 310 :4,17diffget | 311 ]]) 312 end) 313 it('get all from window 1', function() 314 feed('1<c-w>w') 315 feed(':4,12diffget<cr>') 316 screen:expect([[ 317 {7:+ }{8: 1 }{13:^+-- 17 lines: common line··················}│{7:+ }{8: 1 }{13:+-- 17 lines: common line···················}| 318 {1:~ }│{1:~ }|*17 319 {3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }| 320 :4,12diffget | 321 ]]) 322 end) 323 it('get from window 1 using do 1 line 5', function() 324 feed('1<c-w>w') 325 feed('5gg') 326 feed('do') 327 screen:expect([[ 328 {7: }{8: 1 } │{7: }{8: 1 } | 329 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 330 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 331 {7: }{8: 4 } │{7: }{8: 4 } | 332 {7: }{8: 5 }^DEFabc │{7: }{8: 5 }DEFabc | 333 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }| 334 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }| 335 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }| 336 {7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }| 337 {7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }| 338 {7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }| 339 {7: }{8: 9 }common line │{7: }{8: 12 }common line | 340 {7: }{8: 10 }common line │{7: }{8: 13 }common line | 341 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }| 342 {7: }{8: 11 }common line │{7: }{8: 15 }common line | 343 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }| 344 {7: }{8: 12 }something │{7: }{8: 17 }something | 345 {1:~ }│{1:~ }| 346 {3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }| 347 :e | 348 ]]) 349 end) 350 it('get from window 1 using do 2 line 6', function() 351 feed('1<c-w>w') 352 feed('6gg') 353 feed('do') 354 screen:expect([[ 355 {7: }{8: 1 } │{7: }{8: 1 } | 356 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 357 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 358 {7: }{8: 4 } │{7: }{8: 4 } | 359 {7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }| 360 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }| 361 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }| 362 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }| 363 {7: }{8: 6 }^DEFabc │{7: }{8: 9 }DEFabc | 364 {7: }{8: 7 }DEFabc │{7: }{8: 10 }DEFabc | 365 {7: }{8: 8 }DEFabc │{7: }{8: 11 }DEFabc | 366 {7: }{8: 9 }common line │{7: }{8: 12 }common line | 367 {7: }{8: 10 }common line │{7: }{8: 13 }common line | 368 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }| 369 {7: }{8: 11 }common line │{7: }{8: 15 }common line | 370 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }| 371 {7: }{8: 12 }something │{7: }{8: 17 }something | 372 {1:~ }│{1:~ }| 373 {3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }| 374 :e | 375 ]]) 376 end) 377 it('get from window 1 using do 2 line 7', function() 378 feed('1<c-w>w') 379 feed('7gg') 380 feed('do') 381 screen:expect([[ 382 {7: }{8: 1 } │{7: }{8: 1 } | 383 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 384 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 385 {7: }{8: 4 } │{7: }{8: 4 } | 386 {7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }| 387 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }| 388 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }| 389 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }| 390 {7: }{8: 6 }DEFabc │{7: }{8: 9 }DEFabc | 391 {7: }{8: 7 }^DEFabc │{7: }{8: 10 }DEFabc | 392 {7: }{8: 8 }DEFabc │{7: }{8: 11 }DEFabc | 393 {7: }{8: 9 }common line │{7: }{8: 12 }common line | 394 {7: }{8: 10 }common line │{7: }{8: 13 }common line | 395 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }| 396 {7: }{8: 11 }common line │{7: }{8: 15 }common line | 397 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }| 398 {7: }{8: 12 }something │{7: }{8: 17 }something | 399 {1:~ }│{1:~ }| 400 {3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }| 401 :e | 402 ]]) 403 end) 404 it('get from window 1 using do 2 line 11', function() 405 feed('1<c-w>w') 406 feed('11gg') 407 feed('do') 408 screen:expect([[ 409 {7: }{8: 1 } │{7: }{8: 1 } | 410 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 411 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 412 {7: }{8: 4 } │{7: }{8: 4 } | 413 {7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }| 414 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }| 415 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }| 416 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }| 417 {7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }| 418 {7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }| 419 {7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }| 420 {7: }{8: 9 }common line │{7: }{8: 12 }common line | 421 {7: }{8: 10 }common line │{7: }{8: 13 }common line | 422 {7: }{8: 11 }DEF │{7: }{8: 14 }DEF | 423 {7: }{8: 12 }^common line │{7: }{8: 15 }common line | 424 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }| 425 {7: }{8: 13 }something │{7: }{8: 17 }something | 426 {1:~ }│{1:~ }| 427 {3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }| 428 :e | 429 ]]) 430 end) 431 it('get from window 1 using do 2 line 12', function() 432 feed('1<c-w>w') 433 feed('12gg') 434 feed('do') 435 screen:expect([[ 436 {7: }{8: 1 } │{7: }{8: 1 } | 437 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 438 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 439 {7: }{8: 4 } │{7: }{8: 4 } | 440 {7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }| 441 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }| 442 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }| 443 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }| 444 {7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }| 445 {7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }| 446 {7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }| 447 {7: }{8: 9 }common line │{7: }{8: 12 }common line | 448 {7: }{8: 10 }common line │{7: }{8: 13 }common line | 449 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }| 450 {7: }{8: 11 }common line │{7: }{8: 15 }common line | 451 {7: }{8: 12 }DEF │{7: }{8: 16 }DEF | 452 {7: }{8: 13 }^something │{7: }{8: 17 }something | 453 {1:~ }│{1:~ }| 454 {3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }| 455 :e | 456 ]]) 457 end) 458 it('put from window 1 using dp 1 line 5', function() 459 feed('1<c-w>w') 460 feed('5gg') 461 feed('dp') 462 screen:expect([[ 463 {7: }{8: 1 } │{7: }{8: 1 } | 464 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 465 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 466 {7: }{8: 4 } │{7: }{8: 4 } | 467 {7: }{8: 5 }^ABCabc │{7: }{8: 5 }ABCabc | 468 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }| 469 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }| 470 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }| 471 {7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }| 472 {7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }| 473 {7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }| 474 {7: }{8: 9 }common line │{7: }{8: 12 }common line | 475 {7: }{8: 10 }common line │{7: }{8: 13 }common line | 476 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }| 477 {7: }{8: 11 }common line │{7: }{8: 15 }common line | 478 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }| 479 {7: }{8: 12 }something │{7: }{8: 17 }something | 480 {1:~ }│{1:~ }| 481 {3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 [+] }| 482 :e | 483 ]]) 484 end) 485 it('put from window 1 using dp 2 line 6', function() 486 feed('1<c-w>w') 487 feed('6gg') 488 feed('dp') 489 screen:expect([[ 490 {7: }{8: 1 } │{7: }{8: 1 } | 491 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 492 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 493 {7: }{8: 4 } │{7: }{8: 4 } | 494 {7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }| 495 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }| 496 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }| 497 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }| 498 {7: }{8: 6 }^ABCabc │{7: }{8: 9 }ABCabc | 499 {7: }{8: 7 }ABCabc │{7: }{8: 10 }ABCabc | 500 {7: }{8: 8 }ABCabc │{7: }{8: 11 }ABCabc | 501 {7: }{8: 9 }common line │{7: }{8: 12 }common line | 502 {7: }{8: 10 }common line │{7: }{8: 13 }common line | 503 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }| 504 {7: }{8: 11 }common line │{7: }{8: 15 }common line | 505 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }| 506 {7: }{8: 12 }something │{7: }{8: 17 }something | 507 {1:~ }│{1:~ }| 508 {3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 [+] }| 509 :e | 510 ]]) 511 end) 512 it('put from window 1 using dp 2 line 7', function() 513 feed('1<c-w>w') 514 feed('7gg') 515 feed('dp') 516 screen:expect([[ 517 {7: }{8: 1 } │{7: }{8: 1 } | 518 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 519 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 520 {7: }{8: 4 } │{7: }{8: 4 } | 521 {7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }| 522 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }| 523 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }| 524 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }| 525 {7: }{8: 6 }ABCabc │{7: }{8: 9 }ABCabc | 526 {7: }{8: 7 }^ABCabc │{7: }{8: 10 }ABCabc | 527 {7: }{8: 8 }ABCabc │{7: }{8: 11 }ABCabc | 528 {7: }{8: 9 }common line │{7: }{8: 12 }common line | 529 {7: }{8: 10 }common line │{7: }{8: 13 }common line | 530 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }| 531 {7: }{8: 11 }common line │{7: }{8: 15 }common line | 532 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }| 533 {7: }{8: 12 }something │{7: }{8: 17 }something | 534 {1:~ }│{1:~ }| 535 {3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 [+] }| 536 :e | 537 ]]) 538 end) 539 it('put from window 1 using dp 2 line 11', function() 540 feed('1<c-w>w') 541 feed('11gg') 542 feed('dp') 543 screen:expect([[ 544 {7: }{8: 1 } │{7: }{8: 1 } | 545 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 546 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 547 {7: }{8: 4 } │{7: }{8: 4 } | 548 {7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }| 549 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }| 550 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }| 551 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }| 552 {7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }| 553 {7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }| 554 {7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }| 555 {7: }{8: 9 }common line │{7: }{8: 12 }common line | 556 {7: }{8: 10 }common line │{7: }{8: 13 }common line | 557 {7: }{8: 11 }^common line │{7: }{8: 14 }common line | 558 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 15 }{22:DEF }| 559 {7: }{8: 12 }something │{7: }{8: 16 }something | 560 {1:~ }│{1:~ }|*2 561 {3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 [+] }| 562 :e | 563 ]]) 564 end) 565 it('put from window 1 using dp 2 line 12', function() 566 feed('1<c-w>w') 567 feed('12gg') 568 feed('dp') 569 screen:expect([[ 570 {7: }{8: 1 } │{7: }{8: 1 } | 571 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 572 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 573 {7: }{8: 4 } │{7: }{8: 4 } | 574 {7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }| 575 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }| 576 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }| 577 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }| 578 {7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }| 579 {7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }| 580 {7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }| 581 {7: }{8: 9 }common line │{7: }{8: 12 }common line | 582 {7: }{8: 10 }common line │{7: }{8: 13 }common line | 583 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }| 584 {7: }{8: 11 }common line │{7: }{8: 15 }common line | 585 {7: }{8: 12 }^something │{7: }{8: 16 }something | 586 {1:~ }│{1:~ }|*2 587 {3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 [+] }| 588 :e | 589 ]]) 590 end) 591 it('put from window 2 using dp line 6', function() 592 feed('2<c-w>w') 593 feed('6gg') 594 feed('dp') 595 screen:expect([[ 596 {7: }{8: 1 } │{7: }{8: 1 } | 597 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 598 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 599 {7: }{8: 4 } │{7: }{8: 4 } | 600 {7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }| 601 {7: }{8: 6 }xyz │{7: }{8: 6 }^xyz | 602 {7: }{8: 7 }xyz │{7: }{8: 7 }xyz | 603 {7: }{8: 8 }xyz │{7: }{8: 8 }xyz | 604 {7: }{8: 9 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }| 605 {7: }{8: 10 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }| 606 {7: }{8: 11 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }| 607 {7: }{8: 12 }common line │{7: }{8: 12 }common line | 608 {7: }{8: 13 }common line │{7: }{8: 13 }common line | 609 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }| 610 {7: }{8: 14 }common line │{7: }{8: 15 }common line | 611 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }| 612 {7: }{8: 15 }something │{7: }{8: 17 }something | 613 {1:~ }│{1:~ }| 614 {2:Xtest-functional-diff-screen-1.2 [+] }{3:Xtest-functional-diff-screen-1 }| 615 :e | 616 ]]) 617 end) 618 it('put from window 2 using dp line 8', function() 619 feed('2<c-w>w') 620 feed('8gg') 621 feed('dp') 622 screen:expect([[ 623 {7: }{8: 1 } │{7: }{8: 1 } | 624 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 625 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 626 {7: }{8: 4 } │{7: }{8: 4 } | 627 {7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }| 628 {7: }{8: 6 }xyz │{7: }{8: 6 }xyz | 629 {7: }{8: 7 }xyz │{7: }{8: 7 }xyz | 630 {7: }{8: 8 }xyz │{7: }{8: 8 }^xyz | 631 {7: }{8: 9 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }| 632 {7: }{8: 10 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }| 633 {7: }{8: 11 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }| 634 {7: }{8: 12 }common line │{7: }{8: 12 }common line | 635 {7: }{8: 13 }common line │{7: }{8: 13 }common line | 636 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }| 637 {7: }{8: 14 }common line │{7: }{8: 15 }common line | 638 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }| 639 {7: }{8: 15 }something │{7: }{8: 17 }something | 640 {1:~ }│{1:~ }| 641 {2:Xtest-functional-diff-screen-1.2 [+] }{3:Xtest-functional-diff-screen-1 }| 642 :e | 643 ]]) 644 end) 645 it('put from window 2 using dp line 9', function() 646 feed('2<c-w>w') 647 feed('9gg') 648 feed('dp') 649 screen:expect([[ 650 {7: }{8: 1 } │{7: }{8: 1 } | 651 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 652 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 653 {7: }{8: 4 } │{7: }{8: 4 } | 654 {7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }| 655 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }| 656 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }| 657 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }| 658 {7: }{8: 6 }DEFabc │{7: }{8: 9 }^DEFabc | 659 {7: }{8: 7 }DEFabc │{7: }{8: 10 }DEFabc | 660 {7: }{8: 8 }DEFabc │{7: }{8: 11 }DEFabc | 661 {7: }{8: 9 }common line │{7: }{8: 12 }common line | 662 {7: }{8: 10 }common line │{7: }{8: 13 }common line | 663 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }| 664 {7: }{8: 11 }common line │{7: }{8: 15 }common line | 665 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }| 666 {7: }{8: 12 }something │{7: }{8: 17 }something | 667 {1:~ }│{1:~ }| 668 {2:Xtest-functional-diff-screen-1.2 [+] }{3:Xtest-functional-diff-screen-1 }| 669 :e | 670 ]]) 671 end) 672 it('put from window 2 using dp line 17', function() 673 feed('2<c-w>w') 674 feed('17gg') 675 feed('dp') 676 screen:expect([[ 677 {7: }{8: 1 } │{7: }{8: 1 } | 678 {7: }{8: 2 }common line │{7: }{8: 2 }common line | 679 {7: }{8: 3 }common line │{7: }{8: 3 }common line | 680 {7: }{8: 4 } │{7: }{8: 4 } | 681 {7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }| 682 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }| 683 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }| 684 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }| 685 {7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }| 686 {7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }| 687 {7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }| 688 {7: }{8: 9 }common line │{7: }{8: 12 }common line | 689 {7: }{8: 10 }common line │{7: }{8: 13 }common line | 690 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }| 691 {7: }{8: 11 }common line │{7: }{8: 15 }common line | 692 {7: }{8: 12 }DEF │{7: }{8: 16 }DEF | 693 {7: }{8: 13 }something │{7: }{8: 17 }^something | 694 {1:~ }│{1:~ }| 695 {2:Xtest-functional-diff-screen-1.2 [+] }{3:Xtest-functional-diff-screen-1 }| 696 :e | 697 ]]) 698 end) 699 end) 700 describe('setup a diff with 2 files and set linematch:30', function() 701 before_each(function() 702 feed(':set diffopt=internal,filler,linematch:30<cr>') 703 local f1 = [[ 704 // abc d 705 // d 706 // d 707 ]] 708 local f2 = [[ 709 710 abc d 711 d 712 ]] 713 write_file(fname, f1, false) 714 write_file(fname_2, f2, false) 715 reread() 716 end) 717 718 it('display results', function() 719 screen:expect([[ 720 {7: }{8: 1 }{22:^ }│{7: }{8: }{23:--------------------------------------------}| 721 {7: }{8: 2 }{4:abc d }│{7: }{8: 1 }{27:// }{4:abc d }| 722 {7: }{8: 3 }{4:d }│{7: }{8: 2 }{27:// }{4:d }| 723 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 3 }{22:// d }| 724 {1:~ }│{1:~ }|*14 725 {3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 }| 726 :e | 727 ]]) 728 end) 729 end) 730 describe('setup a diff with 2 files and set linematch:30, with ignore white', function() 731 before_each(function() 732 feed(':set diffopt=internal,filler,linematch:30,iwhiteall<cr>') 733 local f1 = [[ 734 void testFunction () { 735 for (int i = 0; i < 10; i++) { 736 for (int j = 0; j < 10; j++) { 737 } 738 } 739 } 740 ]] 741 local f2 = [[ 742 void testFunction () { 743 // for (int j = 0; j < 10; i++) { 744 // } 745 } 746 ]] 747 write_file(fname, f1, false) 748 write_file(fname_2, f2, false) 749 reread() 750 end) 751 752 it('display results', function() 753 screen:expect([[ 754 {7: }{8: 1 }^void testFunction () { │{7: }{8: 1 }void testFunction () { | 755 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 2 }{22: for (int i = 0; i < 10; i++) { }| 756 {7: }{8: 2 }{4: }{27:// for (int j = 0; j < 10; i}{4:++) { }│{7: }{8: 3 }{4: }{27:for (int j = 0; j < 10; j}{4:++) { }| 757 {7: }{8: 3 }{4: }{27:// }{4:} }│{7: }{8: 4 }{4: } }| 758 {7: }{8: }{23:-------------------------------------------}│{7: }{8: 5 }{22: } }| 759 {7: }{8: 4 }} │{7: }{8: 6 }} | 760 {1:~ }│{1:~ }|*12 761 {3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 }| 762 :e | 763 ]]) 764 end) 765 end) 766 describe('a diff that would result in multiple groups before grouping optimization', function() 767 before_each(function() 768 feed(':set diffopt=internal,filler,linematch:30<cr>') 769 local f1 = [[ 770 !A 771 !B 772 !C 773 ]] 774 local f2 = [[ 775 ?Z 776 ?A 777 ?B 778 ?C 779 ?A 780 ?B 781 ?B 782 ?C 783 ]] 784 write_file(fname, f1, false) 785 write_file(fname_2, f2, false) 786 reread() 787 end) 788 789 it('display results', function() 790 screen:expect([[ 791 {7: }{8: 1 }{22:^?Z }│{7: }{8: }{23:--------------------------------------------}| 792 {7: }{8: 2 }{27:?}{4:A }│{7: }{8: 1 }{27:!}{4:A }| 793 {7: }{8: 3 }{27:?}{4:B }│{7: }{8: 2 }{27:!}{4:B }| 794 {7: }{8: 4 }{27:?}{4:C }│{7: }{8: 3 }{27:!}{4:C }| 795 {7: }{8: 5 }{22:?A }│{7: }{8: }{23:--------------------------------------------}| 796 {7: }{8: 6 }{22:?B }│{7: }{8: }{23:--------------------------------------------}| 797 {7: }{8: 7 }{22:?B }│{7: }{8: }{23:--------------------------------------------}| 798 {7: }{8: 8 }{22:?C }│{7: }{8: }{23:--------------------------------------------}| 799 {1:~ }│{1:~ }|*10 800 {3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 }| 801 :e | 802 ]]) 803 end) 804 end) 805 describe('a diff that would result in multiple groups before grouping optimization', function() 806 before_each(function() 807 feed(':set diffopt=internal,filler,linematch:30<cr>') 808 local f1 = [[ 809 !A 810 !B 811 !C 812 ]] 813 local f2 = [[ 814 ?A 815 ?Z 816 ?B 817 ?C 818 ?A 819 ?B 820 ?C 821 ?C 822 ]] 823 write_file(fname, f1, false) 824 write_file(fname_2, f2, false) 825 reread() 826 end) 827 828 it('display results', function() 829 screen:expect([[ 830 {7: }{8: 1 }{22:^?A }│{7: }{8: }{23:--------------------------------------------}| 831 {7: }{8: 2 }{22:?Z }│{7: }{8: }{23:--------------------------------------------}| 832 {7: }{8: 3 }{22:?B }│{7: }{8: }{23:--------------------------------------------}| 833 {7: }{8: 4 }{22:?C }│{7: }{8: }{23:--------------------------------------------}| 834 {7: }{8: 5 }{27:?}{4:A }│{7: }{8: 1 }{27:!}{4:A }| 835 {7: }{8: 6 }{27:?}{4:B }│{7: }{8: 2 }{27:!}{4:B }| 836 {7: }{8: 7 }{27:?}{4:C }│{7: }{8: 3 }{27:!}{4:C }| 837 {7: }{8: 8 }{22:?C }│{7: }{8: }{23:--------------------------------------------}| 838 {1:~ }│{1:~ }|*10 839 {3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 }| 840 :e | 841 ]]) 842 end) 843 end) 844 describe('setup a diff with 2 files and set linematch:10', function() 845 before_each(function() 846 feed(':set diffopt=internal,filler,linematch:10<cr>') 847 local f1 = [[ 848 common line 849 HIL 850 851 aABCabc 852 aABCabc 853 aABCabc 854 aABCabc 855 common line 856 HIL 857 common line 858 something 859 ]] 860 local f2 = [[ 861 common line 862 DEF 863 GHI 864 something 865 866 aDEFabc 867 xyz 868 xyz 869 xyz 870 aDEFabc 871 aDEFabc 872 aDEFabc 873 common line 874 DEF 875 GHI 876 something else 877 common line 878 something 879 ]] 880 write_file(fname, f1, false) 881 write_file(fname_2, f2, false) 882 reread() 883 end) 884 885 it( 886 'enable linematch for the longest diff block by increasing the number argument passed to linematch', 887 function() 888 feed('1<c-w>w') 889 -- linematch is disabled for the longest diff because it's combined line length is over 10 890 screen:expect([[ 891 {7: }{8: 1 }^common line │{7: }{8: 1 }common line | 892 {7: }{8: 2 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}| 893 {7: }{8: 3 }{27:GHI}{4: }│{7: }{8: 2 }{27:HIL}{4: }| 894 {7: }{8: 4 }{22:something }│{7: }{8: }{23:--------------------------------------------}| 895 {7: }{8: 5 } │{7: }{8: 3 } | 896 {7: }{8: 6 }{4:a}{27:DEF}{4:abc }│{7: }{8: 4 }{4:a}{27:ABC}{4:abc }| 897 {7: }{8: 7 }{27:xyz}{4: }│{7: }{8: 5 }{27:aABCabc}{4: }| 898 {7: }{8: 8 }{27:xyz}{4: }│{7: }{8: 6 }{27:aABCabc}{4: }| 899 {7: }{8: 9 }{27:xyz}{4: }│{7: }{8: 7 }{27:aABCabc}{4: }| 900 {7: }{8: 10 }{22:aDEFabc }│{7: }{8: }{23:--------------------------------------------}| 901 {7: }{8: 11 }{22:aDEFabc }│{7: }{8: }{23:--------------------------------------------}| 902 {7: }{8: 12 }{22:aDEFabc }│{7: }{8: }{23:--------------------------------------------}| 903 {7: }{8: 13 }common line │{7: }{8: 8 }common line | 904 {7: }{8: 14 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}| 905 {7: }{8: 15 }{27:GHI}{4: }│{7: }{8: 9 }{27:HIL}{4: }| 906 {7: }{8: 16 }{22:something else }│{7: }{8: }{23:--------------------------------------------}| 907 {7: }{8: 17 }common line │{7: }{8: 10 }common line | 908 {7: }{8: 18 }something │{7: }{8: 11 }something | 909 {3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 }| 910 :e | 911 ]]) 912 -- enable it by increasing the number 913 feed(':set diffopt-=linematch:10<cr>') 914 feed(':set diffopt+=linematch:30<cr>') 915 screen:expect([[ 916 {7: }{8: 1 }^common line │{7: }{8: 1 }common line | 917 {7: }{8: 2 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}| 918 {7: }{8: 3 }{27:GHI}{4: }│{7: }{8: 2 }{27:HIL}{4: }| 919 {7: }{8: 4 }{22:something }│{7: }{8: }{23:--------------------------------------------}| 920 {7: }{8: 5 } │{7: }{8: 3 } | 921 {7: }{8: 6 }{4:a}{27:DEF}{4:abc }│{7: }{8: 4 }{4:a}{27:ABC}{4:abc }| 922 {7: }{8: 7 }{22:xyz }│{7: }{8: }{23:--------------------------------------------}| 923 {7: }{8: 8 }{22:xyz }│{7: }{8: }{23:--------------------------------------------}| 924 {7: }{8: 9 }{22:xyz }│{7: }{8: }{23:--------------------------------------------}| 925 {7: }{8: 10 }{4:a}{27:DEF}{4:abc }│{7: }{8: 5 }{4:a}{27:ABC}{4:abc }| 926 {7: }{8: 11 }{4:a}{27:DEF}{4:abc }│{7: }{8: 6 }{4:a}{27:ABC}{4:abc }| 927 {7: }{8: 12 }{4:a}{27:DEF}{4:abc }│{7: }{8: 7 }{4:a}{27:ABC}{4:abc }| 928 {7: }{8: 13 }common line │{7: }{8: 8 }common line | 929 {7: }{8: 14 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}| 930 {7: }{8: 15 }{27:GHI}{4: }│{7: }{8: 9 }{27:HIL}{4: }| 931 {7: }{8: 16 }{22:something else }│{7: }{8: }{23:--------------------------------------------}| 932 {7: }{8: 17 }common line │{7: }{8: 10 }common line | 933 {7: }{8: 18 }something │{7: }{8: 11 }something | 934 {3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 }| 935 :set diffopt+=linematch:30 | 936 ]]) 937 end 938 ) 939 it('get all from second window', function() 940 feed('2<c-w>w') 941 feed(':1,12diffget<cr>') 942 screen:expect([[ 943 {7:+ }{8: 1 }{13:+-- 18 lines: common line··················}│{7:+ }{8: 1 }{13:^+-- 18 lines: common line···················}| 944 {1:~ }│{1:~ }|*17 945 {2:Xtest-functional-diff-screen-1.2 }{3:Xtest-functional-diff-screen-1 [+] }| 946 :1,12diffget | 947 ]]) 948 end) 949 it('get all from first window', function() 950 feed('1<c-w>w') 951 feed(':1,19diffget<cr>') 952 screen:expect([[ 953 {7:+ }{8: 1 }{13:^+-- 11 lines: common line··················}│{7:+ }{8: 1 }{13:+-- 11 lines: common line···················}| 954 {1:~ }│{1:~ }|*17 955 {3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }| 956 :1,19diffget | 957 ]]) 958 end) 959 it( 960 'get part of the non linematched diff block in window 2 line 7 - 8 (non line matched block)', 961 function() 962 feed('2<c-w>w') 963 feed(':7,8diffget<cr>') 964 screen:expect([[ 965 {7: }{8: 1 }common line │{7: }{8: 1 }^common line | 966 {7: }{8: 2 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}| 967 {7: }{8: 3 }{27:GHI}{4: }│{7: }{8: 2 }{27:HIL}{4: }| 968 {7: }{8: 4 }{22:something }│{7: }{8: }{23:--------------------------------------------}| 969 {7: }{8: 5 } │{7: }{8: 3 } | 970 {7: }{8: 6 }{4:a}{27:DEF}{4:abc }│{7: }{8: 4 }{4:a}{27:ABC}{4:abc }| 971 {7: }{8: 7 }{27:xyz}{4: }│{7: }{8: 5 }{27:aABCabc}{4: }| 972 {7: }{8: 8 }{27:xyz}{4: }│{7: }{8: 6 }{27:aABCabc}{4: }| 973 {7: }{8: 9 }xyz │{7: }{8: 7 }xyz | 974 {7: }{8: 10 }aDEFabc │{7: }{8: 8 }aDEFabc | 975 {7: }{8: 11 }aDEFabc │{7: }{8: 9 }aDEFabc | 976 {7: }{8: 12 }aDEFabc │{7: }{8: 10 }aDEFabc | 977 {7: }{8: 13 }common line │{7: }{8: 11 }common line | 978 {7: }{8: 14 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}| 979 {7: }{8: 15 }{27:GHI}{4: }│{7: }{8: 12 }{27:HIL}{4: }| 980 {7: }{8: 16 }{22:something else }│{7: }{8: }{23:--------------------------------------------}| 981 {7: }{8: 17 }common line │{7: }{8: 13 }common line | 982 {7: }{8: 18 }something │{7: }{8: 14 }something | 983 {2:Xtest-functional-diff-screen-1.2 }{3:Xtest-functional-diff-screen-1 [+] }| 984 :7,8diffget | 985 ]]) 986 end 987 ) 988 it( 989 'get part of the non linematched diff block in window 2 line 8 - 10 (line matched block)', 990 function() 991 feed('2<c-w>w') 992 feed(':8,10diffget<cr>') 993 screen:expect([[ 994 {7: }{8: 1 }common line │{7: }{8: 1 }^common line | 995 {7: }{8: 2 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}| 996 {7: }{8: 3 }{27:GHI}{4: }│{7: }{8: 2 }{27:HIL}{4: }| 997 {7: }{8: 4 }{22:something }│{7: }{8: }{23:--------------------------------------------}| 998 {7: }{8: 5 } │{7: }{8: 3 } | 999 {7: }{8: 6 }{4:a}{27:DEF}{4:abc }│{7: }{8: 4 }{4:a}{27:ABC}{4:abc }| 1000 {7: }{8: 7 }{27:xyz}{4: }│{7: }{8: 5 }{27:aABCabc}{4: }| 1001 {7: }{8: 8 }{27:xyz}{4: }│{7: }{8: 6 }{27:aABCabc}{4: }| 1002 {7: }{8: 9 }{27:xyz}{4: }│{7: }{8: 7 }{27:aABCabc}{4: }| 1003 {7: }{8: 10 }{22:aDEFabc }│{7: }{8: }{23:--------------------------------------------}| 1004 {7: }{8: 11 }{22:aDEFabc }│{7: }{8: }{23:--------------------------------------------}| 1005 {7: }{8: 12 }{22:aDEFabc }│{7: }{8: }{23:--------------------------------------------}| 1006 {7: }{8: 13 }common line │{7: }{8: 8 }common line | 1007 {7: }{8: 14 }DEF │{7: }{8: 9 }DEF | 1008 {7: }{8: 15 }GHI │{7: }{8: 10 }GHI | 1009 {7: }{8: 16 }something else │{7: }{8: 11 }something else | 1010 {7: }{8: 17 }common line │{7: }{8: 12 }common line | 1011 {7: }{8: 18 }something │{7: }{8: 13 }something | 1012 {2:Xtest-functional-diff-screen-1.2 }{3:Xtest-functional-diff-screen-1 [+] }| 1013 :8,10diffget | 1014 ]]) 1015 end 1016 ) 1017 end) 1018 end) 1019 1020 describe('regressions', function() 1021 local screen 1022 1023 it("doesn't crash with long lines", function() 1024 clear() 1025 feed(':set diffopt=internal.filler,linematch:30<cr>') 1026 screen = Screen.new(100, 20) 1027 -- line must be greater than MATCH_CHAR_MAX_LEN 1028 n.api.nvim_buf_set_lines(0, 0, -1, false, { string.rep('a', 1000) .. 'hello' }) 1029 n.exec 'vnew' 1030 n.api.nvim_buf_set_lines(0, 0, -1, false, { string.rep('a', 1010) .. 'world' }) 1031 n.exec 'windo diffthis' 1032 end) 1033 1034 it('properly computes filler lines for hunks bigger than linematch limit', function() 1035 clear() 1036 feed(':set diffopt=internal,filler,linematch:10<cr>') 1037 screen = Screen.new(100, 20) 1038 local lines = {} 1039 for i = 0, 29 do 1040 lines[#lines + 1] = tostring(i) 1041 end 1042 n.api.nvim_buf_set_lines(0, 0, -1, false, lines) 1043 n.exec 'vnew' 1044 n.api.nvim_buf_set_lines(0, 0, -1, false, { '00', '29' }) 1045 n.exec 'windo diffthis' 1046 feed('<C-e>') 1047 screen:expect { 1048 grid = [[ 1049 {1: }{2:------------------------------------------------}│{1: }{3:^1 }| 1050 {1: }{2:------------------------------------------------}│{1: }{3:2 }| 1051 {1: }{2:------------------------------------------------}│{1: }{3:3 }| 1052 {1: }{2:------------------------------------------------}│{1: }{3:4 }| 1053 {1: }{2:------------------------------------------------}│{1: }{3:5 }| 1054 {1: }{2:------------------------------------------------}│{1: }{3:6 }| 1055 {1: }{2:------------------------------------------------}│{1: }{3:7 }| 1056 {1: }{2:------------------------------------------------}│{1: }{3:8 }| 1057 {1: }{2:------------------------------------------------}│{1: }{3:9 }| 1058 {1: }{2:------------------------------------------------}│{1: }{3:10 }| 1059 {1: }{2:------------------------------------------------}│{1: }{3:11 }| 1060 {1: }{2:------------------------------------------------}│{1: }{3:12 }| 1061 {1: }{2:------------------------------------------------}│{1: }{3:13 }| 1062 {1: }{2:------------------------------------------------}│{1: }{3:14 }| 1063 {1: }{2:------------------------------------------------}│{1: }{3:15 }| 1064 {1: }{2:------------------------------------------------}│{1: }{3:16 }| 1065 {1: }{2:------------------------------------------------}│{1: }{3:17 }| 1066 {1: }29 │{1: }{3:18 }| 1067 {4:[No Name] [+] }{5:[No Name] [+] }| 1068 | 1069 ]], 1070 attr_ids = { 1071 [1] = { foreground = Screen.colors.DarkBlue, background = Screen.colors.Grey }, 1072 [2] = { 1073 bold = true, 1074 background = Screen.colors.LightCyan, 1075 foreground = Screen.colors.Blue1, 1076 }, 1077 [3] = { background = Screen.colors.LightBlue }, 1078 [4] = { reverse = true }, 1079 [5] = { reverse = true, bold = true }, 1080 }, 1081 } 1082 end) 1083 1084 -- oldtest: Test_linematch_3diffs_sanity_check() 1085 it('sanity check with 3 diff buffers', function() 1086 clear() 1087 screen = Screen.new(75, 20) 1088 n.api.nvim_buf_set_lines(0, 0, -1, false, { 'abcd', 'def', 'hij' }) 1089 n.exec('rightbelow vnew') 1090 n.api.nvim_buf_set_lines(0, 0, -1, false, { 'defq', 'hijk', 'nopq' }) 1091 n.exec('rightbelow vnew') 1092 n.api.nvim_buf_set_lines(0, 0, -1, false, { 'hijklm', 'nopqr', 'stuv' }) 1093 n.exec([[ 1094 set diffopt=internal,filler,linematch:60 1095 windo diffthis | wincmd t 1096 call feedkeys("Aq\<esc>") 1097 call feedkeys("GAklm\<esc>") 1098 call feedkeys("o") 1099 ]]) 1100 screen:expect([[ 1101 {7: }{22:abcdq }│{7: }{23:----------------------}│{7: }{23:-----------------------}| 1102 {7: }{4:def }│{7: }{4:def}{27:q}{4: }│{7: }{23:-----------------------}| 1103 {7: }{4:hijk}{27:lm}{4: }│{7: }{4:hijk }│{7: }{4:hijk}{27:lm}{4: }| 1104 {7: }{23:----------------------}│{7: }{4:nopq }│{7: }{4:nopq}{27:r}{4: }| 1105 {7: }{4:^ }│{7: }{23:----------------------}│{7: }{27:stuv}{4: }| 1106 {1:~ }│{1:~ }│{1:~ }|*13 1107 {3:[No Name] [+] }{2:[No Name] [+] [No Name] [+] }| 1108 {5:-- INSERT --} | 1109 ]]) 1110 end) 1111 end)