return { { 'nvim-neotest/neotest', dependencies = { 'nvim-lua/plenary.nvim', 'nvim-neotest/nvim-nio', 'nvim-treesitter/nvim-treesitter', 'nvim-neotest/neotest-python', 'alfaix/neotest-gtest', 'andythigpen/nvim-coverage', }, keys = { { 'tn', function() local neotest = require('neotest') neotest.summary.open({ enter = false }) neotest.run.run() end, desc = 'Test: Run nearest', }, { 'tf', function() local neotest = require('neotest') neotest.summary.open({ enter = false }) neotest.run.run(vim.fn.expand('%')) end, desc = 'Test: Run file', }, { 'ta', function() local neotest = require('neotest') neotest.summary.open({ enter = false }) neotest.run.run(vim.fn.getcwd()) end, desc = 'Test: Run all (cwd)', }, { 'td', function() local neotest = require('neotest') neotest.summary.open({ enter = false }) neotest.run.run({ strategy = 'dap' }) end, desc = 'Test: Debug nearest', }, { 'tx', function() require('neotest').run.stop() end, desc = 'Test: Stop', }, { 'ts', function() require('neotest').summary.toggle() end, desc = 'Test: Toggle summary', }, { 'to', function() require('neotest').output.open({ enter = true, auto_close = false }) end, desc = 'Test: Show output', }, { 'tw', function() require('neotest').watch.toggle(vim.fn.expand('%')) end, desc = 'Test: Watch file', }, { ']t', function() require('neotest').jump.next({ status = 'failed' }) end, desc = 'Test: Next failed', }, { '[t', function() require('neotest').jump.prev({ status = 'failed' }) end, desc = 'Test: Prev failed', }, { 'tC', function() local ok, coverage = pcall(require, 'coverage') if ok then coverage.toggle() end end, desc = 'Test: Toggle coverage', }, { 'tL', function() local ok, coverage = pcall(require, 'coverage') if ok then coverage.load(true) end end, desc = 'Test: Load coverage', }, }, config = function() local neotest = require('neotest') neotest.setup({ adapters = { require('neotest-python')({ runner = 'pytest', dap = { justMyCode = false }, }), require('neotest-gtest').setup({ debug_adapter = 'codelldb', }), }, output = { open_on_run = false }, summary = { open = 'botright vsplit | vertical resize 60' }, }) local ok_cov, coverage = pcall(require, 'coverage') if ok_cov then coverage.setup({ auto_reload = true, }) end end, }, }