Files
neovim/test/functional/treesitter/util_spec.lua
Justin M. Keyes 6d8c8b18d5 test(harness): migrate away from magic globals
Problem:
The magic globals `it`, `describe`, etc., are more trouble than they are
worth.

- Hooking into `after_each` requires `getfenv()` hacks.
- They confuse luals/emmylua, because the top-level `.luarc.json` isn't
  merged with `test/.luarc.json` (apparently a luals limitation?)
- They totally defeat discoverability because the user just has to
  "know" about the various magic symbols.

So they harm DX, which means they serve no purpose at all.

Solution:
- Expose the test API from `testutil`, so tests can call `t.it()`,
  `t.describe()`, etc., in the conventional way.
- Drop `getfenv()` hacks.
- Drop the `setfenv()` injection in `load_chunk`.
- Drop `test/_meta.lua`.
2026-07-21 13:22:39 +02:00

52 lines
1.6 KiB
Lua

local t = require('test.testutil')
local n = require('test.functional.testnvim')()
local describe, it, before_each = t.describe, t.it, t.before_each
local clear = n.clear
local insert = n.insert
local eq = t.eq
local exec_lua = n.exec_lua
before_each(clear)
describe('treesitter utils', function()
it('can find an ancestor', function()
insert([[
int main() {
int x = 3;
}]])
exec_lua(function()
local parser = vim.treesitter.get_parser(0, 'c')
local tree = parser:parse()[1]
local root = tree:root()
_G.ancestor = assert(root:child(0))
_G.child = assert(_G.ancestor:named_child(1))
_G.child_sibling = assert(_G.ancestor:named_child(2))
_G.grandchild = assert(_G.child:named_child(0))
end)
eq(true, exec_lua('return vim.treesitter.is_ancestor(_G.ancestor, _G.child)'))
eq(true, exec_lua('return vim.treesitter.is_ancestor(_G.ancestor, _G.grandchild)'))
eq(false, exec_lua('return vim.treesitter.is_ancestor(_G.child, _G.ancestor)'))
eq(false, exec_lua('return vim.treesitter.is_ancestor(_G.child, _G.child_sibling)'))
end)
it('can detect if a position is contained in a node', function()
exec_lua(function()
_G.node = {
range = function()
return 0, 4, 0, 8
end,
}
end)
eq(false, exec_lua('return vim.treesitter.is_in_node_range(node, 0, 3)'))
for i = 4, 7 do
eq(true, exec_lua('return vim.treesitter.is_in_node_range(node, 0, ...)', i))
end
-- End column exclusive
eq(false, exec_lua('return vim.treesitter.is_in_node_range(node, 0, 8)'))
end)
end)