]> git.madduck.net Git - etc/vim.git/blobdiff - .vim/bundle/ale/test/lua/ale_diagnostics_spec.lua

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Merge commit '76265755a1add77121c8f9dabb3e9bb70fe9a972' as '.vim/bundle/ale'
[etc/vim.git] / .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 (file)
index 0000000..ae2ad89
--- /dev/null
@@ -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)