mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge #9301 'runtime/lua'
This commit is contained in:
commit
1cbe014569
73
runtime/lua/vim/shared.lua
Normal file
73
runtime/lua/vim/shared.lua
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
--- Shared functions
|
||||||
|
-- - Used by Nvim and tests
|
||||||
|
-- - Can run in vanilla Lua (do not require a running instance of Nvim)
|
||||||
|
|
||||||
|
|
||||||
|
-- Checks if a list-like (vector) table contains `value`.
|
||||||
|
local function tbl_contains(t, value)
|
||||||
|
if type(t) ~= 'table' then
|
||||||
|
error('t must be a table')
|
||||||
|
end
|
||||||
|
for _,v in ipairs(t) do
|
||||||
|
if v == value then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Merges two or more map-like tables.
|
||||||
|
--
|
||||||
|
--@see |extend()|
|
||||||
|
--
|
||||||
|
-- behavior: Decides what to do if a key is found in more than one map:
|
||||||
|
-- "error": raise an error
|
||||||
|
-- "keep": use value from the leftmost map
|
||||||
|
-- "force": use value from the rightmost map
|
||||||
|
local function tbl_extend(behavior, ...)
|
||||||
|
if (behavior ~= 'error' and behavior ~= 'keep' and behavior ~= 'force') then
|
||||||
|
error('invalid "behavior": '..tostring(behavior))
|
||||||
|
end
|
||||||
|
local ret = {}
|
||||||
|
for i = 1, select('#', ...) do
|
||||||
|
local tbl = select(i, ...)
|
||||||
|
if tbl then
|
||||||
|
for k, v in pairs(tbl) do
|
||||||
|
if behavior ~= 'force' and ret[k] ~= nil then
|
||||||
|
if behavior == 'error' then
|
||||||
|
error('key found in more than one map: '..k)
|
||||||
|
end -- Else behavior is "keep".
|
||||||
|
else
|
||||||
|
ret[k] = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Flattens a list-like table: unrolls and appends nested tables to table `t`.
|
||||||
|
local function tbl_flatten(t)
|
||||||
|
-- From https://github.com/premake/premake-core/blob/master/src/base/table.lua
|
||||||
|
local result = {}
|
||||||
|
local function _tbl_flatten(_t)
|
||||||
|
local n = #_t
|
||||||
|
for i = 1, n do
|
||||||
|
local v = _t[i]
|
||||||
|
if type(v) == "table" then
|
||||||
|
_tbl_flatten(v)
|
||||||
|
elseif v then
|
||||||
|
table.insert(result, v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
_tbl_flatten(t)
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
local module = {
|
||||||
|
tbl_contains = tbl_contains,
|
||||||
|
tbl_extend = tbl_extend,
|
||||||
|
tbl_flatten = tbl_flatten,
|
||||||
|
}
|
||||||
|
return module
|
@ -1,3 +1,39 @@
|
|||||||
|
-- Nvim-Lua stdlib: the `vim` module (:help lua-stdlib)
|
||||||
|
--
|
||||||
|
-- Lua code lives in one of three places:
|
||||||
|
-- 1. The runtime (`runtime/lua/vim/`). For "nice to have" features, e.g.
|
||||||
|
-- the `inspect` and `lpeg` modules.
|
||||||
|
-- 2. The `vim.shared` module: code shared between Nvim and its test-suite.
|
||||||
|
-- 3. Compiled-into Nvim itself (`src/nvim/lua/`).
|
||||||
|
--
|
||||||
|
-- Guideline: "If in doubt, put it in the runtime".
|
||||||
|
--
|
||||||
|
-- Most functions should live directly on `vim.`, not sub-modules. The only
|
||||||
|
-- "forbidden" names are those claimed by legacy `if_lua`:
|
||||||
|
-- $ vim
|
||||||
|
-- :lua for k,v in pairs(vim) do print(k) end
|
||||||
|
-- buffer
|
||||||
|
-- open
|
||||||
|
-- window
|
||||||
|
-- lastline
|
||||||
|
-- firstline
|
||||||
|
-- type
|
||||||
|
-- line
|
||||||
|
-- eval
|
||||||
|
-- dict
|
||||||
|
-- beep
|
||||||
|
-- list
|
||||||
|
-- command
|
||||||
|
--
|
||||||
|
-- Reference (#6580):
|
||||||
|
-- - https://github.com/luafun/luafun
|
||||||
|
-- - https://github.com/rxi/lume
|
||||||
|
-- - http://leafo.net/lapis/reference/utilities.html
|
||||||
|
-- - https://github.com/torch/paths
|
||||||
|
-- - https://github.com/bakpakin/Fennel (pretty print, repl)
|
||||||
|
-- - https://github.com/howl-editor/howl/tree/master/lib/howl/util
|
||||||
|
|
||||||
|
|
||||||
-- Internal-only until comments in #8107 are addressed.
|
-- Internal-only until comments in #8107 are addressed.
|
||||||
-- Returns:
|
-- Returns:
|
||||||
-- {errcode}, {output}
|
-- {errcode}, {output}
|
||||||
@ -187,10 +223,14 @@ deepcopy = function(orig)
|
|||||||
return deepcopy_funcs[type(orig)](orig)
|
return deepcopy_funcs[type(orig)](orig)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function __index(table, key)
|
local function __index(t, key)
|
||||||
if key == "inspect" then
|
if key == 'inspect' then
|
||||||
table.inspect = require("vim.inspect")
|
t.inspect = require('vim.inspect')
|
||||||
return table.inspect
|
return t.inspect
|
||||||
|
elseif require('vim.shared')[key] ~= nil then
|
||||||
|
-- Expose all `vim.shared` functions on the `vim` module.
|
||||||
|
t[key] = require('vim.shared')[key]
|
||||||
|
return t[key]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
" Also used by: test/functional/helpers.lua
|
||||||
|
|
||||||
function! s:load_factor() abort
|
function! s:load_factor() abort
|
||||||
let timeout = 200
|
let timeout = 200
|
||||||
let times = []
|
let times = []
|
||||||
@ -23,8 +25,8 @@ function! s:load_factor() abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Compute load factor only once.
|
" Compute load factor only once.
|
||||||
let s:load_factor = s:load_factor()
|
let g:test_load_factor = s:load_factor()
|
||||||
|
|
||||||
function! LoadAdjust(num) abort
|
function! LoadAdjust(num) abort
|
||||||
return float2nr(ceil(a:num * s:load_factor))
|
return float2nr(ceil(a:num * g:test_load_factor))
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -15,17 +15,13 @@ func MyHandlerWithLists(lists, timer)
|
|||||||
let x = string(a:lists)
|
let x = string(a:lists)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func s:assert_inrange(lower, upper, actual)
|
|
||||||
return assert_inrange(a:lower, LoadAdjust(a:upper), a:actual)
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
func Test_oneshot()
|
func Test_oneshot()
|
||||||
let g:val = 0
|
let g:val = 0
|
||||||
let timer = timer_start(50, 'MyHandler')
|
let timer = timer_start(50, 'MyHandler')
|
||||||
let slept = WaitFor('g:val == 1')
|
let slept = WaitFor('g:val == 1')
|
||||||
call assert_equal(1, g:val)
|
call assert_equal(1, g:val)
|
||||||
if has('reltime')
|
if has('reltime')
|
||||||
call s:assert_inrange(40, 120, slept)
|
call assert_inrange(40, LoadAdjust(120), slept)
|
||||||
else
|
else
|
||||||
call assert_inrange(20, 120, slept)
|
call assert_inrange(20, 120, slept)
|
||||||
endif
|
endif
|
||||||
@ -37,7 +33,7 @@ func Test_repeat_three()
|
|||||||
let slept = WaitFor('g:val == 3')
|
let slept = WaitFor('g:val == 3')
|
||||||
call assert_equal(3, g:val)
|
call assert_equal(3, g:val)
|
||||||
if has('reltime')
|
if has('reltime')
|
||||||
call s:assert_inrange(120, 250, slept)
|
call assert_inrange(120, LoadAdjust(250), slept)
|
||||||
else
|
else
|
||||||
call assert_inrange(80, 200, slept)
|
call assert_inrange(80, 200, slept)
|
||||||
endif
|
endif
|
||||||
@ -52,7 +48,7 @@ func Test_repeat_many()
|
|||||||
endif
|
endif
|
||||||
sleep 200m
|
sleep 200m
|
||||||
call timer_stop(timer)
|
call timer_stop(timer)
|
||||||
call s:assert_inrange((has('mac') ? 1 : 2), 4, g:val)
|
call assert_inrange((has('mac') ? 1 : 2), LoadAdjust(4), g:val)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_with_partial_callback()
|
func Test_with_partial_callback()
|
||||||
@ -66,7 +62,7 @@ func Test_with_partial_callback()
|
|||||||
let slept = WaitFor('g:val == 1')
|
let slept = WaitFor('g:val == 1')
|
||||||
call assert_equal(1, g:val)
|
call assert_equal(1, g:val)
|
||||||
if has('reltime')
|
if has('reltime')
|
||||||
call s:assert_inrange(40, 130, slept)
|
call assert_inrange(40, LoadAdjust(130), slept)
|
||||||
else
|
else
|
||||||
call assert_inrange(20, 100, slept)
|
call assert_inrange(20, 100, slept)
|
||||||
endif
|
endif
|
||||||
@ -129,7 +125,7 @@ func Test_paused()
|
|||||||
let slept = WaitFor('g:val == 1')
|
let slept = WaitFor('g:val == 1')
|
||||||
call assert_equal(1, g:val)
|
call assert_equal(1, g:val)
|
||||||
if has('reltime')
|
if has('reltime')
|
||||||
call s:assert_inrange(0, 140, slept)
|
call assert_inrange(0, LoadAdjust(140), slept)
|
||||||
else
|
else
|
||||||
call assert_inrange(0, 10, slept)
|
call assert_inrange(0, 10, slept)
|
||||||
endif
|
endif
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
local helpers = require('test.functional.helpers')(after_each)
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
local global_helpers = require('test.helpers')
|
|
||||||
|
|
||||||
local bufmeths = helpers.bufmeths
|
local bufmeths = helpers.bufmeths
|
||||||
local clear = helpers.clear
|
local clear = helpers.clear
|
||||||
@ -12,8 +11,8 @@ local funcs = helpers.funcs
|
|||||||
local meths = helpers.meths
|
local meths = helpers.meths
|
||||||
local source = helpers.source
|
local source = helpers.source
|
||||||
|
|
||||||
local shallowcopy = global_helpers.shallowcopy
|
local shallowcopy = helpers.shallowcopy
|
||||||
local sleep = global_helpers.sleep
|
local sleep = helpers.sleep
|
||||||
|
|
||||||
describe('nvim_get_keymap', function()
|
describe('nvim_get_keymap', function()
|
||||||
before_each(clear)
|
before_each(clear)
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
-- Test server -> client RPC scenarios. Note: unlike `rpcnotify`, to evaluate
|
-- Test server -> client RPC scenarios. Note: unlike `rpcnotify`, to evaluate
|
||||||
-- `rpcrequest` calls we need the client event loop to be running.
|
-- `rpcrequest` calls we need the client event loop to be running.
|
||||||
local helpers = require('test.functional.helpers')(after_each)
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
local Paths = require('test.config.paths')
|
|
||||||
|
|
||||||
local clear, nvim, eval = helpers.clear, helpers.nvim, helpers.eval
|
local clear, nvim, eval = helpers.clear, helpers.nvim, helpers.eval
|
||||||
local eq, neq, run, stop = helpers.eq, helpers.neq, helpers.run, helpers.stop
|
local eq, neq, run, stop = helpers.eq, helpers.neq, helpers.run, helpers.stop
|
||||||
@ -243,8 +242,8 @@ describe('server -> client', function()
|
|||||||
\ 'rpc': v:true
|
\ 'rpc': v:true
|
||||||
\ }
|
\ }
|
||||||
]])
|
]])
|
||||||
local lua_prog = Paths.test_lua_prg
|
meths.set_var("args", {helpers.test_lua_prg,
|
||||||
meths.set_var("args", {lua_prog, 'test/functional/api/rpc_fixture.lua'})
|
'test/functional/api/rpc_fixture.lua'})
|
||||||
jobid = eval("jobstart(g:args, g:job_opts)")
|
jobid = eval("jobstart(g:args, g:job_opts)")
|
||||||
neq(0, 'jobid')
|
neq(0, 'jobid')
|
||||||
end)
|
end)
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
local helpers = require('test.functional.helpers')(after_each)
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
local Screen = require('test.functional.ui.screen')
|
local Screen = require('test.functional.ui.screen')
|
||||||
local global_helpers = require('test.helpers')
|
|
||||||
|
|
||||||
local NIL = helpers.NIL
|
local NIL = helpers.NIL
|
||||||
local clear, nvim, eq, neq = helpers.clear, helpers.nvim, helpers.eq, helpers.neq
|
local clear, nvim, eq, neq = helpers.clear, helpers.nvim, helpers.eq, helpers.neq
|
||||||
@ -16,10 +15,10 @@ local request = helpers.request
|
|||||||
local source = helpers.source
|
local source = helpers.source
|
||||||
local next_msg = helpers.next_msg
|
local next_msg = helpers.next_msg
|
||||||
|
|
||||||
local expect_err = global_helpers.expect_err
|
local expect_err = helpers.expect_err
|
||||||
local format_string = global_helpers.format_string
|
local format_string = helpers.format_string
|
||||||
local intchar2lua = global_helpers.intchar2lua
|
local intchar2lua = helpers.intchar2lua
|
||||||
local mergedicts_copy = global_helpers.mergedicts_copy
|
local mergedicts_copy = helpers.mergedicts_copy
|
||||||
|
|
||||||
describe('API', function()
|
describe('API', function()
|
||||||
before_each(clear)
|
before_each(clear)
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
local global_helpers = require('test.helpers')
|
|
||||||
local uname = global_helpers.uname
|
|
||||||
|
|
||||||
local helpers = require('test.functional.helpers')(after_each)
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
|
local uname = helpers.uname
|
||||||
local clear, eq, eval, next_msg, ok, source = helpers.clear, helpers.eq,
|
local clear, eq, eval, next_msg, ok, source = helpers.clear, helpers.eq,
|
||||||
helpers.eval, helpers.next_msg, helpers.ok, helpers.source
|
helpers.eval, helpers.next_msg, helpers.ok, helpers.source
|
||||||
local command, funcs, meths = helpers.command, helpers.funcs, helpers.meths
|
local command, funcs, meths = helpers.command, helpers.funcs, helpers.meths
|
||||||
|
@ -59,7 +59,7 @@ describe(':let', function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
it("multibyte env var to child process #8398 #9267", function()
|
it("multibyte env var to child process #8398 #9267", function()
|
||||||
if (not helpers.iswin()) and require('test.helpers').isCI() then
|
if (not helpers.iswin()) and helpers.isCI() then
|
||||||
-- Fails on non-Windows CI. Buffering/timing issue?
|
-- Fails on non-Windows CI. Buffering/timing issue?
|
||||||
pending('fails on unix CI', function() end)
|
pending('fails on unix CI', function() end)
|
||||||
end
|
end
|
||||||
|
@ -8,23 +8,14 @@ local Session = require('nvim.session')
|
|||||||
local TcpStream = require('nvim.tcp_stream')
|
local TcpStream = require('nvim.tcp_stream')
|
||||||
local SocketStream = require('nvim.socket_stream')
|
local SocketStream = require('nvim.socket_stream')
|
||||||
local ChildProcessStream = require('nvim.child_process_stream')
|
local ChildProcessStream = require('nvim.child_process_stream')
|
||||||
local Paths = require('test.config.paths')
|
|
||||||
|
|
||||||
local check_cores = global_helpers.check_cores
|
local check_cores = global_helpers.check_cores
|
||||||
local check_logs = global_helpers.check_logs
|
local check_logs = global_helpers.check_logs
|
||||||
local dedent = global_helpers.dedent
|
local dedent = global_helpers.dedent
|
||||||
local eq = global_helpers.eq
|
local eq = global_helpers.eq
|
||||||
local expect_err = global_helpers.expect_err
|
|
||||||
local filter = global_helpers.filter
|
|
||||||
local map = global_helpers.map
|
|
||||||
local matches = global_helpers.matches
|
|
||||||
local near = global_helpers.near
|
|
||||||
local neq = global_helpers.neq
|
|
||||||
local ok = global_helpers.ok
|
local ok = global_helpers.ok
|
||||||
local read_file = global_helpers.read_file
|
|
||||||
local sleep = global_helpers.sleep
|
local sleep = global_helpers.sleep
|
||||||
local table_contains = global_helpers.table_contains
|
local tbl_contains = global_helpers.tbl_contains
|
||||||
local table_flatten = global_helpers.table_flatten
|
|
||||||
local write_file = global_helpers.write_file
|
local write_file = global_helpers.write_file
|
||||||
|
|
||||||
local start_dir = lfs.currentdir()
|
local start_dir = lfs.currentdir()
|
||||||
@ -32,7 +23,7 @@ local start_dir = lfs.currentdir()
|
|||||||
local nvim_prog = (
|
local nvim_prog = (
|
||||||
os.getenv('NVIM_PROG')
|
os.getenv('NVIM_PROG')
|
||||||
or os.getenv('NVIM_PRG')
|
or os.getenv('NVIM_PRG')
|
||||||
or Paths.test_build_dir .. '/bin/nvim'
|
or global_helpers.test_build_dir .. '/bin/nvim'
|
||||||
)
|
)
|
||||||
-- Default settings for the test session.
|
-- Default settings for the test session.
|
||||||
local nvim_set = 'set shortmess+=I background=light noswapfile noautoindent'
|
local nvim_set = 'set shortmess+=I background=light noswapfile noautoindent'
|
||||||
@ -174,7 +165,7 @@ local function expect_msg_seq(...)
|
|||||||
error(cat_err(final_error,
|
error(cat_err(final_error,
|
||||||
string.format('got %d messages (ignored %d), expected %d',
|
string.format('got %d messages (ignored %d), expected %d',
|
||||||
#actual_seq, nr_ignored, #expected_seq)))
|
#actual_seq, nr_ignored, #expected_seq)))
|
||||||
elseif table_contains(ignore, msg_type) then
|
elseif tbl_contains(ignore, msg_type) then
|
||||||
nr_ignored = nr_ignored + 1
|
nr_ignored = nr_ignored + 1
|
||||||
else
|
else
|
||||||
table.insert(actual_seq, msg)
|
table.insert(actual_seq, msg)
|
||||||
@ -348,9 +339,9 @@ local function remove_args(args, args_rm)
|
|||||||
end
|
end
|
||||||
local last = ''
|
local last = ''
|
||||||
for _, arg in ipairs(args) do
|
for _, arg in ipairs(args) do
|
||||||
if table_contains(skip_following, last) then
|
if tbl_contains(skip_following, last) then
|
||||||
last = ''
|
last = ''
|
||||||
elseif table_contains(args_rm, arg) then
|
elseif tbl_contains(args_rm, arg) then
|
||||||
last = arg
|
last = arg
|
||||||
else
|
else
|
||||||
table.insert(new_args, arg)
|
table.insert(new_args, arg)
|
||||||
@ -747,41 +738,14 @@ local function alter_slashes(obj)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function compute_load_factor()
|
|
||||||
local timeout = 200
|
|
||||||
local times = {}
|
|
||||||
|
|
||||||
clear()
|
|
||||||
|
|
||||||
for _ = 1, 5 do
|
|
||||||
source([[
|
|
||||||
let g:val = 0
|
|
||||||
call timer_start(200, {-> nvim_set_var('val', 1)})
|
|
||||||
let start = reltime()
|
|
||||||
while 1
|
|
||||||
sleep 10m
|
|
||||||
if g:val == 1
|
|
||||||
let g:waited_in_ms = float2nr(reltimefloat(reltime(start)) * 1000)
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
endwhile
|
|
||||||
]])
|
|
||||||
table.insert(times, nvim_eval('g:waited_in_ms'))
|
|
||||||
end
|
|
||||||
|
|
||||||
session:close()
|
|
||||||
session = nil
|
|
||||||
|
|
||||||
local longest = math.max(unpack(times))
|
|
||||||
local factor = (longest + 50.0) / timeout
|
|
||||||
|
|
||||||
return factor
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Compute load factor only once.
|
|
||||||
local load_factor = compute_load_factor()
|
|
||||||
|
|
||||||
|
local load_factor = nil
|
||||||
local function load_adjust(num)
|
local function load_adjust(num)
|
||||||
|
if load_factor == nil then -- Compute load factor only once.
|
||||||
|
clear()
|
||||||
|
request('nvim_command', 'source src/nvim/testdir/load.vim')
|
||||||
|
load_factor = request('nvim_eval', 'g:test_load_factor')
|
||||||
|
end
|
||||||
return math.ceil(num * load_factor)
|
return math.ceil(num * load_factor)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -802,33 +766,25 @@ local module = {
|
|||||||
curtabmeths = curtabmeths,
|
curtabmeths = curtabmeths,
|
||||||
curwin = curwin,
|
curwin = curwin,
|
||||||
curwinmeths = curwinmeths,
|
curwinmeths = curwinmeths,
|
||||||
dedent = dedent,
|
|
||||||
eq = eq,
|
|
||||||
eval = nvim_eval,
|
eval = nvim_eval,
|
||||||
exc_exec = exc_exec,
|
exc_exec = exc_exec,
|
||||||
expect = expect,
|
expect = expect,
|
||||||
expect_any = expect_any,
|
expect_any = expect_any,
|
||||||
expect_err = expect_err,
|
|
||||||
expect_msg_seq = expect_msg_seq,
|
expect_msg_seq = expect_msg_seq,
|
||||||
expect_twostreams = expect_twostreams,
|
expect_twostreams = expect_twostreams,
|
||||||
feed = feed,
|
feed = feed,
|
||||||
feed_command = feed_command,
|
feed_command = feed_command,
|
||||||
filter = filter,
|
|
||||||
funcs = funcs,
|
funcs = funcs,
|
||||||
get_pathsep = get_pathsep,
|
get_pathsep = get_pathsep,
|
||||||
get_session = get_session,
|
get_session = get_session,
|
||||||
insert = insert,
|
insert = insert,
|
||||||
iswin = iswin,
|
iswin = iswin,
|
||||||
map = map,
|
|
||||||
matches = matches,
|
|
||||||
merge_args = merge_args,
|
merge_args = merge_args,
|
||||||
meth_pcall = meth_pcall,
|
meth_pcall = meth_pcall,
|
||||||
meths = meths,
|
meths = meths,
|
||||||
missing_provider = missing_provider,
|
missing_provider = missing_provider,
|
||||||
mkdir = lfs.mkdir,
|
mkdir = lfs.mkdir,
|
||||||
load_adjust = load_adjust,
|
load_adjust = load_adjust,
|
||||||
near = near,
|
|
||||||
neq = neq,
|
|
||||||
new_pipename = new_pipename,
|
new_pipename = new_pipename,
|
||||||
next_msg = next_msg,
|
next_msg = next_msg,
|
||||||
nvim = nvim,
|
nvim = nvim,
|
||||||
@ -838,13 +794,11 @@ local module = {
|
|||||||
nvim_prog = nvim_prog,
|
nvim_prog = nvim_prog,
|
||||||
nvim_prog_abs = nvim_prog_abs,
|
nvim_prog_abs = nvim_prog_abs,
|
||||||
nvim_set = nvim_set,
|
nvim_set = nvim_set,
|
||||||
ok = ok,
|
|
||||||
os_name = os_name,
|
os_name = os_name,
|
||||||
pathroot = pathroot,
|
pathroot = pathroot,
|
||||||
pending_win32 = pending_win32,
|
pending_win32 = pending_win32,
|
||||||
prepend_argv = prepend_argv,
|
prepend_argv = prepend_argv,
|
||||||
rawfeed = rawfeed,
|
rawfeed = rawfeed,
|
||||||
read_file = read_file,
|
|
||||||
redir_exec = redir_exec,
|
redir_exec = redir_exec,
|
||||||
request = request,
|
request = request,
|
||||||
retry = retry,
|
retry = retry,
|
||||||
@ -854,20 +808,17 @@ local module = {
|
|||||||
set_session = set_session,
|
set_session = set_session,
|
||||||
set_shell_powershell = set_shell_powershell,
|
set_shell_powershell = set_shell_powershell,
|
||||||
skip_fragile = skip_fragile,
|
skip_fragile = skip_fragile,
|
||||||
sleep = sleep,
|
|
||||||
source = source,
|
source = source,
|
||||||
spawn = spawn,
|
spawn = spawn,
|
||||||
stop = stop,
|
stop = stop,
|
||||||
table_flatten = table_flatten,
|
|
||||||
tabmeths = tabmeths,
|
tabmeths = tabmeths,
|
||||||
tabpage = tabpage,
|
tabpage = tabpage,
|
||||||
tmpname = tmpname,
|
|
||||||
uimeths = uimeths,
|
uimeths = uimeths,
|
||||||
wait = wait,
|
wait = wait,
|
||||||
window = window,
|
window = window,
|
||||||
winmeths = winmeths,
|
winmeths = winmeths,
|
||||||
write_file = write_file,
|
|
||||||
}
|
}
|
||||||
|
module = global_helpers.tbl_extend('error', module, global_helpers)
|
||||||
|
|
||||||
return function(after_each)
|
return function(after_each)
|
||||||
if after_each then
|
if after_each then
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
local helpers = require('test.functional.helpers')(after_each)
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
local global_helpers = require('test.helpers')
|
|
||||||
|
|
||||||
local Screen = require('test.functional.ui.screen')
|
local Screen = require('test.functional.ui.screen')
|
||||||
|
|
||||||
@ -16,7 +15,7 @@ local neq = helpers.neq
|
|||||||
local mkdir = helpers.mkdir
|
local mkdir = helpers.mkdir
|
||||||
local rmdir = helpers.rmdir
|
local rmdir = helpers.rmdir
|
||||||
local alter_slashes = helpers.alter_slashes
|
local alter_slashes = helpers.alter_slashes
|
||||||
local table_contains = global_helpers.table_contains
|
local tbl_contains = helpers.tbl_contains
|
||||||
|
|
||||||
describe('startup defaults', function()
|
describe('startup defaults', function()
|
||||||
describe(':filetype', function()
|
describe(':filetype', function()
|
||||||
@ -262,7 +261,7 @@ describe('XDG-based defaults', function()
|
|||||||
|
|
||||||
for _,v in ipairs(rtp) do
|
for _,v in ipairs(rtp) do
|
||||||
local m = string.match(v, [=[[/\]nvim[^/\]*[/\]site.*$]=])
|
local m = string.match(v, [=[[/\]nvim[^/\]*[/\]site.*$]=])
|
||||||
if m and not table_contains(rv, m) then
|
if m and not tbl_contains(rv, m) then
|
||||||
table.insert(rv, m)
|
table.insert(rv, m)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
-- TUI acceptance tests.
|
-- TUI acceptance tests.
|
||||||
-- Uses :terminal as a way to send keys and assert screen state.
|
-- Uses :terminal as a way to send keys and assert screen state.
|
||||||
local global_helpers = require('test.helpers')
|
|
||||||
local uname = global_helpers.uname
|
|
||||||
local helpers = require('test.functional.helpers')(after_each)
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
|
local uname = helpers.uname
|
||||||
local thelpers = require('test.functional.terminal.helpers')
|
local thelpers = require('test.functional.terminal.helpers')
|
||||||
local Screen = require('test.functional.ui.screen')
|
local Screen = require('test.functional.ui.screen')
|
||||||
local eq = helpers.eq
|
local eq = helpers.eq
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
local global_helpers = require('test.helpers')
|
|
||||||
local helpers = require('test.functional.helpers')(after_each)
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
local Screen = require('test.functional.ui.screen')
|
local Screen = require('test.functional.ui.screen')
|
||||||
local clear = helpers.clear
|
local clear = helpers.clear
|
||||||
local command = helpers.command
|
local command = helpers.command
|
||||||
local eq = helpers.eq
|
local eq = helpers.eq
|
||||||
local shallowcopy = global_helpers.shallowcopy
|
local shallowcopy = helpers.shallowcopy
|
||||||
|
|
||||||
describe('ui receives option updates', function()
|
describe('ui receives option updates', function()
|
||||||
local screen
|
local screen
|
||||||
|
@ -71,11 +71,10 @@
|
|||||||
-- To help write screen tests, see Screen:snapshot_util().
|
-- To help write screen tests, see Screen:snapshot_util().
|
||||||
-- To debug screen tests, see Screen:redraw_debug().
|
-- To debug screen tests, see Screen:redraw_debug().
|
||||||
|
|
||||||
local global_helpers = require('test.helpers')
|
|
||||||
local deepcopy = global_helpers.deepcopy
|
|
||||||
local shallowcopy = global_helpers.shallowcopy
|
|
||||||
local concat_tables = global_helpers.concat_tables
|
|
||||||
local helpers = require('test.functional.helpers')(nil)
|
local helpers = require('test.functional.helpers')(nil)
|
||||||
|
local deepcopy = helpers.deepcopy
|
||||||
|
local shallowcopy = helpers.shallowcopy
|
||||||
|
local concat_tables = helpers.concat_tables
|
||||||
local request, run_session = helpers.request, helpers.run_session
|
local request, run_session = helpers.request, helpers.run_session
|
||||||
local eq = helpers.eq
|
local eq = helpers.eq
|
||||||
local dedent = helpers.dedent
|
local dedent = helpers.dedent
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
local global_helpers = require('test.helpers')
|
|
||||||
local shallowcopy = global_helpers.shallowcopy
|
|
||||||
local helpers = require('test.functional.helpers')(after_each)
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
local Screen = require('test.functional.ui.screen')
|
local Screen = require('test.functional.ui.screen')
|
||||||
|
local shallowcopy = helpers.shallowcopy
|
||||||
local clear, feed, command = helpers.clear, helpers.feed, helpers.command
|
local clear, feed, command = helpers.clear, helpers.feed, helpers.command
|
||||||
local iswin = helpers.iswin
|
local iswin = helpers.iswin
|
||||||
local funcs = helpers.funcs
|
local funcs = helpers.funcs
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
require('vim.compat')
|
require('vim.compat')
|
||||||
|
local shared = require('vim.shared')
|
||||||
local assert = require('luassert')
|
local assert = require('luassert')
|
||||||
local luv = require('luv')
|
local luv = require('luv')
|
||||||
local lfs = require('lfs')
|
local lfs = require('lfs')
|
||||||
local relpath = require('pl.path').relpath
|
local relpath = require('pl.path').relpath
|
||||||
|
local Paths = require('test.config.paths')
|
||||||
|
|
||||||
local quote_me = '[^.%w%+%-%@%_%/]' -- complement (needn't quote)
|
local quote_me = '[^.%w%+%-%@%_%/]' -- complement (needn't quote)
|
||||||
local function shell_quote(str)
|
local function shell_quote(str)
|
||||||
@ -420,6 +422,7 @@ local function updated(d, d2)
|
|||||||
return d
|
return d
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Concat list-like tables.
|
||||||
local function concat_tables(...)
|
local function concat_tables(...)
|
||||||
local ret = {}
|
local ret = {}
|
||||||
for i = 1, select('#', ...) do
|
for i = 1, select('#', ...) do
|
||||||
@ -609,37 +612,6 @@ local function fixtbl_rec(tbl)
|
|||||||
return fixtbl(tbl)
|
return fixtbl(tbl)
|
||||||
end
|
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
|
|
||||||
|
|
||||||
-- Checks if a list-like (vector) table contains `value`.
|
|
||||||
local function table_contains(t, value)
|
|
||||||
if type(t) ~= 'table' then
|
|
||||||
error('t must be a table')
|
|
||||||
end
|
|
||||||
for _,v in ipairs(t) do
|
|
||||||
if v == value then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
local function hexdump(str)
|
local function hexdump(str)
|
||||||
local len = string.len(str)
|
local len = string.len(str)
|
||||||
local dump = ""
|
local dump = ""
|
||||||
@ -784,13 +756,12 @@ local module = {
|
|||||||
repeated_read_cmd = repeated_read_cmd,
|
repeated_read_cmd = repeated_read_cmd,
|
||||||
shallowcopy = shallowcopy,
|
shallowcopy = shallowcopy,
|
||||||
sleep = sleep,
|
sleep = sleep,
|
||||||
table_contains = table_contains,
|
|
||||||
table_flatten = table_flatten,
|
|
||||||
tmpname = tmpname,
|
tmpname = tmpname,
|
||||||
uname = uname,
|
uname = uname,
|
||||||
updated = updated,
|
updated = updated,
|
||||||
which = which,
|
which = which,
|
||||||
write_file = write_file,
|
write_file = write_file,
|
||||||
}
|
}
|
||||||
|
module = shared.tbl_extend('error', module, Paths, shared)
|
||||||
|
|
||||||
return module
|
return module
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
local bit = require('bit')
|
local bit = require('bit')
|
||||||
local helpers = require('test.unit.helpers')(after_each)
|
local helpers = require('test.unit.helpers')(after_each)
|
||||||
local eval_helpers = require('test.unit.eval.helpers')
|
local eval_helpers = require('test.unit.eval.helpers')
|
||||||
local global_helpers = require('test.helpers')
|
|
||||||
|
|
||||||
local itp = helpers.gen_itp(it)
|
local itp = helpers.gen_itp(it)
|
||||||
|
|
||||||
@ -14,6 +13,8 @@ local NULL = helpers.NULL
|
|||||||
local cimport = helpers.cimport
|
local cimport = helpers.cimport
|
||||||
local to_cstr = helpers.to_cstr
|
local to_cstr = helpers.to_cstr
|
||||||
local alloc_log_new = helpers.alloc_log_new
|
local alloc_log_new = helpers.alloc_log_new
|
||||||
|
local concat_tables = helpers.concat_tables
|
||||||
|
local map = helpers.map
|
||||||
|
|
||||||
local a = eval_helpers.alloc_logging_helpers
|
local a = eval_helpers.alloc_logging_helpers
|
||||||
local int = eval_helpers.int
|
local int = eval_helpers.int
|
||||||
@ -40,9 +41,6 @@ local callback2tbl = eval_helpers.callback2tbl
|
|||||||
local tbl2callback = eval_helpers.tbl2callback
|
local tbl2callback = eval_helpers.tbl2callback
|
||||||
local dict_watchers = eval_helpers.dict_watchers
|
local dict_watchers = eval_helpers.dict_watchers
|
||||||
|
|
||||||
local concat_tables = global_helpers.concat_tables
|
|
||||||
local map = global_helpers.map
|
|
||||||
|
|
||||||
local lib = cimport('./src/nvim/eval/typval.h', './src/nvim/memory.h',
|
local lib = cimport('./src/nvim/eval/typval.h', './src/nvim/memory.h',
|
||||||
'./src/nvim/mbyte.h', './src/nvim/garray.h',
|
'./src/nvim/mbyte.h', './src/nvim/garray.h',
|
||||||
'./src/nvim/eval.h', './src/nvim/vim.h',
|
'./src/nvim/eval.h', './src/nvim/vim.h',
|
||||||
|
@ -15,7 +15,6 @@ local dedent = global_helpers.dedent
|
|||||||
local neq = global_helpers.neq
|
local neq = global_helpers.neq
|
||||||
local map = global_helpers.map
|
local map = global_helpers.map
|
||||||
local eq = global_helpers.eq
|
local eq = global_helpers.eq
|
||||||
local ok = global_helpers.ok
|
|
||||||
|
|
||||||
-- C constants.
|
-- C constants.
|
||||||
local NULL = ffi.cast('void*', 0)
|
local NULL = ffi.cast('void*', 0)
|
||||||
@ -842,9 +841,6 @@ local module = {
|
|||||||
cimport = cimport,
|
cimport = cimport,
|
||||||
cppimport = cppimport,
|
cppimport = cppimport,
|
||||||
internalize = internalize,
|
internalize = internalize,
|
||||||
ok = ok,
|
|
||||||
eq = eq,
|
|
||||||
neq = neq,
|
|
||||||
ffi = ffi,
|
ffi = ffi,
|
||||||
lib = lib,
|
lib = lib,
|
||||||
cstr = cstr,
|
cstr = cstr,
|
||||||
@ -869,6 +865,7 @@ local module = {
|
|||||||
ptr2key = ptr2key,
|
ptr2key = ptr2key,
|
||||||
debug_log = debug_log,
|
debug_log = debug_log,
|
||||||
}
|
}
|
||||||
|
module = global_helpers.tbl_extend('error', module, global_helpers)
|
||||||
return function()
|
return function()
|
||||||
return module
|
return module
|
||||||
end
|
end
|
||||||
|
@ -2,9 +2,7 @@ local helpers = require('test.unit.helpers')(after_each)
|
|||||||
local itp = helpers.gen_itp(it)
|
local itp = helpers.gen_itp(it)
|
||||||
local lfs = require('lfs')
|
local lfs = require('lfs')
|
||||||
local child_call_once = helpers.child_call_once
|
local child_call_once = helpers.child_call_once
|
||||||
|
local sleep = helpers.sleep
|
||||||
local global_helpers = require('test.helpers')
|
|
||||||
local sleep = global_helpers.sleep
|
|
||||||
|
|
||||||
local ffi = helpers.ffi
|
local ffi = helpers.ffi
|
||||||
local cimport = helpers.cimport
|
local cimport = helpers.cimport
|
||||||
@ -156,12 +154,12 @@ describe('u_write_undo', function()
|
|||||||
local file_contents = "testing permissions"
|
local file_contents = "testing permissions"
|
||||||
-- Write a text file where the undofile should go
|
-- Write a text file where the undofile should go
|
||||||
local correct_name = ffi.string(undo.u_get_undo_file_name(file_buffer.b_ffname, false))
|
local correct_name = ffi.string(undo.u_get_undo_file_name(file_buffer.b_ffname, false))
|
||||||
global_helpers.write_file(correct_name, file_contents, true, false)
|
helpers.write_file(correct_name, file_contents, true, false)
|
||||||
|
|
||||||
-- Call with `forceit`.
|
-- Call with `forceit`.
|
||||||
u_write_undo(correct_name, true, file_buffer, buffer_hash)
|
u_write_undo(correct_name, true, file_buffer, buffer_hash)
|
||||||
|
|
||||||
local undo_file_contents = global_helpers.read_file(correct_name)
|
local undo_file_contents = helpers.read_file(correct_name)
|
||||||
|
|
||||||
neq(file_contents, undo_file_contents)
|
neq(file_contents, undo_file_contents)
|
||||||
local success, deletion_err = os.remove(correct_name) -- delete the file now that we're done with it.
|
local success, deletion_err = os.remove(correct_name) -- delete the file now that we're done with it.
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
local helpers = require('test.unit.helpers')(after_each)
|
local helpers = require('test.unit.helpers')(after_each)
|
||||||
local global_helpers = require('test.helpers')
|
|
||||||
local itp = helpers.gen_itp(it)
|
local itp = helpers.gen_itp(it)
|
||||||
local viml_helpers = require('test.unit.viml.helpers')
|
local viml_helpers = require('test.unit.viml.helpers')
|
||||||
|
|
||||||
@ -8,6 +7,8 @@ local conv_enum = helpers.conv_enum
|
|||||||
local cimport = helpers.cimport
|
local cimport = helpers.cimport
|
||||||
local ffi = helpers.ffi
|
local ffi = helpers.ffi
|
||||||
local eq = helpers.eq
|
local eq = helpers.eq
|
||||||
|
local shallowcopy = helpers.shallowcopy
|
||||||
|
local intchar2lua = helpers.intchar2lua
|
||||||
|
|
||||||
local conv_ccs = viml_helpers.conv_ccs
|
local conv_ccs = viml_helpers.conv_ccs
|
||||||
local new_pstate = viml_helpers.new_pstate
|
local new_pstate = viml_helpers.new_pstate
|
||||||
@ -15,9 +16,6 @@ local conv_cmp_type = viml_helpers.conv_cmp_type
|
|||||||
local pstate_set_str = viml_helpers.pstate_set_str
|
local pstate_set_str = viml_helpers.pstate_set_str
|
||||||
local conv_expr_asgn_type = viml_helpers.conv_expr_asgn_type
|
local conv_expr_asgn_type = viml_helpers.conv_expr_asgn_type
|
||||||
|
|
||||||
local shallowcopy = global_helpers.shallowcopy
|
|
||||||
local intchar2lua = global_helpers.intchar2lua
|
|
||||||
|
|
||||||
local lib = cimport('./src/nvim/viml/parser/expressions.h')
|
local lib = cimport('./src/nvim/viml/parser/expressions.h')
|
||||||
|
|
||||||
local eltkn_type_tab, eltkn_mul_type_tab, eltkn_opt_scope_tab
|
local eltkn_type_tab, eltkn_mul_type_tab, eltkn_opt_scope_tab
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
local helpers = require('test.unit.helpers')(after_each)
|
local helpers = require('test.unit.helpers')(after_each)
|
||||||
local global_helpers = require('test.helpers')
|
|
||||||
local itp = helpers.gen_itp(it)
|
local itp = helpers.gen_itp(it)
|
||||||
local viml_helpers = require('test.unit.viml.helpers')
|
local viml_helpers = require('test.unit.viml.helpers')
|
||||||
|
|
||||||
@ -14,6 +13,11 @@ local cimport = helpers.cimport
|
|||||||
local ffi = helpers.ffi
|
local ffi = helpers.ffi
|
||||||
local neq = helpers.neq
|
local neq = helpers.neq
|
||||||
local eq = helpers.eq
|
local eq = helpers.eq
|
||||||
|
local mergedicts_copy = helpers.mergedicts_copy
|
||||||
|
local format_string = helpers.format_string
|
||||||
|
local format_luav = helpers.format_luav
|
||||||
|
local intchar2lua = helpers.intchar2lua
|
||||||
|
local dictdiff = helpers.dictdiff
|
||||||
|
|
||||||
local conv_ccs = viml_helpers.conv_ccs
|
local conv_ccs = viml_helpers.conv_ccs
|
||||||
local new_pstate = viml_helpers.new_pstate
|
local new_pstate = viml_helpers.new_pstate
|
||||||
@ -21,12 +25,6 @@ local conv_cmp_type = viml_helpers.conv_cmp_type
|
|||||||
local pstate_set_str = viml_helpers.pstate_set_str
|
local pstate_set_str = viml_helpers.pstate_set_str
|
||||||
local conv_expr_asgn_type = viml_helpers.conv_expr_asgn_type
|
local conv_expr_asgn_type = viml_helpers.conv_expr_asgn_type
|
||||||
|
|
||||||
local mergedicts_copy = global_helpers.mergedicts_copy
|
|
||||||
local format_string = global_helpers.format_string
|
|
||||||
local format_luav = global_helpers.format_luav
|
|
||||||
local intchar2lua = global_helpers.intchar2lua
|
|
||||||
local dictdiff = global_helpers.dictdiff
|
|
||||||
|
|
||||||
local lib = cimport('./src/nvim/viml/parser/expressions.h',
|
local lib = cimport('./src/nvim/viml/parser/expressions.h',
|
||||||
'./src/nvim/syntax.h')
|
'./src/nvim/syntax.h')
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user