diff --git a/.github/pre-commit b/.github/pre-commit index 916f618..49ee249 100755 --- a/.github/pre-commit +++ b/.github/pre-commit @@ -1,4 +1,5 @@ #!/bin/bash set -e -luacheck . +luacheck lua tests + stylua --check . diff --git a/.luacheckrc b/.luacheckrc index 5e100b1..7efefde 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -2,7 +2,7 @@ max_comment_line_length = false codes = true exclude_files = { - "tests/", + "tests/treesitter", } ignore = { @@ -14,4 +14,6 @@ ignore = { read_globals = { "vim", + "a", + "assert", } diff --git a/tests/attach_and_events_spec.lua b/tests/attach_and_events_spec.lua new file mode 100644 index 0000000..ec418d7 --- /dev/null +++ b/tests/attach_and_events_spec.lua @@ -0,0 +1,47 @@ +require("plenary.async").tests.add_to_env() +local aerial = require("aerial") +local sleep = require("plenary.async.util").sleep +local loading = require("aerial.loading") +local test_util = require("tests.test_util") +local util = require("aerial.util") + +---@param bufnr integer +---@return boolean +local function has_no_symbols(bufnr) + for _, line in ipairs(vim.api.nvim_buf_get_lines(bufnr, 0, -1, true)) do + if line:match("^%s*No symbols%s*$") then + return true + elseif not line:match("^%s*$") then + return false + end + end + return false +end + +a.describe("config", function() + after_each(function() + test_util.reset_editor() + end) + + a.it("attach_mode = 'window' updates symbols when changing to unsupported buffer", function() + aerial.setup({ + lazy_load = false, + attach_mode = "window", + }) + vim.cmd("edit README.md") + aerial.toggle({ focus = false }) + local aerial_win = util.get_aerial_win(0) + assert.is_not_nil(aerial_win) + -- Wait for symbols to populate + sleep(1) + assert.falsy(has_no_symbols(vim.api.nvim_win_get_buf(aerial_win))) + vim.cmd("edit LICENSE") + -- Wait for autocmd to run and attached buffer to switch + sleep(10) + local aerial_buf = vim.api.nvim_win_get_buf(aerial_win) + assert.truthy(loading.is_loading(aerial_buf)) + sleep(50) + assert.falsy(loading.is_loading(aerial_buf)) + assert.truthy(has_no_symbols(vim.api.nvim_win_get_buf(aerial_win))) + end) +end) diff --git a/tests/open_spec.lua b/tests/open_spec.lua index cd68723..f3a6c44 100644 --- a/tests/open_spec.lua +++ b/tests/open_spec.lua @@ -1,20 +1,10 @@ require("plenary.async").tests.add_to_env() local aerial = require("aerial") +local test_util = require("tests.test_util") a.describe("config", function() after_each(function() - aerial.setup({}) - for i, winid in ipairs(vim.api.nvim_tabpage_list_wins(0)) do - if i > 1 then - vim.api.nvim_win_close(winid, true) - end - end - vim.api.nvim_win_set_buf(0, vim.api.nvim_create_buf(false, true)) - for _, bufnr in ipairs(vim.api.nvim_list_bufs()) do - if vim.api.nvim_buf_get_option(bufnr, "buflisted") then - vim.api.nvim_buf_delete(bufnr, { force = true }) - end - end + test_util.reset_editor() end) a.it("can open relative to the window, to the left", function() @@ -25,7 +15,7 @@ a.describe("config", function() }, }) vim.cmd("edit README.md") - vim.cmd("AerialToggle") + aerial.toggle() local winid = vim.api.nvim_tabpage_list_wins(0)[1] local aer_bufnr = vim.api.nvim_win_get_buf(winid) assert.equals("aerial", vim.api.nvim_buf_get_option(aer_bufnr, "filetype")) @@ -39,7 +29,7 @@ a.describe("config", function() }, }) vim.cmd("edit README.md") - vim.cmd("AerialToggle") + aerial.toggle() local winid = vim.api.nvim_tabpage_list_wins(0)[2] local aer_bufnr = vim.api.nvim_win_get_buf(winid) assert.equals("aerial", vim.api.nvim_buf_get_option(aer_bufnr, "filetype")) @@ -47,7 +37,7 @@ a.describe("config", function() a.it("can open aerial in float", function() vim.cmd("edit README.md") - vim.cmd("AerialToggle float") + aerial.toggle({ direction = "float" }) local winid = vim.api.nvim_tabpage_list_wins(0)[2] local aer_bufnr = vim.api.nvim_win_get_buf(winid) assert.equals("aerial", vim.api.nvim_buf_get_option(aer_bufnr, "filetype")) diff --git a/tests/test_util.lua b/tests/test_util.lua index 98a3f99..f78801f 100644 --- a/tests/test_util.lua +++ b/tests/test_util.lua @@ -89,4 +89,20 @@ M.assert_tree_equals = function(received, expected, path) end end +M.reset_editor = function() + require("aerial").setup({}) + vim.cmd.tabonly() + for i, winid in ipairs(vim.api.nvim_tabpage_list_wins(0)) do + if i > 1 then + vim.api.nvim_win_close(winid, true) + end + end + vim.api.nvim_win_set_buf(0, vim.api.nvim_create_buf(false, true)) + for _, bufnr in ipairs(vim.api.nvim_list_bufs()) do + if vim.api.nvim_buf_get_option(bufnr, "buflisted") then + vim.api.nvim_buf_delete(bufnr, { force = true }) + end + end +end + return M