diff options
Diffstat (limited to 'tests/plugin_smoke.lua')
| -rw-r--r-- | tests/plugin_smoke.lua | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/tests/plugin_smoke.lua b/tests/plugin_smoke.lua new file mode 100644 index 0000000..3028723 --- /dev/null +++ b/tests/plugin_smoke.lua @@ -0,0 +1,104 @@ +local script = debug.getinfo(1, "S").source:sub(2) +local root = script:match("^(.*)/tests/plugin_smoke%.lua$") or "." +vim.opt.runtimepath:prepend(root) + +local function same(expected, actual, message) + if expected ~= actual then + error((message or "values differ") + .. ": expected " .. tostring(expected) + .. ", got " .. tostring(actual), 2) + end +end + +local function truthy(value, message) + if not value then + error(message or "value must be true", 2) + end +end + +local function feed(keys) + vim.api.nvim_feedkeys(vim.keycode(keys), "xt", false) + vim.cmd("redraw") +end + +vim.g.clever_f_mark_cursor = 0 +vim.g.clever_f_mark_char = 0 +vim.g.clever_f_mark_direct = 0 +vim.g.clever_f_hide_cursor_on_cmdline = 0 +vim.g.clever_f_clean_labels_eagerly = 0 +vim.api.nvim_buf_set_lines(0, 0, -1, true, { "ababa" }) +vim.api.nvim_win_set_cursor(0, { 1, 0 }) + +vim.cmd.runtime("plugin/clever_f.lua") +same(1, vim.g.loaded_clever_f_lua) +local clever_f = require("clever_f") +local first_root = clever_f.root() +truthy(first_root ~= nil) + +for _, mode in ipairs({ "n", "x", "o" }) do + for _, lhs in ipairs({ "f", "F", "t", "T" }) do + local mapping = vim.fn.maparg(lhs, mode, false, true) + same(1, mapping.silent, mode .. lhs) + same(1, mapping.noremap, mode .. lhs) + end +end + +feed("2fb") +same(1, vim.api.nvim_win_get_cursor(0)[1]) +same(3, vim.api.nvim_win_get_cursor(0)[2]) +same( + 4, + clever_f.state():to_table().contexts.n.previous_landing.byte_column +) +clever_f.Reset() + +vim.api.nvim_buf_set_lines(0, 0, -1, true, { "ababa" }) +vim.api.nvim_win_set_cursor(0, { 1, 0 }) +feed("vfb") +same("v", vim.api.nvim_get_mode().mode) +same(1, vim.api.nvim_win_get_cursor(0)[2]) +feed("<Esc>") +clever_f.Reset() + +vim.api.nvim_buf_set_lines(0, 0, -1, true, { "hoge fuge piye poye" }) +vim.api.nvim_win_set_cursor(0, { 1, 0 }) +feed("dfe") +same(" fuge piye poye", vim.api.nvim_get_current_line()) +truthy(clever_f.root():host():dot_repeat_payload() ~= nil) +feed(".") +same(" piye poye", vim.api.nvim_get_current_line()) +feed(".") +same(" poye", vim.api.nvim_get_current_line()) +feed(".") +same("", vim.api.nvim_get_current_line()) + +local ok, diagnostic = pcall(clever_f.invoke_descriptor, "X") +same(false, ok) +same("clever-f: Invalid mapping 'X'", diagnostic) + +vim.g.clever_f_mark_char = 1 +vim.g.clever_f_mark_char_color = "Search" +vim.api.nvim_exec_autocmds("ColorScheme", {}) +same( + "Search", + vim.api.nvim_get_hl(0, { name = "CleverFChar", link = true }).link +) + +for _, name in ipairs({ + "StartFindForward", + "StartFindBackward", + "StartTillForward", + "StartTillBackward", + "Reset", + "RepeatSameDirection", + "RepeatOppositeDirection", +}) do + same("function", type(clever_f[name]), name) +end +same("function", type(clever_f.invoke_descriptor)) +same("function", type(clever_f._diagnostic_full_reset)) + +vim.cmd.runtime("plugin/clever_f.lua") +same(first_root, clever_f.root()) + +io.stdout:write("Phase 15 plugin smoke: startup, mappings, actions, and dot passed\n") |
