mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			158 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local helpers = require('test.functional.helpers')
 | |
| local Screen = require('test.functional.ui.screen')
 | |
| local clear, feed, nvim = helpers.clear, helpers.feed, helpers.nvim
 | |
| 
 | |
| describe('Mouse input', function()
 | |
|   local screen, hlgroup_colors
 | |
| 
 | |
|   setup(function()
 | |
|     hlgroup_colors = {
 | |
|       Visual = nvim('name_to_color', 'LightGrey'),
 | |
|     }
 | |
|   end)
 | |
| 
 | |
|   before_each(function()
 | |
|     clear()
 | |
|     nvim('set_option', 'mouse', 'a')
 | |
|     -- set mouset to very high value to ensure that even in valgrind/travis,
 | |
|     -- nvim will still pick multiple clicks
 | |
|     nvim('set_option', 'mouset', 5000)
 | |
|     screen = Screen.new(25, 5)
 | |
|     screen:attach()
 | |
|     screen:set_default_attr_ids({
 | |
|       [1] = {background = hlgroup_colors.Visual}
 | |
|     })
 | |
|     feed('itesting<cr>mouse<cr>support and selection<esc>')
 | |
|     screen:expect([[
 | |
|       testing                  |
 | |
|       mouse                    |
 | |
|       support and selectio^    |
 | |
|       ~                        |
 | |
|                                |
 | |
|     ]])
 | |
|   end)
 | |
| 
 | |
|   after_each(function()
 | |
|     screen:detach()
 | |
|   end)
 | |
| 
 | |
|   it('left click moves cursor', function()
 | |
|     feed('<LeftMouse><2,1>')
 | |
|     screen:expect([[
 | |
|       testing                  |
 | |
|       mo^se                    |
 | |
|       support and selection    |
 | |
|       ~                        |
 | |
|                                |
 | |
|     ]])
 | |
|     feed('<LeftMouse><0,0>')
 | |
|     screen:expect([[
 | |
|       ^esting                  |
 | |
|       mouse                    |
 | |
|       support and selection    |
 | |
|       ~                        |
 | |
|                                |
 | |
|     ]])
 | |
|   end)
 | |
| 
 | |
|   it('left drag changes visual selection', function()
 | |
|     -- drag events must be preceded by a click
 | |
|     feed('<LeftMouse><2,1>')
 | |
|     screen:expect([[
 | |
|       testing                  |
 | |
|       mo^se                    |
 | |
|       support and selection    |
 | |
|       ~                        |
 | |
|                                |
 | |
|     ]])
 | |
|     feed('<LeftDrag><4,1>')
 | |
|     screen:expect([[
 | |
|       testing                  |
 | |
|       mo{1:us}^                    |
 | |
|       support and selection    |
 | |
|       ~                        |
 | |
|       -- VISUAL --             |
 | |
|     ]])
 | |
|     feed('<LeftDrag><2,2>')
 | |
|     screen:expect([[
 | |
|       testing                  |
 | |
|       mo{1:use }                   |
 | |
|       {1:su}^port and selection    |
 | |
|       ~                        |
 | |
|       -- VISUAL --             |
 | |
|     ]])
 | |
|     feed('<LeftDrag><0,0>')
 | |
|     screen:expect([[
 | |
|       ^{1:esting }                 |
 | |
|       {1:mou}se                    |
 | |
|       support and selection    |
 | |
|       ~                        |
 | |
|       -- VISUAL --             |
 | |
|     ]])
 | |
|   end)
 | |
| 
 | |
|   it('two clicks will select the word and enter VISUAL', function()
 | |
|     feed('<LeftMouse><2,2><LeftMouse><2,2>')
 | |
|     screen:expect([[
 | |
|       testing                  |
 | |
|       mouse                    |
 | |
|       {1:suppor}^ and selection    |
 | |
|       ~                        |
 | |
|       -- VISUAL --             |
 | |
|     ]])
 | |
|   end)
 | |
| 
 | |
|   it('three clicks will select the line and enter VISUAL LINE', function()
 | |
|     feed('<LeftMouse><2,2><LeftMouse><2,2><LeftMouse><2,2>')
 | |
|     screen:expect([[
 | |
|       testing                  |
 | |
|       mouse                    |
 | |
|       {1:su}^{1:port and selection }   |
 | |
|       ~                        |
 | |
|       -- VISUAL LINE --        |
 | |
|     ]])
 | |
|   end)
 | |
| 
 | |
|   it('four clicks will enter VISUAL BLOCK', function()
 | |
|     feed('<LeftMouse><2,2><LeftMouse><2,2><LeftMouse><2,2><LeftMouse><2,2>')
 | |
|     screen:expect([[
 | |
|       testing                  |
 | |
|       mouse                    |
 | |
|       su^port and selection    |
 | |
|       ~                        |
 | |
|       -- VISUAL BLOCK --       |
 | |
|     ]])
 | |
|   end)
 | |
| 
 | |
|   it('right click extends visual selection to the clicked location', function()
 | |
|     feed('<LeftMouse><0,0>')
 | |
|     screen:expect([[
 | |
|       ^esting                  |
 | |
|       mouse                    |
 | |
|       support and selection    |
 | |
|       ~                        |
 | |
|                                |
 | |
|     ]])
 | |
|     feed('<RightMouse><2,2>')
 | |
|     screen:expect([[
 | |
|       {1:testing }                 |
 | |
|       {1:mouse }                   |
 | |
|       {1:su}^port and selection    |
 | |
|       ~                        |
 | |
|       -- VISUAL --             |
 | |
|     ]])
 | |
|   end)
 | |
| 
 | |
|   it('ctrl + left click will search for a tag', function()
 | |
|     feed('<C-LeftMouse><0,0>')
 | |
|     screen:expect([[
 | |
|       E433: No tags file       |
 | |
|       E426: tag not found: test|
 | |
|       ing                      |
 | |
|       Press ENTER or type comma|
 | |
|       nd to continue^          |
 | |
|     ]])
 | |
|     feed('<cr>')
 | |
|   end)
 | |
| end)
 | 
