mirror of
https://github.com/mfussenegger/nvim-jdtls
synced 2024-09-16 14:34:13 +02:00
Handle class initialization failures in junit results
Closes https://github.com/mfussenegger/nvim-jdtls/issues/234
This commit is contained in:
parent
76adad8229
commit
e2a80d5f51
2 changed files with 47 additions and 7 deletions
|
@ -41,7 +41,13 @@ local function parse(content, tests)
|
||||||
table.insert(tests, test)
|
table.insert(tests, test)
|
||||||
test = nil
|
test = nil
|
||||||
elseif vim.startswith(line, MessageId.TestFailed) or vim.startswith(line, MessageId.TestError) then
|
elseif vim.startswith(line, MessageId.TestFailed) or vim.startswith(line, MessageId.TestError) then
|
||||||
assert(test, "Encountered TestFailed/TestError, but no TestStart encounterd")
|
-- Can get test failure without test start if it is a class initialization failure
|
||||||
|
if not test then
|
||||||
|
test = {
|
||||||
|
fq_class = vim.split(line, ',')[2],
|
||||||
|
traces = {},
|
||||||
|
}
|
||||||
|
end
|
||||||
test.failed = true
|
test.failed = true
|
||||||
elseif vim.startswith(line, MessageId.TraceStart) then
|
elseif vim.startswith(line, MessageId.TraceStart) then
|
||||||
tracing = true
|
tracing = true
|
||||||
|
@ -51,6 +57,9 @@ local function parse(content, tests)
|
||||||
table.insert(test.traces, line)
|
table.insert(test.traces, line)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if test then
|
||||||
|
table.insert(tests, test)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
M.__parse = parse
|
M.__parse = parse
|
||||||
|
@ -79,9 +88,13 @@ function M.mk_test_results(bufnr)
|
||||||
show = function()
|
show = function()
|
||||||
local items = {}
|
local items = {}
|
||||||
local repl = require('dap.repl')
|
local repl = require('dap.repl')
|
||||||
|
local num_failures = 0
|
||||||
for _, test in ipairs(tests) do
|
for _, test in ipairs(tests) do
|
||||||
if test.failed then
|
if test.failed then
|
||||||
repl.append('❌' .. test.method, '$')
|
num_failures = num_failures + 1
|
||||||
|
if test.method then
|
||||||
|
repl.append('❌' .. test.method, '$')
|
||||||
|
end
|
||||||
for _, msg in ipairs(test.traces) do
|
for _, msg in ipairs(test.traces) do
|
||||||
local match = msg:match(string.format('at %s.%s', test.fq_class, test.method) .. '%(([%a%p]*:%d+)%)')
|
local match = msg:match(string.format('at %s.%s', test.fq_class, test.method) .. '%(([%a%p]*:%d+)%)')
|
||||||
if match then
|
if match then
|
||||||
|
@ -103,15 +116,15 @@ function M.mk_test_results(bufnr)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if #items > 0 then
|
if num_failures > 0 then
|
||||||
vim.fn.setqflist({}, 'r', {
|
vim.fn.setqflist({}, 'r', {
|
||||||
title = 'jdtls-tests',
|
title = 'jdtls-tests',
|
||||||
items = items,
|
items = items,
|
||||||
})
|
})
|
||||||
print(
|
print(
|
||||||
'Tests finished. Results printed to dap-repl.',
|
'Tests finished. Results printed to dap-repl.',
|
||||||
'Errors added to quickfix list',
|
#items > 0 and 'Errors added to quickfix list' or '',
|
||||||
string.format('(❌%d / %d)', #items, #tests)
|
string.format('(❌%d / %d)', num_failures, #tests)
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
print('Tests finished. Results printed to dap-repl. All', #tests, 'succeeded')
|
print('Tests finished. Results printed to dap-repl. All', #tests, 'succeeded')
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
local junit = require 'jdtls.junit'
|
||||||
describe('jdtls.junit', function()
|
describe('jdtls.junit', function()
|
||||||
it('can parse test results', function()
|
it('can parse result of successful test', function()
|
||||||
local junit = require 'jdtls.junit'
|
|
||||||
local lines = {
|
local lines = {
|
||||||
'%TESTC 1 v2',
|
'%TESTC 1 v2',
|
||||||
'%TSTTREE1,test_foo(io.bar.BarTest),false,1,false,-1,test_foo(io.bar.BarTest),,',
|
'%TSTTREE1,test_foo(io.bar.BarTest),false,1,false,-1,test_foo(io.bar.BarTest),,',
|
||||||
|
@ -20,4 +20,31 @@ describe('jdtls.junit', function()
|
||||||
}
|
}
|
||||||
assert.are.same(expected, tests)
|
assert.are.same(expected, tests)
|
||||||
end)
|
end)
|
||||||
|
it('can parse test result with initialization failure', function()
|
||||||
|
local lines = {
|
||||||
|
'%TESTC 1 v2',
|
||||||
|
'%TSTTREE1,test_foo(io.foo.FooTest),false,1,false,-1,test_foo(io.foo.FooTest),,',
|
||||||
|
'%ERROR 2,io.foo.FooTest',
|
||||||
|
'%TRACES ',
|
||||||
|
'java.lang.UnsupportedOperationException: foo',
|
||||||
|
'\tat java.base/java.lang.Thread.run(Thread.java:833)',
|
||||||
|
'',
|
||||||
|
'%TRACEE ',
|
||||||
|
'%RUNTIME698',
|
||||||
|
}
|
||||||
|
local tests = {}
|
||||||
|
junit.__parse(table.concat(lines, '\n'), tests)
|
||||||
|
local expected = {
|
||||||
|
{
|
||||||
|
failed = true,
|
||||||
|
fq_class = 'io.foo.FooTest',
|
||||||
|
traces = {
|
||||||
|
'java.lang.UnsupportedOperationException: foo',
|
||||||
|
'\tat java.base/java.lang.Thread.run(Thread.java:833)',
|
||||||
|
'',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
assert.are.same(expected, tests)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
Loading…
Reference in a new issue