mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-01 19:17:02 -04:00
tests/indent: refactor indent test runner and auto-discover language test files
This commit is contained in:
parent
db1b6dc1cb
commit
77c97d0f8b
4 changed files with 66 additions and 64 deletions
|
|
@ -3,20 +3,20 @@ local M = {}
|
|||
local assert = require('luassert')
|
||||
|
||||
function M.set_buf_indent_opts(opts)
|
||||
local optnames = {'tabstop', 'shiftwidth', 'softtabstop', 'expandtab'}
|
||||
for _, opt in ipairs(optnames) do
|
||||
if opts[opt] ~= nil then
|
||||
vim.bo[opt] = opts[opt]
|
||||
end
|
||||
local optnames = {'tabstop', 'shiftwidth', 'softtabstop', 'expandtab', 'filetype'}
|
||||
for _, opt in ipairs(optnames) do
|
||||
if opts[opt] ~= nil then
|
||||
vim.bo[opt] = opts[opt]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function M.indent_whole_file(file, opts)
|
||||
function M.run_indent_test(file, runner, opts)
|
||||
assert.are.same(1, vim.fn.filereadable(file))
|
||||
|
||||
-- load reference file
|
||||
vim.cmd(string.format('edit %s', file))
|
||||
local reference = vim.api.nvim_buf_get_lines(0, 0, -1, true)
|
||||
local before = vim.api.nvim_buf_get_lines(0, 0, -1, true)
|
||||
|
||||
-- FIXME: why this is not set automatically?
|
||||
vim.bo.indentexpr = 'nvim_treesitter#indent()'
|
||||
|
|
@ -24,15 +24,24 @@ function M.indent_whole_file(file, opts)
|
|||
|
||||
M.set_buf_indent_opts(opts)
|
||||
|
||||
-- indent the whole file
|
||||
vim.cmd 'silent normal gg=G'
|
||||
local indented = vim.api.nvim_buf_get_lines(0, 0, -1, true)
|
||||
-- perform the test
|
||||
runner()
|
||||
|
||||
-- get file content after the test
|
||||
local after = vim.api.nvim_buf_get_lines(0, 0, -1, true)
|
||||
|
||||
-- clear any changes to avoid 'No write since last change (add ! to override)'
|
||||
vim.cmd 'edit!'
|
||||
|
||||
-- compare before and after
|
||||
assert.are.same(reference, indented)
|
||||
return before, after
|
||||
end
|
||||
|
||||
function M.indent_whole_file(file, opts)
|
||||
local before, after = M.run_indent_test(file, function()
|
||||
vim.cmd 'silent normal gg=G'
|
||||
end, opts)
|
||||
|
||||
assert.are.same(before, after)
|
||||
end
|
||||
|
||||
return M
|
||||
|
|
|
|||
|
|
@ -1,18 +1,18 @@
|
|||
local whole_file = require('nvim-treesitter.test_utils').indent_whole_file
|
||||
local scan_dir = require('plenary.scandir').scan_dir
|
||||
|
||||
describe('indent C', function()
|
||||
local files = {
|
||||
'basic.c',
|
||||
'no_braces.c',
|
||||
}
|
||||
for _, file in ipairs(files) do
|
||||
it(file, function()
|
||||
whole_file('lua/tests/indent/c/' .. file, {
|
||||
tabstop = 4,
|
||||
shiftwidth = 4,
|
||||
softtabstop = 0,
|
||||
expandtab = true,
|
||||
})
|
||||
end)
|
||||
end
|
||||
describe('indent C:', function()
|
||||
describe('whole file:', function()
|
||||
local files = scan_dir('lua/tests/indent/c');
|
||||
for _, file in ipairs(files) do
|
||||
it(vim.fn.fnamemodify(file, ':t'), function()
|
||||
whole_file(file, {
|
||||
tabstop = 4,
|
||||
shiftwidth = 4,
|
||||
softtabstop = 0,
|
||||
expandtab = true,
|
||||
})
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
|
|
|||
|
|
@ -1,26 +1,18 @@
|
|||
local whole_file = require('nvim-treesitter.test_utils').indent_whole_file
|
||||
local scan_dir = require('plenary.scandir').scan_dir
|
||||
|
||||
describe('indent python', function()
|
||||
local files = {
|
||||
'aligned_indent.py',
|
||||
'basic_blocks.py',
|
||||
'basic_collections.py',
|
||||
'branches.py',
|
||||
'comprehensions.py',
|
||||
'control_flow.py',
|
||||
'hanging_indent.py',
|
||||
'join_lines.py',
|
||||
'nested_collections.py',
|
||||
'strings.py',
|
||||
}
|
||||
for _, file in ipairs(files) do
|
||||
it(file, function()
|
||||
whole_file('lua/tests/indent/python/' .. file, {
|
||||
tabstop = 4,
|
||||
shiftwidth = 4,
|
||||
softtabstop = 0,
|
||||
expandtab = true,
|
||||
})
|
||||
end)
|
||||
end
|
||||
describe('indent Python:', function()
|
||||
describe('whole file:', function()
|
||||
local files = scan_dir('lua/tests/indent/python');
|
||||
for _, file in ipairs(files) do
|
||||
it(vim.fn.fnamemodify(file, ':t'), function()
|
||||
whole_file(file, {
|
||||
tabstop = 4,
|
||||
shiftwidth = 4,
|
||||
softtabstop = 0,
|
||||
expandtab = true,
|
||||
})
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
|
|
|||
|
|
@ -1,17 +1,18 @@
|
|||
local whole_file = require('nvim-treesitter.test_utils').indent_whole_file
|
||||
local scan_dir = require('plenary.scandir').scan_dir
|
||||
|
||||
describe('indent rust', function()
|
||||
local files = {
|
||||
'basic.rs',
|
||||
}
|
||||
for _, file in ipairs(files) do
|
||||
it(file, function()
|
||||
whole_file('lua/tests/indent/rust/' .. file, {
|
||||
tabstop = 4,
|
||||
shiftwidth = 4,
|
||||
softtabstop = 0,
|
||||
expandtab = true,
|
||||
})
|
||||
end)
|
||||
end
|
||||
describe('indent Rust:', function()
|
||||
describe('whole file:', function()
|
||||
local files = scan_dir('lua/tests/indent/rust');
|
||||
for _, file in ipairs(files) do
|
||||
it(vim.fn.fnamemodify(file, ':t'), function()
|
||||
whole_file(file, {
|
||||
tabstop = 4,
|
||||
shiftwidth = 4,
|
||||
softtabstop = 0,
|
||||
expandtab = true,
|
||||
})
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue