diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/ui/mouse_spec.lua | 105 | ||||
-rw-r--r-- | test/old/testdir/test_conceal.vim | 67 | ||||
-rw-r--r-- | test/old/testdir/test_normal.vim | 43 | ||||
-rw-r--r-- | test/old/testdir/test_virtualedit.vim | 6 |
4 files changed, 187 insertions, 34 deletions
diff --git a/test/functional/ui/mouse_spec.lua b/test/functional/ui/mouse_spec.lua index d126e27cde..9c22d112d3 100644 --- a/test/functional/ui/mouse_spec.lua +++ b/test/functional/ui/mouse_spec.lua @@ -1073,39 +1073,7 @@ describe('ui/mouse/input', function() ]]) end) - describe('on concealed text', function() - -- Helpful for reading the test expectations: - -- :match Error /\^/ - - before_each(function() - screen:try_resize(25, 7) - screen:set_default_attr_ids({ - [0] = {bold=true, foreground=Screen.colors.Blue}, - c = { foreground = Screen.colors.LightGrey, background = Screen.colors.DarkGray }, - sm = {bold = true}, - }) - feed('ggdG') - - command([[setlocal concealcursor=ni nowrap shiftwidth=2 tabstop=4 list listchars=tab:>-]]) - command([[syntax region X0 matchgroup=X1 start=/\*/ end=/\*/ concealends contains=X2]]) - command([[syntax match X2 /cats/ conceal cchar=X contained]]) - -- No heap-use-after-free with multi-line syntax pattern #24317 - command([[syntax match X3 /\n\@<=x/ conceal cchar=>]]) - command([[highlight link X0 Normal]]) - command([[highlight link X1 NonText]]) - command([[highlight link X2 NonText]]) - command([[highlight link X3 NonText]]) - - -- First column is there to retain the tabs. - insert([[ - |Section *t1* - | *t2* *t3* *t4* - |x 私は猫が大好き *cats* ✨🐈✨ - ]]) - - feed('gg<c-v>Gxgg') - end) - + local function test_mouse_click_conceal() it('(level 1) click on non-wrapped lines', function() feed_command('let &conceallevel=1', 'echo') @@ -1497,7 +1465,6 @@ describe('ui/mouse/input', function() ]]) end) -- level 2 - wrapped - it('(level 3) click on non-wrapped lines', function() feed_command('let &conceallevel=3', 'echo') @@ -1535,6 +1502,7 @@ describe('ui/mouse/input', function() ]]) feed('<esc><LeftMouse><20,2>') + feed('zH') -- FIXME: unnecessary horizontal scrolling screen:expect([[ Section{0:>>--->--->---}t1 | {0:>--->--->---} t2 t3 t4 | @@ -1638,6 +1606,75 @@ describe('ui/mouse/input', function() ]]) end) -- level 3 - wrapped + end + + describe('on concealed text', function() + -- Helpful for reading the test expectations: + -- :match Error /\^/ + + before_each(function() + screen:try_resize(25, 7) + screen:set_default_attr_ids({ + [0] = { bold = true, foreground = Screen.colors.Blue }, + c = { foreground = Screen.colors.LightGrey, background = Screen.colors.DarkGray }, + sm = { bold = true }, + }) + feed('ggdG') + + command([[setlocal concealcursor=ni nowrap shiftwidth=2 tabstop=4 list listchars=tab:>-]]) + command([[highlight link X0 Normal]]) + command([[highlight link X1 NonText]]) + command([[highlight link X2 NonText]]) + command([[highlight link X3 NonText]]) + + -- First column is there to retain the tabs. + insert([[ + |Section *t1* + | *t2* *t3* *t4* + |x 私は猫が大好き *cats* ✨🐈✨ + ]]) + + feed('gg<c-v>Gxgg') + end) + + describe('(syntax)', function() + before_each(function() + command([[syntax region X0 matchgroup=X1 start=/\*/ end=/\*/ concealends contains=X2]]) + command([[syntax match X2 /cats/ conceal cchar=X contained]]) + command([[syntax match X3 /\n\@<=x/ conceal cchar=>]]) + end) + test_mouse_click_conceal() + end) + + describe('(matchadd())', function() + before_each(function() + funcs.matchadd('Conceal', [[\*]]) + funcs.matchadd('Conceal', [[cats]], 10, -1, { conceal = 'X' }) + funcs.matchadd('Conceal', [[\n\@<=x]], 10, -1, { conceal = '>' }) + end) + test_mouse_click_conceal() + end) + + -- FIXME: cannot make extmark conceal behave exactly like syntax conceal without cchar + pending('(extmarks)', function() + before_each(function() + local ns = meths.create_namespace('conceal') + meths.buf_set_extmark(0, ns, 0, 11, { end_col = 12, conceal = '' }) + meths.buf_set_extmark(0, ns, 0, 14, { end_col = 15, conceal = '' }) + meths.buf_set_extmark(0, ns, 1, 5, { end_col = 6, conceal = '' }) + meths.buf_set_extmark(0, ns, 1, 8, { end_col = 9, conceal = '' }) + meths.buf_set_extmark(0, ns, 1, 10, { end_col = 11, conceal = '' }) + meths.buf_set_extmark(0, ns, 1, 13, { end_col = 14, conceal = '' }) + meths.buf_set_extmark(0, ns, 1, 15, { end_col = 16, conceal = '' }) + meths.buf_set_extmark(0, ns, 1, 18, { end_col = 19, conceal = '' }) + meths.buf_set_extmark(0, ns, 2, 24, { end_col = 25, conceal = '' }) + meths.buf_set_extmark(0, ns, 2, 29, { end_col = 30, conceal = '' }) + meths.buf_set_extmark(0, ns, 2, 25, { end_col = 29, conceal = 'X' }) + meths.buf_set_extmark(0, ns, 2, 0, { end_col = 1, conceal = '>' }) + end) + test_mouse_click_conceal() + end) + end) it('getmousepos works correctly', function() diff --git a/test/old/testdir/test_conceal.vim b/test/old/testdir/test_conceal.vim index 63e17d8f2f..0ec171aa2f 100644 --- a/test/old/testdir/test_conceal.vim +++ b/test/old/testdir/test_conceal.vim @@ -4,6 +4,7 @@ source check.vim CheckFeature conceal source screendump.vim +source view_util.vim func Test_conceal_two_windows() CheckScreendump @@ -334,4 +335,70 @@ func Test_conceal_eol() set nolist endfunc +func Test_conceal_mouse_click() + enew! + set mouse=a + setlocal conceallevel=2 concealcursor=nc + syn match Concealed "this" conceal + hi link Concealed Search + call setline(1, 'conceal this click here') + redraw + call assert_equal(['conceal click here '], ScreenLines(1, 20)) + + " click on 'h' of "here" puts cursor there + call Ntest_setmouse(1, 16) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 20, 0, 20], getcurpos()) + " click on 'e' of "here" puts cursor there + call Ntest_setmouse(1, 19) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 23], getcurpos()) + " click after end of line puts cursor on 'e' without 'virtualedit' + call Ntest_setmouse(1, 20) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 24], getcurpos()) + call Ntest_setmouse(1, 21) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 25], getcurpos()) + call Ntest_setmouse(1, 22) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 26], getcurpos()) + call Ntest_setmouse(1, 31) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 35], getcurpos()) + call Ntest_setmouse(1, 32) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 36], getcurpos()) + + set virtualedit=all + redraw " Nvim: redraw_for_cursorcolumn() redraws for conceal + " click on 'h' of "here" puts cursor there + call Ntest_setmouse(1, 16) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 20, 0, 20], getcurpos()) + " click on 'e' of "here" puts cursor there + call Ntest_setmouse(1, 19) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 23, 0, 23], getcurpos()) + " click after end of line puts cursor there without 'virtualedit' + call Ntest_setmouse(1, 20) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 24, 0, 24], getcurpos()) + call Ntest_setmouse(1, 21) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 24, 1, 25], getcurpos()) + call Ntest_setmouse(1, 22) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 24, 2, 26], getcurpos()) + call Ntest_setmouse(1, 31) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 24, 11, 35], getcurpos()) + call Ntest_setmouse(1, 32) + call feedkeys("\<LeftMouse>", "tx") + call assert_equal([0, 1, 24, 12, 36], getcurpos()) + + bwipe! + set mouse& virtualedit& +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/test/old/testdir/test_normal.vim b/test/old/testdir/test_normal.vim index c8e78dcf93..c022133b4f 100644 --- a/test/old/testdir/test_normal.vim +++ b/test/old/testdir/test_normal.vim @@ -4049,4 +4049,47 @@ func Test_normal_r_ctrl_v_cmd() bw! endfunc +" Test clicking on a TAB or an unprintable character in Normal mode +func Test_normal_click_on_ctrl_char() + let save_mouse = &mouse + set mouse=a + new + + call setline(1, "a\<Tab>b\<C-K>c") + redraw + call Ntest_setmouse(1, 1) + call feedkeys("\<LeftMouse>", 'xt') + call assert_equal([0, 1, 1, 0, 1], getcurpos()) + call Ntest_setmouse(1, 2) + call feedkeys("\<LeftMouse>", 'xt') + call assert_equal([0, 1, 2, 0, 2], getcurpos()) + call Ntest_setmouse(1, 3) + call feedkeys("\<LeftMouse>", 'xt') + call assert_equal([0, 1, 2, 0, 3], getcurpos()) + call Ntest_setmouse(1, 7) + call feedkeys("\<LeftMouse>", 'xt') + call assert_equal([0, 1, 2, 0, 7], getcurpos()) + call Ntest_setmouse(1, 8) + call feedkeys("\<LeftMouse>", 'xt') + call assert_equal([0, 1, 2, 0, 8], getcurpos()) + call Ntest_setmouse(1, 9) + call feedkeys("\<LeftMouse>", 'xt') + call assert_equal([0, 1, 3, 0, 9], getcurpos()) + call Ntest_setmouse(1, 10) + call feedkeys("\<LeftMouse>", 'xt') + call assert_equal([0, 1, 4, 0, 10], getcurpos()) + call Ntest_setmouse(1, 11) + call feedkeys("\<LeftMouse>", 'xt') + call assert_equal([0, 1, 4, 0, 11], getcurpos()) + call Ntest_setmouse(1, 12) + call feedkeys("\<LeftMouse>", 'xt') + call assert_equal([0, 1, 5, 0, 12], getcurpos()) + call Ntest_setmouse(1, 13) + call feedkeys("\<LeftMouse>", 'xt') + call assert_equal([0, 1, 5, 0, 13], getcurpos()) + + bwipe! + let &mouse = save_mouse +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/test/old/testdir/test_virtualedit.vim b/test/old/testdir/test_virtualedit.vim index a2baf276ac..f97b3f987d 100644 --- a/test/old/testdir/test_virtualedit.vim +++ b/test/old/testdir/test_virtualedit.vim @@ -586,6 +586,12 @@ func Test_virtualedit_mouse() call Ntest_setmouse(1, 9) call feedkeys("\<LeftMouse>", "xt") call assert_equal([0, 1, 6, 0, 9], getcurpos()) + call Ntest_setmouse(1, 12) + call feedkeys("\<LeftMouse>", "xt") + call assert_equal([0, 1, 9, 0, 12], getcurpos()) + call Ntest_setmouse(1, 13) + call feedkeys("\<LeftMouse>", "xt") + call assert_equal([0, 1, 10, 0, 13], getcurpos()) call Ntest_setmouse(1, 15) call feedkeys("\<LeftMouse>", "xt") call assert_equal([0, 1, 10, 2, 15], getcurpos()) |