local script = debug.getinfo(1, "S").source:sub(2) local root = script:match("^(.*)/tests/plugin_smoke%.lua$") or "." vim.opt.runtimepath:prepend(root) local assertions = dofile(root .. "/tests/assertions.lua") local same = assertions.same local truthy = assertions.truthy local function feed(keys) vim.api.nvim_feedkeys(vim.keycode(keys), "xt", false) vim.cmd("redraw") end vim.g.clever_tee_mark_cursor = 0 vim.g.clever_tee_mark_char = 0 vim.g.clever_tee_mark_direct = 0 vim.g.clever_tee_hide_cursor_on_cmdline = 0 vim.g.clever_tee_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_tee.lua") same(1, vim.g.loaded_clever_tee_lua) local clever_tee = require("clever_tee") local first_root = clever_tee.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_tee.state():to_table().contexts.n.previous_landing.byte_column ) clever_tee.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("") clever_tee.Reset() local saved_selection = vim.o.selection vim.o.selection = "exclusive" 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") vim.wait(10) same(" fuge piye poye", vim.api.nvim_get_current_line()) same("exclusive", vim.o.selection) clever_tee.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("dte") vim.wait(10) same("e fuge piye poye", vim.api.nvim_get_current_line()) same("exclusive", vim.o.selection) clever_tee.Reset() vim.o.selection = saved_selection 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_tee.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_tee.invoke_descriptor, "X") same(false, ok) same("clever-tee: Invalid mapping 'X'", diagnostic) vim.g.clever_tee_mark_char = 1 vim.g.clever_tee_mark_char_color = "Search" vim.api.nvim_exec_autocmds("ColorScheme", {}) same( "Search", vim.api.nvim_get_hl(0, { name = "CleverTeeChar", link = true }).link ) for _, name in ipairs({ "StartFindForward", "StartFindBackward", "StartTillForward", "StartTillBackward", "Reset", "RepeatSameDirection", "RepeatOppositeDirection", }) do same("function", type(clever_tee[name]), name) end same("function", type(clever_tee.invoke_descriptor)) same("function", type(clever_tee._diagnostic_full_reset)) vim.cmd.runtime("plugin/clever_tee.lua") same(first_root, clever_tee.root()) io.stdout:write("Phase 15 plugin smoke: startup, mappings, actions, and dot passed\n")