diff options
Diffstat (limited to 'test/functional/vimscript/input_spec.lua')
-rw-r--r-- | test/functional/vimscript/input_spec.lua | 336 |
1 files changed, 150 insertions, 186 deletions
diff --git a/test/functional/vimscript/input_spec.lua b/test/functional/vimscript/input_spec.lua index e1179d29cc..b749d5a7f0 100644 --- a/test/functional/vimscript/input_spec.lua +++ b/test/functional/vimscript/input_spec.lua @@ -3,14 +3,14 @@ local Screen = require('test.functional.ui.screen') local eq = helpers.eq local feed = helpers.feed -local meths = helpers.meths +local api = helpers.api local clear = helpers.clear local source = helpers.source local command = helpers.command local exc_exec = helpers.exc_exec local pcall_err = helpers.pcall_err local async_meths = helpers.async_meths -local NIL = helpers.NIL +local NIL = vim.NIL local screen @@ -55,14 +55,14 @@ before_each(function() endfunction ]]) screen:set_default_attr_ids({ - EOB={bold = true, foreground = Screen.colors.Blue1}, - T={foreground=Screen.colors.Red}, - RBP1={background=Screen.colors.Red}, - RBP2={background=Screen.colors.Yellow}, - RBP3={background=Screen.colors.Green}, - RBP4={background=Screen.colors.Blue}, - SEP={bold = true, reverse = true}, - CONFIRM={bold = true, foreground = Screen.colors.SeaGreen4}, + EOB = { bold = true, foreground = Screen.colors.Blue1 }, + T = { foreground = Screen.colors.Red }, + RBP1 = { background = Screen.colors.Red }, + RBP2 = { background = Screen.colors.Yellow }, + RBP3 = { background = Screen.colors.Green }, + RBP4 = { background = Screen.colors.Blue }, + SEP = { bold = true, reverse = true }, + CONFIRM = { bold = true, foreground = Screen.colors.SeaGreen4 }, }) end) @@ -89,9 +89,7 @@ describe('input()', function() command('redraw!') screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:Foo}^ | ]]) end) @@ -100,144 +98,125 @@ describe('input()', function() feed([[:call input(1, 2)<CR>]]) screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:1}2^ | ]]) feed('<BS>') screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:1}^ | ]]) end) it('allows unequal numeric values when using {opts} dictionary', function() command('echohl Test') - meths.set_var('opts', {prompt=1, default=2, cancelreturn=3}) + api.nvim_set_var('opts', { prompt = 1, default = 2, cancelreturn = 3 }) feed([[:echo input(opts)<CR>]]) screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:1}2^ | ]]) feed('<BS>') screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:1}^ | ]]) feed('<Esc>') screen:expect([[ ^ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:3} | ]]) end) it('works with redraw', function() command('echohl Test') - meths.set_var('opts', {prompt='Foo>', default='Bar'}) + api.nvim_set_var('opts', { prompt = 'Foo>', default = 'Bar' }) feed([[:echo inputdialog(opts)<CR>]]) screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:Foo>}Bar^ | ]]) command('mode') - screen:expect{grid=[[ + screen:expect { + grid = [[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:Foo>}Bar^ | - ]], reset=true} + ]], + reset = true, + } feed('<BS>') screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:Foo>}Ba^ | ]]) command('mode') - screen:expect{grid=[[ + screen:expect { + grid = [[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:Foo>}Ba^ | - ]], reset=true} + ]], + reset = true, + } end) it('allows omitting everything with dictionary argument', function() command('echohl Test') feed([[:call input({})<CR>]]) screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 ^ | ]]) end) it('supports completion', function() feed(':let var = input("", "", "custom,CustomCompl")<CR>') feed('<Tab><CR>') - eq('TEST', meths.get_var('var')) + eq('TEST', api.nvim_get_var('var')) feed(':let var = input({"completion": "customlist,CustomListCompl"})<CR>') feed('<Tab><CR>') - eq('FOO', meths.get_var('var')) + eq('FOO', api.nvim_get_var('var')) end) it('supports cancelreturn', function() feed(':let var = input({"cancelreturn": "BAR"})<CR>') feed('<Esc>') - eq('BAR', meths.get_var('var')) + eq('BAR', api.nvim_get_var('var')) feed(':let var = input({"cancelreturn": []})<CR>') feed('<Esc>') - eq({}, meths.get_var('var')) + eq({}, api.nvim_get_var('var')) feed(':let var = input({"cancelreturn": v:false})<CR>') feed('<Esc>') - eq(false, meths.get_var('var')) + eq(false, api.nvim_get_var('var')) feed(':let var = input({"cancelreturn": v:null})<CR>') feed('<Esc>') - eq(NIL, meths.get_var('var')) + eq(NIL, api.nvim_get_var('var')) end) it('supports default string', function() feed(':let var = input("", "DEF1")<CR>') feed('<CR>') - eq('DEF1', meths.get_var('var')) + eq('DEF1', api.nvim_get_var('var')) feed(':let var = input({"default": "DEF2"})<CR>') feed('<CR>') - eq('DEF2', meths.get_var('var')) + eq('DEF2', api.nvim_get_var('var')) end) it('errors out on invalid inputs', function() - eq('Vim(call):E730: Using a List as a String', - exc_exec('call input([])')) - eq('Vim(call):E730: Using a List as a String', - exc_exec('call input("", [])')) - eq('Vim(call):E730: Using a List as a String', - exc_exec('call input("", "", [])')) - eq('Vim(call):E730: Using a List as a String', - exc_exec('call input({"prompt": []})')) - eq('Vim(call):E730: Using a List as a String', - exc_exec('call input({"default": []})')) - eq('Vim(call):E730: Using a List as a String', - exc_exec('call input({"completion": []})')) - eq('Vim(call):E5050: {opts} must be the only argument', - exc_exec('call input({}, "default")')) - eq('Vim(call):E118: Too many arguments for function: input', - exc_exec('call input("prompt> ", "default", "file", "extra")')) + eq('Vim(call):E730: Using a List as a String', exc_exec('call input([])')) + eq('Vim(call):E730: Using a List as a String', exc_exec('call input("", [])')) + eq('Vim(call):E730: Using a List as a String', exc_exec('call input("", "", [])')) + eq('Vim(call):E730: Using a List as a String', exc_exec('call input({"prompt": []})')) + eq('Vim(call):E730: Using a List as a String', exc_exec('call input({"default": []})')) + eq('Vim(call):E730: Using a List as a String', exc_exec('call input({"completion": []})')) + eq('Vim(call):E5050: {opts} must be the only argument', exc_exec('call input({}, "default")')) + eq( + 'Vim(call):E118: Too many arguments for function: input', + exc_exec('call input("prompt> ", "default", "file", "extra")') + ) end) it('supports highlighting', function() command('nnoremap <expr> X input({"highlight": "RainBowParens"})[-1]') @@ -245,9 +224,7 @@ describe('input()', function() feed('(())') screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {RBP1:(}{RBP2:()}{RBP1:)}^ | ]]) end) @@ -294,9 +271,7 @@ describe('inputdialog()', function() command('redraw!') screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:Foo}^ | ]]) end) @@ -305,135 +280,119 @@ describe('inputdialog()', function() feed([[:call inputdialog(1, 2)<CR>]]) screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:1}2^ | ]]) feed('<BS>') screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:1}^ | ]]) end) it('allows unequal numeric values when using {opts} dictionary', function() command('echohl Test') - meths.set_var('opts', {prompt=1, default=2, cancelreturn=3}) + api.nvim_set_var('opts', { prompt = 1, default = 2, cancelreturn = 3 }) feed([[:echo input(opts)<CR>]]) screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:1}2^ | ]]) feed('<BS>') screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:1}^ | ]]) feed('<Esc>') screen:expect([[ ^ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:3} | ]]) end) it('works with redraw', function() command('echohl Test') - meths.set_var('opts', {prompt='Foo>', default='Bar'}) + api.nvim_set_var('opts', { prompt = 'Foo>', default = 'Bar' }) feed([[:echo input(opts)<CR>]]) screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:Foo>}Bar^ | ]]) command('mode') - screen:expect{grid=[[ + screen:expect { + grid = [[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:Foo>}Bar^ | - ]], reset=true} + ]], + reset = true, + } feed('<BS>') screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:Foo>}Ba^ | ]]) command('mode') - screen:expect{grid=[[ + screen:expect { + grid = [[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {T:Foo>}Ba^ | - ]], reset=true} + ]], + reset = true, + } end) it('allows omitting everything with dictionary argument', function() command('echohl Test') feed(':echo inputdialog({})<CR>') screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 ^ | ]]) end) it('supports completion', function() feed(':let var = inputdialog({"completion": "customlist,CustomListCompl"})<CR>') feed('<Tab><CR>') - eq('FOO', meths.get_var('var')) + eq('FOO', api.nvim_get_var('var')) end) it('supports cancelreturn', function() feed(':let var = inputdialog("", "", "CR1")<CR>') feed('<Esc>') - eq('CR1', meths.get_var('var')) + eq('CR1', api.nvim_get_var('var')) feed(':let var = inputdialog({"cancelreturn": "BAR"})<CR>') feed('<Esc>') - eq('BAR', meths.get_var('var')) + eq('BAR', api.nvim_get_var('var')) end) it('supports default string', function() feed(':let var = inputdialog("", "DEF1")<CR>') feed('<CR>') - eq('DEF1', meths.get_var('var')) + eq('DEF1', api.nvim_get_var('var')) feed(':let var = inputdialog({"default": "DEF2"})<CR>') feed('<CR>') - eq('DEF2', meths.get_var('var')) + eq('DEF2', api.nvim_get_var('var')) end) it('errors out on invalid inputs', function() - eq('Vim(call):E730: Using a List as a String', - exc_exec('call inputdialog([])')) - eq('Vim(call):E730: Using a List as a String', - exc_exec('call inputdialog("", [])')) - eq('Vim(call):E730: Using a List as a String', - exc_exec('call inputdialog("", "", [])')) - eq('Vim(call):E730: Using a List as a String', - exc_exec('call inputdialog({"prompt": []})')) - eq('Vim(call):E730: Using a List as a String', - exc_exec('call inputdialog({"default": []})')) - eq('Vim(call):E730: Using a List as a String', - exc_exec('call inputdialog({"completion": []})')) - eq('Vim(call):E5050: {opts} must be the only argument', - exc_exec('call inputdialog({}, "default")')) - eq('Vim(call):E118: Too many arguments for function: inputdialog', - exc_exec('call inputdialog("prompt> ", "default", "file", "extra")')) + eq('Vim(call):E730: Using a List as a String', exc_exec('call inputdialog([])')) + eq('Vim(call):E730: Using a List as a String', exc_exec('call inputdialog("", [])')) + eq('Vim(call):E730: Using a List as a String', exc_exec('call inputdialog("", "", [])')) + eq('Vim(call):E730: Using a List as a String', exc_exec('call inputdialog({"prompt": []})')) + eq('Vim(call):E730: Using a List as a String', exc_exec('call inputdialog({"default": []})')) + eq('Vim(call):E730: Using a List as a String', exc_exec('call inputdialog({"completion": []})')) + eq( + 'Vim(call):E5050: {opts} must be the only argument', + exc_exec('call inputdialog({}, "default")') + ) + eq( + 'Vim(call):E118: Too many arguments for function: inputdialog', + exc_exec('call inputdialog("prompt> ", "default", "file", "extra")') + ) end) it('supports highlighting', function() command('nnoremap <expr> X inputdialog({"highlight": "RainBowParens"})[-1]') @@ -441,9 +400,7 @@ describe('inputdialog()', function() feed('(())') screen:expect([[ | - {EOB:~ }| - {EOB:~ }| - {EOB:~ }| + {EOB:~ }|*3 {RBP1:(}{RBP2:()}{RBP1:)}^ | ]]) end) @@ -452,84 +409,91 @@ end) describe('confirm()', function() -- oldtest: Test_confirm() it('works', function() - meths.set_option_value('more', false, {}) -- Avoid hit-enter prompt - meths.set_option_value('laststatus', 2, {}) + api.nvim_set_option_value('more', false, {}) -- Avoid hit-enter prompt + api.nvim_set_option_value('laststatus', 2, {}) -- screen:expect() calls are needed to avoid feeding input too early - screen:expect({any = '%[No Name%]'}) + screen:expect({ any = '%[No Name%]' }) - async_meths.command([[let a = confirm('Press O to proceed')]]) - screen:expect({any = '{CONFIRM:.+: }'}) + async_meths.nvim_command([[let a = confirm('Press O to proceed')]]) + screen:expect({ any = '{CONFIRM:.+: }' }) feed('o') - screen:expect({any = '%[No Name%]'}) - eq(1, meths.get_var('a')) + screen:expect({ any = '%[No Name%]' }) + eq(1, api.nvim_get_var('a')) - async_meths.command([[let a = 'Are you sure?'->confirm("&Yes\n&No")]]) - screen:expect({any = '{CONFIRM:.+: }'}) + async_meths.nvim_command([[let a = 'Are you sure?'->confirm("&Yes\n&No")]]) + screen:expect({ any = '{CONFIRM:.+: }' }) feed('y') - screen:expect({any = '%[No Name%]'}) - eq(1, meths.get_var('a')) + screen:expect({ any = '%[No Name%]' }) + eq(1, api.nvim_get_var('a')) - async_meths.command([[let a = confirm('Are you sure?', "&Yes\n&No")]]) - screen:expect({any = '{CONFIRM:.+: }'}) + async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No")]]) + screen:expect({ any = '{CONFIRM:.+: }' }) feed('n') - screen:expect({any = '%[No Name%]'}) - eq(2, meths.get_var('a')) + screen:expect({ any = '%[No Name%]' }) + eq(2, api.nvim_get_var('a')) -- Not possible to match Vim's CTRL-C test here as CTRL-C always sets got_int in Nvim. -- confirm() should return 0 when pressing ESC. - async_meths.command([[let a = confirm('Are you sure?', "&Yes\n&No")]]) - screen:expect({any = '{CONFIRM:.+: }'}) + async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No")]]) + screen:expect({ any = '{CONFIRM:.+: }' }) feed('<Esc>') - screen:expect({any = '%[No Name%]'}) - eq(0, meths.get_var('a')) + screen:expect({ any = '%[No Name%]' }) + eq(0, api.nvim_get_var('a')) -- Default choice is returned when pressing <CR>. - async_meths.command([[let a = confirm('Are you sure?', "&Yes\n&No")]]) - screen:expect({any = '{CONFIRM:.+: }'}) + async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No")]]) + screen:expect({ any = '{CONFIRM:.+: }' }) feed('<CR>') - screen:expect({any = '%[No Name%]'}) - eq(1, meths.get_var('a')) + screen:expect({ any = '%[No Name%]' }) + eq(1, api.nvim_get_var('a')) - async_meths.command([[let a = confirm('Are you sure?', "&Yes\n&No", 2)]]) - screen:expect({any = '{CONFIRM:.+: }'}) + async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No", 2)]]) + screen:expect({ any = '{CONFIRM:.+: }' }) feed('<CR>') - screen:expect({any = '%[No Name%]'}) - eq(2, meths.get_var('a')) + screen:expect({ any = '%[No Name%]' }) + eq(2, api.nvim_get_var('a')) - async_meths.command([[let a = confirm('Are you sure?', "&Yes\n&No", 0)]]) - screen:expect({any = '{CONFIRM:.+: }'}) + async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No", 0)]]) + screen:expect({ any = '{CONFIRM:.+: }' }) feed('<CR>') - screen:expect({any = '%[No Name%]'}) - eq(0, meths.get_var('a')) + screen:expect({ any = '%[No Name%]' }) + eq(0, api.nvim_get_var('a')) -- Test with the {type} 4th argument - for _, type in ipairs({'Error', 'Question', 'Info', 'Warning', 'Generic'}) do - async_meths.command(([[let a = confirm('Are you sure?', "&Yes\n&No", 1, '%s')]]):format(type)) - screen:expect({any = '{CONFIRM:.+: }'}) + for _, type in ipairs({ 'Error', 'Question', 'Info', 'Warning', 'Generic' }) do + async_meths.nvim_command( + ([[let a = confirm('Are you sure?', "&Yes\n&No", 1, '%s')]]):format(type) + ) + screen:expect({ any = '{CONFIRM:.+: }' }) feed('y') - screen:expect({any = '%[No Name%]'}) - eq(1, meths.get_var('a')) + screen:expect({ any = '%[No Name%]' }) + eq(1, api.nvim_get_var('a')) end - eq('Vim(call):E730: Using a List as a String', - pcall_err(command, 'call confirm([])')) - eq('Vim(call):E730: Using a List as a String', - pcall_err(command, 'call confirm("Are you sure?", [])')) - eq('Vim(call):E745: Using a List as a Number', - pcall_err(command, 'call confirm("Are you sure?", "&Yes\n&No\n", [])')) - eq('Vim(call):E730: Using a List as a String', - pcall_err(command, 'call confirm("Are you sure?", "&Yes\n&No\n", 0, [])')) + eq('Vim(call):E730: Using a List as a String', pcall_err(command, 'call confirm([])')) + eq( + 'Vim(call):E730: Using a List as a String', + pcall_err(command, 'call confirm("Are you sure?", [])') + ) + eq( + 'Vim(call):E745: Using a List as a Number', + pcall_err(command, 'call confirm("Are you sure?", "&Yes\n&No\n", [])') + ) + eq( + 'Vim(call):E730: Using a List as a String', + pcall_err(command, 'call confirm("Are you sure?", "&Yes\n&No\n", 0, [])') + ) end) - it("shows dialog even if :silent #8788", function() + it('shows dialog even if :silent #8788', function() command("autocmd BufNewFile * call confirm('test')") local function check_and_clear(edit_line) screen:expect([[ | {SEP: }| - ]]..edit_line..[[ + ]] .. edit_line .. [[ {CONFIRM:test} | {CONFIRM:[O]k: }^ | ]]) @@ -556,7 +520,7 @@ describe('confirm()', function() feed(':call nvim_command("edit x")<cr>') check_and_clear(':call nvim_command("edit |\n') - async_meths.command('edit x') + async_meths.nvim_command('edit x') check_and_clear(' |\n') end) end) |