Skip to content

Commit 2a53d9e

Browse files
committed
text(api): ensure the test do not abuse the private api.
1 parent ba27e82 commit 2a53d9e

26 files changed

Lines changed: 423 additions & 458 deletions

PICKERS.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -886,12 +886,14 @@ helptags_picker.open_helptags_picker({
886886

887887
### Manpages
888888

889-
Lists manpages. Entries are collected from `apropos -k .` (fallback: `man -k .`) and normalized to `name(section)`.
889+
Lists man pages. Entries are collected from `apropos -k .` (fallback: `man -k .`) and normalized to `name(section)`. The user is allowed
890+
to provide a list of additional customized command arguments to pass down to the executable (man or apropos)
890891

891892
```lua
892893
local manpages_picker = require("fuzzy.pickers.manpages")
893894

894895
manpages_picker.open_manpages_picker({
896+
command_args = { "-k", "." }
895897
})
896898
```
897899

@@ -923,8 +925,8 @@ Options and behavior:
923925

924926
## Tags
925927

926-
Tags pickers rely on ctags output and are meant for code navigation. They keep content small to avoid storing huge tag
927-
lines in memory.
928+
Tags pickers rely on `ctags` like output and are meant for code navigation. They keep content small to avoid storing huge tag lines in
929+
memory.
928930

929931
### Tags
930932

README.md

Lines changed: 137 additions & 137 deletions
Large diffs are not rendered by default.

lua/fuzzy/pickers/manpages.lua

Lines changed: 11 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,65 +3,34 @@ local Select = require("fuzzy.select")
33
local util = require("fuzzy.pickers.util")
44

55
--- @class ManpagesPickerOptions
6+
--- @field command_args? string[] Override the arguments passed to the command
67

78
local M = {}
89

9-
local function parse_manpage_entries(raw_output)
10-
local entries = {}
11-
local entry_map = {}
12-
for line in tostring(raw_output or ""):gmatch("[^\r\n]+") do
13-
local name, section = line:match("^%s*([^%s%(,]+)[^%(]*%(([^%)]+)%)")
14-
local entry = nil
15-
if name and section then
16-
entry = string.format("%s(%s)", name, section)
17-
else
18-
entry = line:match("^%s*(%S+)")
19-
end
20-
if entry and #entry > 0 and not entry_map[entry] then
21-
entry_map[entry] = true
22-
entries[#entries + 1] = entry
23-
end
10+
local function parse_manpage_entry(line)
11+
local name, section = tostring(line or ""):match("^%s*([^%s%(,]+)[^%(]*%(([^%)]+)%)")
12+
if name and section then
13+
return string.format("%s(%s)", name, section)
2414
end
25-
return entries
26-
end
27-
28-
local function collect_manpage_entries()
29-
local command_name = util.pick_first_command({ "apropos", "man" })
30-
if not command_name then
31-
return {}
32-
end
33-
local result = vim.system({ command_name, "-k", "." }, {
34-
text = true,
35-
}):wait()
36-
if not result or result.code ~= 0 then
37-
return {}
38-
end
39-
return parse_manpage_entries(result.stdout)
15+
return tostring(line or ""):match("^%s*(%S+)")
4016
end
4117

4218
--- Open Manpages picker.
4319
--- @param opts ManpagesPickerOptions|nil Picker options for this picker
4420
--- @return Picker
4521
function M.open_manpages_picker(opts)
22+
local cmd = util.pick_first_command({ "apropos", "man" })
4623
opts = util.merge_picker_options({
47-
preview = false,
24+
command_args = { "-k", "." }
4825
}, opts)
4926

5027
local picker = Picker.new(vim.tbl_extend("force", {
51-
content = function(stream, args)
52-
for _, manpage in ipairs(args.items) do
53-
stream(manpage)
54-
end
55-
stream(nil)
56-
end,
28+
content = assert(cmd),
5729
headers = util.build_picker_headers("Manpages", opts),
5830
context = {
59-
args = function(_)
60-
return {
61-
items = collect_manpage_entries(),
62-
}
63-
end,
31+
args = opts.command_args,
6432
},
33+
stream_map = parse_manpage_entry,
6534
preview = false,
6635
actions = {
6736
["<cr>"] = Select.action(Select.default_select, Select.first(function(entry)

script/test_utils.lua

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,25 @@ function M.type_query(picker, text)
153153
end
154154
end
155155

156+
function M.trigger_action(picker, keys)
157+
M.assert_ok(picker and picker.select, "picker not available")
158+
local select = picker.select
159+
local opts = select:options() or {}
160+
if opts.mappings and opts.mappings[keys] then
161+
return opts.mappings[keys](select)
162+
end
163+
local win = select and select.prompt_window
164+
if not win or not vim.api.nvim_win_is_valid(win) then
165+
return
166+
end
167+
local term_codes = vim.api.nvim_replace_termcodes(
168+
assert(keys), false, false, true
169+
)
170+
vim.api.nvim_win_call(win, function()
171+
vim.api.nvim_feedkeys(term_codes, "i", false)
172+
end)
173+
end
174+
156175
function M.get_query(picker)
157176
M.assert_ok(picker and picker.select, "picker not available")
158177
return picker.select:query()
@@ -200,6 +219,12 @@ function M.wait_for(fn, timeout)
200219
return ok
201220
end
202221

222+
function M.wait_for_picker_closed(picker, timeout)
223+
return M.wait_for(function()
224+
return not picker:isopen()
225+
end, timeout or 1500)
226+
end
227+
203228
function M.wait_for_list_extmarks(picker, namespace, timeout)
204229
return M.wait_for(function()
205230
local extmarks = M.get_list_extmarks(picker, namespace)

tests/btags_spec.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ function M.run()
5050
helpers.wait_for_stream(picker)
5151
helpers.wait_for_list(picker)
5252
helpers.wait_for_entries(picker)
53-
local action = picker.select._options.mappings["<cr>"]
53+
local action = picker.select:options().mappings["<cr>"]
5454
action(picker.select)
5555
helpers.assert_ok(#calls > 0, "tag cmd")
5656
helpers.close_picker(picker)

tests/colorscheme_spec.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ function M.run()
3535
helpers.wait_for_stream(picker)
3636
helpers.wait_for_list(picker)
3737
helpers.wait_for_entries(picker)
38-
local action = picker.select._options.mappings["<cr>"]
38+
local action = picker.select:options().mappings["<cr>"]
3939
action(picker.select)
4040
local found = false
4141
for _, call in ipairs(calls) do

tests/command_history_spec.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ function M.run()
4545
helpers.wait_for_stream(picker)
4646
helpers.wait_for_list(picker)
4747
helpers.wait_for_entries(picker)
48-
local action = picker.select._options.mappings["<cr>"]
48+
local action = picker.select:options().mappings["<cr>"]
4949
action(picker.select)
5050
local found = false
5151
for _, call in ipairs(calls) do

tests/commands_spec.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ function M.run()
4545
helpers.wait_for_list(picker)
4646
helpers.wait_for_entries(picker)
4747
helpers.wait_for_line_contains(picker, "edit")
48-
local action = picker.select._options.mappings["<cr>"]
48+
local action = picker.select:options().mappings["<cr>"]
4949
action(picker.select)
5050
local found = false
5151
for _, call in ipairs(calls) do

tests/files_spec.lua

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ function M.run()
101101
helpers.wait_for_line_contains(picker, "alpha.txt")
102102
helpers.wait_for_line_contains(picker, "beta.txt")
103103
helpers.wait_for_stream(picker)
104-
local cancel = picker:_cancel_prompt()
105-
cancel(picker.select)
104+
helpers.trigger_action(picker, "<esc>")
105+
helpers.wait_for_picker_closed(picker)
106106

107107
picker:open()
108108
helpers.wait_for_stream(picker)
@@ -145,8 +145,8 @@ function M.run()
145145
return tick_state.tick ~= before_version
146146
end)
147147

148-
local cancel_after = picker:_cancel_prompt()
149-
cancel_after(picker.select)
148+
helpers.trigger_action(picker, "<esc>")
149+
helpers.wait_for_picker_closed(picker)
150150
picker:open()
151151
helpers.wait_for_stream(picker)
152152
helpers.wait_for_line_contains(picker, "gamma.txt")
@@ -188,8 +188,8 @@ function M.run()
188188
helpers.wait_for_line_contains(picker, "alpha.txt")
189189
helpers.wait_for_line_contains(picker, "beta.txt")
190190
helpers.wait_for_stream(picker)
191-
local cancel = picker:_cancel_prompt()
192-
cancel(picker.select)
191+
helpers.trigger_action(picker, "<esc>")
192+
helpers.wait_for_picker_closed(picker)
193193

194194
picker:open()
195195
helpers.wait_for_stream(picker)
@@ -206,8 +206,8 @@ function M.run()
206206
assert(vim.uv.fs_rename(beta_path, delta_path))
207207
assert(vim.uv.fs_unlink(alpha_path))
208208

209-
local cancel_after = picker:_cancel_prompt()
210-
cancel_after(picker.select)
209+
helpers.trigger_action(picker, "<esc>")
210+
helpers.wait_for_picker_closed(picker)
211211
picker:open()
212212
helpers.wait_for_stream(picker)
213213
helpers.wait_for_line_contains(picker, "gamma.txt")

tests/grep_spec.lua

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ function M.run()
9393
helpers.wait_for_list(picker)
9494
helpers.wait_for_line_contains(picker, "middle line")
9595
helpers.wait_for_stream(picker)
96-
local cancel = picker:_cancel_prompt()
97-
cancel(picker.select)
96+
helpers.trigger_action(picker, "<esc>")
97+
helpers.wait_for_picker_closed(picker)
9898

9999
picker:open()
100100
helpers.type_query(picker, "middle")
@@ -130,8 +130,8 @@ function M.run()
130130
return tick_state.tick ~= before_version
131131
end, 1500)
132132

133-
local cancel_after = picker:_cancel_prompt()
134-
cancel_after(picker.select)
133+
helpers.trigger_action(picker, "<esc>")
134+
helpers.wait_for_picker_closed(picker)
135135

136136
picker:open()
137137
helpers.type_query(picker, "needle")
@@ -182,8 +182,8 @@ function M.run()
182182
helpers.wait_for_list(picker)
183183
helpers.wait_for_line_contains(picker, "middle line")
184184
helpers.wait_for_stream(picker)
185-
local cancel = picker:_cancel_prompt()
186-
cancel(picker.select)
185+
helpers.trigger_action(picker, "<esc>")
186+
helpers.wait_for_picker_closed(picker)
187187

188188
picker:open()
189189
helpers.type_query(picker, "middle")
@@ -199,8 +199,8 @@ function M.run()
199199
"last line",
200200
})
201201

202-
local cancel_after = picker:_cancel_prompt()
203-
cancel_after(picker.select)
202+
helpers.trigger_action(picker, "<esc>")
203+
helpers.wait_for_picker_closed(picker)
204204
picker:open()
205205
helpers.type_query(picker, "needle")
206206
helpers.wait_for_stream(picker)

0 commit comments

Comments
 (0)