15e66b42aSBram Moolenaar" Tests for when a file was changed outside of Vim. 25e66b42aSBram Moolenaar 38c5a278fSBram Moolenaarsource check.vim 48c5a278fSBram Moolenaar 55e66b42aSBram Moolenaarfunc Test_FileChangedShell_reload() 68c5a278fSBram Moolenaar CheckUnix 78c5a278fSBram Moolenaar 85e66b42aSBram Moolenaar augroup testreload 95e66b42aSBram Moolenaar au FileChangedShell Xchanged_r let g:reason = v:fcs_reason | let v:fcs_choice = 'reload' 105e66b42aSBram Moolenaar augroup END 115e66b42aSBram Moolenaar new Xchanged_r 125e66b42aSBram Moolenaar call setline(1, 'reload this') 135e66b42aSBram Moolenaar write 145e66b42aSBram Moolenaar " Need to wait until the timestamp would change by at least a second. 155e66b42aSBram Moolenaar sleep 2 165e66b42aSBram Moolenaar silent !echo 'extra line' >>Xchanged_r 175e66b42aSBram Moolenaar checktime 185e66b42aSBram Moolenaar call assert_equal('changed', g:reason) 195e66b42aSBram Moolenaar call assert_equal(2, line('$')) 205e66b42aSBram Moolenaar call assert_equal('extra line', getline(2)) 215e66b42aSBram Moolenaar 225e66b42aSBram Moolenaar " Only triggers once 235e66b42aSBram Moolenaar let g:reason = '' 245e66b42aSBram Moolenaar checktime 255e66b42aSBram Moolenaar call assert_equal('', g:reason) 265e66b42aSBram Moolenaar 275e66b42aSBram Moolenaar " When deleted buffer is not reloaded 285e66b42aSBram Moolenaar silent !rm Xchanged_r 295e66b42aSBram Moolenaar let g:reason = '' 305e66b42aSBram Moolenaar checktime 315e66b42aSBram Moolenaar call assert_equal('deleted', g:reason) 325e66b42aSBram Moolenaar call assert_equal(2, line('$')) 335e66b42aSBram Moolenaar call assert_equal('extra line', getline(2)) 345e66b42aSBram Moolenaar 355e66b42aSBram Moolenaar " When recreated buffer is reloaded 365e66b42aSBram Moolenaar call setline(1, 'buffer is changed') 375e66b42aSBram Moolenaar silent !echo 'new line' >>Xchanged_r 385e66b42aSBram Moolenaar let g:reason = '' 395e66b42aSBram Moolenaar checktime 405e66b42aSBram Moolenaar call assert_equal('conflict', g:reason) 415e66b42aSBram Moolenaar call assert_equal(1, line('$')) 425e66b42aSBram Moolenaar call assert_equal('new line', getline(1)) 435e66b42aSBram Moolenaar 445e66b42aSBram Moolenaar " Only mode changed 455e66b42aSBram Moolenaar silent !chmod +x Xchanged_r 465e66b42aSBram Moolenaar let g:reason = '' 475e66b42aSBram Moolenaar checktime 485e66b42aSBram Moolenaar call assert_equal('mode', g:reason) 495e66b42aSBram Moolenaar call assert_equal(1, line('$')) 505e66b42aSBram Moolenaar call assert_equal('new line', getline(1)) 515e66b42aSBram Moolenaar 525e66b42aSBram Moolenaar " Only time changed 535e66b42aSBram Moolenaar sleep 2 545e66b42aSBram Moolenaar silent !touch Xchanged_r 555e66b42aSBram Moolenaar let g:reason = '' 565e66b42aSBram Moolenaar checktime 575e66b42aSBram Moolenaar call assert_equal('time', g:reason) 585e66b42aSBram Moolenaar call assert_equal(1, line('$')) 595e66b42aSBram Moolenaar call assert_equal('new line', getline(1)) 605e66b42aSBram Moolenaar 615e66b42aSBram Moolenaar if has('persistent_undo') 625e66b42aSBram Moolenaar " With an undo file the reload can be undone and a change before the 635e66b42aSBram Moolenaar " reload. 645e66b42aSBram Moolenaar set undofile 655e66b42aSBram Moolenaar call setline(2, 'before write') 665e66b42aSBram Moolenaar write 675e66b42aSBram Moolenaar call setline(2, 'after write') 685e66b42aSBram Moolenaar sleep 2 695e66b42aSBram Moolenaar silent !echo 'different line' >>Xchanged_r 705e66b42aSBram Moolenaar let g:reason = '' 715e66b42aSBram Moolenaar checktime 725e66b42aSBram Moolenaar call assert_equal('conflict', g:reason) 735e66b42aSBram Moolenaar call assert_equal(3, line('$')) 745e66b42aSBram Moolenaar call assert_equal('before write', getline(2)) 755e66b42aSBram Moolenaar call assert_equal('different line', getline(3)) 765e66b42aSBram Moolenaar " undo the reload 775e66b42aSBram Moolenaar undo 785e66b42aSBram Moolenaar call assert_equal(2, line('$')) 795e66b42aSBram Moolenaar call assert_equal('after write', getline(2)) 805e66b42aSBram Moolenaar " undo the change before reload 815e66b42aSBram Moolenaar undo 825e66b42aSBram Moolenaar call assert_equal(2, line('$')) 835e66b42aSBram Moolenaar call assert_equal('before write', getline(2)) 845e66b42aSBram Moolenaar 855e66b42aSBram Moolenaar set noundofile 865e66b42aSBram Moolenaar endif 875e66b42aSBram Moolenaar 885e66b42aSBram Moolenaar au! testreload 895e66b42aSBram Moolenaar bwipe! 90137c14bbSBram Moolenaar call delete(undofile('Xchanged_r')) 915e66b42aSBram Moolenaar call delete('Xchanged_r') 925e66b42aSBram Moolenaarendfunc 935e66b42aSBram Moolenaar 945e66b42aSBram Moolenaarfunc Test_file_changed_dialog() 958c5a278fSBram Moolenaar CheckUnix 968c5a278fSBram Moolenaar CheckNotGui 975e66b42aSBram Moolenaar au! FileChangedShell 985e66b42aSBram Moolenaar 995e66b42aSBram Moolenaar new Xchanged_d 1005e66b42aSBram Moolenaar call setline(1, 'reload this') 1015e66b42aSBram Moolenaar write 1025e66b42aSBram Moolenaar " Need to wait until the timestamp would change by at least a second. 1035e66b42aSBram Moolenaar sleep 2 1045e66b42aSBram Moolenaar silent !echo 'extra line' >>Xchanged_d 1055e66b42aSBram Moolenaar call feedkeys('L', 'L') 1065e66b42aSBram Moolenaar checktime 1075e66b42aSBram Moolenaar call assert_match('W11:', v:warningmsg) 1085e66b42aSBram Moolenaar call assert_equal(2, line('$')) 1095e66b42aSBram Moolenaar call assert_equal('reload this', getline(1)) 1105e66b42aSBram Moolenaar call assert_equal('extra line', getline(2)) 1115e66b42aSBram Moolenaar 1125e66b42aSBram Moolenaar " delete buffer, only shows an error, no prompt 1135e66b42aSBram Moolenaar silent !rm Xchanged_d 1145e66b42aSBram Moolenaar checktime 1155e66b42aSBram Moolenaar call assert_match('E211:', v:warningmsg) 1165e66b42aSBram Moolenaar call assert_equal(2, line('$')) 1175e66b42aSBram Moolenaar call assert_equal('extra line', getline(2)) 1188239c620SBram Moolenaar let v:warningmsg = 'empty' 1195e66b42aSBram Moolenaar 1208239c620SBram Moolenaar " change buffer, recreate the file and reload 1215e66b42aSBram Moolenaar call setline(1, 'buffer is changed') 1225e66b42aSBram Moolenaar silent !echo 'new line' >Xchanged_d 1235e66b42aSBram Moolenaar call feedkeys('L', 'L') 1245e66b42aSBram Moolenaar checktime 1255e66b42aSBram Moolenaar call assert_match('W12:', v:warningmsg) 1265e66b42aSBram Moolenaar call assert_equal(1, line('$')) 1275e66b42aSBram Moolenaar call assert_equal('new line', getline(1)) 1285e66b42aSBram Moolenaar 1295e66b42aSBram Moolenaar " Only mode changed, reload 1305e66b42aSBram Moolenaar silent !chmod +x Xchanged_d 1315e66b42aSBram Moolenaar call feedkeys('L', 'L') 1325e66b42aSBram Moolenaar checktime 1335e66b42aSBram Moolenaar call assert_match('W16:', v:warningmsg) 1345e66b42aSBram Moolenaar call assert_equal(1, line('$')) 1355e66b42aSBram Moolenaar call assert_equal('new line', getline(1)) 1365e66b42aSBram Moolenaar 1375e66b42aSBram Moolenaar " Only time changed, no prompt 1385e66b42aSBram Moolenaar sleep 2 1395e66b42aSBram Moolenaar silent !touch Xchanged_d 1405e66b42aSBram Moolenaar let v:warningmsg = '' 141e20b9eceSBram Moolenaar checktime Xchanged_d 1425e66b42aSBram Moolenaar call assert_equal('', v:warningmsg) 1435e66b42aSBram Moolenaar call assert_equal(1, line('$')) 1445e66b42aSBram Moolenaar call assert_equal('new line', getline(1)) 1455e66b42aSBram Moolenaar 146*b340baedSBram Moolenaar " File created after starting to edit it 147*b340baedSBram Moolenaar call delete('Xchanged_d') 148*b340baedSBram Moolenaar new Xchanged_d 149*b340baedSBram Moolenaar call writefile(['one'], 'Xchanged_d') 150*b340baedSBram Moolenaar call feedkeys('L', 'L') 151*b340baedSBram Moolenaar checktime Xchanged_d 152*b340baedSBram Moolenaar call assert_equal(['one'], getline(1, '$')) 153*b340baedSBram Moolenaar close! 154*b340baedSBram Moolenaar 1555e66b42aSBram Moolenaar bwipe! 1565e66b42aSBram Moolenaar call delete('Xchanged_d') 1575e66b42aSBram Moolenaarendfunc 158f0cee197SBram Moolenaar 159f0cee197SBram Moolenaar" Test for editing a new buffer from a FileChangedShell autocmd 160f0cee197SBram Moolenaarfunc Test_FileChangedShell_newbuf() 161f0cee197SBram Moolenaar call writefile(['one', 'two'], 'Xfile') 162f0cee197SBram Moolenaar new Xfile 163f0cee197SBram Moolenaar augroup testnewbuf 164f0cee197SBram Moolenaar autocmd FileChangedShell * enew 165f0cee197SBram Moolenaar augroup END 166f0cee197SBram Moolenaar call writefile(['red'], 'Xfile') 167f0cee197SBram Moolenaar call assert_fails('checktime', 'E811:') 168f0cee197SBram Moolenaar au! testnewbuf 169f0cee197SBram Moolenaar call delete('Xfile') 170f0cee197SBram Moolenaarendfunc 171f0cee197SBram Moolenaar 172f0cee197SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 173