1" Tests for diff mode 2source shared.vim 3source screendump.vim 4 5func Test_diff_fold_sync() 6 enew! 7 let l = range(50) 8 call setline(1, l) 9 diffthis 10 let winone = win_getid() 11 new 12 let l[25] = 'diff' 13 call setline(1, l) 14 diffthis 15 let wintwo = win_getid() 16 " line 15 is inside the closed fold 17 call assert_equal(19, foldclosedend(10)) 18 call win_gotoid(winone) 19 call assert_equal(19, foldclosedend(10)) 20 " open the fold 21 normal zv 22 call assert_equal(-1, foldclosedend(10)) 23 " fold in other window must have opened too 24 call win_gotoid(wintwo) 25 call assert_equal(-1, foldclosedend(10)) 26 27 " cursor position is in sync 28 normal 23G 29 call win_gotoid(winone) 30 call assert_equal(23, getcurpos()[1]) 31 32 windo diffoff 33 close! 34 set nomodified 35endfunc 36 37func Test_vert_split() 38 set diffopt=filler 39 call Common_vert_split() 40 set diffopt& 41endfunc 42 43func Test_vert_split_internal() 44 set diffopt=internal,filler 45 call Common_vert_split() 46 set diffopt& 47endfunc 48 49func Common_vert_split() 50 " Disable the title to avoid xterm keeping the wrong one. 51 set notitle noicon 52 new 53 let l = ['1 aa', '2 bb', '3 cc', '4 dd', '5 ee'] 54 call setline(1, l) 55 w! Xtest 56 normal dd 57 $ 58 put 59 normal kkrXoxxx 60 w! Xtest2 61 file Nop 62 normal ggoyyyjjjozzzz 63 set foldmethod=marker foldcolumn=4 64 call assert_equal(0, &diff) 65 call assert_equal('marker', &foldmethod) 66 call assert_equal(4, &foldcolumn) 67 call assert_equal(0, &scrollbind) 68 call assert_equal(0, &cursorbind) 69 call assert_equal(1, &wrap) 70 71 vert diffsplit Xtest 72 vert diffsplit Xtest2 73 call assert_equal(1, &diff) 74 call assert_equal('diff', &foldmethod) 75 call assert_equal(2, &foldcolumn) 76 call assert_equal(1, &scrollbind) 77 call assert_equal(1, &cursorbind) 78 call assert_equal(0, &wrap) 79 80 let diff_fdm = &fdm 81 let diff_fdc = &fdc 82 " repeat entering diff mode here to see if this saves the wrong settings 83 diffthis 84 " jump to second window for a moment to have filler line appear at start of 85 " first window 86 wincmd w 87 normal gg 88 wincmd p 89 normal gg 90 call assert_equal(2, winline()) 91 normal j 92 call assert_equal(4, winline()) 93 normal j 94 call assert_equal(5, winline()) 95 normal j 96 call assert_equal(6, winline()) 97 normal j 98 call assert_equal(8, winline()) 99 normal j 100 call assert_equal(9, winline()) 101 102 wincmd w 103 normal gg 104 call assert_equal(1, winline()) 105 normal j 106 call assert_equal(2, winline()) 107 normal j 108 call assert_equal(4, winline()) 109 normal j 110 call assert_equal(5, winline()) 111 normal j 112 call assert_equal(8, winline()) 113 114 wincmd w 115 normal gg 116 call assert_equal(2, winline()) 117 normal j 118 call assert_equal(3, winline()) 119 normal j 120 call assert_equal(4, winline()) 121 normal j 122 call assert_equal(5, winline()) 123 normal j 124 call assert_equal(6, winline()) 125 normal j 126 call assert_equal(7, winline()) 127 normal j 128 call assert_equal(8, winline()) 129 130 " Test diffoff 131 diffoff! 132 1wincmd 2 133 let &diff = 1 134 let &fdm = diff_fdm 135 let &fdc = diff_fdc 136 4wincmd w 137 diffoff! 138 1wincmd w 139 call assert_equal(0, &diff) 140 call assert_equal('marker', &foldmethod) 141 call assert_equal(4, &foldcolumn) 142 call assert_equal(0, &scrollbind) 143 call assert_equal(0, &cursorbind) 144 call assert_equal(1, &wrap) 145 146 wincmd w 147 call assert_equal(0, &diff) 148 call assert_equal('marker', &foldmethod) 149 call assert_equal(4, &foldcolumn) 150 call assert_equal(0, &scrollbind) 151 call assert_equal(0, &cursorbind) 152 call assert_equal(1, &wrap) 153 154 wincmd w 155 call assert_equal(0, &diff) 156 call assert_equal('marker', &foldmethod) 157 call assert_equal(4, &foldcolumn) 158 call assert_equal(0, &scrollbind) 159 call assert_equal(0, &cursorbind) 160 call assert_equal(1, &wrap) 161 162 call delete('Xtest') 163 call delete('Xtest2') 164 windo bw! 165endfunc 166 167func Test_filler_lines() 168 " Test that diffing shows correct filler lines 169 enew! 170 put =range(4,10) 171 1d _ 172 vnew 173 put =range(1,10) 174 1d _ 175 windo diffthis 176 wincmd h 177 call assert_equal(1, line('w0')) 178 unlet! diff_fdm diff_fdc 179 windo diffoff 180 bwipe! 181 enew! 182endfunc 183 184func Test_diffget_diffput() 185 enew! 186 let l = range(50) 187 call setline(1, l) 188 call assert_fails('diffget', 'E99:') 189 diffthis 190 call assert_fails('diffget', 'E100:') 191 new 192 let l[10] = 'one' 193 let l[20] = 'two' 194 let l[30] = 'three' 195 let l[40] = 'four' 196 call setline(1, l) 197 diffthis 198 call assert_equal('one', getline(11)) 199 11diffget 200 call assert_equal('10', getline(11)) 201 21diffput 202 wincmd w 203 call assert_equal('two', getline(21)) 204 normal 31Gdo 205 call assert_equal('three', getline(31)) 206 call assert_equal('40', getline(41)) 207 normal 41Gdp 208 wincmd w 209 call assert_equal('40', getline(41)) 210 new 211 diffthis 212 call assert_fails('diffget', 'E101:') 213 214 windo diffoff 215 %bwipe! 216endfunc 217 218func Test_dp_do_buffer() 219 e! one 220 let bn1=bufnr('%') 221 let l = range(60) 222 call setline(1, l) 223 diffthis 224 225 new two 226 let l[10] = 'one' 227 let l[20] = 'two' 228 let l[30] = 'three' 229 let l[40] = 'four' 230 let l[50] = 'five' 231 call setline(1, l) 232 diffthis 233 234 " dp and do with invalid buffer number. 235 11 236 call assert_fails('norm 99999dp', 'E102:') 237 call assert_fails('norm 99999do', 'E102:') 238 call assert_fails('diffput non_existing_buffer', 'E94:') 239 call assert_fails('diffget non_existing_buffer', 'E94:') 240 241 " dp and do with valid buffer number. 242 call assert_equal('one', getline('.')) 243 exe 'norm ' . bn1 . 'do' 244 call assert_equal('10', getline('.')) 245 21 246 call assert_equal('two', getline('.')) 247 diffget one 248 call assert_equal('20', getline('.')) 249 250 31 251 exe 'norm ' . bn1 . 'dp' 252 41 253 diffput one 254 wincmd w 255 31 256 call assert_equal('three', getline('.')) 257 41 258 call assert_equal('four', getline('.')) 259 260 " dp and do with buffer number which is not in diff mode. 261 new not_in_diff_mode 262 let bn3=bufnr('%') 263 wincmd w 264 51 265 call assert_fails('exe "norm" . bn3 . "dp"', 'E103:') 266 call assert_fails('exe "norm" . bn3 . "do"', 'E103:') 267 call assert_fails('diffput not_in_diff_mode', 'E94:') 268 call assert_fails('diffget not_in_diff_mode', 'E94:') 269 270 windo diffoff 271 %bwipe! 272endfunc 273 274func Test_diffoff() 275 enew! 276 call setline(1, ['Two', 'Three']) 277 redraw 278 let normattr = screenattr(1, 1) 279 diffthis 280 botright vert new 281 call setline(1, ['One', '', 'Two', 'Three']) 282 diffthis 283 redraw 284 call assert_notequal(normattr, screenattr(1, 1)) 285 diffoff! 286 redraw 287 call assert_equal(normattr, screenattr(1, 1)) 288 bwipe! 289 bwipe! 290endfunc 291 292func Common_icase_test() 293 edit one 294 call setline(1, ['One', 'Two', 'Three', 'Four', 'Fi#ve']) 295 redraw 296 let normattr = screenattr(1, 1) 297 diffthis 298 299 botright vert new two 300 call setline(1, ['one', 'TWO', 'Three ', 'Four', 'fI=VE']) 301 diffthis 302 303 redraw 304 call assert_equal(normattr, screenattr(1, 1)) 305 call assert_equal(normattr, screenattr(2, 1)) 306 call assert_notequal(normattr, screenattr(3, 1)) 307 call assert_equal(normattr, screenattr(4, 1)) 308 309 let dtextattr = screenattr(5, 3) 310 call assert_notequal(dtextattr, screenattr(5, 1)) 311 call assert_notequal(dtextattr, screenattr(5, 5)) 312 313 diffoff! 314 %bwipe! 315endfunc 316 317func Test_diffopt_icase() 318 set diffopt=icase,foldcolumn:0 319 call Common_icase_test() 320 set diffopt& 321endfunc 322 323func Test_diffopt_icase_internal() 324 set diffopt=icase,foldcolumn:0,internal 325 call Common_icase_test() 326 set diffopt& 327endfunc 328 329func Common_iwhite_test() 330 edit one 331 " Difference in trailing spaces and amount of spaces should be ignored, 332 " but not other space differences. 333 call setline(1, ["One \t", 'Two', 'Three', 'one two', 'one two', 'Four']) 334 redraw 335 let normattr = screenattr(1, 1) 336 diffthis 337 338 botright vert new two 339 call setline(1, ["One\t ", "Two\t ", 'Three', 'one two', 'onetwo', ' Four']) 340 diffthis 341 342 redraw 343 call assert_equal(normattr, screenattr(1, 1)) 344 call assert_equal(normattr, screenattr(2, 1)) 345 call assert_equal(normattr, screenattr(3, 1)) 346 call assert_equal(normattr, screenattr(4, 1)) 347 call assert_notequal(normattr, screenattr(5, 1)) 348 call assert_notequal(normattr, screenattr(6, 1)) 349 350 diffoff! 351 %bwipe! 352endfunc 353 354func Test_diffopt_iwhite() 355 set diffopt=iwhite,foldcolumn:0 356 call Common_iwhite_test() 357 set diffopt& 358endfunc 359 360func Test_diffopt_iwhite_internal() 361 set diffopt=internal,iwhite,foldcolumn:0 362 call Common_iwhite_test() 363 set diffopt& 364endfunc 365 366func Test_diffopt_context() 367 enew! 368 call setline(1, ['1', '2', '3', '4', '5', '6', '7']) 369 diffthis 370 new 371 call setline(1, ['1', '2', '3', '4', '5x', '6', '7']) 372 diffthis 373 374 set diffopt=context:2 375 call assert_equal('+-- 2 lines: 1', foldtextresult(1)) 376 set diffopt=internal,context:2 377 call assert_equal('+-- 2 lines: 1', foldtextresult(1)) 378 379 set diffopt=context:1 380 call assert_equal('+-- 3 lines: 1', foldtextresult(1)) 381 set diffopt=internal,context:1 382 call assert_equal('+-- 3 lines: 1', foldtextresult(1)) 383 384 diffoff! 385 %bwipe! 386 set diffopt& 387endfunc 388 389func Test_diffopt_horizontal() 390 set diffopt=internal,horizontal 391 diffsplit 392 393 call assert_equal(&columns, winwidth(1)) 394 call assert_equal(&columns, winwidth(2)) 395 call assert_equal(&lines, winheight(1) + winheight(2) + 3) 396 call assert_inrange(0, 1, winheight(1) - winheight(2)) 397 398 set diffopt& 399 diffoff! 400 %bwipe 401endfunc 402 403func Test_diffopt_vertical() 404 set diffopt=internal,vertical 405 diffsplit 406 407 call assert_equal(&lines - 2, winheight(1)) 408 call assert_equal(&lines - 2, winheight(2)) 409 call assert_equal(&columns, winwidth(1) + winwidth(2) + 1) 410 call assert_inrange(0, 1, winwidth(1) - winwidth(2)) 411 412 set diffopt& 413 diffoff! 414 %bwipe 415endfunc 416 417func Test_diffopt_hiddenoff() 418 set diffopt=internal,filler,foldcolumn:0,hiddenoff 419 e! one 420 call setline(1, ['Two', 'Three']) 421 redraw 422 let normattr = screenattr(1, 1) 423 diffthis 424 botright vert new two 425 call setline(1, ['One', 'Four']) 426 diffthis 427 redraw 428 call assert_notequal(normattr, screenattr(1, 1)) 429 set hidden 430 close 431 redraw 432 " should not diffing with hidden buffer two while 'hiddenoff' is enabled 433 call assert_equal(normattr, screenattr(1, 1)) 434 435 bwipe! 436 bwipe! 437 set hidden& diffopt& 438endfunc 439 440func Test_diffoff_hidden() 441 set diffopt=internal,filler,foldcolumn:0 442 e! one 443 call setline(1, ['Two', 'Three']) 444 redraw 445 let normattr = screenattr(1, 1) 446 diffthis 447 botright vert new two 448 call setline(1, ['One', 'Four']) 449 diffthis 450 redraw 451 call assert_notequal(normattr, screenattr(1, 1)) 452 set hidden 453 close 454 redraw 455 " diffing with hidden buffer two 456 call assert_notequal(normattr, screenattr(1, 1)) 457 diffoff 458 redraw 459 call assert_equal(normattr, screenattr(1, 1)) 460 diffthis 461 redraw 462 " still diffing with hidden buffer two 463 call assert_notequal(normattr, screenattr(1, 1)) 464 diffoff! 465 redraw 466 call assert_equal(normattr, screenattr(1, 1)) 467 diffthis 468 redraw 469 " no longer diffing with hidden buffer two 470 call assert_equal(normattr, screenattr(1, 1)) 471 472 bwipe! 473 bwipe! 474 set hidden& diffopt& 475endfunc 476 477func Test_setting_cursor() 478 new Xtest1 479 put =range(1,90) 480 wq 481 new Xtest2 482 put =range(1,100) 483 wq 484 485 tabe Xtest2 486 $ 487 diffsp Xtest1 488 tabclose 489 490 call delete('Xtest1') 491 call delete('Xtest2') 492endfunc 493 494func Test_diff_move_to() 495 new 496 call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 497 diffthis 498 vnew 499 call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x']) 500 diffthis 501 norm ]c 502 call assert_equal(2, line('.')) 503 norm 3]c 504 call assert_equal(9, line('.')) 505 norm 10]c 506 call assert_equal(11, line('.')) 507 norm [c 508 call assert_equal(9, line('.')) 509 norm 2[c 510 call assert_equal(5, line('.')) 511 norm 10[c 512 call assert_equal(2, line('.')) 513 %bwipe! 514endfunc 515 516func Test_diffexpr() 517 if !executable('diff') 518 return 519 endif 520 521 func DiffExpr() 522 silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>' . v:fname_out 523 endfunc 524 set diffexpr=DiffExpr() 525 set diffopt=foldcolumn:0 526 527 enew! 528 call setline(1, ['one', 'two', 'three']) 529 redraw 530 let normattr = screenattr(1, 1) 531 diffthis 532 533 botright vert new 534 call setline(1, ['one', 'two', 'three.']) 535 diffthis 536 537 redraw 538 call assert_equal(normattr, screenattr(1, 1)) 539 call assert_equal(normattr, screenattr(2, 1)) 540 call assert_notequal(normattr, screenattr(3, 1)) 541 542 diffoff! 543 %bwipe! 544 set diffexpr& diffopt& 545endfunc 546 547func Test_diffpatch() 548 " The patch program on MS-Windows may fail or hang. 549 if !executable('patch') || !has('unix') 550 return 551 endif 552 new 553 insert 554*************** 555*** 1,3 **** 556 1 557! 2 558 3 559--- 1,4 ---- 560 1 561! 2x 562 3 563+ 4 564. 565 saveas! Xpatch 566 bwipe! 567 new 568 call assert_fails('diffpatch Xpatch', 'E816:') 569 570 for name in ['Xpatch', 'Xpatch$HOME', 'Xpa''tch'] 571 call setline(1, ['1', '2', '3']) 572 if name != 'Xpatch' 573 call rename('Xpatch', name) 574 endif 575 exe 'diffpatch ' . escape(name, '$') 576 call assert_equal(['1', '2x', '3', '4'], getline(1, '$')) 577 if name != 'Xpatch' 578 call rename(name, 'Xpatch') 579 endif 580 bwipe! 581 endfor 582 583 call delete('Xpatch') 584 bwipe! 585endfunc 586 587func Test_diff_too_many_buffers() 588 for i in range(1, 8) 589 exe "new Xtest" . i 590 diffthis 591 endfor 592 new Xtest9 593 call assert_fails('diffthis', 'E96:') 594 %bwipe! 595endfunc 596 597func Test_diff_nomodifiable() 598 new 599 call setline(1, [1, 2, 3, 4]) 600 setl nomodifiable 601 diffthis 602 vnew 603 call setline(1, ['1x', 2, 3, 3, 4]) 604 diffthis 605 call assert_fails('norm dp', 'E793:') 606 setl nomodifiable 607 call assert_fails('norm do', 'E21:') 608 %bwipe! 609endfunc 610 611func Test_diff_hlID() 612 new 613 call setline(1, [1, 2, 3]) 614 diffthis 615 vnew 616 call setline(1, ['1x', 2, 'x', 3]) 617 diffthis 618 redraw 619 620 call assert_equal(synIDattr(diff_hlID(-1, 1), "name"), "") 621 622 call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange") 623 call assert_equal(synIDattr(diff_hlID(1, 2), "name"), "DiffText") 624 call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "") 625 call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "DiffAdd") 626 call assert_equal(synIDattr(diff_hlID(4, 1), "name"), "") 627 628 wincmd w 629 call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange") 630 call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "") 631 call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "") 632 633 %bwipe! 634endfunc 635 636func Test_diff_filler() 637 new 638 call setline(1, [1, 2, 3, 'x', 4]) 639 diffthis 640 vnew 641 call setline(1, [1, 2, 'y', 'y', 3, 4]) 642 diffthis 643 redraw 644 645 call assert_equal([0, 0, 0, 0, 0, 0, 0, 1, 0], map(range(-1, 7), 'diff_filler(v:val)')) 646 wincmd w 647 call assert_equal([0, 0, 0, 0, 2, 0, 0, 0], map(range(-1, 6), 'diff_filler(v:val)')) 648 649 %bwipe! 650endfunc 651 652func Test_diff_lastline() 653 enew! 654 only! 655 call setline(1, ['This is a ', 'line with five ', 'rows']) 656 diffthis 657 botright vert new 658 call setline(1, ['This is', 'a line with ', 'four rows']) 659 diffthis 660 1 661 call feedkeys("Je a\<CR>", 'tx') 662 call feedkeys("Je a\<CR>", 'tx') 663 let w1lines = winline() 664 wincmd w 665 $ 666 let w2lines = winline() 667 call assert_equal(w2lines, w1lines) 668 bwipe! 669 bwipe! 670endfunc 671 672func WriteDiffFiles(list1, list2) 673 call writefile(a:list1, 'Xfile1') 674 call writefile(a:list2, 'Xfile2') 675endfunc 676 677" Verify a screendump with both the external and external diff. 678func VerifyBoth(buf, dumpfile, extra) 679 call term_sendkeys(a:buf, ":diffupdate!\<cr>") 680 " trailing : for leaving the cursor on the command line 681 for cmd in [":set diffopt=filler" . a:extra . "\<cr>:", ":set diffopt+=internal\<cr>:"] 682 call term_sendkeys(a:buf, cmd) 683 if VerifyScreenDump(a:buf, a:dumpfile, {}, cmd =~ 'internal' ? 'internal' : 'external') 684 break " don't let the next iteration overwrite the "failed" file. 685 endif 686 endfor 687endfunc 688 689func Test_diff_screen() 690 if !CanRunVimInTerminal() || !has('menu') 691 return 692 endif 693 " clean up already existing swap files, just in case 694 call delete('.Xfile1.swp') 695 call delete('.Xfile2.swp') 696 697 " Test 1: Add a line in beginning of file 2 698 call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 699 let buf = RunVimInTerminal('-d Xfile1 Xfile2', {}) 700 " Set autoread mode, ,so that Vim won't complain once we re-write the test 701 " files 702 call term_sendkeys(buf, ":set autoread\<cr>\<c-w>w:set autoread\<cr>\<c-w>w") 703 704 call VerifyBoth(buf, 'Test_diff_01', '') 705 706 " Test 2: Add a line in beginning of file 1 707 call WriteDiffFiles([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 708 call VerifyBoth(buf, 'Test_diff_02', '') 709 710 " Test 3: Add a line at the end of file 2 711 call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) 712 call VerifyBoth(buf, 'Test_diff_03', '') 713 714 " Test 4: Add a line at the end of file 1 715 call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 716 call VerifyBoth(buf, 'Test_diff_04', '') 717 718 " Test 5: Add a line in the middle of file 2, remove on at the end of file 1 719 call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10]) 720 call VerifyBoth(buf, 'Test_diff_05', '') 721 722 " Test 6: Add a line in the middle of file 1, remove on at the end of file 2 723 call WriteDiffFiles([1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) 724 call VerifyBoth(buf, 'Test_diff_06', '') 725 726 " Test 7 - 9: Test normal/patience/histogram diff algorithm 727 call WriteDiffFiles(['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{', 728 \ ' int i;', ' for(i = 0; i < 10; i++)', ' {', ' printf("Your answer is: ");', 729 \ ' printf("%d\n", foo);', ' }', '}', '', 'int fact(int n)', '{', ' if(n > 1)', ' {', 730 \ ' return fact(n-1) * n;', ' }', ' return 1;', '}', '', 'int main(int argc, char **argv)', 731 \ '{', ' frobnitz(fact(10));', '}'], 732 \ ['#include <stdio.h>', '', 'int fib(int n)', '{', ' if(n > 2)', ' {', 733 \ ' return fib(n-1) + fib(n-2);', ' }', ' return 1;', '}', '', '// Frobs foo heartily', 734 \ 'int frobnitz(int foo)', '{', ' int i;', ' for(i = 0; i < 10; i++)', ' {', 735 \ ' printf("%d\n", foo);', ' }', '}', '', 736 \ 'int main(int argc, char **argv)', '{', ' frobnitz(fib(10));', '}']) 737 call term_sendkeys(buf, ":diffupdate!\<cr>") 738 call term_sendkeys(buf, ":set diffopt+=internal\<cr>") 739 call VerifyScreenDump(buf, 'Test_diff_07', {}) 740 741 call term_sendkeys(buf, ":set diffopt+=algorithm:patience\<cr>") 742 call VerifyScreenDump(buf, 'Test_diff_08', {}) 743 744 call term_sendkeys(buf, ":set diffopt+=algorithm:histogram\<cr>") 745 call VerifyScreenDump(buf, 'Test_diff_09', {}) 746 747 " Test 10-11: normal/indent-heuristic 748 call term_sendkeys(buf, ":set diffopt&vim\<cr>") 749 call WriteDiffFiles(['', ' def finalize(values)', '', ' values.each do |v|', ' v.finalize', ' end'], 750 \ ['', ' def finalize(values)', '', ' values.each do |v|', ' v.prepare', ' end', '', 751 \ ' values.each do |v|', ' v.finalize', ' end']) 752 call term_sendkeys(buf, ":diffupdate!\<cr>") 753 call term_sendkeys(buf, ":set diffopt+=internal\<cr>") 754 call VerifyScreenDump(buf, 'Test_diff_10', {}) 755 756 call term_sendkeys(buf, ":set diffopt+=indent-heuristic\<cr>") 757 call VerifyScreenDump(buf, 'Test_diff_11', {}) 758 759 " Test 12: diff the same file 760 call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 761 call VerifyBoth(buf, 'Test_diff_12', '') 762 763 " Test 13: diff an empty file 764 call WriteDiffFiles([], []) 765 call VerifyBoth(buf, 'Test_diff_13', '') 766 767 " Test 14: test diffopt+=icase 768 call WriteDiffFiles(['a', 'b', 'cd'], ['A', 'b', 'cDe']) 769 call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase") 770 771 " Test 15-16: test diffopt+=iwhite 772 call WriteDiffFiles(['int main()', '{', ' printf("Hello, World!");', ' return 0;', '}'], 773 \ ['int main()', '{', ' if (0)', ' {', ' printf("Hello, World!");', ' return 0;', ' }', '}']) 774 call term_sendkeys(buf, ":diffupdate!\<cr>") 775 call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\<cr>") 776 call VerifyScreenDump(buf, 'Test_diff_15', {}) 777 call term_sendkeys(buf, ":set diffopt+=internal\<cr>") 778 call VerifyScreenDump(buf, 'Test_diff_16', {}) 779 780 " clean up 781 call StopVimInTerminal(buf) 782 call delete('Xfile1') 783 call delete('Xfile2') 784endfunc 785 786