Skip to content

Commit 64a9038

Browse files
committed
test: fix tests
1 parent 026d153 commit 64a9038

File tree

6 files changed

+48
-45
lines changed

6 files changed

+48
-45
lines changed

Makefile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ watch:
1515
test:
1616
@REGEXPLAINER_DEBOUNCE=false \
1717
nvim \
18-
--clean \
19-
--headless \
18+
--headless \
2019
--noplugin \
2120
-u tests/mininit.lua \
2221
-c "lua require'plenary.test_harness'.test_directory('tests/regexplainer/', {minimal_init='tests/mininit.lua',sequential=true})"\

lua/regexplainer.lua

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ local local_config = vim.tbl_deep_extend('keep', default_config, {})
7878
--
7979
local function show(options)
8080
options = vim.tbl_deep_extend('force', local_config, options or {})
81-
local node, error = tree.get_regexp_pattern_at_cursor(options)
81+
local node, error = tree.get_regexp_pattern_at_cursor()
8282

8383
if error and options.debug then
8484
utils.notify('Rexexplainer: ' .. error, 'debug')
@@ -101,7 +101,6 @@ local function show(options)
101101
local buffer = Buffers.get_buffer(options)
102102

103103
if not buffer and options.debug then
104-
print('no buffer')
105104
renderer = require'regexplainer.renderers.debug'
106105
end
107106

lua/regexplainer/buffers/init.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ end
108108
--- Hide the last-opened Regexplainer buffer
109109
--
110110
function M.hide_last()
111-
M.kill_buffer(M.get_all_buffers())
111+
M.kill_buffer(M.get_last_buffer())
112112
end
113113

114114
--- Hide all known Regexplainer buffers

lua/regexplainer/utils/treesitter.lua

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -157,27 +157,22 @@ end
157157
---@return any, string|nil
158158
--
159159
function M.get_regexp_pattern_at_cursor()
160-
local filetype = vim.bo[0].ft
161-
local lang = vim.treesitter.language.get_lang(filetype);
162-
local root_lang_tree = vim.treesitter.get_parser(0, lang)
160+
local lang_tree = vim.treesitter.get_parser(0, 'regex')
163161
local query = vim.treesitter.query.get('regex', 'regexplainer')
164-
if not query then
165-
return nil, 'no regex query'
166-
end
167-
local cursor_range = vim.api.nvim_win_get_cursor(0)
168-
local cursor_row, cursor_col = unpack(cursor_range)
169-
local cursor_node = get_node_at_cursor(root_lang_tree)
170-
local cursor_tree = cursor_node and cursor_node:tree()
171-
local cursor_root = cursor_tree and cursor_tree:root()
172-
if cursor_root then
173-
for id, node in query:iter_captures(cursor_root, 0, cursor_row - 1, cursor_row) do
174-
local name = query.captures[id] -- name of the capture in the query
175-
if name == 'regexplainer.pattern' and is_in_node_range(node, cursor_row - 1, cursor_col) then
176-
return node, nil
162+
if query then
163+
local cursor_range = vim.api.nvim_win_get_cursor(0)
164+
local cursor_row, cursor_col = unpack(cursor_range)
165+
local cursor_node = get_node_at_cursor(lang_tree)
166+
if cursor_node then
167+
for id, node in query:iter_captures(cursor_node:tree():root(), 0) do
168+
local name = query.captures[id] -- name of the capture in the query
169+
if name == 'regexplainer.pattern' and is_in_node_range(node, cursor_row - 1, cursor_col) then
170+
return node, nil
171+
end
177172
end
178173
end
179174
end
180-
return nil, nil
175+
return nil, 'no node'
181176
end
182177

183178
return M

tests/helpers/util.lua

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ M.register_name = 'test'
1717

1818
local parse_query = vim.treesitter.query.parse or vim.treesitter.query.parse_query
1919
local query_js = parse_query('javascript', [[
20-
(comment) @comment
20+
(comment) @test.comment
2121
(expression_statement
22-
(regex (regex_pattern) @test.pattern)) @test.expr
22+
(regex pattern: (regex_pattern) @test.pattern)) @test.expr
2323
]])
2424

