aboutsummaryrefslogtreecommitdiff
path: root/test/functional/editor/macro_spec.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/editor/macro_spec.lua')
-rw-r--r--test/functional/editor/macro_spec.lua102
1 files changed, 86 insertions, 16 deletions
diff --git a/test/functional/editor/macro_spec.lua b/test/functional/editor/macro_spec.lua
index 53be7dcc62..c97befdf07 100644
--- a/test/functional/editor/macro_spec.lua
+++ b/test/functional/editor/macro_spec.lua
@@ -6,14 +6,14 @@ local feed = helpers.feed
local clear = helpers.clear
local expect = helpers.expect
local command = helpers.command
-local funcs = helpers.funcs
-local meths = helpers.meths
+local fn = helpers.fn
+local api = helpers.api
local insert = helpers.insert
-local curbufmeths = helpers.curbufmeths
-
-before_each(clear)
describe('macros', function()
+ before_each(function()
+ clear({ args_rm = { '--cmd' } })
+ end)
it('can be recorded and replayed', function()
feed('qiahello<esc>q')
expect('hello')
@@ -40,31 +40,100 @@ hello]]
feed [[gg]]
feed [[qqAFOO<esc>q]]
- eq({'helloFOO', 'hello', 'hello'}, curbufmeths.get_lines(0, -1, false))
+ eq({ 'helloFOO', 'hello', 'hello' }, api.nvim_buf_get_lines(0, 0, -1, false))
+
+ feed [[Q]]
+ eq({ 'helloFOOFOO', 'hello', 'hello' }, api.nvim_buf_get_lines(0, 0, -1, false))
+
+ feed [[G3Q]]
+ eq({ 'helloFOOFOO', 'hello', 'helloFOOFOOFOO' }, api.nvim_buf_get_lines(0, 0, -1, false))
- feed[[Q]]
- eq({'helloFOOFOO', 'hello', 'hello'}, curbufmeths.get_lines(0, -1, false))
+ feed [[ggV3jQ]]
+ eq(
+ { 'helloFOOFOOFOO', 'helloFOO', 'helloFOOFOOFOOFOO' },
+ api.nvim_buf_get_lines(0, 0, -1, false)
+ )
+ end)
- feed[[G3Q]]
- eq({'helloFOOFOO', 'hello', 'helloFOOFOOFOO'}, curbufmeths.get_lines(0, -1, false))
+ it('can be replayed with @', function()
+ insert [[hello
+hello
+hello]]
+ feed [[gg]]
+
+ feed [[qqAFOO<esc>q]]
+ eq({ 'helloFOO', 'hello', 'hello' }, api.nvim_buf_get_lines(0, 0, -1, false))
+
+ feed [[Q]]
+ eq({ 'helloFOOFOO', 'hello', 'hello' }, api.nvim_buf_get_lines(0, 0, -1, false))
+
+ feed [[G3@@]]
+ eq({ 'helloFOOFOO', 'hello', 'helloFOOFOOFOO' }, api.nvim_buf_get_lines(0, 0, -1, false))
+
+ feed [[ggV2j@@]]
+ eq(
+ { 'helloFOOFOOFOO', 'helloFOO', 'helloFOOFOOFOOFOO' },
+ api.nvim_buf_get_lines(0, 0, -1, false)
+ )
+ end)
+
+ it('can be replayed with @q and @w', function()
+ insert [[hello
+hello
+hello]]
+ feed [[gg]]
+
+ feed [[qqAFOO<esc>qu]]
+ eq({ 'hello', 'hello', 'hello' }, api.nvim_buf_get_lines(0, 0, -1, false))
+
+ feed [[qwA123<esc>qu]]
+ eq({ 'hello', 'hello', 'hello' }, api.nvim_buf_get_lines(0, 0, -1, false))
+
+ feed [[V3j@q]]
+ eq({ 'helloFOO', 'helloFOO', 'helloFOO' }, api.nvim_buf_get_lines(0, 0, -1, false))
+
+ feed [[gg]]
+ feed [[Vj@w]]
+ eq({ 'helloFOO123', 'helloFOO123', 'helloFOO' }, api.nvim_buf_get_lines(0, 0, -1, false))
+ end)
+
+ it('can be replayed with @q and @w visual-block', function()
+ insert [[hello
+hello
+hello]]
+ feed [[gg]]
+
+ feed [[qqAFOO<esc>qu]]
+ eq({ 'hello', 'hello', 'hello' }, api.nvim_buf_get_lines(0, 0, -1, false))
+
+ feed [[qwA123<esc>qu]]
+ eq({ 'hello', 'hello', 'hello' }, api.nvim_buf_get_lines(0, 0, -1, false))
+
+ feed [[<C-v>3j@q]]
+ eq({ 'helloFOO', 'helloFOO', 'helloFOO' }, api.nvim_buf_get_lines(0, 0, -1, false))
+
+ feed [[gg]]
+ feed [[<C-v>j@w]]
+ eq({ 'helloFOO123', 'helloFOO123', 'helloFOO' }, api.nvim_buf_get_lines(0, 0, -1, false))
end)
end)
describe('immediately after a macro has finished executing,', function()
before_each(function()
+ clear()
command([[let @a = 'gg0']])
end)
describe('reg_executing() from RPC returns an empty string', function()
it('if the macro does not end with a <Nop> mapping', function()
feed('@a')
- eq('', funcs.reg_executing())
+ eq('', fn.reg_executing())
end)
it('if the macro ends with a <Nop> mapping', function()
command('nnoremap 0 <Nop>')
feed('@a')
- eq('', funcs.reg_executing())
+ eq('', fn.reg_executing())
end)
end)
@@ -74,16 +143,16 @@ describe('immediately after a macro has finished executing,', function()
end)
it('if the macro does not end with a <Nop> mapping', function()
- feed('@asq') -- "q" from "s" mapping should start recording a macro instead of being no-op
- eq({mode = 'n', blocking = false}, meths.get_mode())
+ feed('@asq') -- "q" from "s" mapping should start recording a macro instead of being no-op
+ eq({ mode = 'n', blocking = false }, api.nvim_get_mode())
expect('')
eq('', eval('@a'))
end)
it('if the macro ends with a <Nop> mapping', function()
command('nnoremap 0 <Nop>')
- feed('@asq') -- "q" from "s" mapping should start recording a macro instead of being no-op
- eq({mode = 'n', blocking = false}, meths.get_mode())
+ feed('@asq') -- "q" from "s" mapping should start recording a macro instead of being no-op
+ eq({ mode = 'n', blocking = false }, api.nvim_get_mode())
expect('')
eq('', eval('@a'))
end)
@@ -91,6 +160,7 @@ describe('immediately after a macro has finished executing,', function()
end)
describe('reg_recorded()', function()
+ before_each(clear)
it('returns the correct value', function()
feed [[qqyyq]]
eq('q', eval('reg_recorded()'))