add TSamLast command for reexecuting last running tests
This commit is contained in:
126
tests/test_samurai_last_spec.lua
Normal file
126
tests/test_samurai_last_spec.lua
Normal file
@@ -0,0 +1,126 @@
|
||||
local test_samurai = require("test-samurai")
|
||||
local core = require("test-samurai.core")
|
||||
|
||||
local function mkbuf(path, ft, lines)
|
||||
local bufnr = vim.api.nvim_create_buf(false, true)
|
||||
vim.api.nvim_buf_set_name(bufnr, path)
|
||||
vim.bo[bufnr].filetype = ft
|
||||
if lines then
|
||||
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, lines)
|
||||
end
|
||||
return bufnr
|
||||
end
|
||||
|
||||
local function capture_jobstart()
|
||||
local calls = {}
|
||||
local orig = vim.fn.jobstart
|
||||
vim.fn.jobstart = function(cmd, opts)
|
||||
table.insert(calls, { cmd = cmd, opts = opts })
|
||||
return 1
|
||||
end
|
||||
return calls, orig
|
||||
end
|
||||
|
||||
describe("TSamLast", function()
|
||||
before_each(function()
|
||||
test_samurai.setup()
|
||||
end)
|
||||
|
||||
it("reruns last Go command", function()
|
||||
local calls, orig_jobstart = capture_jobstart()
|
||||
|
||||
local bufnr = mkbuf("/tmp/project/foo_test.go", "go", {
|
||||
"package main",
|
||||
"import \"testing\"",
|
||||
"",
|
||||
"func TestFoo(t *testing.T) {",
|
||||
" t.Run(\"first\", func(t *testing.T) {",
|
||||
" -- inside first",
|
||||
" })",
|
||||
"}",
|
||||
})
|
||||
|
||||
vim.api.nvim_set_current_buf(bufnr)
|
||||
vim.api.nvim_win_set_cursor(0, { 6, 0 })
|
||||
|
||||
core.run_nearest()
|
||||
core.run_last()
|
||||
|
||||
vim.fn.jobstart = orig_jobstart
|
||||
|
||||
assert.equals(2, #calls)
|
||||
assert.are.same({ "go", "test", "-v", "./", "-run", "^TestFoo/first$" }, calls[1].cmd)
|
||||
assert.are.same(calls[1].cmd, calls[2].cmd)
|
||||
assert.equals(calls[1].opts.cwd, calls[2].opts.cwd)
|
||||
end)
|
||||
|
||||
it("reruns last JS command", function()
|
||||
local calls, orig_jobstart = capture_jobstart()
|
||||
|
||||
local bufnr = mkbuf("/tmp/project/foo_last.test.ts", "typescript", {
|
||||
'describe("outer", function() {',
|
||||
' it("inner 1", function() {',
|
||||
" -- inside 1",
|
||||
" })",
|
||||
"",
|
||||
' it("inner 2", function() {',
|
||||
" -- inside 2",
|
||||
" })",
|
||||
"})",
|
||||
})
|
||||
|
||||
vim.api.nvim_set_current_buf(bufnr)
|
||||
vim.api.nvim_win_set_cursor(0, { 7, 0 })
|
||||
|
||||
core.run_nearest()
|
||||
core.run_last()
|
||||
|
||||
vim.fn.jobstart = orig_jobstart
|
||||
|
||||
assert.equals(2, #calls)
|
||||
assert.are.same(
|
||||
{ "npx", "jest", "/tmp/project/foo_last.test.ts", "-t", "inner 2" },
|
||||
calls[1].cmd
|
||||
)
|
||||
assert.are.same(calls[1].cmd, calls[2].cmd)
|
||||
assert.equals(calls[1].opts.cwd, calls[2].opts.cwd)
|
||||
end)
|
||||
|
||||
it("reruns last Lua command", function()
|
||||
local calls, orig_jobstart = capture_jobstart()
|
||||
|
||||
local bufnr = mkbuf("/tmp/project/foo_last_spec.lua", "lua", {
|
||||
"describe('outer', function()",
|
||||
" it('inner 1', function()",
|
||||
" local x = 1",
|
||||
" end)",
|
||||
"",
|
||||
" it('inner 2', function()",
|
||||
" local y = 2",
|
||||
" end)",
|
||||
"end)",
|
||||
})
|
||||
|
||||
vim.api.nvim_set_current_buf(bufnr)
|
||||
vim.api.nvim_win_set_cursor(0, { 7, 0 })
|
||||
|
||||
core.run_nearest()
|
||||
core.run_last()
|
||||
|
||||
vim.fn.jobstart = orig_jobstart
|
||||
|
||||
assert.equals(2, #calls)
|
||||
assert.are.same({
|
||||
"nvim",
|
||||
"--headless",
|
||||
"-u",
|
||||
"/tmp/project/tests/minimal_init.lua",
|
||||
"-c",
|
||||
'PlenaryBustedFile /tmp/project/foo_last_spec.lua { busted_args = { "--filter", "inner 2" } }',
|
||||
"-c",
|
||||
"qa",
|
||||
}, calls[1].cmd)
|
||||
assert.are.same(calls[1].cmd, calls[2].cmd)
|
||||
assert.equals(calls[1].opts.cwd, calls[2].opts.cwd)
|
||||
end)
|
||||
end)
|
||||
Reference in New Issue
Block a user