test(paste): reorganize tests and add tests for linewise Visual mode

This commit is contained in:
zeertzjq 2022-03-06 06:56:24 +08:00
parent a6eafc77ce
commit e4ec8d7d50

View File

@ -630,10 +630,6 @@ describe('API', function()
end) end)
describe('nvim_paste', function() 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() it('validates args', function()
eq('Invalid phase: -2', eq('Invalid phase: -2',
pcall_err(request, 'nvim_paste', 'foo', true, -2)) pcall_err(request, 'nvim_paste', 'foo', true, -2))
@ -670,166 +666,333 @@ describe('API', function()
expect(expected1) expect(expected1)
end) end)
it('stream: Insert mode', function() it('stream: Insert mode', function()
-- If nvim_paste() calls :undojoin without making any changes, this makes it an error.
feed('afoo<Esc>u')
feed('i') feed('i')
nvim('paste', 'aaaaaa', false, 1) nvim('paste', 'aaaaaa', false, 1)
nvim('paste', 'bbbbbb', false, 2) nvim('paste', 'bbbbbb', false, 2)
nvim('paste', 'cccccc', false, 2) nvim('paste', 'cccccc', false, 2)
nvim('paste', 'dddddd', false, 3) nvim('paste', 'dddddd', false, 3)
expect('aaaaaabbbbbbccccccdddddd') expect('aaaaaabbbbbbccccccdddddd')
end) feed('<Esc>u')
it('stream: Normal mode on empty line', function()
nvim('paste', 'aaaaaa', false, 1)
nvim('paste', 'bbbbbb', false, 2)
nvim('paste', 'cccccc', false, 2)
nvim('paste', 'dddddd', false, 3)
expect('aaaaaabbbbbbccccccdddddd')
feed('u')
expect('') expect('')
end) end)
it('stream: Normal mode on empty line pasting multiple lines', function() describe('stream: Normal mode', function()
nvim('paste', 'aaaaaa\n', false, 1) describe('on empty line', function()
nvim('paste', 'bbbbbb\n', false, 2) before_each(function()
nvim('paste', 'cccccc\n', false, 2) -- If nvim_paste() calls :undojoin without making any changes, this makes it an error.
nvim('paste', 'dddddd', false, 3) feed('afoo<Esc>u')
expect([[ end)
aaaaaa after_each(function()
bbbbbb feed('u')
cccccc expect('')
dddddd]]) end)
feed('u') it('pasting one line', function()
expect('') nvim('paste', 'aaaaaa', false, 1)
nvim('paste', 'bbbbbb', false, 2)
nvim('paste', 'cccccc', false, 2)
nvim('paste', 'dddddd', false, 3)
expect('aaaaaabbbbbbccccccdddddd')
end)
it('pasting multiple lines', function()
nvim('paste', 'aaaaaa\n', false, 1)
nvim('paste', 'bbbbbb\n', false, 2)
nvim('paste', 'cccccc\n', false, 2)
nvim('paste', 'dddddd', false, 3)
expect([[
aaaaaa
bbbbbb
cccccc
dddddd]])
end)
end)
describe('not at the end of a line', function()
before_each(function()
feed('i||<Esc>')
-- If nvim_paste() calls :undojoin without making any changes, this makes it an error.
feed('afoo<Esc>u')
feed('0')
end)
after_each(function()
feed('u')
expect('||')
end)
it('pasting one line', function()
nvim('paste', 'aaaaaa', false, 1)
nvim('paste', 'bbbbbb', false, 2)
nvim('paste', 'cccccc', false, 2)
nvim('paste', 'dddddd', false, 3)
expect('|aaaaaabbbbbbccccccdddddd|')
end)
it('pasting multiple lines', function()
nvim('paste', 'aaaaaa\n', false, 1)
nvim('paste', 'bbbbbb\n', false, 2)
nvim('paste', 'cccccc\n', false, 2)
nvim('paste', 'dddddd', false, 3)
expect([[
|aaaaaa
bbbbbb
cccccc
dddddd|]])
end)
end)
describe('at the end of a line', function()
before_each(function()
feed('i||<Esc>')
-- If nvim_paste() calls :undojoin without making any changes, this makes it an error.
feed('afoo<Esc>u')
feed('$')
end)
after_each(function()
feed('u')
expect('||')
end)
it('pasting one line', function()
nvim('paste', 'aaaaaa', false, 1)
nvim('paste', 'bbbbbb', false, 2)
nvim('paste', 'cccccc', false, 2)
nvim('paste', 'dddddd', false, 3)
expect('||aaaaaabbbbbbccccccdddddd')
end)
it('pasting multiple lines', function()
nvim('paste', 'aaaaaa\n', false, 1)
nvim('paste', 'bbbbbb\n', false, 2)
nvim('paste', 'cccccc\n', false, 2)
nvim('paste', 'dddddd', false, 3)
expect([[
||aaaaaa
bbbbbb
cccccc
dddddd]])
end)
end)
end) end)
it('stream: Normal mode not at the end of a line', function() describe('stream: Visual mode', function()
feed('i||<Esc>0') describe('neither end at the end of a line', function()
nvim('paste', 'aaaaaa', false, 1) before_each(function()
nvim('paste', 'bbbbbb', false, 2) feed('i|xxx<CR>xxx|<Esc>')
nvim('paste', 'cccccc', false, 2) -- If nvim_paste() calls :undojoin without making any changes, this makes it an error.
nvim('paste', 'dddddd', false, 3) feed('afoo<Esc>u')
expect('|aaaaaabbbbbbccccccdddddd|') feed('hvhk')
feed('u') end)
expect('||') after_each(function()
feed('u')
expect([[
|xxx
xxx|]])
end)
it('with non-empty chunks', function()
nvim('paste', 'aaaaaa', false, 1)
nvim('paste', 'bbbbbb', false, 2)
nvim('paste', 'cccccc', false, 2)
nvim('paste', 'dddddd', false, 3)
expect('|aaaaaabbbbbbccccccdddddd|')
end)
it('with empty first chunk', function()
nvim('paste', '', false, 1)
nvim('paste', 'bbbbbb', false, 2)
nvim('paste', 'cccccc', false, 2)
nvim('paste', 'dddddd', false, 3)
expect('|bbbbbbccccccdddddd|')
end)
it('with all chunks empty', function()
nvim('paste', '', false, 1)
nvim('paste', '', false, 2)
nvim('paste', '', false, 2)
nvim('paste', '', false, 3)
expect('||')
end)
end)
describe('cursor at the end of a line', function()
before_each(function()
feed('i||xxx<CR>xxx<Esc>')
-- If nvim_paste() calls :undojoin without making any changes, this makes it an error.
feed('afoo<Esc>u')
feed('vko')
end)
after_each(function()
feed('u')
expect([[
||xxx
xxx]])
end)
it('with non-empty chunks', function()
nvim('paste', 'aaaaaa', false, 1)
nvim('paste', 'bbbbbb', false, 2)
nvim('paste', 'cccccc', false, 2)
nvim('paste', 'dddddd', false, 3)
expect('||aaaaaabbbbbbccccccdddddd')
end)
it('with empty first chunk', function()
nvim('paste', '', false, 1)
nvim('paste', 'bbbbbb', false, 2)
nvim('paste', 'cccccc', false, 2)
nvim('paste', 'dddddd', false, 3)
expect('||bbbbbbccccccdddddd')
end)
end)
describe('other end at the end of a line', function()
before_each(function()
feed('i||xxx<CR>xxx<Esc>')
-- If nvim_paste() calls :undojoin without making any changes, this makes it an error.
feed('afoo<Esc>u')
feed('vk')
end)
after_each(function()
feed('u')
expect([[
||xxx
xxx]])
end)
it('with non-empty chunks', function()
nvim('paste', 'aaaaaa', false, 1)
nvim('paste', 'bbbbbb', false, 2)
nvim('paste', 'cccccc', false, 2)
nvim('paste', 'dddddd', false, 3)
expect('||aaaaaabbbbbbccccccdddddd')
end)
it('with empty first chunk', function()
nvim('paste', '', false, 1)
nvim('paste', 'bbbbbb', false, 2)
nvim('paste', 'cccccc', false, 2)
nvim('paste', 'dddddd', false, 3)
expect('||bbbbbbccccccdddddd')
end)
end)
end) end)
it('stream: Normal mode not at the end of a line pasting multiple lines', function() describe('stream: linewise Visual mode', function()
feed('i||<Esc>0') before_each(function()
nvim('paste', 'aaaaaa\n', false, 1) feed('i123456789<CR>987654321<CR>123456789<Esc>')
nvim('paste', 'bbbbbb\n', false, 2) -- If nvim_paste() calls :undojoin without making any changes, this makes it an error.
nvim('paste', 'cccccc\n', false, 2) feed('afoo<Esc>u')
nvim('paste', 'dddddd', false, 3) end)
expect([[ after_each(function()
|aaaaaa feed('u')
bbbbbb expect([[
cccccc 123456789
dddddd|]]) 987654321
feed('u') 123456789]])
expect('||') end)
end) describe('selecting the start of a file', function()
it('stream: Normal mode at the end of a line', function() before_each(function()
feed('i||<Esc>') feed('ggV')
nvim('paste', 'aaaaaa', false, 1) end)
nvim('paste', 'bbbbbb', false, 2) it('pasting text without final new line', function()
nvim('paste', 'cccccc', false, 2) nvim('paste', 'aaaaaa\n', false, 1)
nvim('paste', 'dddddd', false, 3) nvim('paste', 'bbbbbb\n', false, 2)
expect('||aaaaaabbbbbbccccccdddddd') nvim('paste', 'cccccc\n', false, 2)
feed('u') nvim('paste', 'dddddd', false, 3)
expect('||') expect([[
end) aaaaaa
it('stream: Normal mode at the end of a line pasting multiple lines', function() bbbbbb
feed('i||<Esc>') cccccc
nvim('paste', 'aaaaaa\n', false, 1) dddddd987654321
nvim('paste', 'bbbbbb\n', false, 2) 123456789]])
nvim('paste', 'cccccc\n', false, 2) end)
nvim('paste', 'dddddd', false, 3) it('pasting text with final new line', function()
expect([[ nvim('paste', 'aaaaaa\n', false, 1)
||aaaaaa nvim('paste', 'bbbbbb\n', false, 2)
bbbbbb nvim('paste', 'cccccc\n', false, 2)
cccccc nvim('paste', 'dddddd\n', false, 3)
dddddd]]) expect([[
feed('u') aaaaaa
expect('||') bbbbbb
end) cccccc
it('stream: Visual mode neither end at the end of a line', function() dddddd
feed('i|xxx<CR>xxx|<Esc>hvhk') 987654321
nvim('paste', 'aaaaaa', false, 1) 123456789]])
nvim('paste', 'bbbbbb', false, 2) end)
nvim('paste', 'cccccc', false, 2) end)
nvim('paste', 'dddddd', false, 3) describe('selecting the middle of a file', function()
expect('|aaaaaabbbbbbccccccdddddd|') before_each(function()
feed('u') feed('2ggV')
expect([[ end)
|xxx it('pasting text without final new line', function()
xxx|]]) nvim('paste', 'aaaaaa\n', false, 1)
end) nvim('paste', 'bbbbbb\n', false, 2)
it('stream: Visual mode neither end at the end of a line with empty first chunk', function() nvim('paste', 'cccccc\n', false, 2)
feed('i|xxx<CR>xxx|<Esc>hvhk') nvim('paste', 'dddddd', false, 3)
nvim('paste', '', false, 1) expect([[
nvim('paste', 'bbbbbb', false, 2) 123456789
nvim('paste', 'cccccc', false, 2) aaaaaa
nvim('paste', 'dddddd', false, 3) bbbbbb
expect('|bbbbbbccccccdddddd|') cccccc
feed('u') dddddd123456789]])
expect([[ end)
|xxx it('pasting text with final new line', function()
xxx|]]) nvim('paste', 'aaaaaa\n', false, 1)
end) nvim('paste', 'bbbbbb\n', false, 2)
it('stream: Visual mode neither end at the end of a line with all chunks empty', function() nvim('paste', 'cccccc\n', false, 2)
feed('i|xxx<CR>xxx|<Esc>hvhk') nvim('paste', 'dddddd\n', false, 3)
nvim('paste', '', false, 1) expect([[
nvim('paste', '', false, 2) 123456789
nvim('paste', '', false, 2) aaaaaa
nvim('paste', '', false, 3) bbbbbb
expect('||') cccccc
feed('u') dddddd
expect([[ 123456789]])
|xxx end)
xxx|]]) end)
end) describe('selecting the end of a file', function()
it('stream: Visual mode cursor at the end of a line', function() before_each(function()
feed('i||xxx<CR>xxx<Esc>vko') feed('3ggV')
nvim('paste', 'aaaaaa', false, 1) end)
nvim('paste', 'bbbbbb', false, 2) it('pasting text without final new line', function()
nvim('paste', 'cccccc', false, 2) nvim('paste', 'aaaaaa\n', false, 1)
nvim('paste', 'dddddd', false, 3) nvim('paste', 'bbbbbb\n', false, 2)
expect('||aaaaaabbbbbbccccccdddddd') nvim('paste', 'cccccc\n', false, 2)
feed('u') nvim('paste', 'dddddd', false, 3)
expect([[ expect([[
||xxx 123456789
xxx]]) 987654321
end) aaaaaa
it('stream: Visual mode cursor at the end of a line with empty first chunk', function() bbbbbb
feed('i||xxx<CR>xxx<Esc>vko') cccccc
nvim('paste', '', false, 1) dddddd]])
nvim('paste', 'bbbbbb', false, 2) end)
nvim('paste', 'cccccc', false, 2) it('pasting text with final new line', function()
nvim('paste', 'dddddd', false, 3) nvim('paste', 'aaaaaa\n', false, 1)
expect('||bbbbbbccccccdddddd') nvim('paste', 'bbbbbb\n', false, 2)
feed('u') nvim('paste', 'cccccc\n', false, 2)
expect([[ nvim('paste', 'dddddd\n', false, 3)
||xxx expect([[
xxx]]) 123456789
end) 987654321
it('stream: Visual mode other end at the end of a line', function() aaaaaa
feed('i||xxx<CR>xxx<Esc>vk') bbbbbb
nvim('paste', 'aaaaaa', false, 1) cccccc
nvim('paste', 'bbbbbb', false, 2) dddddd
nvim('paste', 'cccccc', false, 2) ]])
nvim('paste', 'dddddd', false, 3) end)
expect('||aaaaaabbbbbbccccccdddddd') end)
feed('u') describe('selecting the whole file', function()
expect([[ before_each(function()
||xxx feed('ggVG')
xxx]]) end)
end) it('pasting text without final new line', function()
it('stream: Visual mode other end at the end of a line with empty first chunk', function() nvim('paste', 'aaaaaa\n', false, 1)
feed('i||xxx<CR>xxx<Esc>vk') nvim('paste', 'bbbbbb\n', false, 2)
nvim('paste', '', false, 1) nvim('paste', 'cccccc\n', false, 2)
nvim('paste', 'bbbbbb', false, 2) nvim('paste', 'dddddd', false, 3)
nvim('paste', 'cccccc', false, 2) expect([[
nvim('paste', 'dddddd', false, 3) aaaaaa
expect('||bbbbbbccccccdddddd') bbbbbb
feed('u') cccccc
expect([[ dddddd]])
||xxx end)
xxx]]) it('pasting text with final new line', function()
nvim('paste', 'aaaaaa\n', false, 1)
nvim('paste', 'bbbbbb\n', false, 2)
nvim('paste', 'cccccc\n', false, 2)
nvim('paste', 'dddddd\n', false, 3)
expect([[
aaaaaa
bbbbbb
cccccc
dddddd
]])
end)
end)
end) end)
it('non-streaming', function() it('non-streaming', function()
-- With final "\n". -- With final "\n".