local popup = require "plenary.popup" local eq = assert.are.same describe("plenary.popup", function() before_each(function() vim.cmd [[highlight PopupColor1 ctermbg=lightblue guibg=lightblue]] vim.cmd [[highlight PopupColor2 ctermbg=lightcyan guibg=lightcyan]] end) -- TODO: Probably want to clear all the popups between iterations -- after_each(function() end) it("can create a very simple window", function() local win_id = popup.create("hello there", { line = 1, col = 1, width = 20, }) local win_config = vim.api.nvim_win_get_config(win_id) eq(20, win_config.width) end) it("can apply a highlight", function() local win_id = popup.create("hello there", { highlight = "PopupColor1", }) eq("Normal:PopupColor1,EndOfBuffer:PopupColor1", vim.api.nvim_win_get_option(win_id, "winhl")) end) it("can create a border", function() local win_id, config = popup.create("hello border", { line = 2, col = 3, border = {}, }) eq(true, vim.api.nvim_win_is_valid(win_id)) local border_id = config.border.win_id assert(border_id, "Has a border win id") eq(true, vim.api.nvim_win_is_valid(border_id)) end) it("can apply a border highlight", function() local _, opts = popup.create("hello there", { border = true, borderhighlight = "PopupColor2", }) local border_win_id = opts.border.win_id eq("Normal:PopupColor2", vim.api.nvim_win_get_option(border_win_id, "winhl")) end) it("can ignore border highlight with no border", function() local _ = popup.create("hello there", { border = false, borderhighlight = "PopupColor3", }) end) it("can do basic padding", function() local win_id = popup.create("12345", { line = 1, col = 1, padding = {}, }) local bufnr = vim.api.nvim_win_get_buf(win_id) eq({ "", " 12345 ", "" }, vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)) end) it("can do padding and border", function() local win_id, config = popup.create("hello border", { line = 2, col = 2, border = {}, padding = {}, }) local bufnr = vim.api.nvim_win_get_buf(win_id) eq({ "", " hello border ", "" }, vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)) local border_id = config.border.win_id assert(border_id, "Has a border win id") eq(true, vim.api.nvim_win_is_valid(border_id)) end) describe("borderchars", function() local test_border = function(name, borderchars, expected) it(name, function() local _, config = popup.create("all the plus signs", { line = 8, col = 55, padding = { 0, 3, 0, 3 }, borderchars = borderchars, }) local border_id = config.border.win_id local border_bufnr = vim.api.nvim_win_get_buf(border_id) eq(expected, vim.api.nvim_buf_get_lines(border_bufnr, 0, -1, false)) end) end test_border("can support multiple border patterns", { "+" }, { "++++++++++++++++++++++++++", "+ +", "++++++++++++++++++++++++++", }) test_border("can support multiple patterns inside the borderchars", { "-", "+" }, { "+------------------------+", "- -", "+------------------------+", }) end) describe("what", function() it("can be an existing bufnr", function() local bufnr = vim.api.nvim_create_buf(false, false) vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, { "pass bufnr 1", "pass bufnr 2" }) local win_id = popup.create(bufnr, { line = 8, col = 55, minwidth = 20, }) eq(bufnr, vim.api.nvim_win_get_buf(win_id)) eq({ "pass bufnr 1", "pass bufnr 2" }, vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)) end) end) describe("cursor", function() pending("not yet tested", function() popup.create({ "option 1", "option 2" }, { line = "cursor+2", col = "cursor+2", border = { 1, 1, 1, 1 }, enter = true, cursorline = true, callback = function(win_id, sel) print(sel) end, }) end) end) end)