feat: async scraper
This commit is contained in:
parent
53562eb6a8
commit
a32fd396d3
12 changed files with 1527 additions and 474 deletions
111
spec/async_jobs_spec.lua
Normal file
111
spec/async_jobs_spec.lua
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
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.equals(callback, 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue