summaryrefslogtreecommitdiff
path: root/tests/plugin_smoke.lua
blob: c4224905544e8fa3b215b309dd8930c7c0835868 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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_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")