neovim/test/functional/ui/options_spec.lua
Björn Linse 4987311fb5 tests/ui: remove unnecessary screen:detach()
It is perfectly fine and expected to detach from the screen just by
the UI disconnecting from nvim or exiting nvim. Just keep detach() in
screen_basic_spec, to get some coverage of the detach method itself.

This avoids hang on failure in many situations (though one could argue
that detach() should be "fast", or at least "as fast as resize",
which works in press-return already).

Never use detach() just to change the size of the screen, try_resize()
method exists for that specifically.
2019-10-13 22:10:42 +02:00

124 lines
3.2 KiB
Lua

local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local clear = helpers.clear
local command = helpers.command
local eq = helpers.eq
local shallowcopy = helpers.shallowcopy
describe('ui receives option updates', function()
local screen
local function reset(opts, ...)
local defaults = {
ambiwidth='single',
arabicshape=true,
emoji=true,
guifont='',
guifontset='',
guifontwide='',
linespace=0,
pumblend=0,
showtabline=1,
termguicolors=false,
ext_cmdline=false,
ext_popupmenu=false,
ext_tabline=false,
ext_wildmenu=false,
ext_linegrid=false,
ext_hlstate=false,
ext_multigrid=false,
ext_messages=false,
ext_termcolors=false,
}
clear(...)
screen = Screen.new(20,5)
screen:attach(opts)
-- NB: UI test suite can be run in both "linegrid" and legacy grid mode.
-- In both cases check that the received value is the one requested.
defaults.ext_linegrid = screen._options.ext_linegrid or false
return defaults
end
it("for defaults", function()
local expected = reset()
screen:expect(function()
eq(expected, screen.options)
end)
end)
it("when setting options", function()
local expected = reset()
local defaults = shallowcopy(expected)
command("set termguicolors")
expected.termguicolors = true
screen:expect(function()
eq(expected, screen.options)
end)
command("set guifont=Comic\\ Sans")
expected.guifont = "Comic Sans"
screen:expect(function()
eq(expected, screen.options)
end)
command("set showtabline=0")
expected.showtabline = 0
screen:expect(function()
eq(expected, screen.options)
end)
command("set linespace=13")
expected.linespace = 13
screen:expect(function()
eq(expected, screen.options)
end)
command("set linespace=-11")
expected.linespace = -11
screen:expect(function()
eq(expected, screen.options)
end)
command("set all&")
screen:expect(function()
eq(defaults, screen.options)
end)
end)
it('with UI extensions', function()
local expected = reset({ext_cmdline=true, ext_wildmenu=true})
expected.ext_cmdline = true
expected.ext_wildmenu = true
screen:expect(function()
eq(expected, screen.options)
end)
screen:set_option('ext_popupmenu', true)
expected.ext_popupmenu = true
screen:expect(function()
eq(expected, screen.options)
end)
screen:set_option('ext_wildmenu', false)
expected.ext_wildmenu = false
screen:expect(function()
eq(expected, screen.options)
end)
end)
local function startup_test(headless)
local expected = reset(nil, {args_rm=(headless and {} or {'--headless'}),
args={'--cmd', 'set guifont=Comic\\ Sans\\ 12'}})
expected.guifont = "Comic Sans 12"
screen:expect(function()
eq(expected, screen.options)
end)
end
it('from startup options with --headless', function() startup_test(true) end)
it('from startup options with --embed', function() startup_test(false) end)
end)