summaryrefslogtreecommitdiff
path: root/tests/plugin_smoke.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tests/plugin_smoke.lua')
-rw-r--r--tests/plugin_smoke.lua104
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")