aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/functional/autocmd/termclose_spec.lua14
-rw-r--r--test/functional/ui/cursor_spec.lua69
-rw-r--r--test/functional/ui/screen.lua32
-rw-r--r--test/functional/ui/screen_basic_spec.lua50
4 files changed, 79 insertions, 86 deletions
diff --git a/test/functional/autocmd/termclose_spec.lua b/test/functional/autocmd/termclose_spec.lua
index ecda1bffb7..d4beab22e4 100644
--- a/test/functional/autocmd/termclose_spec.lua
+++ b/test/functional/autocmd/termclose_spec.lua
@@ -14,17 +14,11 @@ describe('TermClose event', function()
nvim('set_option', 'shellcmdflag', 'EXE')
end)
- local function eq_err(expected, actual)
- if expected ~= actual then
- error('expected: '..tostring(expected)..', actual: '..tostring(actual))
- end
- end
-
it('triggers when terminal job ends', function()
command('autocmd TermClose * let g:test_termclose = 23')
command('terminal')
command('call jobstop(b:terminal_job_id)')
- retry(nil, nil, function() eq_err(23, eval('g:test_termclose')) end)
+ retry(nil, nil, function() eq(23, eval('g:test_termclose')) end)
end)
it('reports the correct <abuf>', function()
@@ -35,12 +29,12 @@ describe('TermClose event', function()
eq(2, eval('bufnr("%")'))
command('terminal')
- retry(nil, nil, function() eq_err(3, eval('bufnr("%")')) end)
+ retry(nil, nil, function() eq(3, eval('bufnr("%")')) end)
command('buffer 1')
- retry(nil, nil, function() eq_err(1, eval('bufnr("%")')) end)
+ retry(nil, nil, function() eq(1, eval('bufnr("%")')) end)
command('3bdelete!')
- retry(nil, nil, function() eq_err('3', eval('g:abuf')) end)
+ retry(nil, nil, function() eq('3', eval('g:abuf')) end)
end)
end)
diff --git a/test/functional/ui/cursor_spec.lua b/test/functional/ui/cursor_spec.lua
index 3ec3ffd08c..02e9422781 100644
--- a/test/functional/ui/cursor_spec.lua
+++ b/test/functional/ui/cursor_spec.lua
@@ -3,7 +3,6 @@ local Screen = require('test.functional.ui.screen')
local clear, meths = helpers.clear, helpers.meths
local eq = helpers.eq
local command = helpers.command
-local wait = helpers.wait
describe('ui/cursor', function()
local screen
@@ -19,8 +18,6 @@ describe('ui/cursor', function()
end)
it("'guicursor' is published as a UI event", function()
- wait()
- screen:expect('', nil, nil, nil, true) -- Tickle the event-loop.
local expected_cursor_style = {
cmdline_hover = {
mouse_shape = 0,
@@ -142,44 +139,54 @@ describe('ui/cursor', function()
vsep_hover = {
mouse_shape = 0,
short_name = 'vs' }
- }
- -- Default 'guicursor' published on startup.
- eq(expected_cursor_style, screen._cursor_style)
- eq(true, screen._cursor_style_enabled)
- eq('normal', screen.mode)
+ }
+
+ screen:expect(function()
+ -- Default 'guicursor' published on startup.
+ eq(expected_cursor_style, screen._cursor_style)
+ eq(true, screen._cursor_style_enabled)
+ eq('normal', screen.mode)
+ end)
-- Event is published ONLY if the cursor style changed.
screen._cursor_style = nil
- wait()
- screen:expect('', nil, nil, nil, true) -- Tickle the event-loop.
- eq(nil, screen._cursor_style)
+ command("echo 'test'")
+ screen:expect([[
+ ^ |
+ ~ |
+ ~ |
+ ~ |
+ test |
+ ]], nil, nil, function()
+ eq(nil, screen._cursor_style)
+ end)
-- Change the cursor style.
meths.set_option('guicursor', 'n-v-c:ver35-blinkwait171-blinkoff172-blinkon173,ve:hor35,o:ver50,i-ci:block,r-cr:hor90,sm:ver42')
- wait()
- screen:expect('', nil, nil, nil, true) -- Tickle the event-loop.
- eq('vertical', screen._cursor_style.normal.cursor_shape)
- eq('horizontal', screen._cursor_style.visual_select.cursor_shape)
- eq('vertical', screen._cursor_style.operator.cursor_shape)
- eq('block', screen._cursor_style.insert.cursor_shape)
- eq('vertical', screen._cursor_style.showmatch.cursor_shape)
- eq(171, screen._cursor_style.normal.blinkwait)
- eq(172, screen._cursor_style.normal.blinkoff)
- eq(173, screen._cursor_style.normal.blinkon)
+ screen:expect(function()
+ eq('vertical', screen._cursor_style.normal.cursor_shape)
+ eq('horizontal', screen._cursor_style.visual_select.cursor_shape)
+ eq('vertical', screen._cursor_style.operator.cursor_shape)
+ eq('block', screen._cursor_style.insert.cursor_shape)
+ eq('vertical', screen._cursor_style.showmatch.cursor_shape)
+ eq(171, screen._cursor_style.normal.blinkwait)
+ eq(172, screen._cursor_style.normal.blinkoff)
+ eq(173, screen._cursor_style.normal.blinkon)
+ end)
end)
it("empty 'guicursor' sets cursor_shape=block in all modes", function()
meths.set_option('guicursor', '')
- command('redraw')
- screen:expect('', nil, nil, nil, true) -- Tickle the event-loop.
- -- Empty 'guicursor' sets enabled=false.
- eq(false, screen._cursor_style_enabled)
- for _, m in ipairs({ 'cmdline_insert', 'cmdline_normal', 'cmdline_replace', 'insert',
- 'showmatch', 'normal', 'replace', 'visual',
- 'visual_select', }) do
- eq('block', screen._cursor_style[m].cursor_shape)
- eq(0, screen._cursor_style[m].blinkon)
- end
+ screen:expect(function()
+ -- Empty 'guicursor' sets enabled=false.
+ eq(false, screen._cursor_style_enabled)
+ for _, m in ipairs({ 'cmdline_insert', 'cmdline_normal', 'cmdline_replace', 'insert',
+ 'showmatch', 'normal', 'replace', 'visual',
+ 'visual_select', }) do
+ eq('block', screen._cursor_style[m].cursor_shape)
+ eq(0, screen._cursor_style[m].blinkon)
+ end
+ end)
end)
end)
diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua
index ff71194dab..2f2cc85dab 100644
--- a/test/functional/ui/screen.lua
+++ b/test/functional/ui/screen.lua
@@ -181,6 +181,7 @@ end
-- expected: Expected screen state (string). Each line represents a screen
-- row. Last character of each row (typically "|") is stripped.
-- Common indentation is stripped.
+-- Used as `condition` if NOT a string; must be the ONLY arg then.
-- attr_ids: Expected text attributes. Screen rows are transformed according
-- to this table, as follows: each substring S composed of
-- characters having the same attributes will be substituted by
@@ -191,18 +192,23 @@ end
-- any: true: Succeed if `expected` matches ANY screen line(s).
-- false (default): `expected` must match screen exactly.
function Screen:expect(expected, attr_ids, attr_ignore, condition, any)
- -- remove the last line and dedent
- expected = dedent(expected:gsub('\n[ ]+$', ''))
local expected_rows = {}
- for row in expected:gmatch('[^\n]+') do
- -- the last character should be the screen delimiter
- row = row:sub(1, #row - 1)
- table.insert(expected_rows, row)
- end
- if not any then
- assert(self._height == #expected_rows,
- "Expected screen state's row count(" .. #expected_rows
- .. ') differs from configured height(' .. self._height .. ') of Screen.')
+ if type(expected) ~= "string" then
+ assert(not (attr_ids or attr_ignore or condition or any))
+ condition = expected
+ expected = nil
+ else
+ -- Remove the last line and dedent.
+ expected = dedent(expected:gsub('\n[ ]+$', ''))
+ for row in expected:gmatch('[^\n]+') do
+ row = row:sub(1, #row - 1) -- Last char must be the screen delimiter.
+ table.insert(expected_rows, row)
+ end
+ if not any then
+ assert(self._height == #expected_rows,
+ "Expected screen state's row count(" .. #expected_rows
+ .. ') differs from configured height(' .. self._height .. ') of Screen.')
+ end
end
local ids = attr_ids or self._default_attr_ids
local ignore = attr_ignore or self._default_attr_ignore
@@ -218,7 +224,9 @@ function Screen:expect(expected, attr_ids, attr_ignore, condition, any)
actual_rows[i] = self:_row_repr(self._rows[i], ids, ignore)
end
- if any then
+ if expected == nil then
+ return
+ elseif any then
-- Search for `expected` anywhere in the screen lines.
local actual_screen_str = table.concat(actual_rows, '\n')
if nil == string.find(actual_screen_str, expected) then
diff --git a/test/functional/ui/screen_basic_spec.lua b/test/functional/ui/screen_basic_spec.lua
index e511234e5e..21953ba294 100644
--- a/test/functional/ui/screen_basic_spec.lua
+++ b/test/functional/ui/screen_basic_spec.lua
@@ -73,33 +73,29 @@ describe('Screen', function()
describe(':suspend', function()
it('is forwarded to the UI', function()
local function check()
- if not screen.suspended then
- return 'Screen was not suspended'
- end
+ eq(true, screen.suspended)
end
execute('suspend')
- screen:wait(check)
+ screen:expect(check)
screen.suspended = false
feed('<c-z>')
- screen:wait(check)
+ screen:expect(check)
end)
end)
describe('bell/visual bell', function()
it('is forwarded to the UI', function()
feed('<left>')
- screen:wait(function()
- if not screen.bell or screen.visual_bell then
- return 'Bell was not sent'
- end
+ screen:expect(function()
+ eq(true, screen.bell)
+ eq(false, screen.visual_bell)
end)
screen.bell = false
execute('set visualbell')
feed('<left>')
- screen:wait(function()
- if not screen.visual_bell or screen.bell then
- return 'Visual bell was not sent'
- end
+ screen:expect(function()
+ eq(true, screen.visual_bell)
+ eq(false, screen.bell)
end)
end)
end)
@@ -109,22 +105,16 @@ describe('Screen', function()
local expected = 'test-title'
execute('set titlestring='..expected)
execute('set title')
- screen:wait(function()
- local actual = screen.title
- if actual ~= expected then
- return 'Expected title to be "'..expected..'" but was "'..actual..'"'
- end
+ screen:expect(function()
+ eq(expected, screen.title)
end)
end)
it('has correct default title with unnamed file', function()
local expected = '[No Name] - NVIM'
execute('set title')
- screen:wait(function()
- local actual = screen.title
- if actual ~= expected then
- return 'Expected title to be "'..expected..'" but was "'..actual..'"'
- end
+ screen:expect(function()
+ eq(expected, screen.title)
end)
end)
@@ -132,11 +122,8 @@ describe('Screen', function()
local expected = 'myfile (/mydir) - NVIM'
execute('set title')
execute('file /mydir/myfile')
- screen:wait(function()
- local actual = screen.title
- if actual ~= expected then
- return 'Expected title to be "'..expected..'" but was "'..actual..'"'
- end
+ screen:expect(function()
+ eq(expected, screen.title)
end)
end)
end)
@@ -146,11 +133,8 @@ describe('Screen', function()
local expected = 'test-icon'
execute('set iconstring='..expected)
execute('set icon')
- screen:wait(function()
- local actual = screen.icon
- if actual ~= expected then
- return 'Expected title to be "'..expected..'" but was "'..actual..'"'
- end
+ screen:expect(function()
+ eq(expected, screen.icon)
end)
end)
end)