diff options
Diffstat (limited to 'test/functional/eval/server_spec.lua')
| -rw-r--r-- | test/functional/eval/server_spec.lua | 117 | 
1 files changed, 94 insertions, 23 deletions
| diff --git a/test/functional/eval/server_spec.lua b/test/functional/eval/server_spec.lua index 420aea04aa..4e4aed864b 100644 --- a/test/functional/eval/server_spec.lua +++ b/test/functional/eval/server_spec.lua @@ -1,24 +1,40 @@ -  local helpers = require('test.functional.helpers')(after_each) -local nvim, eq, neq, eval = helpers.nvim, helpers.eq, helpers.neq, helpers.eval +local eq, neq, eval = helpers.eq, helpers.neq, helpers.eval +local command = helpers.command  local clear, funcs, meths = helpers.clear, helpers.funcs, helpers.meths -local os_name = helpers.os_name +local iswin = helpers.iswin +local ok = helpers.ok +local matches = helpers.matches + +local function clear_serverlist() +  for _, server in pairs(funcs.serverlist()) do +    funcs.serverstop(server) +  end +end -describe('serverstart(), serverstop()', function() +describe('server', function()    before_each(clear) -  it('sets $NVIM_LISTEN_ADDRESS on first invocation', function() +  it('serverstart() sets $NVIM_LISTEN_ADDRESS on first invocation', function()      -- Unset $NVIM_LISTEN_ADDRESS -    nvim('command', 'let $NVIM_LISTEN_ADDRESS = ""') +    command('let $NVIM_LISTEN_ADDRESS = ""')      local s = eval('serverstart()')      assert(s ~= nil and s:len() > 0, "serverstart() returned empty")      eq(s, eval('$NVIM_LISTEN_ADDRESS')) -    nvim('command', "call serverstop('"..s.."')") +    eq(1, eval("serverstop('"..s.."')"))      eq('', eval('$NVIM_LISTEN_ADDRESS'))    end) -  it('sets v:servername _only_ on nvim startup unless all servers are stopped', +  it('sets new v:servername if $NVIM_LISTEN_ADDRESS is invalid', function() +    clear({env={NVIM_LISTEN_ADDRESS='.'}}) +    eq('.', eval('$NVIM_LISTEN_ADDRESS')) +    local servers = funcs.serverlist() +    eq(1, #servers) +    ok(string.len(servers[1]) > 4)  -- Like /tmp/nvim…/… or \\.\pipe\… +  end) + +  it('sets v:servername at startup or if all servers were stopped',    function()      local initial_server = meths.get_vvar('servername')      assert(initial_server ~= nil and initial_server:len() > 0, @@ -31,37 +47,70 @@ describe('serverstart(), serverstop()', function()      neq(initial_server, s)      -- serverstop() does _not_ modify v:servername... -    funcs.serverstop(s) +    eq(1, funcs.serverstop(s))      eq(initial_server, meths.get_vvar('servername'))      -- ...unless we stop _all_ servers. -    funcs.serverstop(funcs.serverlist()[1]) +    eq(1, funcs.serverstop(funcs.serverlist()[1]))      eq('', meths.get_vvar('servername'))      -- v:servername will take the next available server. -    local servername = (os_name() == 'windows' -                        and [[\\.\pipe\Xtest-functional-server-pipe]] -                        or 'Xtest-functional-server-socket') +    local servername = (iswin() and [[\\.\pipe\Xtest-functional-server-pipe]] +                                or 'Xtest-functional-server-socket')      funcs.serverstart(servername)      eq(servername, meths.get_vvar('servername'))    end) -  it('serverstop() ignores invalid input', function() -    nvim('command', "call serverstop('')") -    nvim('command', "call serverstop('bogus-socket-name')") +  it('serverstop() returns false for invalid input', function() +    eq(0, eval("serverstop('')")) +    eq(0, eval("serverstop('bogus-socket-name')"))    end) -end) +  it('parses endpoints correctly', function() +    clear_serverlist() +    eq({}, funcs.serverlist()) -describe('serverlist()', function() -  before_each(clear) +    local s = funcs.serverstart('127.0.0.1:0')  -- assign random port +    if #s > 0 then +      assert(string.match(s, '127.0.0.1:%d+')) +      eq(s, funcs.serverlist()[1]) +      clear_serverlist() +    end + +    s = funcs.serverstart('127.0.0.1:')  -- assign random port +    if #s > 0 then +      assert(string.match(s, '127.0.0.1:%d+')) +      eq(s, funcs.serverlist()[1]) +      clear_serverlist() +    end + +    local expected = {} +    local v4 = '127.0.0.1:12345' +    s = funcs.serverstart(v4) +    if #s > 0 then +      table.insert(expected, v4) +      funcs.serverstart(v4)  -- exists already; ignore +    end -  it('returns the list of servers', function() +    local v6 = '::1:12345' +    s = funcs.serverstart(v6) +    if #s > 0 then +      table.insert(expected, v6) +      funcs.serverstart(v6)  -- exists already; ignore +    end +    eq(expected, funcs.serverlist()) +    clear_serverlist() + +    funcs.serverstart('127.0.0.1:65536')  -- invalid port +    eq({}, funcs.serverlist()) +  end) + +  it('serverlist() returns the list of servers', function()      -- There should already be at least one server.      local n = eval('len(serverlist())') -    -- Add a few -    local servs = (os_name() == 'windows' +    -- Add some servers. +    local servs = (iswin()        and { [[\\.\pipe\Xtest-pipe0934]], [[\\.\pipe\Xtest-pipe4324]] }        or  { [[Xtest-pipe0934]], [[Xtest-pipe4324]] })      for _, s in ipairs(servs) do @@ -75,9 +124,31 @@ describe('serverlist()', function()      -- The new servers should be at the end of the list.      for i = 1, #servs do        eq(servs[i], new_servs[i + n]) -      nvim('command', "call serverstop('"..servs[i].."')") +      eq(1, eval("serverstop('"..servs[i].."')"))      end      -- After serverstop() the servers should NOT be in the list.      eq(n, eval('len(serverlist())'))    end)  end) + +describe('startup --listen', function() +  it('validates', function() +    clear() + +    local cmd = { unpack(helpers.nvim_argv) } +    table.insert(cmd, '--listen') +    matches('nvim.*: Argument missing after: "%-%-listen"', funcs.system(cmd)) + +    cmd = { unpack(helpers.nvim_argv) } +    table.insert(cmd, '--listen2') +    matches('nvim.*: Garbage after option argument: "%-%-listen2"', funcs.system(cmd)) +  end) + +  it('sets v:servername, overrides $NVIM_LISTEN_ADDRESS', function() +    local addr = (iswin() and [[\\.\pipe\Xtest-listen-pipe]] +                          or 'Xtest-listen-pipe') +    clear({ env={ NVIM_LISTEN_ADDRESS='Xtest-env-pipe' }, +            args={ '--listen', addr } }) +    eq(addr, meths.get_vvar('servername')) +  end) +end) | 
