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)  | 
