0
0
mirror of https://github.com/vim/vim.git synced 2025-10-10 06:24:10 -04:00

patch 8.2.0023: command line editing not sufficiently tested

Problem:    Command line editing not sufficiently tested.
Solution:   Add more tests. (Dominique Pelle, closes #5374)
This commit is contained in:
Bram Moolenaar
2019-12-18 22:26:31 +01:00
parent 0ce3733f78
commit 59cb041d0a
5 changed files with 91 additions and 14 deletions

View File

@@ -97,6 +97,7 @@ NEW_TESTS = \
test_ex_equal \
test_ex_undo \
test_ex_z \
test_ex_mode \
test_excmd \
test_exec_while_if \
test_execute_func \

View File

@@ -13,6 +13,7 @@ source test_delete.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.vim
source test_expand_dllpath.vim

View File

@@ -419,7 +419,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', @:)
@@ -459,18 +459,37 @@ func Test_paste_in_cmdline()
bwipe!
endfunc
func Test_remove_char_in_cmdline()
func Test_cmdline_remove_char()
let encoding_save = &encoding
for e in ['utf8', 'latin1']
exe 'set encoding=' . e
call feedkeys(":abc def\<S-Left>\<Del>\<C-B>\"\<CR>", 'tx')
call assert_equal('"abc ef', @:)
call assert_equal('"abc ef', @:, e)
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', @:)
call assert_equal('"abc ghi', @:, e)
call feedkeys(":abc def\<S-Left>\<C-U>\<C-B>\"\<CR>", 'tx')
call assert_equal('"def', @:)
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()
@@ -741,20 +760,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

View File

@@ -0,0 +1,54 @@
" 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()
let encoding_save = &encoding
set sw=2
for e in ['utf8', 'latin1']
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

View File

@@ -742,6 +742,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
23,
/**/
22,
/**/