To: vim_dev@googlegroups.com Subject: Patch 8.2.0982 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.0982 Problem: Insufficient testing for reading/writing files. Solution: Add more tests. (Yegappan Lakshmanan, closes #6257) Add "ui_delay" to test_override() and use it for the CTRL-O test. Files: src/testing.c, src/globals.h, src/ui.c, runtime/doc/testing.txt, src/testdir/test_autocmd.vim, src/testdir/test_edit.vim, src/testdir/test_filechanged.vim, src/testdir/test_writefile.vim *** ../vim-8.2.0981/src/testing.c 2020-06-13 15:47:21.070282268 +0200 --- src/testing.c 2020-06-15 19:41:02.363850273 +0200 *************** *** 854,859 **** --- 854,861 ---- no_query_mouse_for_testing = val; else if (STRCMP(name, (char_u *)"no_wait_return") == 0) no_wait_return = val; + else if (STRCMP(name, (char_u *)"ui_delay") == 0) + ui_delay_for_testing = val; else if (STRCMP(name, (char_u *)"term_props") == 0) reset_term_props_on_termresponse = val; else if (STRCMP(name, (char_u *)"ALL") == 0) *************** *** 863,868 **** --- 865,871 ---- ignore_redraw_flag_for_testing = FALSE; nfa_fail_for_testing = FALSE; no_query_mouse_for_testing = FALSE; + ui_delay_for_testing = 0; reset_term_props_on_termresponse = FALSE; if (save_starting >= 0) { *** ../vim-8.2.0981/src/globals.h 2020-06-13 18:09:16.096199169 +0200 --- src/globals.h 2020-06-15 19:41:29.727738730 +0200 *************** *** 1841,1846 **** --- 1841,1847 ---- EXTERN int ignore_redraw_flag_for_testing INIT(= FALSE); EXTERN int nfa_fail_for_testing INIT(= FALSE); EXTERN int no_query_mouse_for_testing INIT(= FALSE); + EXTERN int ui_delay_for_testing INIT(= 0); EXTERN int reset_term_props_on_termresponse INIT(= FALSE); EXTERN int in_free_unref_items INIT(= FALSE); *** ../vim-8.2.0981/src/ui.c 2020-05-30 18:14:37.828521058 +0200 --- src/ui.c 2020-06-15 19:42:24.455515333 +0200 *************** *** 523,530 **** * cancel the delay if a key is hit. */ void ! ui_delay(long msec, int ignoreinput) { #ifdef FEAT_JOB_CHANNEL ch_log(NULL, "ui_delay(%ld)", msec); #endif --- 523,536 ---- * cancel the delay if a key is hit. */ void ! ui_delay(long msec_arg, int ignoreinput) { + long msec = msec_arg; + + #ifdef FEAT_EVAL + if (ui_delay_for_testing > 0) + msec = ui_delay_for_testing; + #endif #ifdef FEAT_JOB_CHANNEL ch_log(NULL, "ui_delay(%ld)", msec); #endif *** ../vim-8.2.0981/runtime/doc/testing.txt 2020-06-13 15:47:21.074282253 +0200 --- runtime/doc/testing.txt 2020-06-15 19:45:44.694695488 +0200 *************** *** 165,170 **** --- 165,172 ---- terminals no_wait_return set the "no_wait_return" flag. Not restored with "ALL". + ui_delay time in msec to use in ui_delay(); overrules a + wait time of up to 3 seconds for messages term_props reset all terminal properties when the version string is detected ALL clear all overrides ({val} is not used) *** ../vim-8.2.0981/src/testdir/test_autocmd.vim 2020-06-12 22:08:56.414965077 +0200 --- src/testdir/test_autocmd.vim 2020-06-15 19:33:44.953617319 +0200 *************** *** 2526,2529 **** --- 2526,2582 ---- unlet g:sigusr1_passed endfunc + " Test for BufReadPre autocmd deleting the file + func Test_BufReadPre_delfile() + augroup TestAuCmd + au! + autocmd BufReadPre Xfile call delete('Xfile') + augroup END + call writefile([], 'Xfile') + call assert_fails('new Xfile', 'E200:') + call assert_equal('Xfile', @%) + call assert_equal(1, &readonly) + call delete('Xfile') + augroup TestAuCmd + au! + augroup END + close! + endfunc + + " Test for BufReadPre autocmd changing the current buffer + func Test_BufReadPre_changebuf() + augroup TestAuCmd + au! + autocmd BufReadPre Xfile edit Xsomeotherfile + augroup END + call writefile([], 'Xfile') + call assert_fails('new Xfile', 'E201:') + call assert_equal('Xsomeotherfile', @%) + call assert_equal(1, &readonly) + call delete('Xfile') + augroup TestAuCmd + au! + augroup END + close! + endfunc + + " Test for BufWipeouti autocmd changing the current buffer when reading a file + " in an empty buffer with 'f' flag in 'cpo' + func Test_BufDelete_changebuf() + new + augroup TestAuCmd + au! + autocmd BufWipeout * let bufnr = bufadd('somefile') | exe "b " .. bufnr + augroup END + let save_cpo = &cpo + set cpo+=f + call assert_fails('r Xfile', 'E484:') + call assert_equal('somefile', @%) + let &cpo = save_cpo + augroup TestAuCmd + au! + augroup END + close! + endfunc + " vim: shiftwidth=2 sts=2 expandtab *** ../vim-8.2.0981/src/testdir/test_edit.vim 2020-06-13 13:20:21.092620451 +0200 --- src/testdir/test_edit.vim 2020-06-15 19:46:34.378491501 +0200 *************** *** 1486,1491 **** --- 1486,1492 ---- bwipe! au! InsertLeave call delete('XtestUndo') + call delete(undofile('XtestUndo')) set undofile& endfunc *************** *** 1557,1567 **** endfunc " Test for running an invalid ex command in insert mode using CTRL-O - " Note that vim has a hard-coded sleep of 3 seconds. So this test will take - " more than 3 seconds to complete. func Test_edit_ctrl_o_invalid_cmd() new set showmode showcmd let caught_e492 = 0 try call feedkeys("i\:invalid\abc\", "xt") --- 1558,1568 ---- endfunc " Test for running an invalid ex command in insert mode using CTRL-O func Test_edit_ctrl_o_invalid_cmd() new set showmode showcmd + " Avoid a sleep of 3 seconds. Zero might have side effects. + call test_override('ui_delay', 50) let caught_e492 = 0 try call feedkeys("i\:invalid\abc\", "xt") *************** *** 1571,1577 **** --- 1572,1686 ---- call assert_equal(1, caught_e492) call assert_equal('abc', getline(1)) set showmode& showcmd& + call test_override('ui_delay', 0) close! endfunc + " Test for editing a file with a very long name + func Test_edit_illegal_filename() + CheckEnglish + new + redir => msg + exe 'edit ' . repeat('f', 5000) + redir END + call assert_match("Illegal file name$", split(msg, "\n")[0]) + close! + endfunc + + " Test for editing a file using invalid file encoding + func Test_edit_invalid_encoding() + CheckEnglish + call writefile([], 'Xfile') + redir => msg + new ++enc=axbyc Xfile + redir END + call assert_match('\[NOT converted\]', msg) + call delete('Xfile') + close! + endfunc + + " Test for the "charconvert" option + func Test_edit_charconvert() + CheckEnglish + call writefile(['one', 'two'], 'Xfile') + + " set 'charconvert' to a non-existing function + set charconvert=NonExitingFunc() + new + let caught_e117 = v:false + try + redir => msg + edit ++enc=axbyc Xfile + catch /E117:/ + let caught_e117 = v:true + finally + redir END + endtry + call assert_true(caught_e117) + call assert_equal(['one', 'two'], getline(1, '$')) + call assert_match("Conversion with 'charconvert' failed", msg) + close! + set charconvert& + + " 'charconvert' function doesn't create a output file + func Cconv1() + endfunc + set charconvert=Cconv1() + new + redir => msg + edit ++enc=axbyc Xfile + redir END + call assert_equal(['one', 'two'], getline(1, '$')) + call assert_match("can't read output of 'charconvert'", msg) + close! + delfunc Cconv1 + set charconvert& + + " 'charconvert' function to convert to upper case + func Cconv2() + let data = readfile(v:fname_in) + call map(data, 'toupper(v:val)') + call writefile(data, v:fname_out) + endfunc + set charconvert=Cconv2() + new Xfile + write ++enc=ucase Xfile1 + call assert_equal(['ONE', 'TWO'], readfile('Xfile1')) + call delete('Xfile1') + close! + delfunc Cconv2 + set charconvert& + + " 'charconvert' function removes the input file + func Cconv3() + call delete(v:fname_in) + endfunc + set charconvert=Cconv3() + new + call assert_fails('edit ++enc=lcase Xfile', 'E202:') + call assert_equal([''], getline(1, '$')) + close! + delfunc Cconv3 + set charconvert& + + call delete('Xfile') + endfunc + + " Test for editing a file without read permission + func Test_edit_file_no_read_perm() + CheckUnix + CheckNotBSD + call writefile(['one', 'two'], 'Xfile') + call setfperm('Xfile', '-w-------') + new + redir => msg + edit Xfile + redir END + call assert_equal(1, &readonly) + call assert_equal([''], getline(1, '$')) + call assert_match('\[Permission Denied\]', msg) + close! + call delete('Xfile') + endfunc + " vim: shiftwidth=2 sts=2 expandtab *** ../vim-8.2.0981/src/testdir/test_filechanged.vim 2020-02-16 13:33:52.047371845 +0100 --- src/testdir/test_filechanged.vim 2020-06-15 19:33:44.953617319 +0200 *************** *** 143,148 **** --- 143,157 ---- 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') + call feedkeys('L', 'L') + checktime Xchanged_d + call assert_equal(['one'], getline(1, '$')) + close! + bwipe! call delete('Xchanged_d') endfunc *** ../vim-8.2.0981/src/testdir/test_writefile.vim 2020-06-11 19:22:40.144625523 +0200 --- src/testdir/test_writefile.vim 2020-06-15 19:33:44.953617319 +0200 *************** *** 434,437 **** --- 434,445 ---- set backupdir& patchmode& endfunc + " Test for writing a file using invalid file encoding + func Test_write_invalid_encoding() + new + call setline(1, 'abc') + call assert_fails('write ++enc=axbyc Xfile', 'E213:') + close! + endfunc + " vim: shiftwidth=2 sts=2 expandtab *** ../vim-8.2.0981/src/version.c 2020-06-14 23:05:06.368915209 +0200 --- src/version.c 2020-06-15 19:50:33.509555192 +0200 *************** *** 756,757 **** --- 756,759 ---- { /* Add new patch number below this line */ + /**/ + 982, /**/ -- Courtroom Quote #19: Q: Doctor, how many autopsies have you performed on dead people? A: All my autopsies have been performed on dead people. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///