X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/0ee596c5c5e11fc79598407eaf22f83d279f7e9e..5a4872f466ebd76ddd532bdf2798554421c53df4:/.vim/bundle/ale/test/lua/ale_diagnostics_spec.lua diff --git a/.vim/bundle/ale/test/lua/ale_diagnostics_spec.lua b/.vim/bundle/ale/test/lua/ale_diagnostics_spec.lua new file mode 100644 index 00000000..ae2ad894 --- /dev/null +++ b/.vim/bundle/ale/test/lua/ale_diagnostics_spec.lua @@ -0,0 +1,232 @@ +local eq = assert.are.same +local diagnostics + +describe("ale.diagnostics.send", function() + local buffer_map + local signs_config + local diagnostic_set_calls + + setup(function() + _G.vim = { + api = { + nvim_buf_get_var = function(buffer, key) + local buffer_table = buffer_map[buffer] or {} + local value = buffer_table[key] + + if value == nil then + error(key .. " is missing") + end + + return value + end, + nvim_create_namespace = function() + return 42 + end, + }, + diagnostic = { + severity = {ERROR = 1, WARN = 2, INFO = 3}, + config = function() + return {signs = signs_config} + end, + set = function(namespace, bufnr, _diagnostics, opts) + table.insert(diagnostic_set_calls, { + namespace = namespace, + bufnr = bufnr, + diagnostics = _diagnostics, + opts = opts, + }) + end, + }, + tbl_extend = function(behavior, ...) + assert(behavior == "force", "We should only use `force`") + + local merged = {} + + for _, arg in ipairs({...}) do + for key, value in pairs(arg) do + merged[key] = value + end + end + + return merged + end, + g = {}, + } + + diagnostics = require("ale.diagnostics") + end) + + teardown(function() + _G.vim = nil + end) + + before_each(function() + buffer_map = {} + diagnostic_set_calls = {} + signs_config = false + _G.vim.g = {} + end) + + it("should set an empty list of diagnostics correctly", function() + diagnostics.send(7, {}) + + eq( + { + { + namespace = 42, + bufnr = 7, + diagnostics = {}, + opts = {virtual_text = false} + }, + }, + diagnostic_set_calls + ) + end) + + it("should handle basic case with all fields", function() + diagnostics.send(1, { + { + bufnr = 1, + lnum = 2, + end_lnum = 3, + col = 4, + end_col = 5, + type = "W", + code = "123", + text = "Warning message", + linter_name = "eslint", + }, + }) + eq({ + { + lnum = 1, + end_lnum = 2, + col = 3, + end_col = 5, + severity = vim.diagnostic.severity.WARN, + code = "123", + message = "Warning message", + source = "eslint", + }, + }, diagnostic_set_calls[1].diagnostics) + end) + + it("should default end_lnum to lnum when missing", function() + diagnostics.send(1, { + { + bufnr = 1, + lnum = 5, + col = 2, + end_col = 8, + type = "E", + text = "Error message", + linter_name = "mylinter", + }, + }) + eq({ + { + lnum = 4, + end_lnum = 4, + col = 1, + end_col = 8, + severity = vim.diagnostic.severity.ERROR, + code = nil, + message = "Error message", + source = "mylinter", + }, + }, diagnostic_set_calls[1].diagnostics) + end) + + it("should default col to 0 when missing", function() + diagnostics.send(1, { + { + bufnr = 1, + lnum = 10, + end_lnum = 12, + end_col = 6, + type = "I", + text = "Info message", + }, + }) + eq({ + { + lnum = 9, + end_lnum = 11, + col = 0, + end_col = 6, + severity = vim.diagnostic.severity.INFO, + code = nil, + message = "Info message", + source = nil, + }, + }, diagnostic_set_calls[1].diagnostics) + end) + + it("should ignore non-matching buffers", function() + diagnostics.send(1, { + { + bufnr = 2, + lnum = 1, + end_lnum = 2, + col = 1, + end_col = 4, + type = "W", + text = "Message", + }, + }) + eq({}, diagnostic_set_calls[1].diagnostics) + end) + + for _, set_signs_value in ipairs {1, true} do + describe("signs with setting set_signs = " .. tostring(set_signs_value), function() + before_each(function() + _G.vim.g.ale_set_signs = set_signs_value + _G.vim.g.ale_sign_priority = 10 + end) + + it("and global config as `false` should enable signs with the given priority", function() + diagnostics.send(7, {}) + eq({priority = 10}, diagnostic_set_calls[1].opts.signs) + end) + + it("and global config as a table should enable signs with the given priority", function() + signs_config = {foo = "bar", priority = 5} + diagnostics.send(7, {}) + eq( + {foo = "bar", priority = 10}, + diagnostic_set_calls[1].opts.signs + ) + end) + + it("and global config as a function should enable signs with the given priority", function() + signs_config = function() + return {foo = "bar", priority = 5} + end + diagnostics.send(7, {}) + + local local_signs = diagnostic_set_calls[1].opts.signs + + eq("function", type(local_signs)) + eq({foo = "bar", priority = 10}, local_signs()) + end) + end) + end + + it("should toggle virtual_text correctly", function() + for _, value in ipairs({"all", "2", 2, "current", "1", 1, true}) do + diagnostic_set_calls = {} + _G.vim.g.ale_virtualtext_cursor = value + diagnostics.send(7, {}) + + eq({virtual_text = true}, diagnostic_set_calls[1].opts) + end + + for _, value in ipairs({"disabled", "0", 0, false, nil}) do + diagnostic_set_calls = {} + _G.vim.g.ale_virtualtext_cursor = value + diagnostics.send(7, {}) + + eq({virtual_text = false}, diagnostic_set_calls[1].opts) + end + end) +end)