111 lines
2.8 KiB
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)
|