mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.2.0023: command line editing not sufficiently tested
Problem: Command line editing not sufficiently tested.
Solution: Add more tests. (Dominique Pelle, closes vim/vim#5374)
59cb041d0a
Ported to commit test_ex_mode.vim for later patches.
Test fails because feedkeys() filters out modifier keys on output.
This commit is contained in:
parent
dad725d5e5
commit
d5b9a7d6e8
@ -10,6 +10,7 @@ source test_cursor_func.vim
|
||||
source test_ex_equal.vim
|
||||
source test_ex_undo.vim
|
||||
source test_ex_z.vim
|
||||
source test_ex_mode.vim
|
||||
source test_execute_func.vim
|
||||
source test_expand_func.vim
|
||||
source test_feedkeys.vim
|
||||
|
@ -477,7 +477,7 @@ func Test_expand_star_star()
|
||||
call delete('a', 'rf')
|
||||
endfunc
|
||||
|
||||
func Test_paste_in_cmdline()
|
||||
func Test_cmdline_paste()
|
||||
let @a = "def"
|
||||
call feedkeys(":abc \<C-R>a ghi\<C-B>\"\<CR>", 'tx')
|
||||
call assert_equal('"abc def ghi', @:)
|
||||
@ -517,18 +517,38 @@ func Test_paste_in_cmdline()
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
func Test_remove_char_in_cmdline()
|
||||
call feedkeys(":abc def\<S-Left>\<Del>\<C-B>\"\<CR>", 'tx')
|
||||
call assert_equal('"abc ef', @:)
|
||||
func Test_cmdline_remove_char()
|
||||
let encoding_save = &encoding
|
||||
|
||||
call feedkeys(":abc def\<S-Left>\<BS>\<C-B>\"\<CR>", 'tx')
|
||||
call assert_equal('"abcdef', @:)
|
||||
" for e in ['utf8', 'latin1']
|
||||
for e in ['utf8']
|
||||
exe 'set encoding=' . e
|
||||
|
||||
call feedkeys(":abc def ghi\<S-Left>\<C-W>\<C-B>\"\<CR>", 'tx')
|
||||
call assert_equal('"abc ghi', @:)
|
||||
call feedkeys(":abc def\<S-Left>\<Del>\<C-B>\"\<CR>", 'tx')
|
||||
call assert_equal('"abc ef', @:, e)
|
||||
|
||||
call feedkeys(":abc def\<S-Left>\<C-U>\<C-B>\"\<CR>", 'tx')
|
||||
call assert_equal('"def', @:)
|
||||
call feedkeys(":abc def\<S-Left>\<BS>\<C-B>\"\<CR>", 'tx')
|
||||
call assert_equal('"abcdef', @:)
|
||||
|
||||
call feedkeys(":abc def ghi\<S-Left>\<C-W>\<C-B>\"\<CR>", 'tx')
|
||||
call assert_equal('"abc ghi', @:, e)
|
||||
|
||||
call feedkeys(":abc def\<S-Left>\<C-U>\<C-B>\"\<CR>", 'tx')
|
||||
call assert_equal('"def', @:, e)
|
||||
endfor
|
||||
|
||||
let &encoding = encoding_save
|
||||
endfunc
|
||||
|
||||
func Test_cmdline_keymap_ctrl_hat()
|
||||
if !has('keymap')
|
||||
return
|
||||
endif
|
||||
|
||||
set keymap=esperanto
|
||||
call feedkeys(":\"Jxauxdo \<C-^>Jxauxdo \<C-^>Jxauxdo\<CR>", 'tx')
|
||||
call assert_equal('"Jxauxdo Ĵaŭdo Jxauxdo', @:)
|
||||
set keymap=
|
||||
endfunc
|
||||
|
||||
func Test_illegal_address1()
|
||||
@ -863,20 +883,20 @@ func Test_cmdline_overstrike()
|
||||
|
||||
" Test overstrike in the middle of the command line.
|
||||
call feedkeys(":\"01234\<home>\<right>\<right>ab\<right>\<insert>cd\<enter>", 'xt')
|
||||
call assert_equal('"0ab1cd4', @:)
|
||||
call assert_equal('"0ab1cd4', @:, e)
|
||||
|
||||
" Test overstrike going beyond end of command line.
|
||||
call feedkeys(":\"01234\<home>\<right>\<right>ab\<right>\<insert>cdefgh\<enter>", 'xt')
|
||||
call assert_equal('"0ab1cdefgh', @:)
|
||||
call assert_equal('"0ab1cdefgh', @:, e)
|
||||
|
||||
" Test toggling insert/overstrike a few times.
|
||||
call feedkeys(":\"01234\<home>\<right>ab\<right>\<insert>cd\<right>\<insert>ef\<enter>", 'xt')
|
||||
call assert_equal('"ab0cd3ef4', @:)
|
||||
call assert_equal('"ab0cd3ef4', @:, e)
|
||||
endfor
|
||||
|
||||
" Test overstrike with multi-byte characters.
|
||||
call feedkeys(":\"テキストエディタ\<home>\<right>\<right>ab\<right>\<insert>cd\<enter>", 'xt')
|
||||
call assert_equal('"テabキcdエディタ', @:)
|
||||
call assert_equal('"テabキcdエディタ', @:, e)
|
||||
|
||||
let &encoding = encoding_save
|
||||
endfunc
|
||||
|
56
src/nvim/testdir/test_ex_mode.vim
Normal file
56
src/nvim/testdir/test_ex_mode.vim
Normal file
@ -0,0 +1,56 @@
|
||||
" Test editing line in Ex mode (see :help Q and :help gQ).
|
||||
|
||||
" Helper function to test editing line in Q Ex mode
|
||||
func Ex_Q(cmd)
|
||||
" Is there a simpler way to test editing Ex line?
|
||||
call feedkeys("Q"
|
||||
\ .. "let s:test_ex =<< END\<CR>"
|
||||
\ .. a:cmd .. "\<CR>"
|
||||
\ .. "END\<CR>"
|
||||
\ .. "visual\<CR>", 'tx')
|
||||
return s:test_ex[0]
|
||||
endfunc
|
||||
|
||||
" Helper function to test editing line in gQ Ex mode
|
||||
func Ex_gQ(cmd)
|
||||
call feedkeys("gQ" .. a:cmd .. "\<C-b>\"\<CR>", 'tx')
|
||||
let ret = @:[1:] " Remove leading quote.
|
||||
call feedkeys("visual\<CR>", 'tx')
|
||||
return ret
|
||||
endfunc
|
||||
|
||||
" Helper function to test editing line with both Q and gQ Ex mode.
|
||||
func Ex(cmd)
|
||||
return [Ex_Q(a:cmd), Ex_gQ(a:cmd)]
|
||||
endfunc
|
||||
|
||||
" Test editing line in Ex mode (both Q and gQ)
|
||||
func Test_ex_mode()
|
||||
throw 'skipped: TODO: '
|
||||
let encoding_save = &encoding
|
||||
set sw=2
|
||||
|
||||
" for e in ['utf8', 'latin1']
|
||||
for e in ['utf8']
|
||||
exe 'set encoding=' . e
|
||||
|
||||
call assert_equal(['bar', 'bar'], Ex("foo bar\<C-u>bar"), e)
|
||||
call assert_equal(["1\<C-u>2", "1\<C-u>2"], Ex("1\<C-v>\<C-u>2"), e)
|
||||
call assert_equal(["1\<C-b>2\<C-e>3", '213'], Ex("1\<C-b>2\<C-e>3"), e)
|
||||
call assert_equal(['0123', '2013'], Ex("01\<Home>2\<End>3"), e)
|
||||
call assert_equal(['0123', '0213'], Ex("01\<Left>2\<Right>3"), e)
|
||||
call assert_equal(['01234', '0342'], Ex("012\<Left>\<Left>\<Insert>3\<Insert>4"), e)
|
||||
call assert_equal(["foo bar\<C-w>", 'foo '], Ex("foo bar\<C-w>"), e)
|
||||
call assert_equal(['foo', 'foo'], Ex("fooba\<Del>\<Del>"), e)
|
||||
call assert_equal(["foo\tbar", 'foobar'], Ex("foo\<Tab>bar"), e)
|
||||
call assert_equal(["abbrev\t", 'abbreviate'], Ex("abbrev\<Tab>"), e)
|
||||
call assert_equal([' 1', "1\<C-t>\<C-t>"], Ex("1\<C-t>\<C-t>"), e)
|
||||
call assert_equal([' 1', "1\<C-t>\<C-t>"], Ex("1\<C-t>\<C-t>\<C-d>"), e)
|
||||
call assert_equal([' foo', ' foo'], Ex(" foo\<C-d>"), e)
|
||||
call assert_equal(['foo', ' foo0'], Ex(" foo0\<C-d>"), e)
|
||||
call assert_equal(['foo', ' foo^'], Ex(" foo^\<C-d>"), e)
|
||||
endfor
|
||||
|
||||
set sw&
|
||||
let &encoding = encoding_save
|
||||
endfunc
|
Loading…
Reference in New Issue
Block a user