mirror of
https://github.com/stevearc/aerial.nvim
synced 2024-09-07 18:34:50 +02:00
266 lines
8.1 KiB
Lua
266 lines
8.1 KiB
Lua
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
|
|
|
|
---@return integer
|
|
local function num_wins()
|
|
return #vim.api.nvim_tabpage_list_wins(0)
|
|
end
|
|
|
|
---@return integer
|
|
local function num_aerial_wins()
|
|
local ret = 0
|
|
for _, winid in ipairs(vim.api.nvim_tabpage_list_wins(0)) do
|
|
if util.is_aerial_win(winid) then
|
|
ret = ret + 1
|
|
end
|
|
end
|
|
return ret
|
|
end
|
|
|
|
a.describe("config attach_mode = 'window'", function()
|
|
after_each(function()
|
|
test_util.reset_editor()
|
|
end)
|
|
|
|
a.it("opens one aerial window per source window", function()
|
|
aerial.setup({
|
|
attach_mode = "window",
|
|
})
|
|
vim.cmd.edit({ args = { "README.md" } })
|
|
aerial.open({ focus = false })
|
|
vim.cmd.vsplit()
|
|
aerial.toggle()
|
|
assert.equals(4, num_wins())
|
|
assert.equals(2, num_aerial_wins())
|
|
end)
|
|
|
|
a.it("updates symbols when changing to unsupported buffer", function()
|
|
aerial.setup({
|
|
lazy_load = false,
|
|
attach_mode = "window",
|
|
})
|
|
vim.cmd.edit({ args = { "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({ args = { "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)
|
|
|
|
a.it(
|
|
"close_automatic_events = 'unsupported' closes aerial when entering unsupported buffer",
|
|
function()
|
|
aerial.setup({
|
|
lazy_load = false,
|
|
attach_mode = "window",
|
|
close_automatic_events = { "unsupported" },
|
|
})
|
|
vim.cmd.edit({ args = { "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)
|
|
vim.cmd.edit({ args = { "LICENSE" } })
|
|
-- Wait for autocmd to run and attached buffer to switch
|
|
sleep(50)
|
|
assert.falsy(vim.api.nvim_win_is_valid(aerial_win))
|
|
end
|
|
)
|
|
|
|
a.it("close_automatic_events = 'unfocus' closes aerial when leaving window", function()
|
|
aerial.setup({
|
|
lazy_load = false,
|
|
attach_mode = "window",
|
|
close_automatic_events = { "unfocus" },
|
|
})
|
|
vim.cmd.edit({ args = { "README.md" } })
|
|
local main_win = vim.api.nvim_get_current_win()
|
|
aerial.toggle({ focus = true })
|
|
local aerial_win = vim.api.nvim_get_current_win()
|
|
assert.is_not.equals(main_win, aerial_win)
|
|
assert.truthy(vim.api.nvim_win_is_valid(aerial_win))
|
|
-- Wait for symbols to populate
|
|
sleep(1)
|
|
vim.api.nvim_set_current_win(main_win)
|
|
sleep(10)
|
|
assert.truthy(vim.api.nvim_win_is_valid(aerial_win))
|
|
vim.cmd.vsplit()
|
|
sleep(10)
|
|
assert.falsy(vim.api.nvim_win_is_valid(aerial_win))
|
|
end)
|
|
|
|
a.it(
|
|
"close_automatic_events = 'switch_buffer' closes aerial when buffer in window changes",
|
|
function()
|
|
aerial.setup({
|
|
lazy_load = false,
|
|
attach_mode = "window",
|
|
close_automatic_events = { "switch_buffer" },
|
|
})
|
|
vim.cmd.edit({ args = { "README.md" } })
|
|
aerial.toggle({ focus = false })
|
|
local aerial_win = util.get_aerial_win(0)
|
|
assert.truthy(vim.api.nvim_win_is_valid(aerial_win))
|
|
-- Wait for symbols to populate
|
|
sleep(1)
|
|
vim.cmd.edit({ args = { "doc/api.md" } })
|
|
sleep(10)
|
|
assert.falsy(vim.api.nvim_win_is_valid(aerial_win))
|
|
end
|
|
)
|
|
end)
|
|
|
|
a.describe("config attach_mode = 'global'", function()
|
|
after_each(function()
|
|
test_util.reset_editor()
|
|
end)
|
|
|
|
a.it("opens one aerial window ever", function()
|
|
aerial.setup({
|
|
attach_mode = "global",
|
|
})
|
|
vim.cmd.edit({ args = { "README.md" } })
|
|
aerial.open({ focus = false })
|
|
vim.cmd.vsplit()
|
|
sleep(10)
|
|
aerial.open()
|
|
assert.equals(3, num_wins())
|
|
assert.equals(1, num_aerial_wins())
|
|
end)
|
|
|
|
a.it("updates symbols when changing to unsupported buffer", function()
|
|
aerial.setup({
|
|
lazy_load = false,
|
|
attach_mode = "global",
|
|
})
|
|
vim.cmd.edit({ args = { "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({ args = { "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)
|
|
|
|
a.it(
|
|
"close_automatic_events = 'unsupported' closes aerial when entering unsupported buffer",
|
|
function()
|
|
aerial.setup({
|
|
lazy_load = false,
|
|
attach_mode = "global",
|
|
close_automatic_events = { "unsupported" },
|
|
})
|
|
vim.cmd.edit({ args = { "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)
|
|
vim.cmd.edit({ args = { "LICENSE" } })
|
|
-- Wait for autocmd to run and attached buffer to switch
|
|
sleep(50)
|
|
assert.falsy(vim.api.nvim_win_is_valid(aerial_win))
|
|
end
|
|
)
|
|
|
|
a.it("close_automatic_events = 'unfocus' closes aerial when leaving window", function()
|
|
aerial.setup({
|
|
lazy_load = false,
|
|
attach_mode = "global",
|
|
close_automatic_events = { "unfocus" },
|
|
})
|
|
vim.cmd.edit({ args = { "README.md" } })
|
|
local main_win = vim.api.nvim_get_current_win()
|
|
aerial.toggle({ focus = true })
|
|
local aerial_win = vim.api.nvim_get_current_win()
|
|
assert.is_not.equals(main_win, aerial_win)
|
|
assert.truthy(vim.api.nvim_win_is_valid(aerial_win))
|
|
-- Wait for symbols to populate
|
|
sleep(1)
|
|
vim.api.nvim_set_current_win(main_win)
|
|
sleep(10)
|
|
assert.truthy(vim.api.nvim_win_is_valid(aerial_win))
|
|
vim.cmd.vsplit()
|
|
sleep(10)
|
|
assert.falsy(vim.api.nvim_win_is_valid(aerial_win))
|
|
end)
|
|
|
|
a.it(
|
|
"close_automatic_events = 'switch_buffer' closes aerial when buffer in window changes",
|
|
function()
|
|
aerial.setup({
|
|
lazy_load = false,
|
|
attach_mode = "global",
|
|
close_automatic_events = { "switch_buffer" },
|
|
})
|
|
vim.cmd.edit({ args = { "README.md" } })
|
|
aerial.toggle({ focus = false })
|
|
local aerial_win = util.get_aerial_win(0)
|
|
assert.truthy(vim.api.nvim_win_is_valid(aerial_win))
|
|
-- Wait for symbols to populate
|
|
sleep(1)
|
|
vim.cmd.edit({ args = { "doc/api.md" } })
|
|
sleep(10)
|
|
assert.falsy(vim.api.nvim_win_is_valid(aerial_win))
|
|
end
|
|
)
|
|
|
|
a.it("open_automatic = true opens aerial when entering supported buffer", function()
|
|
aerial.setup({
|
|
lazy_load = false,
|
|
attach_mode = "global",
|
|
open_automatic = true,
|
|
})
|
|
vim.cmd.edit({ args = { "README.md" } })
|
|
sleep(30)
|
|
local aerial_win = util.get_aerial_win(0)
|
|
assert.truthy(vim.api.nvim_win_is_valid(aerial_win))
|
|
end)
|
|
|
|
a.it("open_automatic = true does not open aerial when entering unsupported buffer", function()
|
|
aerial.setup({
|
|
lazy_load = false,
|
|
attach_mode = "global",
|
|
open_automatic = true,
|
|
})
|
|
vim.cmd.edit({ args = { "LICENSE" } })
|
|
sleep(30)
|
|
local aerial_win = util.get_aerial_win(0)
|
|
assert.is_nil(aerial_win)
|
|
end)
|
|
end)
|