diff options
| -rw-r--r-- | test/functional/helpers.lua | 14 | ||||
| -rw-r--r-- | test/functional/terminal/api_spec.lua | 60 | 
2 files changed, 72 insertions, 2 deletions
| diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua index d5b7442b57..325f41e506 100644 --- a/test/functional/helpers.lua +++ b/test/functional/helpers.lua @@ -1,6 +1,8 @@  require('coxpcall')  local lfs = require('lfs')  local ChildProcessStream = require('nvim.child_process_stream') +local SocketStream = require('nvim.socket_stream') +local TcpStream = require('nvim.tcp_stream')  local Session = require('nvim.session')  local global_helpers = require('test.helpers') @@ -223,6 +225,14 @@ local function spawn(argv, merge, env)    return Session.new(child_stream)  end +-- Creates a new Session connected by domain socket (named pipe) or TCP. +local function connect(file_or_address) +  local addr, port = string.match(file_or_address, "(.*):(%d+)") +  local stream = (addr and port) and TcpStream.open(addr, port) or +    SocketStream.open(file_or_address) +  return Session.new(stream) +end +  local function clear(...)    local args = {unpack(nvim_argv)}    local new_args @@ -291,8 +301,7 @@ local function write_file(name, text, dont_dedent)    file:close()  end --- Tries to get platform name, from $SYSTEM_NAME, uname, --- fallback is 'Windows' +-- Tries to get platform name from $SYSTEM_NAME, uname; fallback is "Windows".  local uname = (function()    local platform = nil    return (function() @@ -508,6 +517,7 @@ return function(after_each)    return {      prepend_argv = prepend_argv,      clear = clear, +    connect = connect,      spawn = spawn,      dedent = dedent,      source = source, diff --git a/test/functional/terminal/api_spec.lua b/test/functional/terminal/api_spec.lua new file mode 100644 index 0000000000..58d6c75940 --- /dev/null +++ b/test/functional/terminal/api_spec.lua @@ -0,0 +1,60 @@ +local helpers = require('test.functional.helpers')(after_each) +local child_session = require('test.functional.terminal.helpers') +local ok = helpers.ok + +if helpers.pending_win32(pending) then return end + +describe('api', function() +  local screen +  local socket_name = "Xtest_functional_api.sock" + +  before_each(function() +    helpers.clear() +    os.remove(socket_name) +    screen = child_session.screen_setup(0, '["'..helpers.nvim_prog +      ..'", "-u", "NONE", "-i", "NONE", "--cmd", "set noswapfile"]') +  end) +  after_each(function() +    os.remove(socket_name) +  end) + +  it("qa! RPC request during insert-mode", function() +    -- Start the socket from the child nvim. +    child_session.feed_data(":echo serverstart('"..socket_name.."')\n") + +    -- Wait for socket creation by abusing expect(). +    screen:expect([[ +      {1: }                                                 | +      {4:~                                                 }| +      {4:~                                                 }| +      {4:~                                                 }| +      {5:[No Name]                                         }| +      ]]..socket_name..[[                         | +      {3:-- TERMINAL --}                                    | +    ]]) + +    local socket_session1 = helpers.connect(socket_name) +    local socket_session2 = helpers.connect(socket_name) + +    child_session.feed_data("i[tui] insert-mode") + +    ok(socket_session1:request("nvim_ui_attach", 42, 6, {rgb=true})) +    ok(socket_session2:request("nvim_ui_attach", 25, 30, {rgb=true})) + +    socket_session1:notify("nvim_input", "\n[socket 1] this is more than 25 columns") +    socket_session2:notify("nvim_input", "\n[socket 2] input") + +    screen:expect([[ +      [tui] insert-mode                                 | +      [socket 1] this is more t{4:                         }| +      han 25 columns           {4:                         }| +      [socket 2] input{1: }        {4:                         }| +      {5:[No Name] [+]                                     }| +      {3:-- INSERT --}                                      | +      {3:-- TERMINAL --}                                    | +    ]]) + +    socket_session1:request("nvim_command", "qa!") +  end) +end) + | 
