diff options
Diffstat (limited to 'test/functional/ui/screen.lua')
| -rw-r--r-- | test/functional/ui/screen.lua | 54 | 
1 files changed, 31 insertions, 23 deletions
| diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua index 2f2cc85dab..52e108f389 100644 --- a/test/functional/ui/screen.lua +++ b/test/functional/ui/screen.lua @@ -137,6 +137,7 @@ function Screen.new(width, height)      visual_bell = false,      suspended = false,      mode = 'normal', +    options = {},      _default_attr_ids = nil,      _default_attr_ignore = nil,      _mouse_enabled = true, @@ -176,6 +177,10 @@ function Screen:try_resize(columns, rows)    self:sleep(0.1)  end +function Screen:set_option(option, value) +  uimeths.set_option(option, value) +end +  -- Asserts that `expected` eventually matches the screen state.  --  -- expected:    Expected screen state (string). Each line represents a screen @@ -198,8 +203,9 @@ function Screen:expect(expected, attr_ids, attr_ignore, condition, any)      condition = expected      expected = nil    else -    -- Remove the last line and dedent. -    expected = dedent(expected:gsub('\n[ ]+$', '')) +    -- Remove the last line and dedent. Note that gsub returns more then one +    -- value. +    expected = dedent(expected:gsub('\n[ ]+$', ''), 0)      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) @@ -250,7 +256,7 @@ function Screen:expect(expected, attr_ids, attr_ignore, condition, any)              ..'Expected:\n  |'..table.concat(msg_expected_rows, '|\n  |')..'|\n'              ..'Actual:\n  |'..table.concat(actual_rows, '|\n  |')..'|\n\n'..[[  To print the expect() call that would assert the current screen state, use -screen:snaphot_util(). In case of non-deterministic failures, use +screen:snapshot_util(). In case of non-deterministic failures, use  screen:redraw_debug() to show all intermediate screen states.  ]])          end        end @@ -284,18 +290,13 @@ function Screen:wait(check, timeout)    if failure_after_success then      print([[ -Warning: Screen changes have been received after the expected state was seen. -This is probably due to an indeterminism in the test. Try adding -`wait()` (or even a separate `screen:expect(...)`) at a point of possible -indeterminism, typically in between a `feed()` or `execute()` which is non- -synchronous, and a synchronous api call. - -Note that sometimes a `wait` can trigger redraws and consequently generate more -indeterminism. If adding `wait` calls seems to increase the frequency of these -messages, try removing every `wait` call in the test. - -If everything else fails, use Screen:redraw_debug to help investigate what is -  causing the problem. + +Warning: Screen changes were received after the expected state. This indicates +indeterminism in the test. Try adding wait() (or screen:expect(...)) between +asynchronous (feed(), nvim_input()) and synchronous API calls. +  - Use Screen:redraw_debug() to investigate the problem. +  - wait() can trigger redraws and consequently generate more indeterminism. +    In that case try removing every wait().        ]])      local tb = debug.traceback()      local index = string.find(tb, '\n%s*%[C]') @@ -317,12 +318,13 @@ function Screen:_redraw(updates)      -- print(require('inspect')(update))      local method = update[1]      for i = 2, #update do -      local handler = self['_handle_'..method] +      local handler_name = '_handle_'..method +      local handler = self[handler_name]        if handler ~= nil then          handler(self, unpack(update[i]))        else          assert(self._on_event, -          "Add Screen:_handle_XXX method or call Screen:set_on_event_handler") +          "Add Screen:"..handler_name.." or call Screen:set_on_event_handler")          self._on_event(method, update[i])        end      end @@ -353,9 +355,9 @@ function Screen:_handle_resize(width, height)    }  end -function Screen:_handle_cursor_style_set(enabled, style) -  self._cursor_style_enabled = enabled -  self._cursor_style = style +function Screen:_handle_mode_info_set(cursor_style_enabled, mode_info) +  self._cursor_style_enabled = cursor_style_enabled +  self._mode_info = mode_info  end  function Screen:_handle_clear() @@ -389,9 +391,8 @@ function Screen:_handle_mouse_off()    self._mouse_enabled = false  end -function Screen:_handle_mode_change(mode) -  assert(mode == 'insert' or mode == 'replace' -        or mode == 'normal' or mode == 'cmdline') +function Screen:_handle_mode_change(mode, idx) +  assert(mode == self._mode_info[idx+1].name)    self.mode = mode  end @@ -454,6 +455,9 @@ function Screen:_handle_visual_bell()    self.visual_bell = true  end +function Screen:_handle_default_colors_set() +end +  function Screen:_handle_update_fg(fg)    self._fg = fg  end @@ -482,6 +486,10 @@ function Screen:_handle_set_icon(icon)    self.icon = icon  end +function Screen:_handle_option_set(name, value) +  self.options[name] = value +end +  function Screen:_clear_block(top, bot, left, right)    for i = top, bot do      self:_clear_row_section(i, left, right) | 
