diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/ui/mouse_spec.lua | 92 | ||||
-rw-r--r-- | test/functional/ui/multigrid_spec.lua | 337 |
2 files changed, 418 insertions, 11 deletions
diff --git a/test/functional/ui/mouse_spec.lua b/test/functional/ui/mouse_spec.lua index 8d35df6f48..8ba03953b9 100644 --- a/test/functional/ui/mouse_spec.lua +++ b/test/functional/ui/mouse_spec.lua @@ -440,16 +440,34 @@ describe('ui/mouse/input', function() local test_click = function(name, click_str, click_num, mouse_button, modifiers) - it(name .. ' works', function() + + local function doit(do_click) eq(1, funcs.has('tablineat')) - feed(click_str .. '<3,0>') + do_click(0,3) check_reply({0, click_num, mouse_button, modifiers}) - feed(click_str .. '<4,0>') + do_click(0,4) check_reply({}) - feed(click_str .. '<6,0>') + do_click(0,6) check_reply({5, click_num, mouse_button, modifiers, 2}) - feed(click_str .. '<13,0>') + do_click(0,13) check_reply({5, click_num, mouse_button, modifiers, 2}) + end + + it(name .. ' works (pseudokey)', function() + doit(function (row,col) + feed(click_str .. '<' .. col .. ',' .. row .. '>') + end) + end) + + it(name .. ' works (nvim_input_mouse)', function() + doit(function (row,col) + local buttons = {l='left',m='middle',r='right'} + local modstr = (click_num > 1) and tostring(click_num) or '' + for char in string.gmatch(modifiers, '%w') do + modstr = modstr .. char .. '-' -- - not needed but should be accepted + end + meths.input_mouse(buttons[mouse_button], 'press', modstr, 0, row, col) + end) end) end @@ -617,7 +635,7 @@ describe('ui/mouse/input', function() feed('<cr>') end) - it('mouse whell will target the hovered window', function() + local function wheel(use_api) feed('ggdG') insert([[ Inserting @@ -647,7 +665,11 @@ describe('ui/mouse/input', function() {4:[No Name] [+] }| :vsp | ]]) - feed('<ScrollWheelDown><0,0>') + if use_api then + meths.input_mouse('wheel', 'down', '', 0, 0, 0) + else + feed('<ScrollWheelDown><0,0>') + end screen:expect([[ mouse scrolling {4:│}lines | ^ {4:│}to | @@ -664,7 +686,11 @@ describe('ui/mouse/input', function() {4:[No Name] [+] }| :vsp | ]]) - feed('<ScrollWheelUp><27,0>') + if use_api then + meths.input_mouse('wheel', 'up', '', 0, 0, 27) + else + feed('<ScrollWheelUp><27,0>') + end screen:expect([[ mouse scrolling {4:│}text | ^ {4:│}with | @@ -681,7 +707,12 @@ describe('ui/mouse/input', function() {4:[No Name] [+] }| :vsp | ]]) - feed('<ScrollWheelUp><27,7><ScrollWheelUp>') + if use_api then + meths.input_mouse('wheel', 'up', '', 0, 7, 27) + meths.input_mouse('wheel', 'up', '', 0, 7, 27) + else + feed('<ScrollWheelUp><27,7><ScrollWheelUp>') + end screen:expect([[ mouse scrolling {4:│}text | ^ {4:│}with | @@ -698,9 +729,17 @@ describe('ui/mouse/input', function() {4:[No Name] [+] }| :vsp | ]]) + end + + it('mouse wheel will target the hovered window (pseudokey)', function() + wheel(false) end) - it('horizontal scrolling', function() + it('mouse wheel will target the hovered window (nvim_input_mouse)', function() + wheel(true) + end) + + it('horizontal scrolling (pseudokey)', function() command('set sidescroll=0') feed("<esc>:set nowrap<cr>") @@ -732,6 +771,39 @@ describe('ui/mouse/input', function() ]]) end) + it('horizontal scrolling (nvim_input_mouse)', function() + command('set sidescroll=0') + feed("<esc>:set nowrap<cr>") + + feed("a <esc>20Ab<esc>") + screen:expect([[ + | + | + bbbbbbbbbbbbbbb^b | + {0:~ }| + | + ]]) + + meths.input_mouse('wheel', 'left', '', 0, 0, 27) + screen:expect([[ + | + | + n bbbbbbbbbbbbbbbbbbb^b | + {0:~ }| + | + ]]) + + feed("^") + meths.input_mouse('wheel', 'right', '', 0, 0, 0) + screen:expect([[ + g | + | + ^t and selection bbbbbbbbb| + {0:~ }| + | + ]]) + end) + describe('on concealed text', function() -- Helpful for reading the test expectations: -- :match Error /\^/ diff --git a/test/functional/ui/multigrid_spec.lua b/test/functional/ui/multigrid_spec.lua index a5d4e34000..c54d608ec4 100644 --- a/test/functional/ui/multigrid_spec.lua +++ b/test/functional/ui/multigrid_spec.lua @@ -3,9 +3,11 @@ local Screen = require('test.functional.ui.screen') local clear = helpers.clear local feed, command, insert = helpers.feed, helpers.command, helpers.insert local eq = helpers.eq +local meths = helpers.meths +local wait = helpers.wait -describe('multigrid screen', function() +describe('ext_multigrid', function() local screen before_each(function() @@ -1521,4 +1523,337 @@ describe('multigrid screen', function() {1:~ }| ]]) end) + + it('supports mouse', function() + insert('some text\nto be clicked') + screen:expect([[ + ## grid 1 + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + {11:[No Name] [+] }| + | + ## grid 2 + some text | + to be clicke^d | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ]]) + + meths.input_mouse('left', 'press', '', 2, 0, 5) + screen:expect([[ + ## grid 1 + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + {11:[No Name] [+] }| + | + ## grid 2 + some ^text | + to be clicked | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ]]) + + feed(':new<cr>') + insert('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmo') + + screen:expect([[ + ## grid 1 + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + {11:[No Name] [+] }| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + {12:[No Name] [+] }| + | + ## grid 2 + some text | + to be clicked | + {1:~ }| + {1:~ }| + {1:~ }| + ## grid 3 + Lorem ipsum dolor sit amet, consectetur adipiscing el| + it, sed do eiusm^o | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ]]) + + meths.input_mouse('left', 'press', '', 2, 1, 6) + screen:expect([[ + ## grid 1 + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + {12:[No Name] [+] }| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + {11:[No Name] [+] }| + | + ## grid 2 + some text | + to be ^clicked | + {1:~ }| + {1:~ }| + {1:~ }| + ## grid 3 + Lorem ipsum dolor sit amet, consectetur adipiscing el| + it, sed do eiusmo | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ]]) + + meths.input_mouse('left', 'press', '', 3, 1, 4) + screen:expect([[ + ## grid 1 + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + {11:[No Name] [+] }| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + {12:[No Name] [+] }| + | + ## grid 2 + some text | + to be clicked | + {1:~ }| + {1:~ }| + {1:~ }| + ## grid 3 + Lorem ipsum dolor sit amet, consectetur adipiscing el| + it, ^sed do eiusmo | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ]]) + + screen:try_resize_grid(3, 80, 2) + screen:expect([[ + ## grid 1 + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + {11:[No Name] [+] }| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + {12:[No Name] [+] }| + | + ## grid 2 + some text | + to be clicked | + {1:~ }| + {1:~ }| + {1:~ }| + ## grid 3 + Lorem ipsum dolor sit amet, consectetur adipiscing elit, ^sed do eiusmo | + {1:~ }| + ]]) + + meths.input_mouse('left', 'press', '', 3, 0, 64) + screen:expect([[ + ## grid 1 + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + {11:[No Name] [+] }| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + {12:[No Name] [+] }| + | + ## grid 2 + some text | + to be clicked | + {1:~ }| + {1:~ }| + {1:~ }| + ## grid 3 + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do ^eiusmo | + {1:~ }| + ]]) + + meths.input_mouse('left', 'press', '', 1,6, 20) + -- TODO(bfredl): "batching" input_mouse is formally not supported yet. + -- Normally it should work fine in async context when nvim is not blocked, + -- but add a wait be sure. + wait() + meths.input_mouse('left', 'drag', '', 1, 4, 20) + screen:expect([[ + ## grid 1 + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + {11:[No Name] [+] }| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + [2:-----------------------------------------------------]| + {12:[No Name] [+] }| + | + ## grid 2 + some text | + to be clicked | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ## grid 3 + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do ^eiusmo | + {1:~ }| + ]]) + + feed('<c-w><c-w><c-w>v') + screen:expect([[ + ## grid 1 + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + {12:[No Name] [+] }| + [4:--------------------------]{12:│}[2:--------------------------]| + [4:--------------------------]{12:│}[2:--------------------------]| + [4:--------------------------]{12:│}[2:--------------------------]| + [4:--------------------------]{12:│}[2:--------------------------]| + [4:--------------------------]{12:│}[2:--------------------------]| + [4:--------------------------]{12:│}[2:--------------------------]| + [4:--------------------------]{12:│}[2:--------------------------]| + {11:[No Name] [+] }{12:[No Name] [+] }| + | + ## grid 2 + some text | + to be clicked | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ## grid 3 + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmo | + {1:~ }| + ## grid 4 + some text | + to be ^clicked | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ]]) + + meths.input_mouse('left', 'press', '', 1,8, 26) + wait() + meths.input_mouse('left', 'drag', '', 1, 6, 30) + screen:expect([[ + ## grid 1 + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + [3:-----------------------------------------------------]| + {12:[No Name] [+] }| + [4:------------------------------]{12:│}[2:----------------------]| + [4:------------------------------]{12:│}[2:----------------------]| + [4:------------------------------]{12:│}[2:----------------------]| + [4:------------------------------]{12:│}[2:----------------------]| + [4:------------------------------]{12:│}[2:----------------------]| + [4:------------------------------]{12:│}[2:----------------------]| + [4:------------------------------]{12:│}[2:----------------------]| + {11:[No Name] [+] }{12:[No Name] [+] }| + | + ## grid 2 + some text | + to be clicked | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ## grid 3 + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmo | + {1:~ }| + ## grid 4 + some text | + to be ^clicked | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ]]) + end) end) |