diff options
Diffstat (limited to 'test/functional/lua/loop_spec.lua')
-rw-r--r-- | test/functional/lua/loop_spec.lua | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/test/functional/lua/loop_spec.lua b/test/functional/lua/loop_spec.lua new file mode 100644 index 0000000000..8cc54e8c13 --- /dev/null +++ b/test/functional/lua/loop_spec.lua @@ -0,0 +1,55 @@ +-- Test suite for testing interactions with API bindings +local helpers = require('test.functional.helpers')(after_each) +local funcs = helpers.funcs +local meths = helpers.meths +local clear = helpers.clear +local sleep = helpers.sleep +local eq = helpers.eq +local matches = helpers.matches + +before_each(clear) + +describe('vim.loop', function() + + it('version', function() + assert(funcs.luaeval('vim.loop.version()')>=72961, "libuv version too old") + matches("(%d+)%.(%d+)%.(%d+)", funcs.luaeval('vim.loop.version_string()')) + end) + + it('timer', function() + meths.execute_lua('vim.api.nvim_set_var("coroutine_cnt", 0)', {}) + + local code=[[ + local loop = vim.loop + + local touch = 0 + local function wait(ms) + local this = coroutine.running() + assert(this) + local timer = loop.new_timer() + timer:start(ms, 0, function () + timer:close() + touch = touch + 1 + coroutine.resume(this) + touch = touch + 1 + assert(touch==3) + vim.api.nvim_set_var("coroutine_cnt_1", touch) + end) + coroutine.yield() + touch = touch + 1 + return touch + end + coroutine.wrap(function() + local touched = wait(10) + assert(touched==touch) + vim.api.nvim_set_var("coroutine_cnt", touched) + end)() + ]] + + eq(0, meths.get_var('coroutine_cnt')) + meths.execute_lua(code, {}) + sleep(20) + eq(2, meths.get_var('coroutine_cnt')) + eq(3, meths.get_var('coroutine_cnt_1')) + end) +end) |