aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2015-01-23 07:48:44 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2015-01-23 07:48:55 -0300
commit641df7be9cc8168399ea05d61f7009770880f28f (patch)
tree34517c723b8c7d24fffe5099c86a75ef066c606c /test
parent0f39097e5348ae61dbf9a226ffde3bca6b75d659 (diff)
parenta9048896b31cab7a03181f1b4754b6555f5d489c (diff)
downloadrneovim-641df7be9cc8168399ea05d61f7009770880f28f.tar.gz
rneovim-641df7be9cc8168399ea05d61f7009770880f28f.tar.bz2
rneovim-641df7be9cc8168399ea05d61f7009770880f28f.zip
Merge PR #1835 'snapshot_util (Screen Tests for the Lazy) and enable stricter highlight tests'
Diffstat (limited to 'test')
-rw-r--r--test/functional/ui/highlight_spec.lua2
-rw-r--r--test/functional/ui/screen.lua107
-rw-r--r--test/functional/ui/screen_basic_spec.lua1
3 files changed, 100 insertions, 10 deletions
diff --git a/test/functional/ui/highlight_spec.lua b/test/functional/ui/highlight_spec.lua
index 701297cc15..15d5839ca5 100644
--- a/test/functional/ui/highlight_spec.lua
+++ b/test/functional/ui/highlight_spec.lua
@@ -52,6 +52,8 @@ describe('Default highlight groups', function()
[1] = {reverse = true, bold = true}, -- StatusLine
[2] = {reverse = true} -- StatusLineNC
})
+ --ignore highligting of ~-lines
+ screen:set_default_attr_ignore( {{}, {bold=true, foreground=hlgroup_colors.NonText}} )
execute('sp', 'vsp', 'vsp')
screen:expect([[
^ {2:|} {2:|} |
diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua
index 27e5900338..29bbe69d8b 100644
--- a/test/functional/ui/screen.lua
+++ b/test/functional/ui/screen.lua
@@ -112,6 +112,7 @@ function Screen.new(width, height)
visual_bell = false,
suspended = false,
_default_attr_ids = nil,
+ _default_attr_ignore = nil,
_mode = 'normal',
_mouse_enabled = true,
_attrs = {},
@@ -127,6 +128,10 @@ function Screen:set_default_attr_ids(attr_ids)
self._default_attr_ids = attr_ids
end
+function Screen:set_default_attr_ignore(attr_ignore)
+ self._default_attr_ignore = attr_ignore
+end
+
function Screen:attach()
request('ui_attach', self._width, self._height, true)
end
@@ -139,7 +144,7 @@ function Screen:try_resize(columns, rows)
request('ui_try_resize', columns, rows)
end
-function Screen:expect(expected, attr_ids)
+function Screen:expect(expected, attr_ids, attr_ignore)
-- remove the last line and dedent
expected = dedent(expected:gsub('\n[ ]+$', ''))
local expected_rows = {}
@@ -149,10 +154,19 @@ function Screen:expect(expected, attr_ids)
table.insert(expected_rows, row)
end
local ids = attr_ids or self._default_attr_ids
+ if attr_ignore == nil and self._default_attr_ignore ~= nil then
+ attr_ignore = {}
+ -- don't ignore something we specified in attr_ids
+ for i,a in pairs(self._default_attr_ignore) do
+ if attr_index(ids, a) == nil then
+ table.insert(attr_ignore, a)
+ end
+ end
+ end
self:wait(function()
for i = 1, self._height do
local expected_row = expected_rows[i]
- local actual_row = self:_row_repr(self._rows[i], ids)
+ local actual_row = self:_row_repr(self._rows[i], ids, attr_ignore)
if expected_row ~= actual_row then
return 'Row '..tostring(i)..' didnt match.\nExpected: "'..
expected_row..'"\nActual: "'..actual_row..'"'
@@ -344,11 +358,11 @@ function Screen:_clear_row_section(rownum, startcol, stopcol)
end
end
-function Screen:_row_repr(row, attr_ids)
+function Screen:_row_repr(row, attr_ids, attr_ignore)
local rv = {}
local current_attr_id
for i = 1, self._width do
- local attr_id = get_attr_id(attr_ids, row[i].attrs)
+ local attr_id = get_attr_id(attr_ids, attr_ignore, row[i].attrs)
if current_attr_id and attr_id ~= current_attr_id then
-- close current attribute bracket, add it before any whitespace
-- up to the current cell
@@ -385,6 +399,59 @@ function Screen:_current_screen()
return table.concat(rv, '\n')
end
+function Screen:snapshot_util(attrs, ignore)
+ -- util to generate screen test
+ pcall(function() self:wait(function() return "error" end, 250) end)
+ if ignore == nil then
+ ignore = self._default_attr_ignore
+ end
+ if attrs == nil then
+ attrs = {}
+ if self._default_attr_ids ~= nil then
+ for i, a in ipairs(self._default_attr_ids) do
+ attrs[i] = a
+ end
+ end
+
+ for i = 1, self._height do
+ local row = self._rows[i]
+ for j = 1, self._width do
+ local attr = row[j].attrs
+ if attr_index(attrs, attr) == nil and attr_index(ignore, attr) == nil then
+ table.insert(attrs, attr)
+ end
+ end
+ end
+ end
+
+ local rv = {}
+ for i = 1, self._height do
+ table.insert(rv, " "..self:_row_repr(self._rows[i],attrs, ignore).."|")
+ end
+ local attrstrs = {}
+ local alldefault = true
+ for i, a in ipairs(attrs) do
+ if self._default_attr_ids == nil or self._default_attr_ids[i] ~= a then
+ alldefault = false
+ end
+ local items = {}
+ for f, v in pairs(a) do
+ table.insert(items, f.." = "..tostring(v))
+ end
+ local dict = "{"..table.concat(items, ", ").."}"
+ table.insert(attrstrs, "["..tostring(i).."] = "..dict)
+ end
+ local attrstr = "{"..table.concat(attrstrs, ", ").."}"
+ print( "\nscreen:expect([[")
+ print( table.concat(rv, '\n'))
+ if alldefault then
+ print( "]])\n")
+ else
+ print( "]], "..attrstr..")\n")
+ end
+end
+
+
function backward_find_meaningful(tbl, from)
for i = from or #tbl, 1, -1 do
if tbl[i] ~= ' ' then
@@ -394,19 +461,39 @@ function backward_find_meaningful(tbl, from)
return from
end
-function get_attr_id(attr_ids, attrs)
+function get_attr_id(attr_ids, attr_ignore, attrs)
if not attr_ids then
return
end
for id, a in pairs(attr_ids) do
- if a.bold == attrs.bold and a.standout == attrs.standout and
- a.underline == attrs.underline and a.undercurl == attrs.undercurl and
- a.italic == attrs.italic and a.reverse == attrs.reverse and
- a.foreground == attrs.foreground and
- a.background == attrs.background then
+ if equal_attrs(a, attrs) then
return id
end
end
+ if attr_ignore == nil or attr_index(attr_ignore, attrs) ~= nil then
+ -- ignore this attrs
+ return nil
+ end
+ return "UNEXPECTED"
+end
+
+function equal_attrs(a, b)
+ return a.bold == b.bold and a.standout == b.standout and
+ a.underline == b.underline and a.undercurl == b.undercurl and
+ a.italic == b.italic and a.reverse == b.reverse and
+ a.foreground == b.foreground and
+ a.background == b.background
+end
+
+function attr_index(attrs, attr)
+ if not attrs then
+ return nil
+ end
+ for i,a in pairs(attrs) do
+ if equal_attrs(a, attr) then
+ return i
+ end
+ end
return nil
end
diff --git a/test/functional/ui/screen_basic_spec.lua b/test/functional/ui/screen_basic_spec.lua
index 4ee6c43528..06edf44a7c 100644
--- a/test/functional/ui/screen_basic_spec.lua
+++ b/test/functional/ui/screen_basic_spec.lua
@@ -10,6 +10,7 @@ describe('Screen', function()
clear()
screen = Screen.new()
screen:attach()
+ screen:set_default_attr_ignore( {{}, {bold=true, foreground=255}} )
end)
after_each(function()