diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2015-01-23 07:48:44 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2015-01-23 07:48:55 -0300 |
commit | 641df7be9cc8168399ea05d61f7009770880f28f (patch) | |
tree | 34517c723b8c7d24fffe5099c86a75ef066c606c /test | |
parent | 0f39097e5348ae61dbf9a226ffde3bca6b75d659 (diff) | |
parent | a9048896b31cab7a03181f1b4754b6555f5d489c (diff) | |
download | rneovim-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.lua | 2 | ||||
-rw-r--r-- | test/functional/ui/screen.lua | 107 | ||||
-rw-r--r-- | test/functional/ui/screen_basic_spec.lua | 1 |
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() |