diff options
| author | Stephan Seitz <stephan.seitz@fau.de> | 2021-11-20 15:14:56 +0100 |
|---|---|---|
| committer | Stephan Seitz <stephan.seitz@fau.de> | 2021-11-24 17:29:55 +0100 |
| commit | c7634f16dee010d092cad867959a51962406fc62 (patch) | |
| tree | 9e4747a585df28ff7239a85b099c22bddedb010b /tests/indent/common.lua | |
| parent | Update run_tests to be more scalable with more test folders added (diff) | |
| download | nvim-treesitter-c7634f16dee010d092cad867959a51962406fc62.tar nvim-treesitter-c7634f16dee010d092cad867959a51962406fc62.tar.gz nvim-treesitter-c7634f16dee010d092cad867959a51962406fc62.tar.bz2 nvim-treesitter-c7634f16dee010d092cad867959a51962406fc62.tar.lz nvim-treesitter-c7634f16dee010d092cad867959a51962406fc62.tar.xz nvim-treesitter-c7634f16dee010d092cad867959a51962406fc62.tar.zst nvim-treesitter-c7634f16dee010d092cad867959a51962406fc62.zip | |
Mark failing indent tests to add them to CI
Expected failures should be monitored so that we don't have regressions
and also remove failure marks when they are resolved.
Diffstat (limited to 'tests/indent/common.lua')
| -rw-r--r-- | tests/indent/common.lua | 44 |
1 files changed, 31 insertions, 13 deletions
diff --git a/tests/indent/common.lua b/tests/indent/common.lua index 10a03a9c3..054ffaacf 100644 --- a/tests/indent/common.lua +++ b/tests/indent/common.lua @@ -5,6 +5,8 @@ local say = require "say" local scan_dir = require("plenary.scandir").scan_dir local Path = require "plenary.path" +M.XFAIL = "xfail" + local function same_indent(state, arguments) local before = arguments[1] local after = arguments[2] @@ -13,9 +15,11 @@ local function same_indent(state, arguments) 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*") + if before[line] and 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*") + end ok = false end end @@ -28,6 +32,9 @@ local function same_indent(state, arguments) end local function format_indent(arg, fmtargs) + if not arg or not fmtargs then + return + end -- find minimal width if any line is longer local width = 40 for _, line in ipairs(fmtargs.other) do @@ -64,9 +71,14 @@ assert:register( ) -- Custom assertion better suited for indentation diffs -local function compare_indent(before, after) +local function compare_indent(before, after, xfail) assert:add_formatter(format_indent) - assert.is.same_indent(before, after) + if xfail then + io.stdout:write "Warning! Known failure of this test! Please help to fix it! " + assert.is_not.same_indent(before, after) + else + assert.is.same_indent(before, after) + end assert:remove_formatter(format_indent) end @@ -84,6 +96,7 @@ function M.run_indent_test(file, runner, opts) -- load reference file vim.cmd(string.format("edit %s", file)) + vim.bo.indentexpr = "nvim_treesitter#indent()" local before = vim.api.nvim_buf_get_lines(0, 0, -1, true) assert.are.same("nvim_treesitter#indent()", vim.bo.indentexpr) @@ -101,12 +114,12 @@ function M.run_indent_test(file, runner, opts) return before, after end -function M.indent_whole_file(file, opts) +function M.indent_whole_file(file, opts, xfail) local before, after = M.run_indent_test(file, function() vim.cmd "silent normal gg=G" end, opts) - compare_indent(before, after) + compare_indent(before, after, xfail) end -- Open a file, use `normal o` to insert a new line and compare results @@ -116,7 +129,7 @@ end -- text: text inserted in the new line -- indent: expected indent before the inserted text (string or int) -- @param opts buffer options passed to set_buf_indent_opts -function M.indent_new_line(file, spec, opts) +function M.indent_new_line(file, spec, opts, xfail) 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)) @@ -126,7 +139,7 @@ function M.indent_new_line(file, spec, 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) + compare_indent(before, after, xfail) end local Runner = {} @@ -144,7 +157,12 @@ function Runner:new(it, base_dir, buf_opts) return setmetatable(runner, self) end -function Runner:whole_file(dirs) +function Runner:whole_file(dirs, opts) + opts = opts or {} + local expected_failures = opts.expected_failures or {} + expected_failures = vim.tbl_map(function(f) + return Path:new(f):make_relative(self.base_dir.filename) + end, expected_failures) dirs = type(dirs) == "table" and dirs or { dirs } dirs = vim.tbl_map(function(dir) dir = self.base_dir / Path:new(dir) @@ -155,16 +173,16 @@ function Runner:whole_file(dirs) for _, file in ipairs(files) do local relpath = Path:new(file):make_relative(self.base_dir.filename) self.it(relpath, function() - M.indent_whole_file(file, self.buf_opts) + M.indent_whole_file(file, self.buf_opts, vim.tbl_contains(expected_failures, relpath)) end) end end -function Runner:new_line(file, spec, title) +function Runner:new_line(file, spec, title, xfail) title = title and title or tostring(spec.on_line) self.it(string.format("%s[%s]", file, title), function() local path = self.base_dir / file - M.indent_new_line(path.filename, spec, self.buf_opts) + M.indent_new_line(path.filename, spec, self.buf_opts, xfail) end) end |
