diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2014-11-21 13:06:03 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-11-21 15:39:04 -0300 |
commit | 179c51319df0bc6f75a1376a0ca337c34d0a0b87 (patch) | |
tree | bdc2c0cfa0ba4c441185a4c9d32e659969d4cbd3 /test/functional/helpers.lua | |
parent | e15485c5d659977d0a8f20f7f7f319dac2423a0e (diff) | |
download | rneovim-179c51319df0bc6f75a1376a0ca337c34d0a0b87.tar.gz rneovim-179c51319df0bc6f75a1376a0ca337c34d0a0b87.tar.bz2 rneovim-179c51319df0bc6f75a1376a0ca337c34d0a0b87.zip |
test: Refactor functional helpers to use vim_input
The vim_input function accepts raw terminal input and so is better to emulate
real user, especially because it is not deferred as vim_feedkeys.
Using this function required a number of changes:
- expect() was refactored to use curbuf_contents()
- The vim_eval function in request() was moved to curbuf_contents(). For most
cases this is enough(we only care for synchronizing api calls with user input
when verifying buffer contents).
- <C-@>(NUL) is preprocessed before being passed to replace_termcodes.
- Legacy test 4 had a bug that only became visible when using vim_input, it is
fixed now.
- An extra blank line deletion was required for test 101
The last two items show that vim_feedkeys because it is not 100% equivalent to
receiving terminal input.
Diffstat (limited to 'test/functional/helpers.lua')
-rw-r--r-- | test/functional/helpers.lua | 50 |
1 files changed, 24 insertions, 26 deletions
diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua index 2c08fb7818..4a98056104 100644 --- a/test/functional/helpers.lua +++ b/test/functional/helpers.lua @@ -42,7 +42,6 @@ local function request(method, ...) if not loop_stopped then -- Except when the loop has been stopped by a notification triggered -- by the initial request, for example. - session:request('vim_eval', '1') end return rv end @@ -99,25 +98,20 @@ local function nvim_eval(expr) return request('vim_eval', expr) end -local function nvim_feed(input, mode) - mode = mode or '' - request('vim_feedkeys', input, mode) -end - -local function buffer_slice(start, stop, buffer_idx) - local include_end = false - if not stop then - stop = -1 - include_end = true +local function nvim_feed(input) + while #input > 0 do + local written = request('vim_input', input) + input = input:sub(written + 1) end - local buffer = request('vim_get_buffers')[buffer_idx or 1] - local slice = request('buffer_get_line_slice', buffer, start or 0, stop, - true, include_end) - return table.concat(slice, '\n') end local function nvim_replace_termcodes(input) - return request('vim_replace_termcodes', input, false, true, true) + -- small hack to stop <C-@> from being replaced by the internal + -- representation(which is different and won't work for vim_input) + local temp_replacement = 'CCCCCCCCC@@@@@@@@@@' + input = input:gsub('<[Cc][-]@>', temp_replacement) + local rv = request('vim_replace_termcodes', input, false, true, true) + return rv:gsub(temp_replacement, '\000') end local function dedent(str) @@ -150,7 +144,7 @@ end local function rawfeed(...) for _, v in ipairs({...}) do - nvim_feed(dedent(v), 'nt') + nvim_feed(dedent(v)) end end @@ -166,19 +160,19 @@ local function clear() end local function insert(...) - nvim_feed('i', 'nt') + nvim_feed('i') rawfeed(...) - nvim_feed(nvim_replace_termcodes('<ESC>'), 'nt') + nvim_feed(nvim_replace_termcodes('<ESC>')) end local function execute(...) for _, v in ipairs({...}) do if v:sub(1, 1) ~= '/' then -- not a search command, prefix with colon - nvim_feed(':', 'nt') + nvim_feed(':') end - nvim_feed(v, 'nt') - nvim_feed(nvim_replace_termcodes('<CR>'), 'nt') + nvim_feed(v) + nvim_feed(nvim_replace_termcodes('<CR>')) end end @@ -200,10 +194,6 @@ local function neq(expected, actual) return assert.are_not.same(expected, actual) end -local function expect(contents, first, last, buffer_index) - return eq(dedent(contents), buffer_slice(first, last, buffer_index)) -end - local function ok(expr) assert.is_true(expr) end @@ -233,6 +223,10 @@ local function curbuf(method, ...) end local function curbuf_contents() + -- Before inspecting the buffer, execute 'vim_eval' to wait until all + -- previously sent keys are processed(vim_eval is a deferred function, and + -- only processed after all input) + session:request('vim_eval', '1') return table.concat(curbuf('get_line_slice', 0, -1, true, true), '\n') end @@ -252,6 +246,10 @@ local function curtab(method, ...) return tabpage(method, tab, ...) end +local function expect(contents) + return eq(dedent(contents), curbuf_contents()) +end + clear() return { |