diff options
Diffstat (limited to 'src/nvim/testdir/test_edit.vim')
| -rw-r--r-- | src/nvim/testdir/test_edit.vim | 2084 |
1 files changed, 0 insertions, 2084 deletions
diff --git a/src/nvim/testdir/test_edit.vim b/src/nvim/testdir/test_edit.vim deleted file mode 100644 index fd54f77ccb..0000000000 --- a/src/nvim/testdir/test_edit.vim +++ /dev/null @@ -1,2084 +0,0 @@ -" Test for edit functions - -if exists("+t_kD") - let &t_kD="[3;*~" -endif - -source check.vim - -" Needed for testing basic rightleft: Test_edit_rightleft -source view_util.vim - -" Needs to come first until the bug in getchar() is -" fixed: https://groups.google.com/d/msg/vim_dev/fXL9yme4H4c/bOR-U6_bAQAJ -func Test_edit_00b() - new - call setline(1, ['abc ']) - inoreabbr <buffer> h here some more - call cursor(1, 4) - " <esc> expands the abbreviation and ends insert mode - " call feedkeys(":set im\<cr> h\<c-l>:set noim\<cr>", 'tix') - call feedkeys("i h\<esc>", 'tix') - call assert_equal(['abc here some more '], getline(1,'$')) - iunabbr <buffer> h - bw! -endfunc - -func Test_edit_01() - " set for Travis CI? - " set nocp noesckeys - new - " 1) empty buffer - call assert_equal([''], getline(1,'$')) - " 2) delete in an empty line - call feedkeys("i\<del>\<esc>", 'tnix') - call assert_equal([''], getline(1,'$')) - %d - " 3) delete one character - call setline(1, 'a') - call feedkeys("i\<del>\<esc>", 'tnix') - call assert_equal([''], getline(1,'$')) - %d - " 4) delete a multibyte character - call setline(1, "\u0401") - call feedkeys("i\<del>\<esc>", 'tnix') - call assert_equal([''], getline(1,'$')) - %d - " 5.1) delete linebreak with 'bs' option containing eol - let _bs=&bs - set bs=eol - call setline(1, ["abc def", "ghi jkl"]) - call cursor(1, 1) - call feedkeys("A\<del>\<esc>", 'tnix') - call assert_equal(['abc defghi jkl'], getline(1, 2)) - %d - " 5.2) delete linebreak with backspace option w/out eol - set bs= - call setline(1, ["abc def", "ghi jkl"]) - call cursor(1, 1) - call feedkeys("A\<del>\<esc>", 'tnix') - call assert_equal(["abc def", "ghi jkl"], getline(1, 2)) - let &bs=_bs - bw! -endfunc - -func Test_edit_02() - " Change cursor position in InsertCharPre command - new - call setline(1, 'abc') - call cursor(1, 1) - fu! DoIt(...) - call cursor(1, 4) - if len(a:000) - let v:char=a:1 - endif - endfu - au InsertCharPre <buffer> :call DoIt('y') - call feedkeys("ix\<esc>", 'tnix') - call assert_equal(['abcy'], getline(1, '$')) - " Setting <Enter> in InsertCharPre - au! InsertCharPre <buffer> :call DoIt("\n") - call setline(1, 'abc') - call cursor(1, 1) - call feedkeys("ix\<esc>", 'tnix') - call assert_equal(['abc', ''], getline(1, '$')) - %d - au! InsertCharPre - " Change cursor position in InsertEnter command - " 1) when setting v:char, keeps changed cursor position - au! InsertEnter <buffer> :call DoIt('y') - call setline(1, 'abc') - call cursor(1, 1) - call feedkeys("ix\<esc>", 'tnix') - call assert_equal(['abxc'], getline(1, '$')) - " 2) when not setting v:char, restores changed cursor position - au! InsertEnter <buffer> :call DoIt() - call setline(1, 'abc') - call cursor(1, 1) - call feedkeys("ix\<esc>", 'tnix') - call assert_equal(['xabc'], getline(1, '$')) - au! InsertEnter - delfu DoIt - bw! -endfunc - -func Test_edit_03() - " Change cursor after <c-o> command to end of line - new - call setline(1, 'abc') - call cursor(1, 1) - call feedkeys("i\<c-o>$y\<esc>", 'tnix') - call assert_equal(['abcy'], getline(1, '$')) - %d - call setline(1, 'abc') - call cursor(1, 1) - call feedkeys("i\<c-o>80|y\<esc>", 'tnix') - call assert_equal(['abcy'], getline(1, '$')) - %d - call setline(1, 'abc') - call feedkeys("Ad\<c-o>:s/$/efg/\<cr>hij", 'tnix') - call assert_equal(['hijabcdefg'], getline(1, '$')) - bw! -endfunc - -func Test_edit_04() - " test for :stopinsert - new - call setline(1, 'abc') - call cursor(1, 1) - call feedkeys("i\<c-o>:stopinsert\<cr>$", 'tnix') - call feedkeys("aX\<esc>", 'tnix') - call assert_equal(['abcX'], getline(1, '$')) - %d - bw! -endfunc - -func Test_edit_05() - " test for folds being opened - new - call setline(1, ['abcX', 'abcX', 'zzzZ']) - call cursor(1, 1) - set foldmethod=manual foldopen+=insert - " create fold for those two lines - norm! Vjzf - call feedkeys("$ay\<esc>", 'tnix') - call assert_equal(['abcXy', 'abcX', 'zzzZ'], getline(1, '$')) - %d - call setline(1, ['abcX', 'abcX', 'zzzZ']) - call cursor(1, 1) - set foldmethod=manual foldopen-=insert - " create fold for those two lines - norm! Vjzf - call feedkeys("$ay\<esc>", 'tnix') - call assert_equal(['abcXy', 'abcX', 'zzzZ'], getline(1, '$')) - %d - bw! -endfunc - -func Test_edit_06() - " Test in diff mode - if !has("diff") || !executable("diff") - return - endif - new - call setline(1, ['abc', 'xxx', 'yyy']) - vnew - call setline(1, ['abc', 'zzz', 'xxx', 'yyy']) - wincmd p - diffthis - wincmd p - diffthis - wincmd p - call cursor(2, 1) - norm! zt - call feedkeys("Ozzz\<esc>", 'tnix') - call assert_equal(['abc', 'zzz', 'xxx', 'yyy'], getline(1,'$')) - bw! - bw! -endfunc - -func Test_edit_07() - " 1) Test with completion <c-l> when popupmenu is visible - new - call setline(1, 'J') - - func! ListMonths() - call complete(col('.')-1, ['January', 'February', 'March', - \ 'April', 'May', 'June', 'July', 'August', 'September', - \ 'October', 'November', 'December']) - return '' - endfunc - inoremap <buffer> <F5> <C-R>=ListMonths()<CR> - - call feedkeys("A\<f5>\<c-p>". repeat("\<down>", 6)."\<c-l>\<down>\<c-l>\<cr>", 'tx') - call assert_equal(['July'], getline(1,'$')) - " 1) Test completion when InsertCharPre kicks in - %d - call setline(1, 'J') - fu! DoIt() - if v:char=='u' - let v:char='an' - endif - endfu - au InsertCharPre <buffer> :call DoIt() - call feedkeys("A\<f5>\<c-p>u\<cr>\<c-l>\<cr>", 'tx') - call assert_equal(["Jan\<c-l>",''], 1->getline('$')) - %d - call setline(1, 'J') - call feedkeys("A\<f5>\<c-p>u\<down>\<c-l>\<cr>", 'tx') - call assert_equal(["January"], 1->getline('$')) - - delfu ListMonths - delfu DoIt - iunmap <buffer> <f5> - bw! -endfunc - -func Test_edit_08() - throw 'skipped: moved to test/functional/legacy/edit_spec.lua' - " reset insertmode from i_ctrl-r_= - let g:bufnr = bufnr('%') - new - call setline(1, ['abc']) - call cursor(1, 4) - call feedkeys(":set im\<cr>ZZZ\<c-r>=setbufvar(g:bufnr,'&im', 0)\<cr>",'tnix') - call assert_equal(['abZZZc'], getline(1,'$')) - call assert_equal([0, 1, 1, 0], getpos('.')) - call assert_false(0, '&im') - bw! - unlet g:bufnr -endfunc - -func Test_edit_09() - " test i_CTRL-\ combinations - new - call setline(1, ['abc', 'def', 'ghi']) - call cursor(1, 1) - " 1) CTRL-\ CTLR-N - " call feedkeys(":set im\<cr>\<c-\>\<c-n>ccABC\<c-l>", 'txin') - call feedkeys("i\<c-\>\<c-n>ccABC\<esc>", 'txin') - call assert_equal(['ABC', 'def', 'ghi'], getline(1,'$')) - call setline(1, ['ABC', 'def', 'ghi']) - " 2) CTRL-\ CTLR-G - " CTRL-\ CTRL-G goes to Insert mode when 'insertmode' is set, but - " 'insertmode' is now removed so skip this test - " call feedkeys("j0\<c-\>\<c-g>ZZZ\<cr>\<esc>", 'txin') - " call assert_equal(['ABC', 'ZZZ', 'def', 'ghi'], getline(1,'$')) - " call feedkeys("I\<c-\>\<c-g>YYY\<c-l>", 'txin') - " call assert_equal(['ABC', 'ZZZ', 'YYYdef', 'ghi'], getline(1,'$')) - " set noinsertmode - " 3) CTRL-\ CTRL-O - call setline(1, ['ABC', 'ZZZ', 'def', 'ghi']) - call cursor(1, 1) - call feedkeys("A\<c-o>ix", 'txin') - call assert_equal(['ABxC', 'ZZZ', 'def', 'ghi'], getline(1,'$')) - call feedkeys("A\<c-\>\<c-o>ix", 'txin') - call assert_equal(['ABxCx', 'ZZZ', 'def', 'ghi'], getline(1,'$')) - " 4) CTRL-\ a (should be inserted literally, not special after <c-\> - call setline(1, ['ABC', 'ZZZ', 'def', 'ghi']) - call cursor(1, 1) - call feedkeys("A\<c-\>a", 'txin') - call assert_equal(["ABC\<c-\>a", 'ZZZ', 'def', 'ghi'], getline(1, '$')) - bw! -endfunc - -func Test_edit_11() - " Test that indenting kicks in - new - set cindent - call setline(1, ['{', '', '']) - call cursor(2, 1) - call feedkeys("i\<c-f>int c;\<esc>", 'tnix') - call cursor(3, 1) - call feedkeys("\<Insert>/* comment */", 'tnix') - call assert_equal(['{', "\<tab>int c;", "/* comment */"], getline(1, '$')) - " added changed cindentkeys slightly - set cindent cinkeys+=*/ - call setline(1, ['{', '', '']) - call cursor(2, 1) - call feedkeys("i\<c-f>int c;\<esc>", 'tnix') - call cursor(3, 1) - call feedkeys("i/* comment */", 'tnix') - call assert_equal(['{', "\<tab>int c;", "\<tab>/* comment */"], getline(1, '$')) - set cindent cinkeys+==end - call feedkeys("oend\<cr>\<esc>", 'tnix') - call assert_equal(['{', "\<tab>int c;", "\<tab>/* comment */", "\tend", ''], getline(1, '$')) - set cinkeys-==end - %d - " Use indentexpr instead of cindenting - func! Do_Indent() - if v:lnum == 3 - return 3*shiftwidth() - else - return 2*shiftwidth() - endif - endfunc - setl indentexpr=Do_Indent() indentkeys+=*/ - call setline(1, ['{', '', '']) - call cursor(2, 1) - call feedkeys("i\<c-f>int c;\<esc>", 'tnix') - call cursor(3, 1) - call feedkeys("i/* comment */", 'tnix') - call assert_equal(['{', "\<tab>\<tab>int c;", "\<tab>\<tab>\<tab>/* comment */"], getline(1, '$')) - set cinkeys&vim indentkeys&vim - set nocindent indentexpr= - delfu Do_Indent - bw! -endfunc - -func Test_edit_11_indentexpr() - " Test that indenting kicks in - new - " Use indentexpr instead of cindenting - func! Do_Indent() - let pline=prevnonblank(v:lnum) - if empty(getline(v:lnum)) - if getline(pline) =~ 'if\|then' - return shiftwidth() - else - return 0 - endif - else - return 0 - endif - endfunc - setl indentexpr=Do_Indent() indentkeys+=0=then,0=fi - call setline(1, ['if [ $this ]']) - call cursor(1, 1) - call feedkeys("othen\<cr>that\<cr>fi", 'tnix') - call assert_equal(['if [ $this ]', "then", "\<tab>that", "fi"], getline(1, '$')) - set cinkeys&vim indentkeys&vim - set nocindent indentexpr= - delfu Do_Indent - - " Using a script-local function - func s:NewIndentExpr() - endfunc - set indentexpr=s:NewIndentExpr() - call assert_equal(expand('<SID>') .. 'NewIndentExpr()', &indentexpr) - set indentexpr=<SID>NewIndentExpr() - call assert_equal(expand('<SID>') .. 'NewIndentExpr()', &indentexpr) - set indentexpr& - - bw! -endfunc - -" Test changing indent in replace mode -func Test_edit_12() - new - call setline(1, ["\tabc", "\tdef"]) - call cursor(2, 4) - call feedkeys("R^\<c-d>", 'tnix') - call assert_equal(["\tabc", "def"], getline(1, '$')) - call assert_equal([0, 2, 2, 0], '.'->getpos()) - %d - call setline(1, ["\tabc", "\t\tdef"]) - call cursor(2, 2) - call feedkeys("R^\<c-d>", 'tnix') - call assert_equal(["\tabc", "def"], getline(1, '$')) - call assert_equal([0, 2, 1, 0], getpos('.')) - %d - call setline(1, ["\tabc", "\t\tdef"]) - call cursor(2, 2) - call feedkeys("R\<c-t>", 'tnix') - call assert_equal(["\tabc", "\t\t\tdef"], getline(1, '$')) - call assert_equal([0, 2, 2, 0], getpos('.')) - bw! - 10vnew - call setline(1, ["\tabc", "\t\tdef"]) - call cursor(2, 2) - call feedkeys("R\<c-t>", 'tnix') - call assert_equal(["\tabc", "\t\t\tdef"], getline(1, '$')) - call assert_equal([0, 2, 2, 0], getpos('.')) - %d - set sw=4 - call setline(1, ["\tabc", "\t\tdef"]) - call cursor(2, 2) - call feedkeys("R\<c-t>\<c-t>", 'tnix') - call assert_equal(["\tabc", "\t\t\tdef"], getline(1, '$')) - call assert_equal([0, 2, 2, 0], getpos('.')) - %d - call setline(1, ["\tabc", "\t\tdef"]) - call cursor(2, 2) - call feedkeys("R\<c-t>\<c-t>", 'tnix') - call assert_equal(["\tabc", "\t\t\tdef"], getline(1, '$')) - call assert_equal([0, 2, 2, 0], getpos('.')) - set sw& - - " In replace mode, after hitting enter in a line with tab characters, - " pressing backspace should restore the tab characters. - %d - setlocal autoindent backspace=2 - call setline(1, "\tone\t\ttwo") - exe "normal ggRred\<CR>six" .. repeat("\<BS>", 8) - call assert_equal(["\tone\t\ttwo"], getline(1, '$')) - bw! -endfunc - -func Test_edit_13() - " Test smartindenting - new - set smartindent autoindent - call setline(1, ["\tabc"]) - call feedkeys("A {\<cr>more\<cr>}\<esc>", 'tnix') - call assert_equal(["\tabc {", "\t\tmore", "\t}"], getline(1, '$')) - set smartindent& autoindent& - bwipe! - - " Test autoindent removing indent of blank line. - new - call setline(1, ' foo bar baz') - set autoindent - exe "normal 0eea\<CR>\<CR>\<Esc>" - call assert_equal(" foo bar", getline(1)) - call assert_equal("", getline(2)) - call assert_equal(" baz", getline(3)) - set autoindent& - - " pressing <C-U> to erase line should keep the indent with 'autoindent' - set backspace=2 autoindent - %d - exe "normal i\tone\<CR>three\<C-U>two" - call assert_equal(["\tone", "\ttwo"], getline(1, '$')) - set backspace& autoindent& - - bwipe! -endfunc - -" Test for autoindent removing indent when insert mode is stopped. Some parts -" of the code is exercised only when interactive mode is used. So use Vim in a -" terminal. -func Test_autoindent_remove_indent() - CheckRunVimInTerminal - let buf = RunVimInTerminal('-N Xfile', {'rows': 6, 'cols' : 20}) - call TermWait(buf) - call term_sendkeys(buf, ":set autoindent\n") - " leaving insert mode in a new line with indent added by autoindent, should - " remove the indent. - call term_sendkeys(buf, "i\<Tab>foo\<CR>\<Esc>") - " Need to delay for sometime, otherwise the code in getchar.c will not be - " exercised. - call TermWait(buf, 50) - " when a line is wrapped and the cursor is at the start of the second line, - " leaving insert mode, should move the cursor back to the first line. - call term_sendkeys(buf, "o" .. repeat('x', 20) .. "\<Esc>") - " Need to delay for sometime, otherwise the code in getchar.c will not be - " exercised. - call TermWait(buf, 50) - call term_sendkeys(buf, ":w\n") - call TermWait(buf) - call StopVimInTerminal(buf) - call assert_equal(["\tfoo", '', repeat('x', 20)], readfile('Xfile')) - call delete('Xfile') -endfunc - -func Test_edit_CR() - " Test for <CR> in insert mode - " basically only in quickfix mode ist tested, the rest - " has been taken care of by other tests - CheckFeature quickfix - botright new - call writefile(range(1, 10), 'Xqflist.txt') - call setqflist([{'filename': 'Xqflist.txt', 'lnum': 2}]) - copen - set modifiable - call feedkeys("A\<cr>", 'tnix') - call assert_equal('Xqflist.txt', bufname('')) - call assert_equal(2, line('.')) - cclose - botright new - call setloclist(0, [{'filename': 'Xqflist.txt', 'lnum': 10}]) - lopen - set modifiable - call feedkeys("A\<cr>", 'tnix') - call assert_equal('Xqflist.txt', bufname('')) - call assert_equal(10, line('.')) - call feedkeys("A\<Enter>", 'tnix') - call feedkeys("A\<kEnter>", 'tnix') - call feedkeys("A\n", 'tnix') - call feedkeys("A\r", 'tnix') - call assert_equal(map(range(1, 10), 'string(v:val)') + ['', '', '', ''], getline(1, '$')) - bw! - lclose - call delete('Xqflist.txt') -endfunc - -func Test_edit_CTRL_() - " disabled for Windows builds, why? - if !has("rightleft") || has("win32") - return - endif - let _encoding=&encoding - set encoding=utf-8 - " Test for CTRL-_ - new - call setline(1, ['abc']) - call cursor(1, 1) - call feedkeys("i\<c-_>xyz\<esc>", 'tnix') - call assert_equal(["\<C-_>xyzabc"], getline(1, '$')) - call assert_false(&revins) - set ari - call setline(1, ['abc']) - call cursor(1, 1) - call feedkeys("i\<c-_>xyz\<esc>", 'tnix') - call assert_equal(["æèñabc"], getline(1, '$')) - call assert_true(&revins) - call setline(1, ['abc']) - call cursor(1, 1) - call feedkeys("i\<c-_>xyz\<esc>", 'tnix') - call assert_equal(["xyzabc"], getline(1, '$')) - call assert_false(&revins) - set noari - let &encoding=_encoding - bw! -endfunc - -" needs to come first, to have the @. register empty -func Test_edit_00a_CTRL_A() - " Test pressing CTRL-A - new - call setline(1, repeat([''], 5)) - call cursor(1, 1) - try - call feedkeys("A\<NUL>", 'tnix') - catch /^Vim\%((\a\+)\)\=:E29/ - call assert_true(1, 'E29 error caught') - endtry - call cursor(1, 1) - call feedkeys("Afoobar \<esc>", 'tnix') - call cursor(2, 1) - call feedkeys("A\<c-a>more\<esc>", 'tnix') - call cursor(3, 1) - call feedkeys("A\<NUL>and more\<esc>", 'tnix') - call assert_equal(['foobar ', 'foobar more', 'foobar morend more', '', ''], getline(1, '$')) - bw! -endfunc - -func Test_edit_CTRL_EY() - " Ctrl-E/ Ctrl-Y in insert mode completion to scroll - 10new - call setline(1, range(1, 100)) - call cursor(30, 1) - norm! z. - call feedkeys("A\<c-x>\<c-e>\<c-e>\<c-e>\<c-e>\<c-e>", 'tnix') - call assert_equal(30, winsaveview()['topline']) - call assert_equal([0, 30, 2, 0], getpos('.')) - call feedkeys("A\<c-x>\<c-e>\<c-e>\<c-e>\<c-e>\<c-e>", 'tnix') - call feedkeys("A\<c-x>".repeat("\<c-y>", 10), 'tnix') - call assert_equal(21, winsaveview()['topline']) - call assert_equal([0, 30, 2, 0], getpos('.')) - bw! -endfunc - -func Test_edit_CTRL_G() - new - call setline(1, ['foobar', 'foobar', 'foobar']) - call cursor(2, 4) - call feedkeys("ioooooooo\<c-g>k\<c-r>.\<esc>", 'tnix') - call assert_equal(['foooooooooobar', 'foooooooooobar', 'foobar'], getline(1, '$')) - call assert_equal([0, 1, 11, 0], getpos('.')) - call feedkeys("i\<c-g>k\<esc>", 'tnix') - call assert_equal([0, 1, 10, 0], getpos('.')) - call cursor(2, 4) - call feedkeys("i\<c-g>jzzzz\<esc>", 'tnix') - call assert_equal(['foooooooooobar', 'foooooooooobar', 'foozzzzbar'], getline(1, '$')) - call assert_equal([0, 3, 7, 0], getpos('.')) - call feedkeys("i\<c-g>j\<esc>", 'tnix') - call assert_equal([0, 3, 6, 0], getpos('.')) - bw! -endfunc - -func Test_edit_CTRL_I() - " Tab in completion mode - let path=expand("%:p:h") - new - call setline(1, [path. "/", '']) - call feedkeys("Arunt\<c-x>\<c-f>\<tab>\<cr>\<esc>", 'tnix') - call assert_match('runtest\.vim', getline(1)) - %d - call writefile(['one', 'two', 'three'], 'Xinclude.txt') - let include='#include Xinclude.txt' - call setline(1, [include, '']) - call cursor(2, 1) - call feedkeys("A\<c-x>\<tab>\<cr>\<esc>", 'tnix') - call assert_equal([include, 'one', ''], getline(1, '$')) - call feedkeys("2ggC\<c-x>\<tab>\<down>\<cr>\<esc>", 'tnix') - call assert_equal([include, 'two', ''], getline(1, '$')) - call feedkeys("2ggC\<c-x>\<tab>\<down>\<down>\<cr>\<esc>", 'tnix') - call assert_equal([include, 'three', ''], getline(1, '$')) - call feedkeys("2ggC\<c-x>\<tab>\<down>\<down>\<down>\<cr>\<esc>", 'tnix') - call assert_equal([include, '', ''], getline(1, '$')) - call delete("Xinclude.txt") - bw! -endfunc - -func Test_edit_CTRL_K() - " Test pressing CTRL-K (basically only dictionary completion and digraphs - " the rest is already covered - call writefile(['A', 'AA', 'AAA', 'AAAA'], 'Xdictionary.txt') - set dictionary=Xdictionary.txt - new - call setline(1, 'A') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-k>\<cr>\<esc>", 'tnix') - call assert_equal(['AA', ''], getline(1, '$')) - %d - call setline(1, 'A') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-k>\<down>\<cr>\<esc>", 'tnix') - call assert_equal(['AAA'], getline(1, '$')) - %d - call setline(1, 'A') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-k>\<down>\<down>\<cr>\<esc>", 'tnix') - call assert_equal(['AAAA'], getline(1, '$')) - %d - call setline(1, 'A') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-k>\<down>\<down>\<down>\<cr>\<esc>", 'tnix') - call assert_equal(['A'], getline(1, '$')) - %d - call setline(1, 'A') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-k>\<down>\<down>\<down>\<down>\<cr>\<esc>", 'tnix') - call assert_equal(['AA'], getline(1, '$')) - - " press an unexpected key after dictionary completion - %d - call setline(1, 'A') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-k>\<c-]>\<cr>\<esc>", 'tnix') - call assert_equal(['AA', ''], getline(1, '$')) - %d - call setline(1, 'A') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-k>\<c-s>\<cr>\<esc>", 'tnix') - call assert_equal(["AA\<c-s>", ''], getline(1, '$')) - %d - call setline(1, 'A') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-k>\<c-f>\<cr>\<esc>", 'tnix') - call assert_equal(["AA\<c-f>", ''], getline(1, '$')) - - set dictionary= - %d - call setline(1, 'A') - call cursor(1, 1) - let v:testing = 1 - try - call feedkeys("A\<c-x>\<c-k>\<esc>", 'tnix') - catch - " error sleeps 2 seconds, when v:testing is not set - let v:testing = 0 - endtry - call delete('Xdictionary.txt') - - if exists('*test_override') - call test_override("char_avail", 1) - set showcmd - %d - call feedkeys("A\<c-k>a:\<esc>", 'tnix') - call assert_equal(['ä'], getline(1, '$')) - call test_override("char_avail", 0) - set noshowcmd - endif - bw! -endfunc - -func Test_edit_CTRL_L() - " Test Ctrl-X Ctrl-L (line completion) - new - set complete=. - call setline(1, ['one', 'two', 'three', '', '', '', '']) - call cursor(4, 1) - call feedkeys("A\<c-x>\<c-l>\<esc>", 'tnix') - call assert_equal(['one', 'two', 'three', 'three', '', '', ''], getline(1, '$')) - call feedkeys("cct\<c-x>\<c-l>\<c-n>\<esc>", 'tnix') - call assert_equal(['one', 'two', 'three', 't', '', '', ''], getline(1, '$')) - call feedkeys("cct\<c-x>\<c-l>\<c-n>\<c-n>\<esc>", 'tnix') - call assert_equal(['one', 'two', 'three', 'two', '', '', ''], getline(1, '$')) - call feedkeys("cct\<c-x>\<c-l>\<c-n>\<c-n>\<c-n>\<esc>", 'tnix') - call assert_equal(['one', 'two', 'three', 'three', '', '', ''], getline(1, '$')) - call feedkeys("cct\<c-x>\<c-l>\<c-n>\<c-n>\<c-n>\<c-n>\<esc>", 'tnix') - call assert_equal(['one', 'two', 'three', 't', '', '', ''], getline(1, '$')) - call feedkeys("cct\<c-x>\<c-l>\<c-p>\<esc>", 'tnix') - call assert_equal(['one', 'two', 'three', 'two', '', '', ''], getline(1, '$')) - call feedkeys("cct\<c-x>\<c-l>\<c-p>\<c-p>\<esc>", 'tnix') - call assert_equal(['one', 'two', 'three', 't', '', '', ''], getline(1, '$')) - call feedkeys("cct\<c-x>\<c-l>\<c-p>\<c-p>\<c-p>\<esc>", 'tnix') - call assert_equal(['one', 'two', 'three', 'three', '', '', ''], getline(1, '$')) - set complete= - call cursor(5, 1) - call feedkeys("A\<c-x>\<c-l>\<c-p>\<c-n>\<esc>", 'tnix') - call assert_equal(['one', 'two', 'three', 'three', "\<c-l>\<c-p>\<c-n>", '', ''], getline(1, '$')) - set complete& - %d - if has("conceal") && has("syntax") && !has("nvim") - call setline(1, ['foo', 'bar', 'foobar']) - call test_override("char_avail", 1) - set conceallevel=2 concealcursor=n - syn on - syn match ErrorMsg "^bar" - call matchadd("Conceal", 'oo', 10, -1, {'conceal': 'X'}) - func! DoIt() - let g:change=1 - endfunc - au! TextChangedI <buffer> :call DoIt() - - call cursor(2, 1) - call assert_false(exists("g:change")) - call feedkeys("A \<esc>", 'tnix') - call assert_equal(['foo', 'bar ', 'foobar'], getline(1, '$')) - call assert_equal(1, g:change) - - call test_override("char_avail", 0) - call clearmatches() - syn off - au! TextChangedI - delfu DoIt - unlet! g:change - endif - bw! -endfunc - -func Test_edit_CTRL_N() - " Check keyword completion - " for e in ['latin1', 'utf-8'] - for e in ['utf-8'] - exe 'set encoding=' .. e - new - set complete=. - call setline(1, ['INFER', 'loWER', '', '', ]) - call cursor(3, 1) - call feedkeys("Ai\<c-n>\<cr>\<esc>", "tnix") - call feedkeys("ILO\<c-n>\<cr>\<esc>", 'tnix') - call assert_equal(['INFER', 'loWER', 'i', 'LO', '', ''], getline(1, '$'), e) - %d - call setline(1, ['INFER', 'loWER', '', '', ]) - call cursor(3, 1) - set ignorecase infercase - call feedkeys("Ii\<c-n>\<cr>\<esc>", "tnix") - call feedkeys("ILO\<c-n>\<cr>\<esc>", 'tnix') - call assert_equal(['INFER', 'loWER', 'infer', 'LOWER', '', ''], getline(1, '$'), e) - set noignorecase noinfercase - %d - call setline(1, ['one word', 'two word']) - exe "normal! Goo\<C-P>\<C-X>\<C-P>" - call assert_equal('one word', getline(3)) - %d - set complete& - bw! - endfor -endfunc - -func Test_edit_CTRL_O() - " Check for CTRL-O in insert mode - new - inoreabbr <buffer> h here some more - call setline(1, ['abc', 'def']) - call cursor(1, 1) - " Ctrl-O after an abbreviation - exe "norm A h\<c-o>:set nu\<cr> text" - call assert_equal(['abc here some more text', 'def'], getline(1, '$')) - call assert_true(&nu) - set nonu - iunabbr <buffer> h - " Ctrl-O at end of line with 've'=onemore - call cursor(1, 1) - call feedkeys("A\<c-o>:let g:a=getpos('.')\<cr>\<esc>", 'tnix') - call assert_equal([0, 1, 23, 0], g:a) - call cursor(1, 1) - set ve=onemore - call feedkeys("A\<c-o>:let g:a=getpos('.')\<cr>\<esc>", 'tnix') - call assert_equal([0, 1, 24, 0], g:a) - set ve= - unlet! g:a - bw! -endfunc - -func Test_edit_CTRL_R() - " Insert Register - new - " call test_override("ALL", 1) - set showcmd - call feedkeys("AFOOBAR eins zwei\<esc>", 'tnix') - call feedkeys("O\<c-r>.", 'tnix') - call feedkeys("O\<c-r>=10*500\<cr>\<esc>", 'tnix') - call feedkeys("O\<c-r>=getreg('=', 1)\<cr>\<esc>", 'tnix') - call assert_equal(["getreg('=', 1)", '5000', "FOOBAR eins zwei", "FOOBAR eins zwei"], getline(1, '$')) - " call test_override("ALL", 0) - set noshowcmd - bw! -endfunc - -func Test_edit_CTRL_S() - " Test pressing CTRL-S (basically only spellfile completion) - " the rest is already covered - new - if !has("spell") - call setline(1, 'vim') - call feedkeys("A\<c-x>ss\<cr>\<esc>", 'tnix') - call assert_equal(['vims', ''], getline(1, '$')) - bw! - return - endif - call setline(1, 'vim') - " spell option not yet set - try - call feedkeys("A\<c-x>\<c-s>\<cr>\<esc>", 'tnix') - catch /^Vim\%((\a\+)\)\=:E756/ - call assert_true(1, 'error caught') - endtry - call assert_equal(['vim', ''], getline(1, '$')) - %d - setl spell spelllang=en - call setline(1, 'vim') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-s>\<cr>\<esc>", 'tnix') - call assert_equal(['Vim', ''], getline(1, '$')) - %d - call setline(1, 'vim') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-s>\<down>\<cr>\<esc>", 'tnix') - call assert_equal(['Aim'], getline(1, '$')) - %d - call setline(1, 'vim') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-s>\<c-p>\<cr>\<esc>", 'tnix') - call assert_equal(['vim', ''], getline(1, '$')) - %d - " empty buffer - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-s>\<c-p>\<cr>\<esc>", 'tnix') - call assert_equal(['', ''], getline(1, '$')) - setl nospell - bw! -endfunc - -func Test_edit_CTRL_T() - " Check for CTRL-T and CTRL-X CTRL-T in insert mode - " 1) increase indent - new - call setline(1, "abc") - call cursor(1, 1) - call feedkeys("A\<c-t>xyz", 'tnix') - call assert_equal(["\<tab>abcxyz"], getline(1, '$')) - " 2) also when paste option is set - set paste - call setline(1, "abc") - call cursor(1, 1) - call feedkeys("A\<c-t>xyz", 'tnix') - call assert_equal(["\<tab>abcxyz"], getline(1, '$')) - set nopaste - " CTRL-X CTRL-T (thesaurus complete) - call writefile(['angry furious mad enraged'], 'Xthesaurus') - set thesaurus=Xthesaurus - call setline(1, 'mad') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-t>\<cr>\<esc>", 'tnix') - call assert_equal(['mad', ''], getline(1, '$')) - %d - call setline(1, 'mad') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-t>\<c-n>\<cr>\<esc>", 'tnix') - call assert_equal(['angry', ''], getline(1, '$')) - %d - call setline(1, 'mad') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-t>\<c-n>\<c-n>\<cr>\<esc>", 'tnix') - call assert_equal(['furious', ''], getline(1, '$')) - %d - call setline(1, 'mad') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-t>\<c-n>\<c-n>\<c-n>\<cr>\<esc>", 'tnix') - call assert_equal(['enraged', ''], getline(1, '$')) - %d - call setline(1, 'mad') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-t>\<c-n>\<c-n>\<c-n>\<c-n>\<cr>\<esc>", 'tnix') - call assert_equal(['mad', ''], getline(1, '$')) - %d - call setline(1, 'mad') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-t>\<c-n>\<c-n>\<c-n>\<c-n>\<c-n>\<cr>\<esc>", 'tnix') - call assert_equal(['mad', ''], getline(1, '$')) - " Using <c-p> <c-n> when 'complete' is empty - set complete= - %d - call setline(1, 'mad') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-t>\<c-n>\<cr>\<esc>", 'tnix') - call assert_equal(['angry', ''], getline(1, '$')) - %d - call setline(1, 'mad') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-t>\<c-p>\<cr>\<esc>", 'tnix') - call assert_equal(['mad', ''], getline(1, '$')) - set complete& - - set thesaurus= - %d - call setline(1, 'mad') - call cursor(1, 1) - let v:testing = 1 - try - call feedkeys("A\<c-x>\<c-t>\<esc>", 'tnix') - catch - " error sleeps 2 seconds, when v:testing is not set - let v:testing = 0 - endtry - call assert_equal(['mad'], getline(1, '$')) - call delete('Xthesaurus') - bw! -endfunc - -" Test thesaurus completion with different encodings -func Test_thesaurus_complete_with_encoding() - call writefile(['angry furious mad enraged'], 'Xthesaurus') - set thesaurus=Xthesaurus - " for e in ['latin1', 'utf-8'] - for e in ['utf-8'] - exe 'set encoding=' .. e - new - call setline(1, 'mad') - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-t>\<cr>\<esc>", 'tnix') - call assert_equal(['mad', ''], getline(1, '$')) - bw! - endfor - set thesaurus= - call delete('Xthesaurus') -endfunc - -" Test 'thesaurusfunc' -func MyThesaurus(findstart, base) - let mythesaurus = [ - \ #{word: "happy", - \ synonyms: "cheerful,blissful,flying high,looking good,peppy"}, - \ #{word: "kind", - \ synonyms: "amiable,bleeding-heart,heart in right place"}] - if a:findstart - " locate the start of the word - let line = getline('.') - let start = col('.') - 1 - while start > 0 && line[start - 1] =~ '\a' - let start -= 1 - endwhile - return start - else - " find strings matching with "a:base" - let res = [] - for w in mythesaurus - if w.word =~ '^' . a:base - call add(res, w.word) - call extend(res, split(w.synonyms, ",")) - endif - endfor - return res - endif -endfunc - -func Test_thesaurus_func() - new - set thesaurus=notused - set thesaurusfunc=NotUsed - setlocal thesaurusfunc=MyThesaurus - call setline(1, "an ki") - call cursor(1, 1) - call feedkeys("A\<c-x>\<c-t>\<c-n>\<cr>\<esc>", 'tnix') - call assert_equal(['an amiable', ''], getline(1, '$')) - - setlocal thesaurusfunc=NonExistingFunc - call assert_fails("normal $a\<C-X>\<C-T>", 'E117:') - - setlocal thesaurusfunc= - set thesaurusfunc=NonExistingFunc - call assert_fails("normal $a\<C-X>\<C-T>", 'E117:') - %bw! - - set thesaurusfunc= - set thesaurus= -endfunc - -func Test_edit_CTRL_U() - " Test 'completefunc' - new - " -1, -2 and -3 are special return values - let g:special=0 - fun! CompleteMonths(findstart, base) - if a:findstart - " locate the start of the word - return g:special - else - " find months matching with "a:base" - let res = [] - for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec") - if m =~ '^\c'.a:base - call add(res, {'word': m, 'abbr': m.' Month', 'icase': 0}) - endif - endfor - return {'words': res, 'refresh': 'always'} - endif - endfun - set completefunc=CompleteMonths - call setline(1, ['', '']) - call cursor(1, 1) - call feedkeys("AX\<c-x>\<c-u>\<cr>\<esc>", 'tnix') - call assert_equal(['X', '', ''], getline(1, '$')) - %d - let g:special=-1 - call feedkeys("AX\<c-x>\<c-u>\<cr>\<esc>", 'tnix') - call assert_equal(['XJan', ''], getline(1, '$')) - %d - let g:special=-2 - call feedkeys("AX\<c-x>\<c-u>\<cr>\<esc>", 'tnix') - call assert_equal(['X', ''], getline(1, '$')) - %d - let g:special=-3 - call feedkeys("AX\<c-x>\<c-u>\<cr>\<esc>", 'tnix') - call assert_equal(['X', ''], getline(1, '$')) - %d - let g:special=0 - call feedkeys("AM\<c-x>\<c-u>\<cr>\<esc>", 'tnix') - call assert_equal(['Mar', ''], getline(1, '$')) - %d - call feedkeys("AM\<c-x>\<c-u>\<c-n>\<cr>\<esc>", 'tnix') - call assert_equal(['May', ''], getline(1, '$')) - %d - call feedkeys("AM\<c-x>\<c-u>\<c-n>\<c-n>\<cr>\<esc>", 'tnix') - call assert_equal(['M', ''], getline(1, '$')) - delfu CompleteMonths - %d - try - call feedkeys("A\<c-x>\<c-u>", 'tnix') - call assert_fails(1, 'unknown completion function') - catch /^Vim\%((\a\+)\)\=:E117/ - call assert_true(1, 'E117 error caught') - endtry - set completefunc= - bw! -endfunc - -func Test_edit_completefunc_delete() - func CompleteFunc(findstart, base) - if a:findstart == 1 - return col('.') - 1 - endif - normal dd - return ['a', 'b'] - endfunc - new - set completefunc=CompleteFunc - call setline(1, ['', 'abcd', '']) - 2d - call assert_fails("normal 2G$a\<C-X>\<C-U>", 'E565:') - bwipe! -endfunc - -func Test_edit_CTRL_Z() - " Ctrl-Z when insertmode is not set inserts it literally - new - call setline(1, 'abc') - call feedkeys("A\<c-z>\<esc>", 'tnix') - call assert_equal(["abc\<c-z>"], getline(1,'$')) - bw! - |