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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
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()
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_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("dte")
vim.wait(10)
same("e fuge piye poye", vim.api.nvim_get_current_line())
same("exclusive", vim.o.selection)
clever_f.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_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")
|