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,23 +666,35 @@ 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')
feed('<Esc>u')
expect('')
end) end)
it('stream: Normal mode on empty line', function() describe('stream: Normal mode', function()
describe('on empty line', function()
before_each(function()
-- If nvim_paste() calls :undojoin without making any changes, this makes it an error.
feed('afoo<Esc>u')
end)
after_each(function()
feed('u')
expect('')
end)
it('pasting one line', function()
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')
feed('u')
expect('')
end) end)
it('stream: Normal mode on empty line pasting multiple lines', function() it('pasting multiple lines', function()
nvim('paste', 'aaaaaa\n', false, 1) nvim('paste', 'aaaaaa\n', false, 1)
nvim('paste', 'bbbbbb\n', false, 2) nvim('paste', 'bbbbbb\n', false, 2)
nvim('paste', 'cccccc\n', false, 2) nvim('paste', 'cccccc\n', false, 2)
@ -696,21 +704,27 @@ describe('API', function()
bbbbbb bbbbbb
cccccc cccccc
dddddd]]) dddddd]])
feed('u')
expect('')
end) end)
it('stream: Normal mode not at the end of a line', function() end)
feed('i||<Esc>0') 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', '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|')
feed('u')
expect('||')
end) end)
it('stream: Normal mode not at the end of a line pasting multiple lines', function() it('pasting multiple lines', function()
feed('i||<Esc>0')
nvim('paste', 'aaaaaa\n', false, 1) nvim('paste', 'aaaaaa\n', false, 1)
nvim('paste', 'bbbbbb\n', false, 2) nvim('paste', 'bbbbbb\n', false, 2)
nvim('paste', 'cccccc\n', false, 2) nvim('paste', 'cccccc\n', false, 2)
@ -720,21 +734,27 @@ describe('API', function()
bbbbbb bbbbbb
cccccc cccccc
dddddd|]]) 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') feed('u')
expect('||') expect('||')
end) end)
it('stream: Normal mode at the end of a line', function() it('pasting one line', function()
feed('i||<Esc>')
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')
feed('u')
expect('||')
end) end)
it('stream: Normal mode at the end of a line pasting multiple lines', function() it('pasting multiple lines', function()
feed('i||<Esc>')
nvim('paste', 'aaaaaa\n', false, 1) nvim('paste', 'aaaaaa\n', false, 1)
nvim('paste', 'bbbbbb\n', false, 2) nvim('paste', 'bbbbbb\n', false, 2)
nvim('paste', 'cccccc\n', false, 2) nvim('paste', 'cccccc\n', false, 2)
@ -744,92 +764,235 @@ describe('API', function()
bbbbbb bbbbbb
cccccc cccccc
dddddd]]) dddddd]])
feed('u')
expect('||')
end) end)
it('stream: Visual mode neither end at the end of a line', function() end)
feed('i|xxx<CR>xxx|<Esc>hvhk') end)
describe('stream: Visual mode', function()
describe('neither 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('hvhk')
end)
after_each(function()
feed('u')
expect([[
|xxx
xxx|]])
end)
it('with non-empty chunks', function()
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|')
feed('u')
expect([[
|xxx
xxx|]])
end) end)
it('stream: Visual mode neither end at the end of a line with empty first chunk', function() it('with empty first chunk', function()
feed('i|xxx<CR>xxx|<Esc>hvhk')
nvim('paste', '', false, 1) nvim('paste', '', 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('|bbbbbbccccccdddddd|') expect('|bbbbbbccccccdddddd|')
feed('u')
expect([[
|xxx
xxx|]])
end) end)
it('stream: Visual mode neither end at the end of a line with all chunks empty', function() it('with all chunks empty', function()
feed('i|xxx<CR>xxx|<Esc>hvhk')
nvim('paste', '', false, 1) nvim('paste', '', false, 1)
nvim('paste', '', false, 2) nvim('paste', '', false, 2)
nvim('paste', '', false, 2) nvim('paste', '', false, 2)
nvim('paste', '', false, 3) nvim('paste', '', false, 3)
expect('||') 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') feed('u')
expect([[ expect([[
|xxx ||xxx
xxx|]]) xxx]])
end) end)
it('stream: Visual mode cursor at the end of a line', function() it('with non-empty chunks', function()
feed('i||xxx<CR>xxx<Esc>vko')
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')
feed('u')
expect([[
||xxx
xxx]])
end) end)
it('stream: Visual mode cursor at the end of a line with empty first chunk', function() it('with empty first chunk', function()
feed('i||xxx<CR>xxx<Esc>vko')
nvim('paste', '', false, 1) nvim('paste', '', 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('||bbbbbbccccccdddddd') 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') feed('u')
expect([[ expect([[
||xxx ||xxx
xxx]]) xxx]])
end) end)
it('stream: Visual mode other end at the end of a line', function() it('with non-empty chunks', function()
feed('i||xxx<CR>xxx<Esc>vk')
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')
feed('u')
expect([[
||xxx
xxx]])
end) end)
it('stream: Visual mode other end at the end of a line with empty first chunk', function() it('with empty first chunk', function()
feed('i||xxx<CR>xxx<Esc>vk')
nvim('paste', '', false, 1) nvim('paste', '', 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('||bbbbbbccccccdddddd') expect('||bbbbbbccccccdddddd')
end)
end)
end)
describe('stream: linewise Visual mode', function()
before_each(function()
feed('i123456789<CR>987654321<CR>123456789<Esc>')
-- If nvim_paste() calls :undojoin without making any changes, this makes it an error.
feed('afoo<Esc>u')
end)
after_each(function()
feed('u') feed('u')
expect([[ expect([[
||xxx 123456789
xxx]]) 987654321
123456789]])
end)
describe('selecting the start of a file', function()
before_each(function()
feed('ggV')
end)
it('pasting text without 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', false, 3)
expect([[
aaaaaa
bbbbbb
cccccc
dddddd987654321
123456789]])
end)
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
987654321
123456789]])
end)
end)
describe('selecting the middle of a file', function()
before_each(function()
feed('2ggV')
end)
it('pasting text without 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', false, 3)
expect([[
123456789
aaaaaa
bbbbbb
cccccc
dddddd123456789]])
end)
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([[
123456789
aaaaaa
bbbbbb
cccccc
dddddd
123456789]])
end)
end)
describe('selecting the end of a file', function()
before_each(function()
feed('3ggV')
end)
it('pasting text without 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', false, 3)
expect([[
123456789
987654321
aaaaaa
bbbbbb
cccccc
dddddd]])
end)
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([[
123456789
987654321
aaaaaa
bbbbbb
cccccc
dddddd
]])
end)
end)
describe('selecting the whole file', function()
before_each(function()
feed('ggVG')
end)
it('pasting text without 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', false, 3)
expect([[
aaaaaa
bbbbbb
cccccc
dddddd]])
end)
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".