diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 856e0f4..7b101b8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -23,7 +23,8 @@ jobs: version: 3.x repo-token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/checkout@v3 + - name: Install Go + uses: actions/setup-go@v5 - name: Cache .tests uses: actions/cache@v4 @@ -37,6 +38,11 @@ jobs: neovim: true version: ${{ matrix.version }} + - uses: actions/checkout@v3 + + - name: Install Go bins + run: nvim --headless -u "./scripts/minimal_init.lua" -c "GoInstallDeps" -c "qa!" + - name: Run Tests run: | nvim --version diff --git a/spec/fixtures/iferr/iferr_input.go b/spec/fixtures/iferr/iferr_input.go new file mode 100644 index 0000000..b94f158 --- /dev/null +++ b/spec/fixtures/iferr/iferr_input.go @@ -0,0 +1,9 @@ +package main + +func test() error { + return nil +} + +func main() { + err := test() +} diff --git a/spec/fixtures/iferr/iferr_output.go b/spec/fixtures/iferr/iferr_output.go new file mode 100644 index 0000000..8ab181a --- /dev/null +++ b/spec/fixtures/iferr/iferr_output.go @@ -0,0 +1,12 @@ +package main + +func test() error { + return nil +} + +func main() { + err := test() + if err != nil { + return + } +} diff --git a/spec/integration/iferr_test.lua b/spec/integration/iferr_test.lua new file mode 100644 index 0000000..f61e179 --- /dev/null +++ b/spec/integration/iferr_test.lua @@ -0,0 +1,27 @@ +local t = require "spec.testutils" + +local child = MiniTest.new_child_neovim() +local T = MiniTest.new_set { + hooks = { + post_once = child.stop, + pre_case = function() + child.restart { "-u", "scripts/minimal_init.lua" } + end, + }, +} +T["iferr"] = MiniTest.new_set {} +T["iferr"]["works"] = function() + local tmp = vim.env.HOME .. "/test.go" + + local fixtures = t.fixtures.read "iferr/iferr" + t.fixtures.write(tmp, fixtures.input) + + child.cmd("silent edit " .. tmp) + child.fn.setpos(".", { child.fn.bufnr "%", 8, 2, 0 }) + child.cmd "GoIfErr" + child.cmd "write" + + t.eq(t.readfile(tmp), fixtures.output) +end + +return T diff --git a/spec/integration/struct_tags_test.lua b/spec/integration/struct_tags_test.lua index 9d09971..4100b9a 100644 --- a/spec/integration/struct_tags_test.lua +++ b/spec/integration/struct_tags_test.lua @@ -1,9 +1,27 @@ local t = require "spec.testutils" -local T = MiniTest.new_set {} +local child = MiniTest.new_child_neovim() +local T = MiniTest.new_set { + hooks = { + post_once = child.stop, + pre_case = function() + child.restart { "-u", "scripts/minimal_init.lua" } + end, + }, +} T["struct_tags"] = MiniTest.new_set {} -T["struct_tags"]["fuck it"] = function() - t.eq(1, 1) +T["struct_tags"][".add"] = function() + local tmp = vim.env.HOME .. "/test.go" + + local fixtures = t.fixtures.read "tags/add" + t.fixtures.write(tmp, fixtures.input) + + child.cmd("silent edit " .. tmp) + child.fn.setpos(".", { child.fn.bufnr "%", 3, 6, 0 }) + child.cmd "GoTagAdd json" + child.cmd "write" + + t.eq(t.readfile(tmp), fixtures.output) end return T diff --git a/spec/testutils.lua b/spec/testutils.lua index e931820..b4ed3c1 100644 --- a/spec/testutils.lua +++ b/spec/testutils.lua @@ -12,7 +12,32 @@ function testutils.eq(a, b) return MiniTest.expect.equality(a, b) end --- TODO: continue with writing fixtures helpers --- https://github.com/olexsmir/gopher.nvim/pull/71/files +---@return string +function testutils.tmpfile() + return vim.fn.tempname() .. ".go" +end + +---@param path string +---@return string +function testutils.readfile(path) + return vim.fn.join(vim.fn.readfile(path), "\n") +end + +testutils.fixtures = {} + +---@param fixture string +---@return {input: string, output: string} +function testutils.fixtures.read(fixture) + return { + input = testutils.readfile(fixtures_dir .. fixture .. "_input.go"), + output = testutils.readfile(fixtures_dir .. fixture .. "_output.go"), + } +end + +---@param fpath string +---@param fixture string +function testutils.fixtures.write(fpath, fixture) + vim.fn.writefile(vim.split(fixture, "\n"), fpath) +end return testutils