cp.nvim/spec/async_jobs_spec.lua

111 lines
2.8 KiB
Lua

describe('cp.async.jobs', function()
local jobs
local spec_helper = require('spec.spec_helper')
local mock_jobs = {}
before_each(function()
spec_helper.setup()
mock_jobs = {}
vim.system = function(args, opts, callback)
local job = {
kill = function() end,
args = args,
opts = opts,
callback = callback,
}
mock_jobs[#mock_jobs + 1] = job
return job
end
jobs = spec_helper.fresh_require('cp.async.jobs')
end)
after_each(function()
spec_helper.teardown()
mock_jobs = {}
end)
describe('job management', function()
it('starts job with unique ID', function()
local callback = function() end
local args = { 'test', 'command' }
local opts = { cwd = '/test' }
local job = jobs.start_job('test_job', args, opts, callback)
assert.is_not_nil(job)
assert.equals(1, #mock_jobs)
assert.same(args, mock_jobs[1].args)
assert.same(opts, mock_jobs[1].opts)
assert.is_function(mock_jobs[1].callback)
end)
it('kills existing job when starting new job with same ID', function()
local killed = false
vim.system = function(args, opts, callback)
return {
kill = function()
killed = true
end,
args = args,
opts = opts,
callback = callback,
}
end
jobs.start_job('same_id', { 'first' }, {}, function() end)
jobs.start_job('same_id', { 'second' }, {}, function() end)
assert.is_true(killed)
end)
it('kills specific job by ID', function()
local killed = false
vim.system = function()
return {
kill = function()
killed = true
end,
}
end
jobs.start_job('target_job', { 'test' }, {}, function() end)
jobs.kill_job('target_job')
assert.is_true(killed)
end)
it('kills all active jobs', function()
local kill_count = 0
vim.system = function()
return {
kill = function()
kill_count = kill_count + 1
end,
}
end
jobs.start_job('job1', { 'test1' }, {}, function() end)
jobs.start_job('job2', { 'test2' }, {}, function() end)
jobs.kill_all_jobs()
assert.equals(2, kill_count)
end)
it('tracks active job IDs correctly', function()
jobs.start_job('job1', { 'test1' }, {}, function() end)
jobs.start_job('job2', { 'test2' }, {}, function() end)
local active_jobs = jobs.get_active_jobs()
assert.equals(2, #active_jobs)
assert.is_true(vim.tbl_contains(active_jobs, 'job1'))
assert.is_true(vim.tbl_contains(active_jobs, 'job2'))
jobs.kill_job('job1')
active_jobs = jobs.get_active_jobs()
assert.equals(1, #active_jobs)
assert.is_true(vim.tbl_contains(active_jobs, 'job2'))
end)
end)
end)