mirror of
https://github.com/neovim/neovim.git
synced 2024-12-25 13:45:15 -07:00
258 lines
9.4 KiB
Lua
258 lines
9.4 KiB
Lua
local helpers = require('test.functional.helpers')(after_each)
|
|
local global_helpers = require('test.helpers')
|
|
local Screen = require('test.functional.ui.screen')
|
|
|
|
local clear = helpers.clear
|
|
local curbuf_contents = helpers.curbuf_contents
|
|
local command = helpers.command
|
|
local eq = helpers.eq
|
|
local getcompletion = helpers.funcs.getcompletion
|
|
|
|
describe(':checkhealth', function()
|
|
it("detects invalid $VIMRUNTIME", function()
|
|
clear({
|
|
env={ VIMRUNTIME='bogus', },
|
|
})
|
|
local status, err = pcall(command, 'checkhealth')
|
|
eq(false, status)
|
|
eq('Invalid $VIMRUNTIME: bogus', string.match(err, 'Invalid.*'))
|
|
end)
|
|
it("detects invalid 'runtimepath'", function()
|
|
clear()
|
|
command('set runtimepath=bogus')
|
|
local status, err = pcall(command, 'checkhealth')
|
|
eq(false, status)
|
|
eq("Invalid 'runtimepath'", string.match(err, 'Invalid.*'))
|
|
end)
|
|
it("detects invalid $VIM", function()
|
|
clear()
|
|
-- Do this after startup, otherwise it just breaks $VIMRUNTIME.
|
|
command("let $VIM='zub'")
|
|
command("checkhealth nvim")
|
|
eq("ERROR: $VIM is invalid: zub",
|
|
string.match(curbuf_contents(), "ERROR: $VIM .* zub"))
|
|
end)
|
|
it('completions can be listed via getcompletion()', function()
|
|
clear()
|
|
eq('nvim', getcompletion('nvim', 'checkhealth')[1])
|
|
eq('provider', getcompletion('prov', 'checkhealth')[1])
|
|
eq('vim.lsp', getcompletion('vim.ls', 'checkhealth')[1])
|
|
end)
|
|
end)
|
|
|
|
describe('health.vim', function()
|
|
before_each(function()
|
|
clear{args={'-u', 'NORC'}}
|
|
-- Provides functions:
|
|
-- health#broken#check()
|
|
-- health#success1#check()
|
|
-- health#success2#check()
|
|
command("set runtimepath+=test/functional/fixtures")
|
|
end)
|
|
|
|
describe(":checkhealth", function()
|
|
it("functions health#report_*() render correctly", function()
|
|
command("checkhealth full_render")
|
|
helpers.expect([[
|
|
|
|
full_render: health#full_render#check
|
|
========================================================================
|
|
## report 1
|
|
- OK: life is fine
|
|
- WARNING: no what installed
|
|
- ADVICE:
|
|
- pip what
|
|
- make what
|
|
|
|
## report 2
|
|
- INFO: stuff is stable
|
|
- ERROR: why no hardcopy
|
|
- ADVICE:
|
|
- :help |:hardcopy|
|
|
- :help |:TOhtml|
|
|
]])
|
|
end)
|
|
|
|
it("concatenates multiple reports", function()
|
|
command("checkhealth success1 success2 test_plug")
|
|
helpers.expect([[
|
|
|
|
success1: health#success1#check
|
|
========================================================================
|
|
## report 1
|
|
- OK: everything is fine
|
|
|
|
## report 2
|
|
- OK: nothing to see here
|
|
|
|
success2: health#success2#check
|
|
========================================================================
|
|
## another 1
|
|
- OK: ok
|
|
|
|
test_plug: require("test_plug.health").check()
|
|
========================================================================
|
|
## report 1
|
|
- OK: everything is fine
|
|
|
|
## report 2
|
|
- OK: nothing to see here
|
|
]])
|
|
end)
|
|
|
|
it("lua plugins, skips vimscript healthchecks with the same name", function()
|
|
command("checkhealth test_plug")
|
|
-- Existing file in test/functional/fixtures/lua/test_plug/autoload/health/test_plug.vim
|
|
-- and the Lua healthcheck is used instead.
|
|
helpers.expect([[
|
|
|
|
test_plug: require("test_plug.health").check()
|
|
========================================================================
|
|
## report 1
|
|
- OK: everything is fine
|
|
|
|
## report 2
|
|
- OK: nothing to see here
|
|
]])
|
|
end)
|
|
|
|
it("lua plugins submodules", function()
|
|
command("checkhealth test_plug.submodule")
|
|
helpers.expect([[
|
|
|
|
test_plug.submodule: require("test_plug.submodule.health").check()
|
|
========================================================================
|
|
## report 1
|
|
- OK: everything is fine
|
|
|
|
## report 2
|
|
- OK: nothing to see here
|
|
]])
|
|
end)
|
|
|
|
it("lua plugins submodules with expression '*'", function()
|
|
command("checkhealth test_plug*")
|
|
local buf_lines = helpers.curbuf('get_lines', 0, -1, true)
|
|
-- avoid dealing with path separators
|
|
local received = table.concat(buf_lines, '\n', 1, #buf_lines - 5)
|
|
local expected = helpers.dedent([[
|
|
|
|
test_plug: require("test_plug.health").check()
|
|
========================================================================
|
|
## report 1
|
|
- OK: everything is fine
|
|
|
|
## report 2
|
|
- OK: nothing to see here
|
|
|
|
test_plug.submodule: require("test_plug.submodule.health").check()
|
|
========================================================================
|
|
## report 1
|
|
- OK: everything is fine
|
|
|
|
## report 2
|
|
- OK: nothing to see here
|
|
|
|
test_plug.submodule_empty: require("test_plug.submodule_empty.health").check()
|
|
========================================================================
|
|
- ERROR: The healthcheck report for "test_plug.submodule_empty" plugin is empty.
|
|
|
|
test_plug.submodule_failed: require("test_plug.submodule_failed.health").check()
|
|
========================================================================
|
|
- ERROR: Failed to run healthcheck for "test_plug.submodule_failed" plugin. Exception:
|
|
function health#check, line 20]])
|
|
eq(expected, received)
|
|
end)
|
|
|
|
it("gracefully handles broken healthcheck", function()
|
|
command("checkhealth broken")
|
|
helpers.expect([[
|
|
|
|
broken: health#broken#check
|
|
========================================================================
|
|
- ERROR: Failed to run healthcheck for "broken" plugin. Exception:
|
|
function health#check[20]..health#broken#check, line 1
|
|
caused an error
|
|
]])
|
|
end)
|
|
|
|
it("... including empty reports", function()
|
|
command("checkhealth test_plug.submodule_empty")
|
|
helpers.expect([[
|
|
|
|
test_plug.submodule_empty: require("test_plug.submodule_empty.health").check()
|
|
========================================================================
|
|
- ERROR: The healthcheck report for "test_plug.submodule_empty" plugin is empty.
|
|
]])
|
|
end)
|
|
|
|
it("gracefully handles broken lua healthcheck", function()
|
|
command("checkhealth test_plug.submodule_failed")
|
|
local buf_lines = helpers.curbuf('get_lines', 0, -1, true)
|
|
local received = table.concat(buf_lines, '\n', 1, #buf_lines - 5)
|
|
-- avoid dealing with path separators
|
|
local lua_err = "attempt to perform arithmetic on a nil value"
|
|
local last_line = buf_lines[#buf_lines - 4]
|
|
assert(string.find(last_line, lua_err) ~= nil, "Lua error not present")
|
|
|
|
local expected = global_helpers.dedent([[
|
|
|
|
test_plug.submodule_failed: require("test_plug.submodule_failed.health").check()
|
|
========================================================================
|
|
- ERROR: Failed to run healthcheck for "test_plug.submodule_failed" plugin. Exception:
|
|
function health#check, line 20]])
|
|
eq(expected, received)
|
|
end)
|
|
|
|
it("highlights OK, ERROR", function()
|
|
local screen = Screen.new(72, 10)
|
|
screen:attach()
|
|
screen:set_default_attr_ids({
|
|
Ok = { foreground = Screen.colors.Grey3, background = 6291200 },
|
|
Error = { foreground = Screen.colors.Grey100, background = Screen.colors.Red },
|
|
Heading = { bold=true, foreground=Screen.colors.Magenta },
|
|
Heading2 = { foreground = Screen.colors.SlateBlue },
|
|
Bar = { foreground = 0x6a0dad },
|
|
Bullet = { bold=true, foreground=Screen.colors.Brown },
|
|
})
|
|
command("checkhealth foo success1")
|
|
command("1tabclose")
|
|
command("set laststatus=0")
|
|
screen:expect{grid=[[
|
|
^ |
|
|
{Heading:foo: } |
|
|
{Bar:========================================================================}|
|
|
{Bullet: -} {Error:ERROR}: No healthcheck found for "foo" plugin. |
|
|
|
|
|
{Heading:success1: health#success1#check} |
|
|
{Bar:========================================================================}|
|
|
{Heading2:##}{Heading: report 1} |
|
|
{Bullet: -} {Ok:OK}: everything is fine |
|
|
|
|
|
]]}
|
|
end)
|
|
|
|
it("gracefully handles invalid healthcheck", function()
|
|
command("checkhealth non_existent_healthcheck")
|
|
-- luacheck: ignore 613
|
|
helpers.expect([[
|
|
|
|
non_existent_healthcheck:
|
|
========================================================================
|
|
- ERROR: No healthcheck found for "non_existent_healthcheck" plugin.
|
|
]])
|
|
end)
|
|
end)
|
|
end)
|
|
|
|
describe(':checkhealth provider', function()
|
|
it("works correctly with a wrongly configured 'shell'", function()
|
|
clear()
|
|
command([[set shell=echo\ WRONG!!!]])
|
|
command('let g:loaded_perl_provider = 0')
|
|
command('let g:loaded_python3_provider = 0')
|
|
command('checkhealth provider')
|
|
eq(nil, string.match(curbuf_contents(), 'WRONG!!!'))
|
|
end)
|
|
end)
|