aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorSteven Arcangeli <stevearc@stevearc.com>2023-09-08 11:47:42 -0700
committerSteven Arcangeli <stevearc@stevearc.com>2023-09-08 11:47:42 -0700
commit2178a4fe3f16ef4780cc0a6bc45da07cd0f92798 (patch)
tree2ce7ba9fb405a42e0d7138cf32d2fde69b703eed /tests
parentc3028b327bc44335cc2b5c3014cd6d5c12a54ee4 (diff)
test: add tests for public API functions
Diffstat (limited to 'tests')
-rw-r--r--tests/api_spec.lua98
1 files changed, 98 insertions, 0 deletions
diff --git a/tests/api_spec.lua b/tests/api_spec.lua
new file mode 100644
index 0000000..b59f367
--- /dev/null
+++ b/tests/api_spec.lua
@@ -0,0 +1,98 @@
+require("plenary.async").tests.add_to_env()
+local test_util = require("tests.test_util")
+local conform = require("conform")
+
+describe("api", function()
+ after_each(function()
+ test_util.reset_editor()
+ end)
+
+ it("retrieves info about a formatter", function()
+ local info = conform.get_formatter_info("stylua")
+ assert.equal("stylua", info.name)
+ assert.equal("stylua", info.command)
+ assert.equal("boolean", type(info.available))
+ end)
+
+ it("retrieves unavailable info if formatter does not exist", function()
+ local info = conform.get_formatter_info("asdf")
+ assert.equal("asdf", info.name)
+ assert.equal("asdf", info.command)
+ assert.falsy(info.available)
+ end)
+
+ describe("list_formatters", function()
+ local get_formatter_info = conform.get_formatter_info
+ before_each(function()
+ conform.get_formatter_info = function(...)
+ local info = get_formatter_info(...)
+ info.available = true
+ return info
+ end
+ end)
+ after_each(function()
+ conform.get_formatter_info = get_formatter_info
+ end)
+
+ it("lists all formatters configured for buffer", function()
+ conform.formatters_by_ft.lua = { "stylua", "lua-format" }
+ local bufnr = vim.api.nvim_create_buf(false, true)
+ vim.api.nvim_set_current_buf(bufnr)
+ vim.bo[bufnr].filetype = "lua"
+ local formatters = conform.list_formatters()
+ local formatter_names = vim.tbl_map(function(f)
+ return f.name
+ end, formatters)
+ assert.are.same({ "stylua", "lua-format" }, formatter_names)
+ end)
+
+ it("merges formatters from mixed filetypes", function()
+ conform.formatters_by_ft.lua = { "stylua", "lua-format" }
+ conform.formatters_by_ft["*"] = { "trim_whitespace" }
+ local bufnr = vim.api.nvim_create_buf(false, true)
+ vim.api.nvim_set_current_buf(bufnr)
+ vim.bo[bufnr].filetype = "lua"
+ local formatters = conform.list_formatters()
+ local formatter_names = vim.tbl_map(function(f)
+ return f.name
+ end, formatters)
+ assert.are.same({ "stylua", "lua-format", "trim_whitespace" }, formatter_names)
+ end)
+
+ it("flattens formatters in alternation groups", function()
+ conform.formatters_by_ft.lua = { { "stylua", "lua-format" }, "trim_whitespace" }
+ local bufnr = vim.api.nvim_create_buf(false, true)
+ vim.api.nvim_set_current_buf(bufnr)
+ vim.bo[bufnr].filetype = "lua"
+ local formatters = conform.list_formatters()
+ local formatter_names = vim.tbl_map(function(f)
+ return f.name
+ end, formatters)
+ assert.are.same({ "stylua", "trim_whitespace" }, formatter_names)
+ end)
+ end)
+
+ describe("list_all_formatters", function()
+ it("lists all formatters configured for all buffers", function()
+ conform.formatters_by_ft.lua = { "stylua", "lua-format" }
+ conform.formatters_by_ft["*"] = { "trim_whitespace" }
+ local formatters = conform.list_all_formatters()
+ local formatter_names = vim.tbl_map(function(f)
+ return f.name
+ end, formatters)
+ table.sort(formatter_names)
+ assert.are.same({ "lua-format", "stylua", "trim_whitespace" }, formatter_names)
+ end)
+
+ it("flattens formatters in alternation groups", function()
+ conform.formatters_by_ft.lua = { { "stylua", "lua-format" } }
+ conform.formatters_by_ft["*"] = { "trim_whitespace" }
+ local formatters = conform.list_all_formatters()
+ local formatter_names = vim.tbl_map(function(f)
+ return f.name
+ end, formatters)
+ table.sort(formatter_names)
+ assert.are.same({ "lua-format", "stylua", "trim_whitespace" }, formatter_names)
+ end)
+ end)
+end)