tests/indent: refactor indent test runner and auto-discover language test files

This commit is contained in:
Jędrzej Boczar 2021-04-17 22:45:42 +02:00 committed by Kiyan
parent db1b6dc1cb
commit 77c97d0f8b
4 changed files with 66 additions and 64 deletions

View file

@ -3,20 +3,20 @@ local M = {}
local assert = require('luassert') local assert = require('luassert')
function M.set_buf_indent_opts(opts) function M.set_buf_indent_opts(opts)
local optnames = {'tabstop', 'shiftwidth', 'softtabstop', 'expandtab'} local optnames = {'tabstop', 'shiftwidth', 'softtabstop', 'expandtab', 'filetype'}
for _, opt in ipairs(optnames) do for _, opt in ipairs(optnames) do
if opts[opt] ~= nil then if opts[opt] ~= nil then
vim.bo[opt] = opts[opt] vim.bo[opt] = opts[opt]
end
end end
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)) assert.are.same(1, vim.fn.filereadable(file))
-- load reference file -- load reference file
vim.cmd(string.format('edit %s', 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? -- FIXME: why this is not set automatically?
vim.bo.indentexpr = 'nvim_treesitter#indent()' vim.bo.indentexpr = 'nvim_treesitter#indent()'
@ -24,15 +24,24 @@ function M.indent_whole_file(file, opts)
M.set_buf_indent_opts(opts) M.set_buf_indent_opts(opts)
-- indent the whole file -- perform the test
vim.cmd 'silent normal gg=G' runner()
local indented = vim.api.nvim_buf_get_lines(0, 0, -1, true)
-- 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)' -- clear any changes to avoid 'No write since last change (add ! to override)'
vim.cmd 'edit!' vim.cmd 'edit!'
-- compare before and after return before, after
assert.are.same(reference, indented) 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 end
return M return M

View file

@ -1,18 +1,18 @@
local whole_file = require('nvim-treesitter.test_utils').indent_whole_file local whole_file = require('nvim-treesitter.test_utils').indent_whole_file
local scan_dir = require('plenary.scandir').scan_dir
describe('indent C', function() describe('indent C:', function()
local files = { describe('whole file:', function()
'basic.c', local files = scan_dir('lua/tests/indent/c');
'no_braces.c', for _, file in ipairs(files) do
} it(vim.fn.fnamemodify(file, ':t'), function()
for _, file in ipairs(files) do whole_file(file, {
it(file, function() tabstop = 4,
whole_file('lua/tests/indent/c/' .. file, { shiftwidth = 4,
tabstop = 4, softtabstop = 0,
shiftwidth = 4, expandtab = true,
softtabstop = 0, })
expandtab = true, end)
}) end
end) end)
end
end) end)

View file

@ -1,26 +1,18 @@
local whole_file = require('nvim-treesitter.test_utils').indent_whole_file local whole_file = require('nvim-treesitter.test_utils').indent_whole_file
local scan_dir = require('plenary.scandir').scan_dir
describe('indent python', function() describe('indent Python:', function()
local files = { describe('whole file:', function()
'aligned_indent.py', local files = scan_dir('lua/tests/indent/python');
'basic_blocks.py', for _, file in ipairs(files) do
'basic_collections.py', it(vim.fn.fnamemodify(file, ':t'), function()
'branches.py', whole_file(file, {
'comprehensions.py', tabstop = 4,
'control_flow.py', shiftwidth = 4,
'hanging_indent.py', softtabstop = 0,
'join_lines.py', expandtab = true,
'nested_collections.py', })
'strings.py', end)
} end
for _, file in ipairs(files) do end)
it(file, function()
whole_file('lua/tests/indent/python/' .. file, {
tabstop = 4,
shiftwidth = 4,
softtabstop = 0,
expandtab = true,
})
end)
end
end) end)

View file

@ -1,17 +1,18 @@
local whole_file = require('nvim-treesitter.test_utils').indent_whole_file local whole_file = require('nvim-treesitter.test_utils').indent_whole_file
local scan_dir = require('plenary.scandir').scan_dir
describe('indent rust', function() describe('indent Rust:', function()
local files = { describe('whole file:', function()
'basic.rs', local files = scan_dir('lua/tests/indent/rust');
} for _, file in ipairs(files) do
for _, file in ipairs(files) do it(vim.fn.fnamemodify(file, ':t'), function()
it(file, function() whole_file(file, {
whole_file('lua/tests/indent/rust/' .. file, { tabstop = 4,
tabstop = 4, shiftwidth = 4,
shiftwidth = 4, softtabstop = 0,
softtabstop = 0, expandtab = true,
expandtab = true, })
}) end)
end) end
end end)
end) end)