1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
local helpers = require('test.functional.helpers')(after_each)
local clear = helpers.clear
local command = helpers.command
local eq = helpers.eq
local exec_lua = helpers.exec_lua
local expect = helpers.expect
local funcs = helpers.funcs
local insert = helpers.insert
local meths = helpers.meths
local new_argv = helpers.new_argv
local neq = helpers.neq
local set_session = helpers.set_session
local spawn = helpers.spawn
local tmpname = helpers.tmpname
local write_file = helpers.write_file
describe('Remote', function()
local fname, other_fname
local contents = 'The call is coming from outside the process'
local other_contents = "A second file's contents"
before_each(function()
fname = tmpname() .. ' with spaces in the filename'
other_fname = tmpname()
write_file(fname, contents)
write_file(other_fname, other_contents)
end)
describe('connect to server and', function()
local server
before_each(function()
server = spawn(new_argv(), true)
set_session(server)
end)
after_each(function()
server:close()
end)
local function run_remote(...)
set_session(server)
local addr = funcs.serverlist()[1]
local client_argv = new_argv({args={'--server', addr, ...}})
-- Create an nvim instance just to run the remote-invoking nvim. We want
-- to wait for the remote instance to exit and calling jobwait blocks
-- the event loop. If the server event loop is blocked, it can't process
-- our incoming --remote calls.
local client_starter = spawn(new_argv(), false, nil, true)
set_session(client_starter)
-- Call jobstart() and jobwait() in the same RPC request to reduce flakiness.
eq({ 0 }, exec_lua([[return vim.fn.jobwait({ vim.fn.jobstart(...) })]], client_argv))
client_starter:close()
set_session(server)
end
it('edit a single file', function()
run_remote('--remote', fname)
expect(contents)
eq(2, #funcs.getbufinfo())
end)
it('tab edit a single file with a non-changed buffer', function()
run_remote('--remote-tab', fname)
expect(contents)
eq(1, #funcs.gettabinfo())
end)
it('tab edit a single file with a changed buffer', function()
insert('hello')
run_remote('--remote-tab', fname)
expect(contents)
eq(2, #funcs.gettabinfo())
end)
it('edit multiple files', function()
run_remote('--remote', fname, other_fname)
expect(contents)
command('next')
expect(other_contents)
eq(3, #funcs.getbufinfo())
end)
it('send keys', function()
run_remote('--remote-send', ':edit '..fname..'<CR><C-W>v')
expect(contents)
eq(2, #funcs.getwininfo())
-- Only a single buffer as we're using edit and not drop like --remote does
eq(1, #funcs.getbufinfo())
end)
it('evaluate expressions', function()
run_remote('--remote-expr', 'setline(1, "Yo")')
expect('Yo')
end)
end)
it('creates server if not found', function()
clear('--remote', fname)
expect(contents)
eq(1, #funcs.getbufinfo())
-- Since we didn't pass silent, we should get a complaint
neq(nil, string.find(meths.exec('messages', true), 'E247'))
end)
it('creates server if not found with tabs', function()
clear('--remote-tab-silent', fname, other_fname)
expect(contents)
eq(2, #funcs.gettabinfo())
eq(2, #funcs.getbufinfo())
-- We passed silent, so no message should be issued about the server not being found
eq(nil, string.find(meths.exec('messages', true), 'E247'))
end)
pending('exits with error on', function()
local function run_and_check_exit_code(...)
local bogus_argv = new_argv(...)
-- Create an nvim instance just to run the remote-invoking nvim. We want
-- to wait for the remote instance to exit and calling jobwait blocks
-- the event loop. If the server event loop is blocked, it can't process
-- our incoming --remote calls.
clear()
-- Call jobstart() and jobwait() in the same RPC request to reduce flakiness.
eq({ 2 }, exec_lua([[return vim.fn.jobwait({ vim.fn.jobstart(...) })]], bogus_argv))
end
it('bogus subcommand', function()
run_and_check_exit_code('--remote-bogus')
end)
it('send without server', function()
run_and_check_exit_code('--remote-send', 'i')
end)
it('expr without server', function()
run_and_check_exit_code('--remote-expr', 'setline(1, "Yo")')
end)
it('wait subcommand', function()
run_and_check_exit_code('--remote-wait', fname)
end)
end)
end)
|