mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:9.1.0144: getregion() needs more tests (#27681)
Problem: getregion() needs more tests
Solution: Run the getregion() test in both the legacy and Vim9 contexts
(Yegappan Lakshmanan)
closes: vim/vim#14114
4d55c54e30
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
This commit is contained in:
parent
41f2cbe171
commit
57e5b9f4ea
@ -3,6 +3,7 @@
|
|||||||
source shared.vim
|
source shared.vim
|
||||||
source check.vim
|
source check.vim
|
||||||
source screendump.vim
|
source screendump.vim
|
||||||
|
source vim9.vim
|
||||||
|
|
||||||
func Test_block_shift_multibyte()
|
func Test_block_shift_multibyte()
|
||||||
" Uses double-wide character.
|
" Uses double-wide character.
|
||||||
@ -1635,261 +1636,279 @@ func Test_visual_substitute_visual()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_visual_getregion()
|
func Test_visual_getregion()
|
||||||
new
|
let lines =<< trim END
|
||||||
|
new
|
||||||
|
|
||||||
call setline(1, ['one', 'two', 'three'])
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
|
||||||
" Visual mode
|
#" Visual mode
|
||||||
call cursor(1, 1)
|
call cursor(1, 1)
|
||||||
call feedkeys("\<ESC>vjl", 'tx')
|
call feedkeys("\<ESC>vjl", 'tx')
|
||||||
call assert_equal(['one', 'tw'],
|
call assert_equal(['one', 'tw'],
|
||||||
\ 'v'->getpos()->getregion(getpos('.')))
|
\ 'v'->getpos()->getregion(getpos('.')))
|
||||||
call assert_equal(['one', 'tw'],
|
call assert_equal(['one', 'tw'],
|
||||||
\ '.'->getpos()->getregion(getpos('v')))
|
\ '.'->getpos()->getregion(getpos('v')))
|
||||||
call assert_equal(['o'],
|
call assert_equal(['o'],
|
||||||
\ 'v'->getpos()->getregion(getpos('v')))
|
\ 'v'->getpos()->getregion(getpos('v')))
|
||||||
call assert_equal(['w'],
|
call assert_equal(['w'],
|
||||||
\ '.'->getpos()->getregion(getpos('.'), #{ type: 'v' }))
|
\ '.'->getpos()->getregion(getpos('.'), {'type': 'v' }))
|
||||||
call assert_equal(['one', 'two'],
|
call assert_equal(['one', 'two'],
|
||||||
\ getpos('.')->getregion(getpos('v'), #{ type: 'V' }))
|
\ getpos('.')->getregion(getpos('v'), {'type': 'V' }))
|
||||||
call assert_equal(['on', 'tw'],
|
call assert_equal(['on', 'tw'],
|
||||||
\ getpos('.')->getregion(getpos('v'), #{ type: "\<C-v>" }))
|
\ getpos('.')->getregion(getpos('v'), {'type': "\<C-v>" }))
|
||||||
|
|
||||||
" Line visual mode
|
#" Line visual mode
|
||||||
call cursor(1, 1)
|
call cursor(1, 1)
|
||||||
call feedkeys("\<ESC>Vl", 'tx')
|
call feedkeys("\<ESC>Vl", 'tx')
|
||||||
call assert_equal(['one'],
|
call assert_equal(['one'],
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: 'V' }))
|
\ getregion(getpos('v'), getpos('.'), {'type': 'V' }))
|
||||||
call assert_equal(['one'],
|
call assert_equal(['one'],
|
||||||
\ getregion(getpos('.'), getpos('v'), #{ type: 'V' }))
|
\ getregion(getpos('.'), getpos('v'), {'type': 'V' }))
|
||||||
call assert_equal(['one'],
|
call assert_equal(['one'],
|
||||||
\ getregion(getpos('v'), getpos('v'), #{ type: 'V' }))
|
\ getregion(getpos('v'), getpos('v'), {'type': 'V' }))
|
||||||
call assert_equal(['one'],
|
call assert_equal(['one'],
|
||||||
\ getregion(getpos('.'), getpos('.'), #{ type: 'V' }))
|
\ getregion(getpos('.'), getpos('.'), {'type': 'V' }))
|
||||||
call assert_equal(['on'],
|
call assert_equal(['on'],
|
||||||
\ getpos('.')->getregion(getpos('v'), #{ type: 'v' }))
|
\ getpos('.')->getregion(getpos('v'), {'type': 'v' }))
|
||||||
call assert_equal(['on'],
|
call assert_equal(['on'],
|
||||||
\ getpos('.')->getregion(getpos('v'), #{ type: "\<C-v>" }))
|
\ getpos('.')->getregion(getpos('v'), {'type': "\<C-v>" }))
|
||||||
|
|
||||||
" Block visual mode
|
#" Block visual mode
|
||||||
call cursor(1, 1)
|
call cursor(1, 1)
|
||||||
call feedkeys("\<ESC>\<C-v>ll", 'tx')
|
call feedkeys("\<ESC>\<C-v>ll", 'tx')
|
||||||
call assert_equal(['one'],
|
call assert_equal(['one'],
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: "\<C-v>" }))
|
\ getregion(getpos('v'), getpos('.'), {'type': "\<C-v>" }))
|
||||||
call assert_equal(['one'],
|
call assert_equal(['one'],
|
||||||
\ getregion(getpos('.'), getpos('v'), #{ type: "\<C-v>" }))
|
\ getregion(getpos('.'), getpos('v'), {'type': "\<C-v>" }))
|
||||||
call assert_equal(['o'],
|
call assert_equal(['o'],
|
||||||
\ getregion(getpos('v'), getpos('v'), #{ type: "\<C-v>" }))
|
\ getregion(getpos('v'), getpos('v'), {'type': "\<C-v>" }))
|
||||||
call assert_equal(['e'],
|
call assert_equal(['e'],
|
||||||
\ getregion(getpos('.'), getpos('.'), #{ type: "\<C-v>" }))
|
\ getregion(getpos('.'), getpos('.'), {'type': "\<C-v>" }))
|
||||||
call assert_equal(['one'],
|
call assert_equal(['one'],
|
||||||
\ '.'->getpos()->getregion(getpos('v'), #{ type: 'V' }))
|
\ '.'->getpos()->getregion(getpos('v'), {'type': 'V' }))
|
||||||
call assert_equal(['one'],
|
call assert_equal(['one'],
|
||||||
\ '.'->getpos()->getregion(getpos('v'), #{ type: 'v' }))
|
\ '.'->getpos()->getregion(getpos('v'), {'type': 'v' }))
|
||||||
|
|
||||||
" Using Marks
|
#" Using Marks
|
||||||
call setpos("'a", [0, 2, 3, 0])
|
call setpos("'a", [0, 2, 3, 0])
|
||||||
call cursor(1, 1)
|
call cursor(1, 1)
|
||||||
call assert_equal(['one', 'two'],
|
call assert_equal(['one', 'two'],
|
||||||
\ "'a"->getpos()->getregion(getpos('.'), #{ type: 'v' }))
|
\ "'a"->getpos()->getregion(getpos('.'), {'type': 'v' }))
|
||||||
call assert_equal(['one', 'two'],
|
call assert_equal(['one', 'two'],
|
||||||
\ "."->getpos()->getregion(getpos("'a"), #{ type: 'v' }))
|
\ "."->getpos()->getregion(getpos("'a"), {'type': 'v' }))
|
||||||
call assert_equal(['one', 'two'],
|
call assert_equal(['one', 'two'],
|
||||||
\ "."->getpos()->getregion(getpos("'a"), #{ type: 'V' }))
|
\ "."->getpos()->getregion(getpos("'a"), {'type': 'V' }))
|
||||||
call assert_equal(['two'],
|
call assert_equal(['two'],
|
||||||
\ "'a"->getpos()->getregion(getpos("'a"), #{ type: 'V' }))
|
\ "'a"->getpos()->getregion(getpos("'a"), {'type': 'V' }))
|
||||||
call assert_equal(['one', 'two'],
|
call assert_equal(['one', 'two'],
|
||||||
\ "."->getpos()->getregion(getpos("'a"), #{ type: "\<c-v>" }))
|
\ "."->getpos()->getregion(getpos("'a"), {'type': "\<c-v>" }))
|
||||||
|
|
||||||
" Using List
|
#" Using List
|
||||||
call cursor(1, 1)
|
call cursor(1, 1)
|
||||||
call assert_equal(['one', 'two'],
|
call assert_equal(['one', 'two'],
|
||||||
\ [0, 2, 3, 0]->getregion(getpos('.'), #{ type: 'v' }))
|
\ [0, 2, 3, 0]->getregion(getpos('.'), {'type': 'v' }))
|
||||||
call assert_equal(['one', 'two'],
|
call assert_equal(['one', 'two'],
|
||||||
\ '.'->getpos()->getregion([0, 2, 3, 0], #{ type: 'v' }))
|
\ '.'->getpos()->getregion([0, 2, 3, 0], {'type': 'v' }))
|
||||||
call assert_equal(['one', 'two'],
|
call assert_equal(['one', 'two'],
|
||||||
\ '.'->getpos()->getregion([0, 2, 3, 0], #{ type: 'V' }))
|
\ '.'->getpos()->getregion([0, 2, 3, 0], {'type': 'V' }))
|
||||||
call assert_equal(['two'],
|
call assert_equal(['two'],
|
||||||
\ [0, 2, 3, 0]->getregion([0, 2, 3, 0], #{ type: 'V' }))
|
\ [0, 2, 3, 0]->getregion([0, 2, 3, 0], {'type': 'V' }))
|
||||||
call assert_equal(['one', 'two'],
|
call assert_equal(['one', 'two'],
|
||||||
\ '.'->getpos()->getregion([0, 2, 3, 0], #{ type: "\<c-v>" }))
|
\ '.'->getpos()->getregion([0, 2, 3, 0], {'type': "\<c-v>" }))
|
||||||
|
|
||||||
" Multiline with line visual mode
|
#" Multiline with line visual mode
|
||||||
call cursor(1, 1)
|
call cursor(1, 1)
|
||||||
call feedkeys("\<ESC>Vjj", 'tx')
|
call feedkeys("\<ESC>Vjj", 'tx')
|
||||||
call assert_equal(['one', 'two', 'three'],
|
call assert_equal(['one', 'two', 'three'],
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: 'V' }))
|
\ getregion(getpos('v'), getpos('.'), {'type': 'V' }))
|
||||||
|
|
||||||
" Multiline with block visual mode
|
#" Multiline with block visual mode
|
||||||
call cursor(1, 1)
|
call cursor(1, 1)
|
||||||
call feedkeys("\<ESC>\<C-v>jj", 'tx')
|
call feedkeys("\<ESC>\<C-v>jj", 'tx')
|
||||||
call assert_equal(['o', 't', 't'],
|
call assert_equal(['o', 't', 't'],
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: "\<C-v>" }))
|
\ getregion(getpos('v'), getpos('.'), {'type': "\<C-v>" }))
|
||||||
|
|
||||||
call cursor(1, 1)
|
call cursor(1, 1)
|
||||||
call feedkeys("\<ESC>\<C-v>jj$", 'tx')
|
call feedkeys("\<ESC>\<C-v>jj$", 'tx')
|
||||||
call assert_equal(['one', 'two', 'three'],
|
call assert_equal(['one', 'two', 'three'],
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: "\<C-v>" }))
|
\ getregion(getpos('v'), getpos('.'), {'type': "\<C-v>" }))
|
||||||
|
|
||||||
" 'virtualedit'
|
#" 'virtualedit'
|
||||||
set virtualedit=all
|
set virtualedit=all
|
||||||
call cursor(1, 1)
|
call cursor(1, 1)
|
||||||
call feedkeys("\<ESC>\<C-v>10ljj$", 'tx')
|
call feedkeys("\<ESC>\<C-v>10ljj$", 'tx')
|
||||||
call assert_equal(['one ', 'two ', 'three '],
|
call assert_equal(['one ', 'two ', 'three '],
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: "\<C-v>" }))
|
\ getregion(getpos('v'), getpos('.'), {'type': "\<C-v>" }))
|
||||||
set virtualedit&
|
set virtualedit&
|
||||||
|
|
||||||
" Invalid position
|
#" Invalid position
|
||||||
call cursor(1, 1)
|
call cursor(1, 1)
|
||||||
call feedkeys("\<ESC>vjj$", 'tx')
|
call feedkeys("\<ESC>vjj$", 'tx')
|
||||||
call assert_fails("call getregion(1, 2)", 'E1211:')
|
call assert_fails("call getregion(1, 2)", 'E1211:')
|
||||||
call assert_fails("call getregion(getpos('.'), {})", 'E1211:')
|
call assert_fails("call getregion(getpos('.'), {})", 'E1211:')
|
||||||
call assert_equal([], getregion(getpos('.'), getpos('.'), #{ type: '' }))
|
call assert_equal([], getregion(getpos('.'), getpos('.'), {'type': '' }))
|
||||||
|
|
||||||
" using the wrong type
|
#" using the wrong type
|
||||||
call assert_fails(':echo "."->getpos()->getregion("$", [])', 'E1211:')
|
call assert_fails(':echo "."->getpos()->getregion("$", [])', 'E1211:')
|
||||||
|
|
||||||
" using a mark in another buffer
|
#" using a mark in another buffer
|
||||||
new
|
new
|
||||||
let newbuf = bufnr()
|
VAR newbuf = bufnr()
|
||||||
call setline(1, range(10))
|
call setline(1, range(10))
|
||||||
normal! GmA
|
normal! GmA
|
||||||
wincmd p
|
wincmd p
|
||||||
call assert_equal([newbuf, 10, 1, 0], getpos("'A"))
|
call assert_equal([newbuf, 10, 1, 0], getpos("'A"))
|
||||||
call assert_equal([], getregion(getpos('.'), getpos("'A"), #{ type: 'v' }))
|
call assert_equal([], getregion(getpos('.'), getpos("'A"), {'type': 'v' }))
|
||||||
call assert_equal([], getregion(getpos("'A"), getpos('.'), #{ type: 'v' }))
|
call assert_equal([], getregion(getpos("'A"), getpos('.'), {'type': 'v' }))
|
||||||
exe newbuf .. 'bwipe!'
|
exe $':{newbuf}bwipe!'
|
||||||
|
END
|
||||||
bwipe!
|
call CheckLegacyAndVim9Success(lines)
|
||||||
" Selection in starts or ends in the middle of a multibyte character
|
|
||||||
new
|
|
||||||
call setline(1, [
|
|
||||||
\ "abcdefghijk\u00ab",
|
|
||||||
\ "\U0001f1e6\u00ab\U0001f1e7\u00ab\U0001f1e8\u00ab\U0001f1e9",
|
|
||||||
\ "1234567890"
|
|
||||||
\ ])
|
|
||||||
call cursor(1, 3)
|
|
||||||
call feedkeys("\<Esc>\<C-v>ljj", 'xt')
|
|
||||||
call assert_equal(['cd', "\u00ab ", '34'],
|
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: "\<C-v>" }))
|
|
||||||
call cursor(1, 4)
|
|
||||||
call feedkeys("\<Esc>\<C-v>ljj", 'xt')
|
|
||||||
call assert_equal(['de', "\U0001f1e7", '45'],
|
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: "\<C-v>" }))
|
|
||||||
call cursor(1, 5)
|
|
||||||
call feedkeys("\<Esc>\<C-v>jj", 'xt')
|
|
||||||
call assert_equal(['e', ' ', '5'],
|
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: "\<C-v>" }))
|
|
||||||
call cursor(1, 1)
|
|
||||||
call feedkeys("\<Esc>vj", 'xt')
|
|
||||||
call assert_equal(['abcdefghijk«', "\U0001f1e6"],
|
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: 'v' }))
|
|
||||||
" marks on multibyte chars
|
|
||||||
set selection=exclusive
|
|
||||||
call setpos("'a", [0, 1, 11, 0])
|
|
||||||
call setpos("'b", [0, 2, 16, 0])
|
|
||||||
call setpos("'c", [0, 2, 0, 0])
|
|
||||||
call cursor(1, 1)
|
|
||||||
call assert_equal(['ghijk', '🇨«🇩'],
|
|
||||||
\ getregion(getpos("'a"), getpos("'b"), #{ type: "\<c-v>" }))
|
|
||||||
call assert_equal(['k«', '🇦«🇧«🇨'],
|
|
||||||
\ getregion(getpos("'a"), getpos("'b"), #{ type: 'v' }))
|
|
||||||
call assert_equal(['k«'],
|
|
||||||
\ getregion(getpos("'a"), getpos("'c"), #{ type: 'v' }))
|
|
||||||
|
|
||||||
" use inclusive selection, although 'selection' is exclusive
|
|
||||||
call setpos("'a", [0, 1, 11, 0])
|
|
||||||
call setpos("'b", [0, 1, 1, 0])
|
|
||||||
call assert_equal(['abcdefghijk'],
|
|
||||||
\ getregion(getpos("'a"), getpos("'b"), #{ type: "\<c-v>", exclusive: v:false }))
|
|
||||||
call assert_equal(['abcdefghij'],
|
|
||||||
\ getregion(getpos("'a"), getpos("'b"), #{ type: "\<c-v>", exclusive: v:true }))
|
|
||||||
call assert_equal(['abcdefghijk'],
|
|
||||||
\ getregion(getpos("'a"), getpos("'b"), #{ type: 'v', exclusive: 0 }))
|
|
||||||
call assert_equal(['abcdefghij'],
|
|
||||||
\ getregion(getpos("'a"), getpos("'b"), #{ type: 'v', exclusive: 1 }))
|
|
||||||
call assert_equal(['abcdefghijk«'],
|
|
||||||
\ getregion(getpos("'a"), getpos("'b"), #{ type: 'V', exclusive: 0 }))
|
|
||||||
call assert_equal(['abcdefghijk«'],
|
|
||||||
\ getregion(getpos("'a"), getpos("'b"), #{ type: 'V', exclusive: 1 }))
|
|
||||||
|
|
||||||
bwipe!
|
bwipe!
|
||||||
|
|
||||||
" Exclusive selection
|
let lines =<< trim END
|
||||||
new
|
#" Selection in starts or ends in the middle of a multibyte character
|
||||||
set selection=exclusive
|
new
|
||||||
call setline(1, ["a\tc", "x\tz", '', ''])
|
call setline(1, [
|
||||||
call cursor(1, 1)
|
\ "abcdefghijk\u00ab",
|
||||||
call feedkeys("\<Esc>v2l", 'xt')
|
\ "\U0001f1e6\u00ab\U0001f1e7\u00ab\U0001f1e8\u00ab\U0001f1e9",
|
||||||
call assert_equal(["a\t"],
|
\ "1234567890"
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: 'v' }))
|
\ ])
|
||||||
call cursor(1, 1)
|
call cursor(1, 3)
|
||||||
call feedkeys("\<Esc>v$G", 'xt')
|
call feedkeys("\<Esc>\<C-v>ljj", 'xt')
|
||||||
call assert_equal(["a\tc", "x\tz", ''],
|
call assert_equal(['cd', "\u00ab ", '34'],
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: 'v' }))
|
\ getregion(getpos('v'), getpos('.'), {'type': "\<C-v>" }))
|
||||||
call cursor(1, 1)
|
call cursor(1, 4)
|
||||||
call feedkeys("\<Esc>v$j", 'xt')
|
call feedkeys("\<Esc>\<C-v>ljj", 'xt')
|
||||||
call assert_equal(["a\tc", "x\tz"],
|
call assert_equal(['de', "\U0001f1e7", '45'],
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: 'v' }))
|
\ getregion(getpos('v'), getpos('.'), {'type': "\<C-v>" }))
|
||||||
call cursor(1, 1)
|
call cursor(1, 5)
|
||||||
call feedkeys("\<Esc>\<C-v>$j", 'xt')
|
call feedkeys("\<Esc>\<C-v>jj", 'xt')
|
||||||
call assert_equal(["a\tc", "x\tz"],
|
call assert_equal(['e', ' ', '5'],
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: "\<C-v>" }))
|
\ getregion(getpos('v'), getpos('.'), {'type': "\<C-v>" }))
|
||||||
call cursor(1, 1)
|
call cursor(1, 1)
|
||||||
call feedkeys("\<Esc>\<C-v>$G", 'xt')
|
call feedkeys("\<Esc>vj", 'xt')
|
||||||
call assert_equal(["a", "x", '', ''],
|
call assert_equal(['abcdefghijk«', "\U0001f1e6"],
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: "\<C-v>" }))
|
\ getregion(getpos('v'), getpos('.'), {'type': 'v' }))
|
||||||
call cursor(1, 1)
|
|
||||||
call feedkeys("\<Esc>wv2j", 'xt')
|
|
||||||
call assert_equal(["c", "x\tz"],
|
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: 'v' }))
|
|
||||||
set selection&
|
|
||||||
|
|
||||||
" Exclusive selection 2
|
#" marks on multibyte chars
|
||||||
new
|
:set selection=exclusive
|
||||||
call setline(1, ["a\tc", "x\tz", '', ''])
|
call setpos("'a", [0, 1, 11, 0])
|
||||||
call cursor(1, 1)
|
call setpos("'b", [0, 2, 16, 0])
|
||||||
call feedkeys("\<Esc>v2l", 'xt')
|
call setpos("'c", [0, 2, 0, 0])
|
||||||
call assert_equal(["a\t"],
|
call cursor(1, 1)
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ exclusive: v:true }))
|
call assert_equal(['ghijk', '🇨«🇩'],
|
||||||
call cursor(1, 1)
|
\ getregion(getpos("'a"), getpos("'b"), {'type': "\<c-v>" }))
|
||||||
call feedkeys("\<Esc>v$G", 'xt')
|
call assert_equal(['k«', '🇦«🇧«🇨'],
|
||||||
call assert_equal(["a\tc", "x\tz", ''],
|
\ getregion(getpos("'a"), getpos("'b"), {'type': 'v' }))
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ exclusive: v:true }))
|
call assert_equal(['k«'],
|
||||||
call cursor(1, 1)
|
\ getregion(getpos("'a"), getpos("'c"), {'type': 'v' }))
|
||||||
call feedkeys("\<Esc>v$j", 'xt')
|
|
||||||
call assert_equal(["a\tc", "x\tz"],
|
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ exclusive: v:true }))
|
|
||||||
call cursor(1, 1)
|
|
||||||
call feedkeys("\<Esc>\<C-v>$j", 'xt')
|
|
||||||
call assert_equal(["a\tc", "x\tz"],
|
|
||||||
\ getregion(getpos('v'), getpos('.'),
|
|
||||||
\ #{ exclusive: v:true, type: "\<C-v>" }))
|
|
||||||
call cursor(1, 1)
|
|
||||||
call feedkeys("\<Esc>\<C-v>$G", 'xt')
|
|
||||||
call assert_equal(["a", "x", '', ''],
|
|
||||||
\ getregion(getpos('v'), getpos('.'),
|
|
||||||
\ #{ exclusive: v:true, type: "\<C-v>" }))
|
|
||||||
call cursor(1, 1)
|
|
||||||
call feedkeys("\<Esc>wv2j", 'xt')
|
|
||||||
call assert_equal(["c", "x\tz"],
|
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ exclusive: v:true }))
|
|
||||||
|
|
||||||
" virtualedit
|
#" use inclusive selection, although 'selection' is exclusive
|
||||||
set selection=exclusive
|
call setpos("'a", [0, 1, 11, 0])
|
||||||
set virtualedit=all
|
call setpos("'b", [0, 1, 1, 0])
|
||||||
call cursor(1, 1)
|
call assert_equal(['abcdefghijk'],
|
||||||
call feedkeys("\<Esc>2lv2lj", 'xt')
|
\ getregion(getpos("'a"), getpos("'b"),
|
||||||
call assert_equal([' c', 'x '],
|
\ {'type': "\<c-v>", 'exclusive': v:false }))
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: 'v' }))
|
call assert_equal(['abcdefghij'],
|
||||||
call cursor(1, 1)
|
\ getregion(getpos("'a"), getpos("'b"),
|
||||||
call feedkeys("\<Esc>2l\<C-v>2l2j", 'xt')
|
\ {'type': "\<c-v>", 'exclusive': v:true }))
|
||||||
call assert_equal([' ', ' ', ' '],
|
call assert_equal(['abcdefghijk'],
|
||||||
\ getregion(getpos('v'), getpos('.'), #{ type: "\<C-v>" }))
|
\ getregion(getpos("'a"), getpos("'b"),
|
||||||
set virtualedit&
|
\ {'type': 'v', 'exclusive': 0 }))
|
||||||
set selection&
|
call assert_equal(['abcdefghij'],
|
||||||
|
\ getregion(getpos("'a"), getpos("'b"),
|
||||||
|
\ {'type': 'v', 'exclusive': 1 }))
|
||||||
|
call assert_equal(['abcdefghijk«'],
|
||||||
|
\ getregion(getpos("'a"), getpos("'b"),
|
||||||
|
\ {'type': 'V', 'exclusive': 0 }))
|
||||||
|
call assert_equal(['abcdefghijk«'],
|
||||||
|
\ getregion(getpos("'a"), getpos("'b"),
|
||||||
|
\ {'type': 'V', 'exclusive': 1 }))
|
||||||
|
:set selection&
|
||||||
|
END
|
||||||
|
call CheckLegacyAndVim9Success(lines)
|
||||||
|
|
||||||
bwipe!
|
bwipe!
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
#" Exclusive selection
|
||||||
|
new
|
||||||
|
set selection=exclusive
|
||||||
|
call setline(1, ["a\tc", "x\tz", '', ''])
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>v2l", 'xt')
|
||||||
|
call assert_equal(["a\t"],
|
||||||
|
\ getregion(getpos('v'), getpos('.'), {'type': 'v' }))
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>v$G", 'xt')
|
||||||
|
call assert_equal(["a\tc", "x\tz", ''],
|
||||||
|
\ getregion(getpos('v'), getpos('.'), {'type': 'v' }))
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>v$j", 'xt')
|
||||||
|
call assert_equal(["a\tc", "x\tz"],
|
||||||
|
\ getregion(getpos('v'), getpos('.'), {'type': 'v' }))
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>\<C-v>$j", 'xt')
|
||||||
|
call assert_equal(["a\tc", "x\tz"],
|
||||||
|
\ getregion(getpos('v'), getpos('.'), {'type': "\<C-v>" }))
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>\<C-v>$G", 'xt')
|
||||||
|
call assert_equal(["a", "x", '', ''],
|
||||||
|
\ getregion(getpos('v'), getpos('.'), {'type': "\<C-v>" }))
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>wv2j", 'xt')
|
||||||
|
call assert_equal(["c", "x\tz"],
|
||||||
|
\ getregion(getpos('v'), getpos('.'), {'type': 'v' }))
|
||||||
|
set selection&
|
||||||
|
|
||||||
|
#" Exclusive selection 2
|
||||||
|
new
|
||||||
|
call setline(1, ["a\tc", "x\tz", '', ''])
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>v2l", 'xt')
|
||||||
|
call assert_equal(["a\t"],
|
||||||
|
\ getregion(getpos('v'), getpos('.'), {'exclusive': v:true }))
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>v$G", 'xt')
|
||||||
|
call assert_equal(["a\tc", "x\tz", ''],
|
||||||
|
\ getregion(getpos('v'), getpos('.'), {'exclusive': v:true }))
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>v$j", 'xt')
|
||||||
|
call assert_equal(["a\tc", "x\tz"],
|
||||||
|
\ getregion(getpos('v'), getpos('.'), {'exclusive': v:true }))
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>\<C-v>$j", 'xt')
|
||||||
|
call assert_equal(["a\tc", "x\tz"],
|
||||||
|
\ getregion(getpos('v'), getpos('.'),
|
||||||
|
\ {'exclusive': v:true, 'type': "\<C-v>" }))
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>\<C-v>$G", 'xt')
|
||||||
|
call assert_equal(["a", "x", '', ''],
|
||||||
|
\ getregion(getpos('v'), getpos('.'),
|
||||||
|
\ {'exclusive': v:true, 'type': "\<C-v>" }))
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>wv2j", 'xt')
|
||||||
|
call assert_equal(["c", "x\tz"],
|
||||||
|
\ getregion(getpos('v'), getpos('.'), {'exclusive': v:true }))
|
||||||
|
|
||||||
|
#" virtualedit
|
||||||
|
set selection=exclusive
|
||||||
|
set virtualedit=all
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>2lv2lj", 'xt')
|
||||||
|
call assert_equal([' c', 'x '],
|
||||||
|
\ getregion(getpos('v'), getpos('.'), {'type': 'v' }))
|
||||||
|
call cursor(1, 1)
|
||||||
|
call feedkeys("\<Esc>2l\<C-v>2l2j", 'xt')
|
||||||
|
call assert_equal([' ', ' ', ' '],
|
||||||
|
\ getregion(getpos('v'), getpos('.'), {'type': "\<C-v>" }))
|
||||||
|
set virtualedit&
|
||||||
|
set selection&
|
||||||
|
|
||||||
|
bwipe!
|
||||||
|
END
|
||||||
|
call CheckLegacyAndVim9Success(lines)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
Loading…
Reference in New Issue
Block a user