Mercurial > vim
view src/testdir/test_filechanged.vim @ 34780:54890be01c00 v9.1.0265
patch 9.1.0265: console dialog cannot save unnamed buffers
Commit: https://github.com/vim/vim/commit/df46115fc839c8912ed60646e86a412e5180ba1d
Author: glepnir <glephunter@gmail.com>
Date: Thu Apr 4 22:23:29 2024 +0200
patch 9.1.0265: console dialog cannot save unnamed buffers
Problem: console dialog cannot save unnamed buffers
Solution: set bufname before save (glepnir). Define dialog_con_gui
to test for GUI+Console dialog support, use it to skip
the test when the GUI feature has been defined.
Note: The dialog_changed() function will also try to call the
browse_save_fname() function, when FEAT_BROWSE is defined (which is only
defined in a GUI build of Vim). This will eventually lead to a call of
do_browse(), which causes an error message if a GUI is not currently
running (see the TODO: in do_browse()) and will then lead to a failure
in Test_goto_buf_with_onfirm().
Therefore, we must disable the Test_goto_buf_with_onfirm(), when the
dialog_con_gui feature is enabled (which basically means dialog feature
for GUI and Console builds, in contrast to the dialog_con and dialog_gui
feature).
(Previously this wasn't a problem, because the test aborted in the YES
case for the :confirm :b XgotoConf case and did therefore not run into
the browse function call)
closes: #14398
Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 04 Apr 2024 23:45:02 +0200 |
parents | a7a9e8b9af89 |
children | 49637bd5c863 |
line wrap: on
line source
" Tests for when a file was changed outside of Vim. source check.vim func Test_FileChangedShell_reload() CheckUnix augroup testreload au FileChangedShell Xchanged_r let g:reason = v:fcs_reason | let v:fcs_choice = 'reload' augroup END new Xchanged_r call setline(1, 'reload this') write " Need to wait until the timestamp would change by at least a second. sleep 2 silent !echo 'extra line' >>Xchanged_r checktime call assert_equal('changed', g:reason) call assert_equal(2, line('$')) call assert_equal('extra line', getline(2)) " Only triggers once let g:reason = '' checktime call assert_equal('', g:reason) " When deleted buffer is not reloaded silent !rm Xchanged_r let g:reason = '' checktime call assert_equal('deleted', g:reason) call assert_equal(2, line('$')) call assert_equal('extra line', getline(2)) " When recreated buffer is reloaded call setline(1, 'buffer is changed') silent !echo 'new line' >>Xchanged_r let g:reason = '' checktime call assert_equal('conflict', g:reason) call assert_equal(1, line('$')) call assert_equal('new line', getline(1)) " Only mode changed silent !chmod +x Xchanged_r let g:reason = '' checktime call assert_equal('mode', g:reason) call assert_equal(1, line('$')) call assert_equal('new line', getline(1)) " Only time changed sleep 2 silent !touch Xchanged_r let g:reason = '' checktime call assert_equal('time', g:reason) call assert_equal(1, line('$')) call assert_equal('new line', getline(1)) if has('persistent_undo') " With an undo file the reload can be undone and a change before the " reload. set undofile call setline(2, 'before write') write call setline(2, 'after write') sleep 2 silent !echo 'different line' >>Xchanged_r let g:reason = '' checktime call assert_equal('conflict', g:reason) call assert_equal(3, line('$')) call assert_equal('before write', getline(2)) call assert_equal('different line', getline(3)) " undo the reload undo call assert_equal(2, line('$')) call assert_equal('after write', getline(2)) " undo the change before reload undo call assert_equal(2, line('$')) call assert_equal('before write', getline(2)) set noundofile endif au! testreload bwipe! call delete(undofile('Xchanged_r')) call delete('Xchanged_r') endfunc func Test_FileChangedShell_edit() CheckUnix new Xchanged_r call setline(1, 'reload this') set fileformat=unix write " File format changed, reload (content only, no 'ff' etc) augroup testreload au! au FileChangedShell Xchanged_r let g:reason = v:fcs_reason | let v:fcs_choice = 'reload' augroup END call assert_equal(&fileformat, 'unix') call writefile(["line1\r", "line2\r"], 'Xchanged_r', 'D') let g:reason = '' checktime call assert_equal('changed', g:reason) call assert_equal(&fileformat, 'unix') call assert_equal("line1\r", getline(1)) call assert_equal("line2\r", getline(2)) %s/\r write " File format changed, reload with 'ff', etc augroup testreload au! au FileChangedShell Xchanged_r let g:reason = v:fcs_reason | let v:fcs_choice = 'edit' augroup END call assert_equal(&fileformat, 'unix') call writefile(["line1\r", "line2\r"], 'Xchanged_r') let g:reason = '' checktime call assert_equal('changed', g:reason) call assert_equal(&fileformat, 'dos') call assert_equal('line1', getline(1)) call assert_equal('line2', getline(2)) set fileformat=unix write au! testreload bwipe! call delete(undofile('Xchanged_r')) endfunc func Test_FileChangedShell_edit_dialog() CheckNotGui CheckUnix " Using low level feedkeys() does not work on MS-Windows. new Xchanged_r call setline(1, 'reload this') set fileformat=unix write " File format changed, reload (content only) via prompt augroup testreload au! au FileChangedShell Xchanged_r let g:reason = v:fcs_reason | let v:fcs_choice = 'ask' augroup END call assert_equal(&fileformat, 'unix') call writefile(["line1\r", "line2\r"], 'Xchanged_r', 'D') let g:reason = '' call feedkeys('L', 'L') " load file content only checktime call assert_equal('changed', g:reason) call assert_equal(&fileformat, 'unix') call assert_equal("line1\r", getline(1)) call assert_equal("line2\r", getline(2)) %s/\r write " File format changed, reload (file and options) via prompt augroup testreload au! au FileChangedShell Xchanged_r let g:reason = v:fcs_reason | let v:fcs_choice = 'ask' augroup END call assert_equal(&fileformat, 'unix') call writefile(["line1\r", "line2\r"], 'Xchanged_r') let g:reason = '' call feedkeys('a', 'L') " load file content and options checktime call assert_equal('changed', g:reason) call assert_equal(&fileformat, 'dos') call assert_equal("line1", getline(1)) call assert_equal("line2", getline(2)) set fileformat=unix write au! testreload bwipe! call delete(undofile('Xchanged_r')) endfunc func Test_file_changed_dialog() CheckUnix CheckNotGui au! FileChangedShell new Xchanged_d call setline(1, 'reload this') write " Need to wait until the timestamp would change by at least a second. sleep 2 silent !echo 'extra line' >>Xchanged_d call feedkeys('L', 'L') checktime call assert_match('W11:', v:warningmsg) call assert_equal(2, line('$')) call assert_equal('reload this', getline(1)) call assert_equal('extra line', getline(2)) " delete buffer, only shows an error, no prompt silent !rm Xchanged_d checktime call assert_match('E211:', v:warningmsg) call assert_equal(2, line('$')) call assert_equal('extra line', getline(2)) let v:warningmsg = 'empty' " change buffer, recreate the file and reload call setline(1, 'buffer is changed') silent !echo 'new line' >Xchanged_d call feedkeys('L', 'L') checktime call assert_match('W12:', v:warningmsg) call assert_equal(1, line('$')) call assert_equal('new line', getline(1)) " Only mode changed, reload silent !chmod +x Xchanged_d call feedkeys('L', 'L') checktime call assert_match('W16:', v:warningmsg) call assert_equal(1, line('$')) call assert_equal('new line', getline(1)) " Only time changed, no prompt sleep 2 silent !touch Xchanged_d let v:warningmsg = '' checktime Xchanged_d call assert_equal('', v:warningmsg) call assert_equal(1, line('$')) call assert_equal('new line', getline(1)) " File created after starting to edit it call delete('Xchanged_d') new Xchanged_d call writefile(['one'], 'Xchanged_d', 'D') call feedkeys('L', 'L') checktime Xchanged_d call assert_equal(['one'], getline(1, '$')) close! bwipe! endfunc " Test for editing a new buffer from a FileChangedShell autocmd func Test_FileChangedShell_newbuf() call writefile(['one', 'two'], 'Xchfile', 'D') new Xchfile augroup testnewbuf autocmd FileChangedShell * enew augroup END call writefile(['red'], 'Xchfile') call assert_fails('checktime', 'E811:') au! testnewbuf endfunc " vim: shiftwidth=2 sts=2 expandtab