diff --git a/lua/input/init.lua b/lua/input/init.lua index 951033a..8309c53 100644 --- a/lua/input/init.lua +++ b/lua/input/init.lua @@ -64,7 +64,7 @@ local function input(opts, on_confirm) vim.fn.prompt_setinterrupt(bufnr, cancel) vim.api.nvim_win_call(winid, function() - vim.api.nvim_put({ default }, "", true, false) + vim.api.nvim_buf_set_text(bufnr, 0, icon_end_col, 0, icon_end_col, { default }) vim.cmd.startinsert() end) vim.api.nvim_win_set_cursor(winid, { 1, #default + icon_end_col }) @@ -91,7 +91,7 @@ local function input(opts, on_confirm) buffer = bufnr, nested = true, once = true, - callback = cancel, + callback = close, }) vim.api.nvim_create_autocmd("CursorMoved", { diff --git a/neovim.yml b/neovim.yml index 9cf0434..b95607f 100644 --- a/neovim.yml +++ b/neovim.yml @@ -19,6 +19,9 @@ globals: before_each: args: - type: function + after_each: + args: + - type: function assert.equal: args: - type: any diff --git a/tests/input_spec.lua b/tests/input_spec.lua new file mode 100644 index 0000000..eba1e95 --- /dev/null +++ b/tests/input_spec.lua @@ -0,0 +1,101 @@ +describe("Input", function() + local input = require "input" + input.setup() + + ---@param keys string + local function feedkeys(keys) + vim.api.nvim_feedkeys(vim.keycode(keys), "xt", false) + end + + local result = nil + + before_each(function() + result = nil + end) + + after_each(function() + for _, winid in ipairs(vim.api.nvim_list_wins()) do + if vim.api.nvim_win_get_config(winid).relative ~= "" then + vim.api.nvim_win_close(winid, true) + end + end + end) + + it("should display prompt icon and default content", function() + local config = require "input.config" + + vim.ui.input({ prompt = "Enter value:", default = "default_content" }, function() end) + + local bufnr = vim.api.nvim_get_current_buf() + local prompt = vim.fn.prompt_getprompt(bufnr) + local content = vim.fn.prompt_getinput(bufnr) + + assert.equal((" %s "):format(config.icon), prompt) + assert.equal("default_content", content) + end) + + it("should accept new content with in insert mode", function() + vim.ui.input({ prompt = "Enter value:" }, function(content) + result = content + end) + + feedkeys "inew_content" + + assert.equal("new_content", result) + end) + + it("should accept new content with in normal mode", function() + vim.ui.input({ prompt = "Enter value:" }, function(content) + result = content + end) + + feedkeys "inew_content" + + assert.equal("new_content", result) + end) + + it("should abort with in insert mode", function() + vim.ui.input({ prompt = "Enter value:" }, function(content) + result = content + end) + + local winid = vim.api.nvim_get_current_win() + + assert.is_true(vim.api.nvim_win_is_valid(winid)) + + feedkeys "i" + + assert.equal(nil, result) + assert.is_false(vim.api.nvim_win_is_valid(winid)) + end) + + it("should abort with q in normal mode", function() + vim.ui.input({ prompt = "Enter value:" }, function(content) + result = content + end) + + local winid = vim.api.nvim_get_current_win() + + assert.is_true(vim.api.nvim_win_is_valid(winid)) + + feedkeys "q" + + assert.equal(nil, result) + assert.is_false(vim.api.nvim_win_is_valid(winid)) + end) + + it("should abort with Escape in normal mode", function() + vim.ui.input({ prompt = "Enter value:" }, function(content) + result = content + end) + + local winid = vim.api.nvim_get_current_win() + + assert.is_true(vim.api.nvim_win_is_valid(winid)) + + feedkeys "" + + assert.equal(nil, result) + assert.is_false(vim.api.nvim_win_is_valid(winid)) + end) +end)