diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..43d9f81 --- /dev/null +++ b/Makefile @@ -0,0 +1,11 @@ +TESTS_INIT=tests/init.lua +TESTS_DIR=tests/ + +.PHONY: test + +test: + @nvim \ + --headless \ + --noplugin \ + -u ${TESTS_INIT} \ + -c "PlenaryBustedDirectory ${TESTS_DIR} { minimal_init = '${TESTS_INIT}' }" diff --git a/tests/darkbox/darkbox_spec.lua b/tests/darkbox/darkbox_spec.lua new file mode 100644 index 0000000..725bc50 --- /dev/null +++ b/tests/darkbox/darkbox_spec.lua @@ -0,0 +1,161 @@ +require("plenary.reload").reload_module("darkbox", true) +local darkbox = require("darkbox") +local default = darkbox.config + +local function clear_term_colors() + for item = 0, 15 do + vim.g["terminal_color_" .. item] = nil + end +end + +describe("tests", function() + it("works with default values", function() + darkbox.setup() + assert.are.same(darkbox.config, default) + end) + + it("works with config overrides", function() + local expected = { + terminal_colors = true, + undercurl = false, + underline = false, + bold = true, + italic = { + strings = true, + emphasis = true, + comments = true, + operators = false, + folds = true, + }, + strikethrough = true, + inverse = true, + invert_selection = false, + invert_signs = false, + invert_tabline = false, + invert_intend_guides = false, + contrast = "", + palette_overrides = {}, + overrides = {}, + dim_inactive = false, + transparent_mode = false, + } + + darkbox.setup({ undercurl = false, underline = false }) + assert.are.same(darkbox.config, expected) + end) + + it("should override a hightlight color", function() + local config = { + overrides = { + Search = { fg = "#ff9900", bg = "#000000" }, + ColorColumn = { bg = "#ff9900" }, + }, + } + + darkbox.setup(config) + darkbox.load() + + local search_group_id = vim.api.nvim_get_hl_id_by_name("Search") + local search_values = { + background = vim.fn.synIDattr(search_group_id, "bg", "gui"), + foreground = vim.fn.synIDattr(search_group_id, "fg", "gui"), + } + + assert.are.same(search_values, { background = "#000000", foreground = "#ff9900" }) + + local color_column_group_id = vim.api.nvim_get_hl_id_by_name("ColorColumn") + local color_column_values = { + background = vim.fn.synIDattr(color_column_group_id, "bg", "gui"), + } + + assert.are.same(color_column_values, { background = "#ff9900" }) + end) + + it("should create new hightlights colors if they dont exist", function() + local config = { + overrides = { + Search = { fg = "#ff9900", bg = "#000000" }, + New = { bg = "#ff9900" }, + }, + } + + darkbox.setup(config) + darkbox.load() + + local search_group_id = vim.api.nvim_get_hl_id_by_name("Search") + local search_values = { + background = vim.fn.synIDattr(search_group_id, "bg", "gui"), + foreground = vim.fn.synIDattr(search_group_id, "fg", "gui"), + } + + assert.are.same(search_values, { background = "#000000", foreground = "#ff9900" }) + + local new_group_id = vim.api.nvim_get_hl_id_by_name("New") + local new_group_values = { + background = vim.fn.synIDattr(new_group_id, "bg", "gui"), + } + + assert.are.same(new_group_values, { background = "#ff9900" }) + end) + + it("should override links", function() + local config = { + overrides = { + TelescopePreviewBorder = { fg = "#990000", bg = nil }, + }, + } + darkbox.setup(config) + darkbox.load() + + local group_id = vim.api.nvim_get_hl_id_by_name("TelescopePreviewBorder") + local values = { + fg = vim.fn.synIDattr(group_id, "fg", "gui"), + } + + local expected = { + fg = "#990000", + } + assert.are.same(expected, values) + end) + + it("should override palette", function() + local config = { + palette_overrides = { + gray = "#ff9900", + }, + } + + darkbox.setup(config) + darkbox.load() + + local group_id = vim.api.nvim_get_hl_id_by_name("Comment") + local values = { + fg = vim.fn.synIDattr(group_id, "fg", "gui"), + } + assert.are.same(values, { fg = "#ff9900" }) + end) + + it("does not set terminal colors when terminal_colors is false", function() + clear_term_colors() + darkbox.setup({ terminal_colors = false }) + darkbox.load() + assert.is_nil(vim.g.terminal_color_0) + end) + + it("sets terminal colors when terminal_colors is true", function() + clear_term_colors() + darkbox.setup({ terminal_colors = true }) + darkbox.load() + + -- dark bg + local colors = require("gruvbox").palette + vim.opt.background = "dark" + assert.are.same(vim.g.terminal_color_0, colors.dark0) + + -- light bg + clear_term_colors() + darkbox.load() + vim.opt.background = "light" + assert.are.same(vim.g.terminal_color_0, colors.light0) + end) +end) diff --git a/tests/init.lua b/tests/init.lua new file mode 100644 index 0000000..b4c8c23 --- /dev/null +++ b/tests/init.lua @@ -0,0 +1,11 @@ +local plenary_dir = os.getenv("PLENARY_DIR") or "/tmp/plenary.nvim" +local is_not_a_directory = vim.fn.isdirectory(plenary_dir) == 0 +if is_not_a_directory then + vim.fn.system({ "git", "clone", "https://github.com/nvim-lua/plenary.nvim", plenary_dir }) +end + +vim.opt.rtp:append(".") +vim.opt.rtp:append(plenary_dir) + +vim.cmd("runtime plugin/plenary.vim") +require("plenary.busted")