aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/testdir/test_edit.vim
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2023-11-29 21:52:58 +0000
committerJosh Rahm <joshuarahm@gmail.com>2023-11-29 21:52:58 +0000
commit931bffbda3668ddc609fc1da8f9eb576b170aa52 (patch)
treed8c1843a95da5ea0bb4acc09f7e37843d9995c86 /src/nvim/testdir/test_edit.vim
parent142d9041391780ac15b89886a54015fdc5c73995 (diff)
parent4a8bf24ac690004aedf5540fa440e788459e5e34 (diff)
downloadrneovim-userreg.tar.gz
rneovim-userreg.tar.bz2
rneovim-userreg.zip
Merge remote-tracking branch 'upstream/master' into userreguserreg
Diffstat (limited to 'src/nvim/testdir/test_edit.vim')
-rw-r--r--src/nvim/testdir/test_edit.vim2084
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')