summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/lvim/helpers.lua (renamed from tests/helpers.lua)9
-rw-r--r--tests/minimal_init.lua12
-rw-r--r--tests/specs/config_loader_spec.lua22
-rw-r--r--tests/specs/lsp_spec.lua9
-rw-r--r--tests/specs/plugins_load_spec.lua36
5 files changed, 62 insertions, 26 deletions
diff --git a/tests/helpers.lua b/tests/lvim/helpers.lua
index ada83267..2d8477de 100644
--- a/tests/helpers.lua
+++ b/tests/lvim/helpers.lua
@@ -13,11 +13,11 @@ function M.search_file(file, args)
end,
})
:sync()
- return stdout, ret, stderr
+ return ret, stdout, stderr
end
function M.file_contains(file, query)
- local stdout, ret, stderr = M.search_file(file, query)
+ local ret, stdout, stderr = M.search_file(file, query)
if ret == 0 then
return true
end
@@ -32,7 +32,7 @@ end
function M.log_contains(query)
local logfile = require("lvim.core.log"):get_path()
- local stdout, ret, stderr = M.search_file(logfile, query)
+ local ret, stdout, stderr = M.search_file(logfile, query)
if ret == 0 then
return true
end
@@ -42,9 +42,6 @@ function M.log_contains(query)
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
diff --git a/tests/minimal_init.lua b/tests/minimal_init.lua
index 0178514b..91579243 100644
--- a/tests/minimal_init.lua
+++ b/tests/minimal_init.lua
@@ -2,11 +2,11 @@ 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 = { base_dir, tests_dir, os.getenv "VIMRUNTIME" }
+vim.opt.rtp:append(tests_dir)
+vim.opt.rtp:append(base_dir)
-vim.opt.swapfile = false
+require("lvim.bootstrap"):init(base_dir)
--- load helper functions before any other plugin to avoid name-collisions
-pcall(require, "tests.helpers")
-
-require("lvim.bootstrap"):init()
+-- NOTE: careful about name collisions
+-- see https://github.com/nvim-lualine/lualine.nvim/pull/621
+require "tests.lvim.helpers"
diff --git a/tests/specs/config_loader_spec.lua b/tests/specs/config_loader_spec.lua
index 54cb4e96..1f2debc7 100644
--- a/tests/specs/config_loader_spec.lua
+++ b/tests/specs/config_loader_spec.lua
@@ -21,25 +21,31 @@ a.describe("config-loader", function()
local test_path = "/tmp/lvim"
os.execute(string.format([[echo "vim.opt.undodir = '%s'" >> %s]], test_path, user_config_path))
config:reload()
- assert.equal(vim.opt.undodir:get()[1], test_path)
+ vim.schedule(function()
+ assert.equal(vim.opt.undodir:get()[1], test_path)
+ end)
end)
a.it("should not get interrupted by errors in user-config", function()
local test_path = "/tmp/lunarvim"
os.execute(string.format([[echo "vim.opt.undodir = '%s'" >> %s]], test_path, user_config_path))
config:reload()
- assert.equal(vim.opt.undodir:get()[1], test_path)
+ vim.schedule(function()
+ assert.equal(vim.opt.undodir:get()[1], test_path)
+ end)
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], test_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)
- os.execute(string.format("echo '' > %s", user_config_path))
+ vim.schedule(function()
+ assert.equal(vim.opt.undodir:get()[1], test_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)
+ os.execute(string.format("echo '' > %s", user_config_path))
+ end)
end)
end)
diff --git a/tests/specs/lsp_spec.lua b/tests/specs/lsp_spec.lua
index 388a24bb..2518b237 100644
--- a/tests/specs/lsp_spec.lua
+++ b/tests/specs/lsp_spec.lua
@@ -1,6 +1,6 @@
local a = require "plenary.async_lib.tests"
local utils = require "lvim.utils"
-local helpers = require "tests.helpers"
+local helpers = require "tests.lvim.helpers"
local temp_dir = vim.loop.os_getenv "TEMP" or "/tmp"
lvim.lsp.templates_dir = join_paths(temp_dir, "lvim", "tests", "artifacts")
@@ -31,7 +31,7 @@ a.describe("lsp workflow", function()
lvim.log.level = "debug"
local plugins = require "lvim.plugins"
- require("lvim.plugin-loader"):load { plugins, lvim.plugins }
+ require("lvim.plugin-loader").load { plugins, lvim.plugins }
if utils.is_file(logfile) then
assert.equal(vim.fn.delete(logfile), 0)
@@ -51,8 +51,9 @@ a.describe("lsp workflow", function()
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))
+ for _, server_name in ipairs(lvim.lsp.override) do
+ local setup_cmd = string.format([[require("lvim.lsp.manager").setup(%q)]], server_name)
+ assert.False(helpers.file_contains(file, setup_cmd))
end
end
end)
diff --git a/tests/specs/plugins_load_spec.lua b/tests/specs/plugins_load_spec.lua
index 08c96c12..d32c521d 100644
--- a/tests/specs/plugins_load_spec.lua
+++ b/tests/specs/plugins_load_spec.lua
@@ -5,7 +5,7 @@ a.describe("plugin-loader", function()
local loader = require "lvim.plugin-loader"
a.it("should be able to load default packages without errors", function()
- loader:load { plugins, lvim.plugins }
+ loader.load { plugins, lvim.plugins }
-- TODO: maybe there's a way to avoid hard-coding the names of the modules?
local startup_plugins = {
@@ -18,7 +18,7 @@ a.describe("plugin-loader", function()
end)
a.it("should be able to load lsp packages without errors", function()
- loader:load { plugins, lvim.plugins }
+ loader.load { plugins, lvim.plugins }
require("lvim.lsp").setup()
@@ -32,4 +32,36 @@ a.describe("plugin-loader", function()
assert.truthy(package.loaded[plugin])
end
end)
+ a.it("should be able to rollback plugins without errors", function()
+ local plugin = { name = "onedarker.nvim" }
+ plugin.path = vim.tbl_filter(function(package)
+ return package:match(plugin.name)
+ end, vim.api.nvim_list_runtime_paths())[1]
+
+ local get_current_sha = function(repo)
+ local res = vim.fn.system(string.format("git -C %s log -1 --pretty=%%h", repo)):gsub("\n", "")
+ return res
+ end
+ plugin.test_sha = "316b1c9"
+ _G.locked_sha = get_current_sha(plugin.path)
+ loader.load { plugins, lvim.plugins }
+
+ os.execute(string.format("git -C %s fetch --deepen 999 --quiet", plugin.path))
+ os.execute(string.format("git -C %s checkout %s --quiet", plugin.path, plugin.test_sha))
+ assert.equal(plugin.test_sha, get_current_sha(plugin.path))
+ _G.completed = false
+ _G.verify_sha = function()
+ if _G.locked_sha ~= get_current_sha(plugin.path) then
+ error "unmached results!"
+ else
+ _G.completed = true
+ end
+ end
+ vim.cmd [[autocmd User PackerComplete ++once lua _G.verify_sha()]]
+ loader.load_snapshot()
+ local ret = vim.wait(30 * 10 * 1000, function()
+ return _G.completed == true
+ end, 200)
+ assert.True(ret)
+ end)
end)