diff options
| author | Jędrzej Boczar <yendreij@gmail.com> | 2021-04-22 23:46:30 +0200 |
|---|---|---|
| committer | Kiyan <yazdani.kiyan@protonmail.com> | 2021-04-23 21:21:38 +0200 |
| commit | dbb1550aaf9223d85636b863468ba82d182c088b (patch) | |
| tree | 7c5d888034db464625d5372c12757f1846cbd651 /lua | |
| parent | tests/indent: move the run helper functions to top-level (diff) | |
| download | nvim-treesitter-dbb1550aaf9223d85636b863468ba82d182c088b.tar nvim-treesitter-dbb1550aaf9223d85636b863468ba82d182c088b.tar.gz nvim-treesitter-dbb1550aaf9223d85636b863468ba82d182c088b.tar.bz2 nvim-treesitter-dbb1550aaf9223d85636b863468ba82d182c088b.tar.lz nvim-treesitter-dbb1550aaf9223d85636b863468ba82d182c088b.tar.xz nvim-treesitter-dbb1550aaf9223d85636b863468ba82d182c088b.tar.zst nvim-treesitter-dbb1550aaf9223d85636b863468ba82d182c088b.zip | |
tests/indent: move common code out of main lua/ directory
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/nvim-treesitter/test_utils.lua | 125 |
1 files changed, 0 insertions, 125 deletions
diff --git a/lua/nvim-treesitter/test_utils.lua b/lua/nvim-treesitter/test_utils.lua deleted file mode 100644 index a84e0db1d..000000000 --- a/lua/nvim-treesitter/test_utils.lua +++ /dev/null @@ -1,125 +0,0 @@ -local M = {} - -local assert = require('luassert') -local say = require('say') - -local function same_indent(state, arguments) - local before = arguments[1] - local after = arguments[2] - - local ok = true - local errors = { before = {}, after = {} } - for line = 1,#before do - if before[line] ~= after[line] then - -- store the actual indentation length for each line - errors.before[line] = #string.match(before[line], '^%s*') - errors.after[line] = #string.match(after[line], '^%s*') - ok = false - end - end - - -- we will always use only a single argument, passing the other one in fmtargs - arguments.fmtargs = { { errors = errors, other = after } } - arguments.fmtargs[2] = { errors = errors, other = after } - - return ok -end - -local function format_indent(arg, fmtargs) - -- find minimal width if any line is longer - local width = 40 - for _, line in ipairs(fmtargs.other) do - width = #line > width and #line or width - end - - width = width + 3 - local header_fmt = '%8s %2s%-' .. tostring(width + 1) .. 's %s' - local fmt = '%8s %2s |%-' .. tostring(width) .. 's |%s' - - local output = {header_fmt:format('', '', 'Found:', 'Expected:')} - - for i, line in ipairs(arg) do - if fmtargs.errors.before[i] then - local indents = string.format('%d vs %d', fmtargs.errors.after[i], fmtargs.errors.before[i]) - table.insert(output, fmt:format(indents, '=>', fmtargs.other[i], line)) - else - table.insert(output, fmt:format('', '', fmtargs.other[i], line)) - end - end - - return table.concat(output, '\n') -end - -say:set_namespace('en') -say:set('assertion.same_indent.positive', 'Incorrect indentation\n%s') -say:set('assertion.same_indent.negative', 'Incorrect indentation\n%s') -assert:register('assertion', 'same_indent', same_indent, - 'assertion.same_indent.positive', 'assert.same_indent.negative') - --- Custom assertion better suited for indentation diffs -local function compare_indent(before, after) - assert:add_formatter(format_indent) - assert.is.same_indent(before, after) - assert:remove_formatter(format_indent) -end - -function M.set_buf_indent_opts(opts) - 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.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 before = vim.api.nvim_buf_get_lines(0, 0, -1, true) - - assert.are.same('nvim_treesitter#indent()', vim.bo.indentexpr) - M.set_buf_indent_opts(opts) - - -- 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!' - - 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) - - compare_indent(before, after) -end - --- Open a file, use `normal o` to insert a new line and compare results --- @param file path to the initial file --- @param spec a table with keys: --- on_line: line on which `normal o` is executed --- text: text inserted in the new line --- indent: expected indent before the inserted text (string or int) --- @param opts buffer options passed to M.set_buf_indent_opts -function M.indent_new_line(file, spec, opts) - local before, after = M.run_indent_test(file, function() - -- move to the line and input the new one - vim.cmd(string.format('normal! %dG', spec.on_line)) - vim.cmd(string.format('normal! o%s', spec.text)) - end, opts) - - local indent = type(spec.indent) == 'string' and spec.indent or string.rep(' ', spec.indent) - table.insert(before, spec.on_line + 1, indent .. spec.text) - - compare_indent(before, after) -end - -return M |
