aboutsummaryrefslogtreecommitdiffstats
path: root/tests/indent/common.lua
diff options
context:
space:
mode:
authorStephan Seitz <stephan.seitz@fau.de>2021-11-20 15:14:56 +0100
committerStephan Seitz <stephan.seitz@fau.de>2021-11-24 17:29:55 +0100
commitc7634f16dee010d092cad867959a51962406fc62 (patch)
tree9e4747a585df28ff7239a85b099c22bddedb010b /tests/indent/common.lua
parentUpdate run_tests to be more scalable with more test folders added (diff)
downloadnvim-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.lua44
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