summaryrefslogtreecommitdiffstats
path: root/tests/api_spec.lua
blob: ea26343800ba86d61128c54f82baf7e8ea386e34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
require("plenary.async").tests.add_to_env()
local conform = require("conform")
local test_util = require("tests.test_util")

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)