From 655fd1b0ca5405ce67f3f8083ef6a4f7d2dedea0 Mon Sep 17 00:00:00 2001 From: Abouzar Parvan Date: Thu, 23 Dec 2021 13:03:20 +0330 Subject: refactor: uplift neovim's minimum version requirement to 0.6.0 (#2093) Co-authored-by: kylo252 <59826753+kylo252@users.noreply.github.com> --- tests/minimal_lsp.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/minimal_lsp.lua b/tests/minimal_lsp.lua index 9873e5ef..12a4a6a9 100644 --- a/tests/minimal_lsp.lua +++ b/tests/minimal_lsp.lua @@ -73,10 +73,10 @@ _G.load_config = function() buf_set_keymap("n", "lD", "lua vim.lsp.buf.type_definition()", opts) buf_set_keymap("n", "lr", "lua vim.lsp.buf.rename()", opts) buf_set_keymap("n", "gr", "lua vim.lsp.buf.references()", opts) - buf_set_keymap("n", "gl", "lua vim.lsp.diagnostic.show_line_diagnostics()", opts) - buf_set_keymap("n", "lk", "lua vim.lsp.diagnostic.goto_prev()", opts) - buf_set_keymap("n", "lj", "lua vim.lsp.diagnostic.goto_next()", opts) - buf_set_keymap("n", "lq", "lua vim.lsp.diagnostic.set_loclist()", opts) + buf_set_keymap("n", "gl", "lua vim.diagnostic.open_float(0,{scope='line'})", opts) + buf_set_keymap("n", "lk", "lua vim.diagnostic.goto_prev()", opts) + buf_set_keymap("n", "lj", "lua vim.diagnostic.goto_next()", opts) + buf_set_keymap("n", "lq", "lua vim.diagnostic.setloclist()", opts) buf_set_keymap("n", "li", "LspInfo", opts) buf_set_keymap("n", "lI", "LspInstallInfo", opts) end -- cgit v1.2.3 From b3cfd165fbca4c8b595ed577027a5171e33a00e9 Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Sun, 2 Jan 2022 14:53:01 +0100 Subject: refactor(test): cleanup test utilities (#2132) --- tests/bootstrap_spec.lua | 36 ----------------- tests/config_loader_spec.lua | 39 ------------------- tests/helpers.lua | 51 ++++++++++++++++++++++++ tests/lsp_spec.lua | 78 ------------------------------------- tests/minimal_init.lua | 9 ++++- tests/minimal_lsp.lua | 7 +--- tests/plugins_load_spec.lua | 35 ----------------- tests/specs/bootstrap_spec.lua | 36 +++++++++++++++++ tests/specs/config_loader_spec.lua | 39 +++++++++++++++++++ tests/specs/lsp_spec.lua | 80 ++++++++++++++++++++++++++++++++++++++ tests/specs/plugins_load_spec.lua | 35 +++++++++++++++++ 11 files changed, 250 insertions(+), 195 deletions(-) delete mode 100644 tests/bootstrap_spec.lua delete mode 100644 tests/config_loader_spec.lua create mode 100644 tests/helpers.lua delete mode 100644 tests/lsp_spec.lua delete mode 100644 tests/plugins_load_spec.lua create mode 100644 tests/specs/bootstrap_spec.lua create mode 100644 tests/specs/config_loader_spec.lua create mode 100644 tests/specs/lsp_spec.lua create mode 100644 tests/specs/plugins_load_spec.lua (limited to 'tests') diff --git a/tests/bootstrap_spec.lua b/tests/bootstrap_spec.lua deleted file mode 100644 index c86d22d4..00000000 --- a/tests/bootstrap_spec.lua +++ /dev/null @@ -1,36 +0,0 @@ -local a = require "plenary.async_lib.tests" - -a.describe("initial start", function() - local uv = vim.loop - local home_dir = uv.os_homedir() - local lvim_config_path = get_config_dir() or home_dir .. "/.config/lvim" - local lvim_runtime_path = get_runtime_dir() or home_dir .. "/.local/share/lunarvim" - - a.it("shoud be able to detect test environment", function() - assert.truthy(os.getenv "LVIM_TEST_ENV") - assert.falsy(package.loaded["lvim.impatient"]) - end) - - a.it("should not be reading default neovim directories in the home directoies", function() - local rtp_list = vim.opt.rtp:get() - assert.falsy(vim.tbl_contains(rtp_list, vim.fn.stdpath "config")) - end) - - a.it("should be able to read lunarvim directories", function() - local rtp_list = vim.opt.rtp:get() - assert.truthy(vim.tbl_contains(rtp_list, lvim_runtime_path .. "/lvim")) - assert.truthy(vim.tbl_contains(rtp_list, lvim_config_path)) - end) - - a.it("should be able to run treesitter without errors", function() - assert.truthy(vim.treesitter.highlighter.active) - end) - - a.it("should be able to pass basic checkhealth without errors", function() - vim.cmd "checkhealth nvim" - local errmsg = vim.fn.eval "v:errmsg" - local exception = vim.fn.eval "v:exception" - assert.equal("", errmsg) -- v:errmsg was not updated. - assert.equal("", exception) - end) -end) diff --git a/tests/config_loader_spec.lua b/tests/config_loader_spec.lua deleted file mode 100644 index 1aef0974..00000000 --- a/tests/config_loader_spec.lua +++ /dev/null @@ -1,39 +0,0 @@ -local a = require "plenary.async_lib.tests" -local config = require "lvim.config" -local utils = require "lvim.utils" - -a.describe("config-loader", function() - local user_config_path = config:get_user_config_path() - - a.it("should be able to find user-config", function() - assert.equal(user_config_path, get_config_dir() .. "/config.lua") - end) - - a.it("should be able to load user-config without errors", function() - config:load(user_config_path) - local errmsg = vim.fn.eval "v:errmsg" - local exception = vim.fn.eval "v:exception" - assert.equal("", errmsg) -- v:errmsg was not updated. - assert.equal("", exception) - end) - - a.it("should be able to reload user-config without errors", function() - vim.opt.undodir = "/tmp" - assert.equal(vim.opt.undodir:get()[1], "/tmp") - config:reload() - assert.equal(vim.opt.undodir:get()[1], utils.join_paths(get_cache_dir(), "undo")) - end) - - a.it("should not get interrupted by errors in user-config", function() - vim.opt.undodir = "/tmp" - assert.equal(vim.opt.undodir:get()[1], "/tmp") - os.execute(string.format("echo 'bad_string_test' >> %s", user_config_path)) - local error_handler = function(msg) - return msg - end - local err = xpcall(config:reload(), error_handler) - assert.falsy(err) - assert.equal(vim.opt.undodir:get()[1], utils.join_paths(get_cache_dir(), "undo")) - os.execute(string.format("echo '' > %s", user_config_path)) - end) -end) diff --git a/tests/helpers.lua b/tests/helpers.lua new file mode 100644 index 00000000..ada83267 --- /dev/null +++ b/tests/helpers.lua @@ -0,0 +1,51 @@ +local M = {} + +function M.search_file(file, args) + local Job = require "plenary.job" + local stderr = {} + local stdout, ret = Job + :new({ + command = "grep", + args = { args, file }, + cwd = get_cache_dir(), + on_stderr = function(_, data) + table.insert(stderr, data) + end, + }) + :sync() + return stdout, ret, stderr +end + +function M.file_contains(file, query) + local stdout, ret, stderr = M.search_file(file, query) + if ret == 0 then + return true + end + if not vim.tbl_isempty(stderr) then + error(vim.inspect(stderr)) + end + if not vim.tbl_isempty(stdout) then + error(vim.inspect(stdout)) + end + return false +end + +function M.log_contains(query) + local logfile = require("lvim.core.log"):get_path() + local stdout, ret, stderr = M.search_file(logfile, query) + if ret == 0 then + return true + end + if not vim.tbl_isempty(stderr) then + error(vim.inspect(stderr)) + end + if not vim.tbl_isempty(stdout) then + error(vim.inspect(stdout)) + end + if not vim.tbl_isempty(stderr) then + error(vim.inspect(stderr)) + end + return false +end + +return M diff --git a/tests/lsp_spec.lua b/tests/lsp_spec.lua deleted file mode 100644 index 17e72577..00000000 --- a/tests/lsp_spec.lua +++ /dev/null @@ -1,78 +0,0 @@ -local a = require "plenary.async_lib.tests" -local utils = require "lvim.utils" -lvim.lsp.templates_dir = join_paths(get_runtime_dir(), "lvim", "tests", "artifacts") - -a.describe("lsp workflow", function() - local Log = require "lvim.core.log" - local logfile = Log:get_path() - - a.it("shoud be able to delete ftplugin templates", function() - if utils.is_directory(lvim.lsp.templates_dir) then - assert.equal(vim.fn.delete(lvim.lsp.templates_dir, "rf"), 0) - end - assert.False(utils.is_directory(lvim.lsp.templates_dir)) - end) - - a.it("shoud be able to generate ftplugin templates", function() - if utils.is_directory(lvim.lsp.templates_dir) then - assert.equal(vim.fn.delete(lvim.lsp.templates_dir, "rf"), 0) - end - require("lvim.lsp").setup() - - -- we need to delay this check until the generation is completed - vim.schedule(function() - assert.True(utils.is_directory(lvim.lsp.templates_dir)) - end) - end) - - a.it("shoud not attempt to re-generate ftplugin templates", function() - lvim.log.level = "debug" - - local plugins = require "lvim.plugins" - require("lvim.plugin-loader"):load { plugins, lvim.plugins } - - if utils.is_file(logfile) then - assert.equal(vim.fn.delete(logfile), 0) - end - - assert.True(utils.is_directory(lvim.lsp.templates_dir)) - require("lvim.lsp").setup() - - -- we need to delay this check until the log gets populated - vim.schedule(function() - assert.False(utils.log_contains "templates") - end) - end) - - a.it("shoud not include blacklisted servers in the generated templates", function() - assert.True(utils.is_directory(lvim.lsp.templates_dir)) - require("lvim.lsp").setup() - - for _, file in ipairs(vim.fn.glob(lvim.lsp.templates_dir .. "/*.lua", 1, 1)) do - for _, server in ipairs(lvim.lsp.override) do - assert.False(utils.file_contains(file, server)) - end - end - end) - - a.it("shoud only include one server per generated template", function() - assert.True(utils.is_directory(lvim.lsp.templates_dir)) - require("lvim.lsp").setup() - - for _, file in ipairs(vim.fn.glob(lvim.lsp.templates_dir .. "/*.lua", 1, 1)) do - local content = {} - for entry in io.lines(file) do - table.insert(content, entry) - end - local err_msg = "" - if #content > 1 then - err_msg = string.format( - "found more than one server for [%q]: \n{\n %q \n}", - file:match "[^/]*.lua$", - table.concat(content, ", ") - ) - end - assert.equal(err_msg, "") - end - end) -end) diff --git a/tests/minimal_init.lua b/tests/minimal_init.lua index 126f8e6e..0178514b 100644 --- a/tests/minimal_init.lua +++ b/tests/minimal_init.lua @@ -1,5 +1,12 @@ local path_sep = vim.loop.os_uname().version:match "Windows" and "\\" or "/" +local base_dir = os.getenv "LUNARVIM_RUNTIME_DIR" .. path_sep .. "lvim" +local tests_dir = base_dir .. path_sep .. "tests" -vim.opt.rtp:append(os.getenv "LUNARVIM_RUNTIME_DIR" .. path_sep .. "lvim") +vim.opt.rtp = { base_dir, tests_dir, os.getenv "VIMRUNTIME" } + +vim.opt.swapfile = false + +-- load helper functions before any other plugin to avoid name-collisions +pcall(require, "tests.helpers") require("lvim.bootstrap"):init() diff --git a/tests/minimal_lsp.lua b/tests/minimal_lsp.lua index 12a4a6a9..a4ecd4fb 100644 --- a/tests/minimal_lsp.lua +++ b/tests/minimal_lsp.lua @@ -8,12 +8,7 @@ end vim.cmd [[set runtimepath=$VIMRUNTIME]] -local temp_dir -if on_windows then - temp_dir = vim.loop.os_getenv "TEMP" -else - temp_dir = "/tmp" -end +local temp_dir = vim.loop.os_getenv "TEMP" or "/tmp" vim.cmd("set packpath=" .. join_paths(temp_dir, "nvim", "site")) diff --git a/tests/plugins_load_spec.lua b/tests/plugins_load_spec.lua deleted file mode 100644 index 08c96c12..00000000 --- a/tests/plugins_load_spec.lua +++ /dev/null @@ -1,35 +0,0 @@ -local a = require "plenary.async_lib.tests" - -a.describe("plugin-loader", function() - local plugins = require "lvim.plugins" - local loader = require "lvim.plugin-loader" - - a.it("should be able to load default packages without errors", function() - loader:load { plugins, lvim.plugins } - - -- TODO: maybe there's a way to avoid hard-coding the names of the modules? - local startup_plugins = { - "packer", - } - - for _, plugin in ipairs(startup_plugins) do - assert.truthy(package.loaded[plugin]) - end - end) - - a.it("should be able to load lsp packages without errors", function() - loader:load { plugins, lvim.plugins } - - require("lvim.lsp").setup() - - local lsp_packages = { - "lspconfig", - "nlspsettings", - "null-ls", - } - - for _, plugin in ipairs(lsp_packages) do - assert.truthy(package.loaded[plugin]) - end - end) -end) diff --git a/tests/specs/bootstrap_spec.lua b/tests/specs/bootstrap_spec.lua new file mode 100644 index 00000000..c86d22d4 --- /dev/null +++ b/tests/specs/bootstrap_spec.lua @@ -0,0 +1,36 @@ +local a = require "plenary.async_lib.tests" + +a.describe("initial start", function() + local uv = vim.loop + local home_dir = uv.os_homedir() + local lvim_config_path = get_config_dir() or home_dir .. "/.config/lvim" + local lvim_runtime_path = get_runtime_dir() or home_dir .. "/.local/share/lunarvim" + + a.it("shoud be able to detect test environment", function() + assert.truthy(os.getenv "LVIM_TEST_ENV") + assert.falsy(package.loaded["lvim.impatient"]) + end) + + a.it("should not be reading default neovim directories in the home directoies", function() + local rtp_list = vim.opt.rtp:get() + assert.falsy(vim.tbl_contains(rtp_list, vim.fn.stdpath "config")) + end) + + a.it("should be able to read lunarvim directories", function() + local rtp_list = vim.opt.rtp:get() + assert.truthy(vim.tbl_contains(rtp_list, lvim_runtime_path .. "/lvim")) + assert.truthy(vim.tbl_contains(rtp_list, lvim_config_path)) + end) + + a.it("should be able to run treesitter without errors", function() + assert.truthy(vim.treesitter.highlighter.active) + end) + + a.it("should be able to pass basic checkhealth without errors", function() + vim.cmd "checkhealth nvim" + local errmsg = vim.fn.eval "v:errmsg" + local exception = vim.fn.eval "v:exception" + assert.equal("", errmsg) -- v:errmsg was not updated. + assert.equal("", exception) + end) +end) diff --git a/tests/specs/config_loader_spec.lua b/tests/specs/config_loader_spec.lua new file mode 100644 index 00000000..1aef0974 --- /dev/null +++ b/tests/specs/config_loader_spec.lua @@ -0,0 +1,39 @@ +local a = require "plenary.async_lib.tests" +local config = require "lvim.config" +local utils = require "lvim.utils" + +a.describe("config-loader", function() + local user_config_path = config:get_user_config_path() + + a.it("should be able to find user-config", function() + assert.equal(user_config_path, get_config_dir() .. "/config.lua") + end) + + a.it("should be able to load user-config without errors", function() + config:load(user_config_path) + local errmsg = vim.fn.eval "v:errmsg" + local exception = vim.fn.eval "v:exception" + assert.equal("", errmsg) -- v:errmsg was not updated. + assert.equal("", exception) + end) + + a.it("should be able to reload user-config without errors", function() + vim.opt.undodir = "/tmp" + assert.equal(vim.opt.undodir:get()[1], "/tmp") + config:reload() + assert.equal(vim.opt.undodir:get()[1], utils.join_paths(get_cache_dir(), "undo")) + end) + + a.it("should not get interrupted by errors in user-config", function() + vim.opt.undodir = "/tmp" + assert.equal(vim.opt.undodir:get()[1], "/tmp") + os.execute(string.format("echo 'bad_string_test' >> %s", user_config_path)) + local error_handler = function(msg) + return msg + end + local err = xpcall(config:reload(), error_handler) + assert.falsy(err) + assert.equal(vim.opt.undodir:get()[1], utils.join_paths(get_cache_dir(), "undo")) + os.execute(string.format("echo '' > %s", user_config_path)) + end) +end) diff --git a/tests/specs/lsp_spec.lua b/tests/specs/lsp_spec.lua new file mode 100644 index 00000000..633aa17c --- /dev/null +++ b/tests/specs/lsp_spec.lua @@ -0,0 +1,80 @@ +local a = require "plenary.async_lib.tests" +local utils = require "lvim.utils" +local helpers = require "tests.helpers" +local temp_dir = vim.loop.os_getenv "TEMP" or "/tmp" +lvim.lsp.templates_dir = join_paths(temp_dir, "lvim", "tests", "artifacts") + +a.describe("lsp workflow", function() + local Log = require "lvim.core.log" + local logfile = Log:get_path() + + a.it("shoud be able to delete ftplugin templates", function() + if utils.is_directory(lvim.lsp.templates_dir) then + assert.equal(vim.fn.delete(lvim.lsp.templates_dir, "rf"), 0) + end + assert.False(utils.is_directory(lvim.lsp.templates_dir)) + end) + + a.it("shoud be able to generate ftplugin templates", function() + if utils.is_directory(lvim.lsp.templates_dir) then + assert.equal(vim.fn.delete(lvim.lsp.templates_dir, "rf"), 0) + end + require("lvim.lsp").setup() + + -- we need to delay this check until the generation is completed + vim.schedule(function() + assert.True(utils.is_directory(lvim.lsp.templates_dir)) + end) + end) + + a.it("shoud not attempt to re-generate ftplugin templates", function() + lvim.log.level = "debug" + + local plugins = require "lvim.plugins" + require("lvim.plugin-loader"):load { plugins, lvim.plugins } + + if utils.is_file(logfile) then + assert.equal(vim.fn.delete(logfile), 0) + end + + assert.True(utils.is_directory(lvim.lsp.templates_dir)) + require("lvim.lsp").setup() + + -- we need to delay this check until the log gets populated + vim.schedule(function() + assert.False(helpers.log_contains "templates") + end) + end) + + a.it("shoud not include blacklisted servers in the generated templates", function() + assert.True(utils.is_directory(lvim.lsp.templates_dir)) + require("lvim.lsp").setup() + + for _, file in ipairs(vim.fn.glob(lvim.lsp.templates_dir .. "/*.lua", 1, 1)) do + for _, server in ipairs(lvim.lsp.override) do + assert.False(helpers.file_contains(file, server)) + end + end + end) + + a.it("shoud only include one server per generated template", function() + assert.True(utils.is_directory(lvim.lsp.templates_dir)) + require("lvim.lsp").setup() + + for _, file in ipairs(vim.fn.glob(lvim.lsp.templates_dir .. "/*.lua", 1, 1)) do + local content = {} + for entry in io.lines(file) do + table.insert(content, entry) + end + local err_msg = "" + if #content > 1 then + err_msg = string.format( + "found more than one server for [%q]: \n{\n %q \n}", + file:match "[^/]*.lua$", + table.concat(content, ", ") + ) + end + assert.equal(err_msg, "") + end + end) +end) diff --git a/tests/specs/plugins_load_spec.lua b/tests/specs/plugins_load_spec.lua new file mode 100644 index 00000000..08c96c12 --- /dev/null +++ b/tests/specs/plugins_load_spec.lua @@ -0,0 +1,35 @@ +local a = require "plenary.async_lib.tests" + +a.describe("plugin-loader", function() + local plugins = require "lvim.plugins" + local loader = require "lvim.plugin-loader" + + a.it("should be able to load default packages without errors", function() + loader:load { plugins, lvim.plugins } + + -- TODO: maybe there's a way to avoid hard-coding the names of the modules? + local startup_plugins = { + "packer", + } + + for _, plugin in ipairs(startup_plugins) do + assert.truthy(package.loaded[plugin]) + end + end) + + a.it("should be able to load lsp packages without errors", function() + loader:load { plugins, lvim.plugins } + + require("lvim.lsp").setup() + + local lsp_packages = { + "lspconfig", + "nlspsettings", + "null-ls", + } + + for _, plugin in ipairs(lsp_packages) do + assert.truthy(package.loaded[plugin]) + end + end) +end) -- cgit v1.2.3 From eefc148313917b1a474ba7bdf44d6d088524074a Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Mon, 3 Jan 2022 11:07:34 +0100 Subject: refactor(bootstrap): more robust git module (#2127) --- tests/minimal_lsp.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/minimal_lsp.lua b/tests/minimal_lsp.lua index a4ecd4fb..1c496c5a 100644 --- a/tests/minimal_lsp.lua +++ b/tests/minimal_lsp.lua @@ -41,9 +41,7 @@ end _G.load_config = function() vim.lsp.set_log_level "trace" - if vim.fn.has "nvim-0.5.1" == 1 then - require("vim.lsp.log").set_format_func(vim.inspect) - end + require("vim.lsp.log").set_format_func(vim.inspect) local nvim_lsp = require "lspconfig" local on_attach = function(_, bufnr) local function buf_set_keymap(...) -- cgit v1.2.3