mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 04:17:01 +00:00 
			
		
		
		
	fix(paste): avoid edges cases caused by empty chunk
This commit is contained in:
		| @@ -630,6 +630,10 @@ describe('API', function() | ||||
|   end) | ||||
|  | ||||
|   describe('nvim_paste', function() | ||||
|     before_each(function() | ||||
|       -- If nvim_paste() calls :undojoin without making any changes, this makes it an error. | ||||
|       feed('ifoo<Esc>u') | ||||
|     end) | ||||
|     it('validates args', function() | ||||
|       eq('Invalid phase: -2', | ||||
|         pcall_err(request, 'nvim_paste', 'foo', true, -2)) | ||||
| @@ -702,7 +706,7 @@ describe('API', function() | ||||
|       feed('u') | ||||
|       expect('||') | ||||
|     end) | ||||
|     it('stream: Visual mode either end not at the end of a line', function() | ||||
|     it('stream: Visual mode neither end at the end of a line', function() | ||||
|       feed('i|xxx<CR>xxx|<Esc>hvhk') | ||||
|       nvim('paste', 'aaaaaa', false, 1) | ||||
|       nvim('paste', 'bbbbbb', false, 2) | ||||
| @@ -714,6 +718,30 @@ describe('API', function() | ||||
|         |xxx | ||||
|         xxx|]]) | ||||
|     end) | ||||
|     it('stream: Visual mode neither end at the end of a line with empty first chunk', function() | ||||
|       feed('i|xxx<CR>xxx|<Esc>hvhk') | ||||
|       nvim('paste', '', false, 1) | ||||
|       nvim('paste', 'bbbbbb', false, 2) | ||||
|       nvim('paste', 'cccccc', false, 2) | ||||
|       nvim('paste', 'dddddd', false, 3) | ||||
|       expect('|bbbbbbccccccdddddd|') | ||||
|       feed('u') | ||||
|       expect([[ | ||||
|         |xxx | ||||
|         xxx|]]) | ||||
|     end) | ||||
|     it('stream: Visual mode neither end at the end of a line with all chunks empty', function() | ||||
|       feed('i|xxx<CR>xxx|<Esc>hvhk') | ||||
|       nvim('paste', '', false, 1) | ||||
|       nvim('paste', '', false, 2) | ||||
|       nvim('paste', '', false, 2) | ||||
|       nvim('paste', '', false, 3) | ||||
|       expect('||') | ||||
|       feed('u') | ||||
|       expect([[ | ||||
|         |xxx | ||||
|         xxx|]]) | ||||
|     end) | ||||
|     it('stream: Visual mode cursor at the end of a line', function() | ||||
|       feed('i||xxx<CR>xxx<Esc>vko') | ||||
|       nvim('paste', 'aaaaaa', false, 1) | ||||
| @@ -726,6 +754,18 @@ describe('API', function() | ||||
|         ||xxx | ||||
|         xxx]]) | ||||
|     end) | ||||
|     it('stream: Visual mode cursor at the end of a line with empty first chunk', function() | ||||
|       feed('i||xxx<CR>xxx<Esc>vko') | ||||
|       nvim('paste', '', false, 1) | ||||
|       nvim('paste', 'bbbbbb', false, 2) | ||||
|       nvim('paste', 'cccccc', false, 2) | ||||
|       nvim('paste', 'dddddd', false, 3) | ||||
|       expect('||bbbbbbccccccdddddd') | ||||
|       feed('u') | ||||
|       expect([[ | ||||
|         ||xxx | ||||
|         xxx]]) | ||||
|     end) | ||||
|     it('stream: Visual mode other end at the end of a line', function() | ||||
|       feed('i||xxx<CR>xxx<Esc>vk') | ||||
|       nvim('paste', 'aaaaaa', false, 1) | ||||
| @@ -738,6 +778,18 @@ describe('API', function() | ||||
|         ||xxx | ||||
|         xxx]]) | ||||
|     end) | ||||
|     it('stream: Visual mode other end at the end of a line with empty first chunk', function() | ||||
|       feed('i||xxx<CR>xxx<Esc>vk') | ||||
|       nvim('paste', '', false, 1) | ||||
|       nvim('paste', 'bbbbbb', false, 2) | ||||
|       nvim('paste', 'cccccc', false, 2) | ||||
|       nvim('paste', 'dddddd', false, 3) | ||||
|       expect('||bbbbbbccccccdddddd') | ||||
|       feed('u') | ||||
|       expect([[ | ||||
|         ||xxx | ||||
|         xxx]]) | ||||
|     end) | ||||
|     it('non-streaming', function() | ||||
|       -- With final "\n". | ||||
|       nvim('paste', 'line 1\nline 2\nline 3\n', true, -1) | ||||
| @@ -817,6 +869,19 @@ describe('API', function() | ||||
|       eq('aabbccdd', funcs.getcmdline()) | ||||
|       expect('') | ||||
|     end) | ||||
|     it('pasting with empty last chunk in Cmdline mode', function() | ||||
|       local screen = Screen.new(20, 4) | ||||
|       screen:attach() | ||||
|       feed(':') | ||||
|       nvim('paste', 'Foo', true, 1) | ||||
|       nvim('paste', '', true, 3) | ||||
|       screen:expect([[ | ||||
|                             | | ||||
|         ~                   | | ||||
|         ~                   | | ||||
|         :Foo^                | | ||||
|       ]]) | ||||
|     end) | ||||
|     it('crlf=false does not break lines at CR, CRLF', function() | ||||
|       nvim('paste', 'line 1\r\n\r\rline 2\nline 3\rline 4\r', false, -1) | ||||
|       expect('line 1\r\n\r\rline 2\nline 3\rline 4\r') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 zeertzjq
					zeertzjq