summaryrefslogtreecommitdiff
path: root/lua/99/test/qfix_helpers_spec.lua
blob: f8c9ac7a3646a926fd9913cf3db4cc5f78ea53e6 (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
-- luacheck: globals describe it assert
local QFixHelpers = require("99.ops.qfix-helpers")
local eq = assert.are.same
local create_entries = QFixHelpers.create_qfix_entries

describe("qfix helpers", function()
  it("parse_line parses filename, line, column, range, and notes", function()
    local parsed = QFixHelpers.parse_line(
      "lua/99/ops/search.lua:42:7,3,found semantic search"
    )

    eq({
      filename = "lua/99/ops/search.lua",
      lnum = 42,
      col = 7,
      text = "found semantic search",
    }, parsed)
  end)

  it("parse_line keeps commas in notes text", function()
    local parsed = QFixHelpers.parse_line("file.lua:10:3,1,note,with,commas")

    assert(parsed)
    eq("file.lua", parsed.filename)
    eq(10, parsed.lnum)
    eq(3, parsed.col)
    eq("note,with,commas", parsed.text)
  end)

  it("parse_line returns nil for malformed lines", function()
    eq(nil, QFixHelpers.parse_line("file.lua:10"))
    eq(nil, QFixHelpers.parse_line("file.lua:10:3:extra"))
    eq(nil, QFixHelpers.parse_line("file.lua:10:3"))
  end)

  it("parse_line keeps colons in notes text", function()
    local parsed =
      QFixHelpers.parse_line("file.lua:10:3,2,check this: important section")

    assert(parsed)
    eq("check this: important section", parsed.text)
  end)

  it(
    "create_qfix_entries parses valid lines and skips malformed ones",
    function()
      local response = table.concat({
        "a.lua:1:2,4,first hit",
        "not a valid line",
        "b.lua:3:4,1,",
        "c.lua:5:7,2,fallback values",
        "",
      }, "\n")

      local locations = create_entries(response)

      eq({
        {
          filename = "a.lua",
          lnum = 1,
          col = 2,
          text = "first hit",
        },
        {
          filename = "b.lua",
          lnum = 3,
          col = 4,
          text = "",
        },
        {
          filename = "c.lua",
          lnum = 5,
          col = 7,
          text = "fallback values",
        },
      }, locations)
    end
  )

  it("create_qfix_entries returns empty list for empty response", function()
    eq({}, create_entries(""))
  end)
end)