2525
local function get_expected_from_jsdoc(comment)
@@ -41,17 +41,27 @@ local function get_cases()
4141
local parser = parsers.get_parser(0)
4242
local tree = parser:parse()[1]
4343

44+
local row
45+
local expected
46+
local pattern
4447
for id, node in query_js:iter_captures(tree:root(), 0) do
4548
local name = query_js.captures[id] -- name of the capture in the query
46-
local prev = node:prev_sibling()
47-
if name == 'test.expr' and prev and prev:type() == 'test.comment' then
48-
local text = get_node_text(node:named_child('pattern'), 0)
49-
local expected = get_expected_from_jsdoc(get_node_text(prev, 0))
49+
if name == 'test.comment' then
50+
local jsdoc_text = get_node_text(node, 0);
51+
expected = get_expected_from_jsdoc(jsdoc_text)
52+
elseif name == 'test.pattern' then
53+
pattern = get_node_text(node, 0)
54+
row = node:start()
55+
end
56+
if row and expected and pattern then
5057
table.insert(results, {
51-
text = text,
52-
example = expected,
53-
row = node:start(),
58+
pattern = pattern,
59+
expected = expected,
60+
row = row,
5461
})
62+
pattern = nil
63+
expected = nil
64+
row = nil
5565
end
5666
end
5767

@@ -103,13 +113,16 @@ function M.clear_test_state()
103113
end
104114

105115
function M.assert_string(regexp, expected, message)
106-
vim.cmd[[new]]
107-
vim.opt_local.filetype = 'javascript';
108-
vim.api.nvim_buf_set_lines(0, 0, 0, false, { regexp })
116+
local newbuf = vim.api.nvim_create_buf(true, true)
117+
118+
vim.opt_local.filetype = 'javascript'
119+
vim.api.nvim_set_current_line(regexp)
109120

110-
local buffer = M.show_and_get_regexplainer_buffer()
121+
local buffer
111122
repeat
112-
vim.uv.sleep(500)
123+
vim.uv.sleep(10)
124+
local row, col = unpack(vim.api.nvim_win_get_cursor(0));
125+
vim.api.nvim_win_set_cursor(0, {row, col + 1})
113126
buffer = M.show_and_get_regexplainer_buffer()
114127
until buffer
115128

@@ -120,10 +133,11 @@ function M.assert_string(regexp, expected, message)
120133
false
121134
), '\n')
122135

123-
regexplainer.hide()
124136

125137
-- Cleanup any remaining buffers
126-
vim.api.nvim_buf_delete(0, { force = true })
138+
vim.api.nvim_buf_delete(newbuf, { force = true })
139+
140+
regexplainer.hide()
127141

128142
return assert.are.same(expected, text, message)
129143
end
@@ -142,10 +156,7 @@ function M.show_and_get_regexplainer_buffer()
142156
end
143157
end
144158
end
145-
regexplainer.show()
146-
local row, col = unpack(vim.api.nvim_win_get_cursor(0));
147-
vim.api.nvim_win_set_cursor(0, {row, col + 1})
148-
vim.uv.sleep(500)
159+
regexplainer.show({debug = true})
149160
return buffers.get_last_buffer()
150161
end
151162

tests/regexplainer/nvim-regexplainer_spec.lua

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,12 @@ describe("Regexplainer", function()
2929
local files = vim.tbl_filter(file_filter, all_files)
3030
for _, file in ipairs(files) do
3131
local category = file:gsub('tests/fixtures/narrative/%d+ (.*)%.js', '%1')
32-
if category ~= 'Simple Patterns' then return end
3332
describe(category, function()
3433
before_each(setup_narrative)
3534
for result in Utils.iter_regexes_with_descriptions(file) do
3635
if (row_filter(result.row)) then
37-
it(result.text, function()
38-
Utils.assert_string(result.text, result.example, file .. ':' .. result.row)
36+
it(result.pattern, function()
37+
Utils.assert_string(result.pattern, result.expected, file .. ':' .. result.row)
3938
end)
4039
end
4140
end

0 commit comments

Comments
 (0)