require("plenary.async").tests.add_to_env() local oil = require("oil") local test_util = require("tests.test_util") a.describe("oil select", function() after_each(function() test_util.reset_editor() end) a.it("opens file under cursor", function() oil.open() test_util.wait_for_autocmd({ "User", pattern = "OilEnter" }) -- Go to the bottom, so the cursor is not on a directory vim.cmd.normal({ args = { "G" } }) a.wrap(oil.select, 2)() assert.equals(1, #vim.api.nvim_tabpage_list_wins(0)) assert.not_equals("oil", vim.bo.filetype) end) a.it("opens file in new tab", function() oil.open() test_util.wait_for_autocmd({ "User", pattern = "OilEnter" }) local tabpage = vim.api.nvim_get_current_tabpage() a.wrap(oil.select, 2)({ tab = true }) assert.equals(2, #vim.api.nvim_list_tabpages()) assert.equals(1, #vim.api.nvim_tabpage_list_wins(0)) assert.not_equals(tabpage, vim.api.nvim_get_current_tabpage()) end) a.it("opens file in new split", function() oil.open() test_util.wait_for_autocmd({ "User", pattern = "OilEnter" }) local winid = vim.api.nvim_get_current_win() a.wrap(oil.select, 2)({ vertical = true }) assert.equals(1, #vim.api.nvim_list_tabpages()) assert.equals(2, #vim.api.nvim_tabpage_list_wins(0)) assert.not_equals(winid, vim.api.nvim_get_current_win()) end) a.it("opens multiple files in new tabs", function() oil.open() test_util.wait_for_autocmd({ "User", pattern = "OilEnter" }) vim.api.nvim_feedkeys("Vj", "x", true) local tabpage = vim.api.nvim_get_current_tabpage() a.wrap(oil.select, 2)({ tab = true }) assert.equals(3, #vim.api.nvim_list_tabpages()) assert.equals(1, #vim.api.nvim_tabpage_list_wins(0)) assert.not_equals(tabpage, vim.api.nvim_get_current_tabpage()) end) a.it("opens multiple files in new splits", function() oil.open() test_util.wait_for_autocmd({ "User", pattern = "OilEnter" }) vim.api.nvim_feedkeys("Vj", "x", true) local winid = vim.api.nvim_get_current_win() a.wrap(oil.select, 2)({ vertical = true }) assert.equals(1, #vim.api.nvim_list_tabpages()) assert.equals(3, #vim.api.nvim_tabpage_list_wins(0)) assert.not_equals(winid, vim.api.nvim_get_current_win()) end) a.describe("close after open", function() a.it("same window", function() vim.cmd.edit({ args = { "foo" } }) local bufnr = vim.api.nvim_get_current_buf() oil.open() test_util.wait_for_autocmd({ "User", pattern = "OilEnter" }) -- Go to the bottom, so the cursor is not on a directory vim.cmd.normal({ args = { "G" } }) a.wrap(oil.select, 2)({ close = true }) assert.equals(1, #vim.api.nvim_tabpage_list_wins(0)) -- This one we actually don't expect the buffer to be the same as the initial buffer, because -- we opened a file assert.not_equals(bufnr, vim.api.nvim_get_current_buf()) assert.not_equals("oil", vim.bo.filetype) end) a.it("split", function() vim.cmd.edit({ args = { "foo" } }) local bufnr = vim.api.nvim_get_current_buf() local winid = vim.api.nvim_get_current_win() oil.open() test_util.wait_for_autocmd({ "User", pattern = "OilEnter" }) a.wrap(oil.select, 2)({ vertical = true, close = true }) assert.equals(2, #vim.api.nvim_tabpage_list_wins(0)) assert.equals(bufnr, vim.api.nvim_win_get_buf(winid)) end) a.it("tab", function() vim.cmd.edit({ args = { "foo" } }) local bufnr = vim.api.nvim_get_current_buf() local tabpage = vim.api.nvim_get_current_tabpage() oil.open() test_util.wait_for_autocmd({ "User", pattern = "OilEnter" }) a.wrap(oil.select, 2)({ tab = true, close = true }) assert.equals(1, #vim.api.nvim_tabpage_list_wins(0)) assert.equals(2, #vim.api.nvim_list_tabpages()) vim.api.nvim_set_current_tabpage(tabpage) assert.equals(bufnr, vim.api.nvim_get_current_buf()) end) end) end)