diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2019-07-20 15:49:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-20 15:49:49 +0200 |
commit | 02e7ef4978767b50ce797ce95f90117ca9fd1f89 (patch) | |
tree | fee0a98a790bf91c0702c3d454c94019e0d03427 | |
parent | 7935f6ce35fd65225b2bd6921078ef1036b19ae5 (diff) | |
parent | d19d9e4d9eaffa7cd23dd71329531c88f59274c7 (diff) | |
download | rneovim-02e7ef4978767b50ce797ce95f90117ca9fd1f89.tar.gz rneovim-02e7ef4978767b50ce797ce95f90117ca9fd1f89.tar.bz2 rneovim-02e7ef4978767b50ce797ce95f90117ca9fd1f89.zip |
Merge #10550 'screen.lua: expect_unchanged()'
-rw-r--r-- | test/functional/ui/screen.lua | 52 | ||||
-rw-r--r-- | test/functional/ui/searchhl_spec.lua | 27 |
2 files changed, 44 insertions, 35 deletions
diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua index eb059c38ee..c067cca048 100644 --- a/test/functional/ui/screen.lua +++ b/test/functional/ui/screen.lua @@ -447,6 +447,18 @@ screen:redraw_debug() to show all intermediate screen states. ]]) end, expected) end +function Screen:expect_unchanged(waittime_ms, ignore_attrs, request_cb) + waittime_ms = waittime_ms and waittime_ms or 100 + -- Collect the current screen state. + self:sleep(waittime_ms, request_cb) + local kwargs = self:get_snapshot(nil, ignore_attrs) + -- Wait for potential changes. + self:sleep(waittime_ms, request_cb) + kwargs.unchanged = true + -- Check that screen state did not change. + self:expect(kwargs) +end + function Screen:_wait(check, flags) local err, checked = false, false local success_seen = false @@ -477,8 +489,8 @@ function Screen:_wait(check, flags) immediate_seen = true end - -- for an unchanged test, flags.timeout means the time during the state is - -- expected to be unchanged, so always wait this full time. + -- For an "unchanged" test, flags.timeout is the time during which the state + -- must not change, so always wait this full time. if (flags.unchanged or flags.intermediate) and flags.timeout ~= nil then minimal_timeout = timeout end @@ -1214,7 +1226,9 @@ local remove_all_metatables = function(item, path) if path[#path] ~= inspect.METATABLE then return item end end -function Screen:print_snapshot(attrs, ignore) +-- Returns the current screen state in the form of a screen:expect() +-- keyword-args map. +function Screen:get_snapshot(attrs, ignore) attrs = attrs or self._default_attr_ids if ignore == nil then ignore = self._default_attr_ignore @@ -1237,15 +1251,32 @@ function Screen:print_snapshot(attrs, ignore) local lines = self:render(true, attr_state, true) local ext_state = self:_extstate_repr(attr_state) - local keys = false for k, v in pairs(ext_state) do if isempty(v) then ext_state[k] = nil -- deleting keys while iterating is ok - else - keys = true end end + -- Build keyword-args for screen:expect(). + local kwargs = {} + if attr_state.modified then + kwargs['attr_ids'] = {} + for i, a in pairs(attr_state.ids) do + kwargs['attr_ids'][i] = a + end + end + kwargs['grid'] = table.concat(lines, '\n') + for _, k in ipairs(ext_keys) do + if ext_state[k] ~= nil then + kwargs[k] = ext_state[k] + end + end + + return kwargs, ext_state, attr_state +end + +function Screen:print_snapshot(attrs, ignore) + local kwargs, ext_state, attr_state = self:get_snapshot(attrs, ignore) local attrstr = "" if attr_state.modified then local attrstrs = {} @@ -1259,11 +1290,10 @@ function Screen:print_snapshot(attrs, ignore) local keyval = (type(i) == "number") and "["..tostring(i).."]" or i table.insert(attrstrs, " "..keyval.." = "..dict..",") end - attrstr = (", "..(keys and "attr_ids=" or "") - .."{\n"..table.concat(attrstrs, "\n").."\n}") + attrstr = (", attr_ids={\n"..table.concat(attrstrs, "\n").."\n}") end - print( "\nscreen:expect"..(keys and "{grid=" or "(").."[[") - print( table.concat(lines, '\n')) + print( "\nscreen:expect{grid=[[") + print(kwargs.grid) io.stdout:write( "]]"..attrstr) for _, k in ipairs(ext_keys) do if ext_state[k] ~= nil then @@ -1271,7 +1301,7 @@ function Screen:print_snapshot(attrs, ignore) io.stdout:write(", "..k.."="..inspect(ext_state[k],{process=remove_all_metatables})) end end - print((keys and "}" or ")").."\n") + print("}\n") io.stdout:flush() end diff --git a/test/functional/ui/searchhl_spec.lua b/test/functional/ui/searchhl_spec.lua index 65ae124353..c68a2bad45 100644 --- a/test/functional/ui/searchhl_spec.lua +++ b/test/functional/ui/searchhl_spec.lua @@ -5,8 +5,7 @@ local command = helpers.command local feed_command = helpers.feed_command local eq = helpers.eq local eval = helpers.eval -local iswin = helpers.iswin -local sleep = helpers.sleep +local nvim_dir = helpers.nvim_dir describe('search highlighting', function() local screen @@ -148,11 +147,7 @@ describe('search highlighting', function() end) it('is preserved during :terminal activity', function() - if iswin() then - feed([[:terminal for /L \%I in (1,1,5000) do @(echo xxx & echo xxx & echo xxx)<cr>]]) - else - feed([[:terminal for i in $(seq 1 5000); do printf 'xxx\nxxx\nxxx\n'; done<cr>]]) - end + feed([[:terminal "]]..nvim_dir..[[/shell-test" REP 5000 foo<cr>]]) feed(':file term<CR>') feed(':vnew<CR>') @@ -162,23 +157,7 @@ describe('search highlighting', function() bar foo baz ]]) feed('/foo') - sleep(50) -- Allow some terminal activity. - -- NB: in earlier versions terminal output was redrawn during cmdline mode. - -- For now just assert that the screens remain unchanged. - screen:expect([[ - {3:foo} bar baz {3:│} | - bar baz {2:foo} {3:│} | - bar {2:foo} baz {3:│} | - {3:│} | - {1:~ }{3:│} | - {5:[No Name] [+] }{3:term }| - /foo^ | - ]], { [1] = {bold = true, foreground = Screen.colors.Blue1}, - [2] = {background = Screen.colors.Yellow}, - [3] = {reverse = true}, - [4] = {foreground = Screen.colors.Red}, - [5] = {bold = true, reverse = true}, - }) + screen:expect_unchanged() end) it('works with incsearch', function() |