diff options
Diffstat (limited to 'test/functional/api/command_spec.lua')
| -rw-r--r-- | test/functional/api/command_spec.lua | 121 | 
1 files changed, 121 insertions, 0 deletions
| diff --git a/test/functional/api/command_spec.lua b/test/functional/api/command_spec.lua index 6f929ad1ca..6c2c136edc 100644 --- a/test/functional/api/command_spec.lua +++ b/test/functional/api/command_spec.lua @@ -6,8 +6,14 @@ local command = helpers.command  local curbufmeths = helpers.curbufmeths  local eq = helpers.eq  local meths = helpers.meths +local bufmeths = helpers.bufmeths +local matches = helpers.matches  local source = helpers.source  local pcall_err = helpers.pcall_err +local exec_lua = helpers.exec_lua +local assert_alive = helpers.assert_alive +local feed = helpers.feed +local funcs = helpers.funcs  describe('nvim_get_commands', function()    local cmd_dict  = { addr=NIL, bang=false, bar=false, complete=NIL, complete_arg=NIL, count=NIL, definition='echo "Hello World"', name='Hello', nargs='1', range=NIL, register=false, script_id=0, } @@ -78,3 +84,118 @@ describe('nvim_get_commands', function()      eq({Cmd2=cmd2, Cmd3=cmd3, Cmd4=cmd4, Finger=cmd1, TestCmd=cmd0}, meths.get_commands({builtin=false}))    end)  end) + +describe('nvim_add_user_command', function() +  before_each(clear) + +  it('works with strings', function() +    meths.add_user_command('SomeCommand', 'let g:command_fired = <args>', {nargs = 1}) +    meths.command('SomeCommand 42') +    eq(42, meths.eval('g:command_fired')) +  end) + +  it('works with Lua functions', function() +    exec_lua [[ +      result = {} +      vim.api.nvim_add_user_command('CommandWithLuaCallback', function(opts) +        result = opts +      end, { +        nargs = "*", +        bang = true, +        count = 2, +      }) +    ]] + +    eq({ +      args = "hello", +      bang = false, +      line1 = 1, +      line2 = 1, +      mods = "", +      range = 0, +      count = 2, +      reg = "", +    }, exec_lua [[ +      vim.api.nvim_command('CommandWithLuaCallback hello') +      return result +    ]]) + +    eq({ +      args = "", +      bang = true, +      line1 = 10, +      line2 = 10, +      mods = "botright", +      range = 1, +      count = 10, +      reg = "", +    }, exec_lua [[ +      vim.api.nvim_command('botright 10CommandWithLuaCallback!') +      return result +    ]]) + +    eq({ +      args = "", +      bang = false, +      line1 = 1, +      line2 = 42, +      mods = "", +      range = 1, +      count = 42, +      reg = "", +    }, exec_lua [[ +      vim.api.nvim_command('CommandWithLuaCallback 42') +      return result +    ]]) +  end) + +  it('can define buffer-local commands', function() +    local bufnr = meths.create_buf(false, false) +    bufmeths.add_user_command(bufnr, "Hello", "", {}) +    matches("Not an editor command: Hello", pcall_err(meths.command, "Hello")) +    meths.set_current_buf(bufnr) +    meths.command("Hello") +    assert_alive() +  end) + +  it('can use a Lua complete function', function() +    exec_lua [[ +      vim.api.nvim_add_user_command('Test', '', { +        nargs = "*", +        complete = function(arg, cmdline, pos) +          local options = {"aaa", "bbb", "ccc"} +          local t = {} +          for _, v in ipairs(options) do +            if string.find(v, "^" .. arg) then +              table.insert(t, v) +            end +          end +          return t +        end, +      }) +    ]] + +    feed(':Test a<Tab>') +    eq('Test aaa', funcs.getcmdline()) +    feed('<C-U>Test b<Tab>') +    eq('Test bbb', funcs.getcmdline()) +  end) +end) + +describe('nvim_del_user_command', function() +  before_each(clear) + +  it('can delete global commands', function() +    meths.add_user_command('Hello', 'echo "Hi"', {}) +    meths.command('Hello') +    meths.del_user_command('Hello') +    matches("Not an editor command: Hello", pcall_err(meths.command, "Hello")) +  end) + +  it('can delete buffer-local commands', function() +    bufmeths.add_user_command(0, 'Hello', 'echo "Hi"', {}) +    meths.command('Hello') +    bufmeths.del_user_command(0, 'Hello') +    matches("Not an editor command: Hello", pcall_err(meths.command, "Hello")) +  end) +end) | 
