diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-02-18 19:59:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-18 19:59:06 +0100 |
commit | 71e89cec236f9c275cbb20181cd9f33c5d158c66 (patch) | |
tree | 655024efab66b6851cf3f031473a7252f20eb367 | |
parent | 8b543d09d834994f7e696716ce8c146ab0652011 (diff) | |
parent | 7973847d025aa7af431f1e92c1ee977ceb0eb7e5 (diff) | |
download | rneovim-71e89cec236f9c275cbb20181cd9f33c5d158c66.tar.gz rneovim-71e89cec236f9c275cbb20181cd9f33c5d158c66.tar.bz2 rneovim-71e89cec236f9c275cbb20181cd9f33c5d158c66.zip |
Merge #8018 from justinmk/test-eq_any
-rw-r--r-- | test/functional/core/job_spec.lua | 27 | ||||
-rw-r--r-- | test/functional/helpers.lua | 161 | ||||
-rw-r--r-- | test/helpers.lua | 65 |
3 files changed, 166 insertions, 87 deletions
diff --git a/test/functional/core/job_spec.lua b/test/functional/core/job_spec.lua index a02d36c939..73d437169a 100644 --- a/test/functional/core/job_spec.lua +++ b/test/functional/core/job_spec.lua @@ -12,6 +12,7 @@ local get_pathsep = helpers.get_pathsep local pathroot = helpers.pathroot local nvim_set = helpers.nvim_set local expect_twostreams = helpers.expect_twostreams +local expect_msg_seq = helpers.expect_msg_seq local Screen = require('test.functional.ui.screen') describe('jobs', function() @@ -78,9 +79,18 @@ describe('jobs', function() else nvim('command', "let j = jobstart('pwd', g:job_opts)") end - eq({'notification', 'stdout', {0, {dir, ''}}}, next_msg()) - eq({'notification', 'stdout', {0, {''}}}, next_msg()) - eq({'notification', 'exit', {0, 0}}, next_msg()) + expect_msg_seq( + { {'notification', 'stdout', {0, {dir, ''} } }, + {'notification', 'stdout', {0, {''} } }, + {'notification', 'exit', {0, 0} } + }, + -- Alternative sequence: + { {'notification', 'stdout', {0, {dir} } }, + {'notification', 'stdout', {0, {'', ''} } }, + {'notification', 'stdout', {0, {''} } }, + {'notification', 'exit', {0, 0} } + } + ) rmdir(dir) end) @@ -308,8 +318,15 @@ describe('jobs', function() nvim('command', 'unlet g:job_opts.on_exit') nvim('command', 'let g:job_opts.user = 5') nvim('command', [[call jobstart('echo "foo"', g:job_opts)]]) - eq({'notification', 'stdout', {5, {'foo', ''}}}, next_msg()) - eq({'notification', 'stdout', {5, {''}}}, next_msg()) + expect_msg_seq( + { {'notification', 'stdout', {5, {'foo', ''} } }, + {'notification', 'stdout', {5, {''} } } + }, + -- Alternative sequence: + { {'notification', 'stdout', {5, {'foo'} } }, + {'notification', 'stdout', {5, {'', ''} } } + } + ) end) it('will pass return code with the exit event', function() diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua index f0e47481da..a1da55ab1c 100644 --- a/test/functional/helpers.lua +++ b/test/functional/helpers.lua @@ -18,6 +18,7 @@ local ok = global_helpers.ok local map = global_helpers.map local filter = global_helpers.filter local dedent = global_helpers.dedent +local table_flatten = global_helpers.table_flatten local start_dir = lfs.currentdir() -- XXX: NVIM_PROG takes precedence, QuickBuild sets it. @@ -96,8 +97,8 @@ local function request(method, ...) return rv end -local function next_message() - return session:next_message() +local function next_message(timeout) + return session:next_message(timeout) end local function expect_twostreams(msgs1, msgs2) @@ -116,6 +117,46 @@ local function expect_twostreams(msgs1, msgs2) end end +-- Expects a sequence of next_message() results. If multiple sequences are +-- passed they are tried until one succeeds, in order of shortest to longest. +local function expect_msg_seq(...) + if select('#', ...) < 1 then + error('need at least 1 argument') + end + local seqs = {...} + table.sort(seqs, function(a, b) -- Sort ascending, by (shallow) length. + return #a < #b + end) + + local actual_seq = {} + local final_error = '' + local function cat_err(err1, err2) + if err1 == nil then + return err2 + end + return string.format('%s\n%s\n%s', err1, string.rep('=', 78), err2) + end + for anum = 1, #seqs do + local expected_seq = seqs[anum] + -- Collect enough messages to compare the next expected sequence. + while #actual_seq < #expected_seq do + local msg = next_message(10000) -- Big timeout for ASAN/valgrind. + if msg == nil then + error(cat_err(final_error, + string.format('got %d messages, expected %d', + #actual_seq, #expected_seq))) + end + table.insert(actual_seq, msg) + end + local status, result = pcall(eq, expected_seq, actual_seq) + if status then + return result + end + final_error = cat_err(final_error, result) + end + error(final_error) +end + local function call_and_stop_on_error(...) local status, result = copcall(...) -- luacheck: ignore if not status then @@ -674,78 +715,80 @@ local function hexdump(str) end local module = { - prepend_argv = prepend_argv, + NIL = mpack.NIL, + alter_slashes = alter_slashes, + buffer = buffer, + bufmeths = bufmeths, + call = nvim_call, clear = clear, + command = nvim_command, connect = connect, - retry = retry, - spawn = spawn, + curbuf = curbuf, + curbuf_contents = curbuf_contents, + curbufmeths = curbufmeths, + curtab = curtab, + curtabmeths = curtabmeths, + curwin = curwin, + curwinmeths = curwinmeths, dedent = dedent, - source = source, - rawfeed = rawfeed, - insert = insert, - iswin = iswin, - feed = feed, - feed_command = feed_command, - eval = nvim_eval, - call = nvim_call, - command = nvim_command, - request = request, - next_message = next_message, - expect_twostreams = expect_twostreams, - run = run, - stop = stop, eq = eq, - neq = neq, + eval = nvim_eval, + exc_exec = exc_exec, expect = expect, expect_any = expect_any, - ok = ok, - map = map, + expect_msg_seq = expect_msg_seq, + expect_twostreams = expect_twostreams, + feed = feed, + feed_command = feed_command, filter = filter, + funcs = funcs, + get_pathsep = get_pathsep, + hexdump = hexdump, + insert = insert, + iswin = iswin, + map = map, + merge_args = merge_args, + meth_pcall = meth_pcall, + meths = meths, + missing_provider = missing_provider, + mkdir = lfs.mkdir, + neq = neq, + new_pipename = new_pipename, + next_message = next_message, nvim = nvim, + nvim_argv = nvim_argv, nvim_async = nvim_async, + nvim_dir = nvim_dir, nvim_prog = nvim_prog, - nvim_argv = nvim_argv, nvim_set = nvim_set, - nvim_dir = nvim_dir, - buffer = buffer, - window = window, - tabpage = tabpage, - curbuf = curbuf, - curwin = curwin, - curtab = curtab, - curbuf_contents = curbuf_contents, - wait = wait, - sleep = sleep, - set_session = set_session, - write_file = write_file, - read_file = read_file, + ok = ok, os_name = os_name, - rmdir = rmdir, - mkdir = lfs.mkdir, - exc_exec = exc_exec, - redir_exec = redir_exec, - merge_args = merge_args, - funcs = funcs, - meths = meths, - bufmeths = bufmeths, - winmeths = winmeths, - tabmeths = tabmeths, - uimeths = uimeths, - curbufmeths = curbufmeths, - curwinmeths = curwinmeths, - curtabmeths = curtabmeths, + pathroot = pathroot, pending_win32 = pending_win32, - skip_fragile = skip_fragile, + prepend_argv = prepend_argv, + rawfeed = rawfeed, + read_file = read_file, + redir_exec = redir_exec, + request = request, + retry = retry, + rmdir = rmdir, + run = run, + set_session = set_session, set_shell_powershell = set_shell_powershell, + skip_fragile = skip_fragile, + sleep = sleep, + source = source, + spawn = spawn, + stop = stop, + table_flatten = table_flatten, + tabmeths = tabmeths, + tabpage = tabpage, tmpname = tmpname, - meth_pcall = meth_pcall, - NIL = mpack.NIL, - get_pathsep = get_pathsep, - pathroot = pathroot, - missing_provider = missing_provider, - alter_slashes = alter_slashes, - hexdump = hexdump, - new_pipename = new_pipename, + uimeths = uimeths, + wait = wait, + window = window, + winmeths = winmeths, + write_file = write_file, } return function(after_each) diff --git a/test/helpers.lua b/test/helpers.lua index 1c64f41b65..91ceed4df1 100644 --- a/test/helpers.lua +++ b/test/helpers.lua @@ -7,13 +7,13 @@ local check_logs_useless_lines = { ['See README_MISSING_SYSCALL_OR_IOCTL for guidance']=3, } -local eq = function(exp, act) - return assert.are.same(exp, act) +local function eq(expected, actual) + return assert.are.same(expected, actual) end -local neq = function(exp, act) - return assert.are_not.same(exp, act) +local function neq(expected, actual) + return assert.are_not.same(expected, actual) end -local ok = function(res) +local function ok(res) return assert.is_true(res) end @@ -534,30 +534,49 @@ local function fixtbl_rec(tbl) return fixtbl(tbl) end +-- From https://github.com/premake/premake-core/blob/master/src/base/table.lua +local function table_flatten(arr) + local result = {} + local function _table_flatten(_arr) + local n = #_arr + for i = 1, n do + local v = _arr[i] + if type(v) == "table" then + _table_flatten(v) + elseif v then + table.insert(result, v) + end + end + end + _table_flatten(arr) + return result +end + return { - eq = eq, - neq = neq, - ok = ok, - check_logs = check_logs, - uname = uname, - tmpname = tmpname, - map = map, - filter = filter, - glob = glob, - check_cores = check_cores, - hasenv = hasenv, - which = which, - shallowcopy = shallowcopy, - deepcopy = deepcopy, - mergedicts_copy = mergedicts_copy, - dictdiff = dictdiff, REMOVE_THIS = REMOVE_THIS, + check_cores = check_cores, + check_logs = check_logs, concat_tables = concat_tables, dedent = dedent, + deepcopy = deepcopy, + dictdiff = dictdiff, + eq = eq, + filter = filter, + fixtbl = fixtbl, + fixtbl_rec = fixtbl_rec, format_luav = format_luav, format_string = format_string, + glob = glob, + hasenv = hasenv, intchar2lua = intchar2lua, + map = map, + mergedicts_copy = mergedicts_copy, + neq = neq, + ok = ok, + shallowcopy = shallowcopy, + table_flatten = table_flatten, + tmpname = tmpname, + uname = uname, updated = updated, - fixtbl = fixtbl, - fixtbl_rec = fixtbl_rec, + which = which, } |