local helpers = require('test.functional.helpers')(after_each) local thelpers = require('test.functional.terminal.helpers') local clear = helpers.clear local feed, nvim = helpers.feed, helpers.nvim local feed_data = thelpers.feed_data if helpers.pending_win32(pending) then return end describe('terminal mouse', function() local screen before_each(function() clear() nvim('set_option', 'statusline', '==========') nvim('command', 'highlight StatusLine cterm=NONE') nvim('command', 'highlight StatusLineNC cterm=NONE') nvim('command', 'highlight VertSplit cterm=NONE') screen = thelpers.screen_setup() local lines = {} for i = 1, 30 do table.insert(lines, 'line'..tostring(i)) end table.insert(lines, '') feed_data(lines) screen:expect([[ line26 | line27 | line28 | line29 | line30 | {1: } | {3:-- TERMINAL --} | ]]) end) after_each(function() screen:detach() end) describe('when the terminal has focus', function() it('will exit focus when scrolled', function() feed('<0,0>') screen:expect([[ line23 | line24 | line25 | line26 | line27 | ^line28 | | ]]) end) it('will exit focus after , then scrolled', function() feed('') feed('<0,0>') screen:expect([[ line23 | line24 | line25 | line26 | line27 | ^line28 | | ]]) end) describe('with mouse events enabled by the program', function() before_each(function() thelpers.enable_mouse() thelpers.feed_data('mouse enabled\n') screen:expect([[ line27 | line28 | line29 | line30 | mouse enabled | {1: } | {3:-- TERMINAL --} | ]]) end) it('will forward mouse clicks to the program', function() feed('<1,2>') screen:expect([[ line27 | line28 | line29 | line30 | mouse enabled | "#{1: } | {3:-- TERMINAL --} | ]]) end) it('will forward mouse scroll to the program', function() feed('<0,0>') screen:expect([[ line27 | line28 | line29 | line30 | mouse enabled | `!!{1: } | {3:-- TERMINAL --} | ]]) end) end) describe('with a split window and other buffer', function() before_each(function() feed(':vsp') screen:expect([[ line28 |line28 | line29 |line29 | line30 |line30 | rows: 5, cols: 25 |rows: 5, cols: 25 | {2:^ } |{2: } | ========== ========== | | ]]) feed(':enew | set number') screen:expect([[ {7: 1 }^ |line28 | {4:~ }|line29 | {4:~ }|line30 | {4:~ }|rows: 5, cols: 25 | {4:~ }|{2: } | ========== ========== | :enew | set number | ]]) feed('30iline\n') screen:expect([[ {7: 27 }line |line28 | {7: 28 }line |line29 | {7: 29 }line |line30 | {7: 30 }line |rows: 5, cols: 25 | {7: 31 }^ |{2: } | ========== ========== | | ]]) feed('li') screen:expect([[ {7: 27 }line |line29 | {7: 28 }line |line30 | {7: 29 }line |rows: 5, cols: 25 | {7: 30 }line |rows: 5, cols: 24 | {7: 31 } |{1: } | ========== ========== | {3:-- TERMINAL --} | ]]) -- enabling mouse won't affect interaction with other windows thelpers.enable_mouse() thelpers.feed_data('mouse enabled\n') screen:expect([[ {7: 27 }line |line30 | {7: 28 }line |rows: 5, cols: 25 | {7: 29 }line |rows: 5, cols: 24 | {7: 30 }line |mouse enabled | {7: 31 } |{1: } | ========== ========== | {3:-- TERMINAL --} | ]]) end) it('wont lose focus if another window is scrolled', function() feed('<0,0><0,0>') screen:expect([[ {7: 21 }line |line30 | {7: 22 }line |rows: 5, cols: 25 | {7: 23 }line |rows: 5, cols: 24 | {7: 24 }line |mouse enabled | {7: 25 }line |{1: } | ========== ========== | {3:-- TERMINAL --} | ]]) feed('<0,0>') screen:expect([[ {7: 26 }line |line30 | {7: 27 }line |rows: 5, cols: 25 | {7: 28 }line |rows: 5, cols: 24 | {7: 29 }line |mouse enabled | {7: 30 }line |{1: } | ========== ========== | {3:-- TERMINAL --} | ]]) end) it('will lose focus if another window is clicked', function() feed('<5,1>') screen:expect([[ {7: 27 }line |line30 | {7: 28 }l^ine |rows: 5, cols: 25 | {7: 29 }line |rows: 5, cols: 24 | {7: 30 }line |mouse enabled | {7: 31 } |{2: } | ========== ========== | | ]]) end) end) end) end)