Skip to content

Commit

Permalink
ci: add progress handle tests and ci workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
willothy committed Jan 23, 2024
1 parent 3a93300 commit 480a2ab
Show file tree
Hide file tree
Showing 3 changed files with 224 additions and 0 deletions.
26 changes: 26 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Run Tests

on:
push:
branches: ['main']
pull_request:
branches: ['main']

jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
nvim-versions: ['stable', 'nightly']
name: Run Tests
steps:
- name: checkout
uses: actions/checkout@v3

- uses: rhysd/action-setup-vim@v1
with:
neovim: true
version: ${{ matrix.nvim-versions }}

- name: run tests
run: nvim --clean --headless -u tests/minimal_init.lua -c "PlenaryBustedDirectory tests/ { minimal_init = 'tests/minimal_init.lua' }"
165 changes: 165 additions & 0 deletions tests/handle_spec.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
local fidget = require("fidget")
local notif = require("fidget.notification")
local handle = require("fidget.progress.handle")

local eq = assert.are.same
local is_nil = assert.is_nil

describe("progress handle", function()
before_each(function()
require("fidget").setup({})
notif.clear()
notif.window.close()
end)

it("should create a handle", function()
local h = handle.create({
title = "test",
message = "test message",
})
assert(h ~= nil)

eq(h.title, "test")
eq(h.message, "test message")
eq(h.done, false)

-- defaults
eq(h.lsp_client, { name = "fidget" })
eq(h.cancellable, true)
end)

it("should update when report() is called", function()
local h = handle.create({
title = "test",
message = "test message",
})
h:report({
message = "new message",
percentage = 50,
})
eq(h.message, "new message")
eq(h.percentage, 50)
end)

it("should complete when finish() is called", function()
local h = handle.create({
title = "test",
message = "test message",
})
h:finish()
eq(h.done, true)
is_nil(h.percentage)
end)

it("should set percentage to 100 when complete", function()
local h = handle.create({
title = "test",
message = "test message",
percentage = 0,
})
eq(h.percentage, 0)
eq(h.done, false)
h:report({
percentage = 50,
})
eq(h.percentage, 50)
eq(h.done, false)
h:finish()
eq(h.percentage, 100)
eq(h.done, true)
end)

it("should *not* set percentage when cancel() is called", function()
local h = handle.create({
title = "test",
message = "test message",
percentage = 0,
})
h:report({
percentage = 40,
})
h:cancel()
eq(h.done, true)
eq(h.percentage, 40)
end)

it("should *not* initialize percentage when not provided", function()
local h = handle.create({
title = "test",
message = "test message",
})
eq(h.percentage, nil)
eq(h.done, false)
h:finish()
eq(h.percentage, nil)
eq(h.done, true)
end)

it("should show in the fidget window", function()
local buf = notif.window.get_buffer()
local line_count = vim.api.nvim_buf_line_count(buf)
eq(line_count, 1)

local h = handle.create({
title = "test",
message = "test message",
lsp_client = { name = "test" },
})
eq(h.percentage, nil)
eq(h.done, false)

eq(2, vim.api.nvim_buf_line_count(buf)) -- title + message and spinner
end)

it("should update the window/buffer when report() is called", function()
local buf = notif.window.get_buffer()

local h = handle.create({
title = "test",
message = "test message",
lsp_client = { name = "test" },
})
eq(nil, h.percentage)
eq(false, h.done)

local changed = false
vim.api.nvim_create_autocmd("TextChanged", {
once = true,
buffer = buf,
callback = function()
changed = true
end,
})

h:report({
message = "new message",
percentage = 50,
})

eq(true, changed)
end)

it("should stop displaying if it's GC'd before it finished", function()
local function create_handle()
---@diagnostic disable-next-line: discard-returns
handle.create({
title = "test",
message = "test message",
lsp_client = { name = "test" },
})
end
local buf = notif.window.get_buffer()
local line_count = vim.api.nvim_buf_line_count(buf)
eq(line_count, 1)
create_handle()
line_count = vim.api.nvim_buf_line_count(buf)
eq(line_count, 2)

collectgarbage("collect")
collectgarbage("collect")
collectgarbage("collect")
collectgarbage("collect")

eq(vim.api.nvim_buf_line_count(buf), 0)
end)
end)
33 changes: 33 additions & 0 deletions tests/minimal_init.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
local deps = {
"nvim-lua/plenary.nvim",
}

local uv = vim.uv or vim.loop

local tmp = uv.os_tmpdir()
local base = tmp .. "/fidget-test/"

local waiting = 0

for _, dep in ipairs(deps) do
local path = base .. dep:gsub("/", "-")
local stat = vim.loop.fs_stat(path)
if stat == nil or stat.type ~= "directory" then
vim.fn.mkdir(path, "p")
waiting = waiting + 1
uv.spawn("git", {
args = { "clone", "https://github.com/" .. dep, path },
}, function()
waiting = waiting - 1
end)
end
vim.opt.rtp:prepend(path)
end

vim.wait(10000, function()
return waiting == 0
end)

vim.opt.rtp:prepend(uv.cwd())

require("plenary.busted")

0 comments on commit 480a2ab

Please sign in to comment.