diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/lvim/helpers.lua (renamed from tests/helpers.lua) | 9 | ||||
| -rw-r--r-- | tests/minimal_init.lua | 12 | ||||
| -rw-r--r-- | tests/specs/config_loader_spec.lua | 22 | ||||
| -rw-r--r-- | tests/specs/lsp_spec.lua | 9 | ||||
| -rw-r--r-- | tests/specs/plugins_load_spec.lua | 36 | 
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) | 
