blob: d3d5e8baf263495356e33eff3c82ed2a8ad10552 [file] [log] [blame]
Bram Moolenaar321efdd2016-07-15 17:09:11 +02001" Test the netbeans interface.
2
Bram Moolenaarb46fecd2019-06-15 17:58:09 +02003CheckFeature netbeans_intg
Bram Moolenaar321efdd2016-07-15 17:09:11 +02004
Bram Moolenaar321efdd2016-07-15 17:09:11 +02005let s:python = PythonProg()
6if s:python == ''
Bram Moolenaarb46fecd2019-06-15 17:58:09 +02007 throw 'Skipped: python program missing'
Bram Moolenaar321efdd2016-07-15 17:09:11 +02008endif
9
Bram Moolenaar4b96df52020-01-26 22:00:26 +010010" Run "testfunc" after starting the server and stop the server afterwards.
Bram Moolenaar321efdd2016-07-15 17:09:11 +020011func s:run_server(testfunc, ...)
12 call RunServer('test_netbeans.py', a:testfunc, a:000)
13endfunc
14
Bram Moolenaar173d8412020-04-19 14:02:26 +020015" Wait for an exception (error) to be thrown. This is used to check whether a
16" message from the netbeans server causes an error. It takes some time for Vim
17" to process a netbeans message. So a sleep is used below to account for this.
18func WaitForError(errcode)
19 let save_exception = ''
20 for i in range(200)
21 try
22 sleep 5m
23 catch
24 let save_exception = v:exception
25 break
26 endtry
27 endfor
28 call assert_match(a:errcode, save_exception)
29endfunc
30
Bram Moolenaar95650152020-07-19 18:24:32 +020031" Read the "Xnetbeans" file and filter out geometry messages.
32func ReadXnetbeans()
33 let l = readfile("Xnetbeans")
Bram Moolenaar32e5ec02020-11-06 13:44:21 +010034 " Xnetbeans may include '0:geometry=' messages in the GUI Vim if the window
Bram Moolenaar95650152020-07-19 18:24:32 +020035 " position, size, or z order are changed. Remove these messages because
Bram Moolenaar50dc3ec2020-11-16 18:39:43 +010036 " these messages will break the assert for the output.
Bram Moolenaar95650152020-07-19 18:24:32 +020037 return filter(l, 'v:val !~ "^0:geometry="')
38endfunc
39
Bram Moolenaar321efdd2016-07-15 17:09:11 +020040func Nb_basic(port)
Bram Moolenaarb152b6a2022-09-29 21:37:33 +010041 call writefile([], "Xnetbeans", 'D')
Bram Moolenaar173d8412020-04-19 14:02:26 +020042
43 " Last line number in the Xnetbeans file. Used to verify the result of the
44 " communication with the netbeans server
45 let g:last = 0
46
47 " Establish the connection with the netbeans server
48 exe 'nbstart :localhost:' .. a:port .. ':bunny'
Bram Moolenaar321efdd2016-07-15 17:09:11 +020049 call assert_true(has("netbeans_enabled"))
Bram Moolenaar95650152020-07-19 18:24:32 +020050 call WaitFor('len(ReadXnetbeans()) > (g:last + 2)')
51 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +020052 call assert_equal(['AUTH bunny',
53 \ '0:version=0 "2.5"',
54 \ '0:startupDone=0'], l[-3:])
55 let g:last += 3
Bram Moolenaar321efdd2016-07-15 17:09:11 +020056
Bram Moolenaar173d8412020-04-19 14:02:26 +020057 " Trying to connect again to netbeans server should fail
58 call assert_fails("exe 'nbstart :localhost:' . a:port . ':bunny'", 'E511:')
Bram Moolenaar321efdd2016-07-15 17:09:11 +020059
Bram Moolenaar173d8412020-04-19 14:02:26 +020060 " Open the command buffer to communicate with the server
61 split Xcmdbuf
62 let cmdbufnr = bufnr()
Bram Moolenaar95650152020-07-19 18:24:32 +020063 call WaitFor('len(ReadXnetbeans()) > (g:last + 2)')
64 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +020065 call assert_equal('0:fileOpened=0 "Xcmdbuf" T F',
66 \ substitute(l[-3], '".*/', '"', ''))
67 call assert_equal('send: 1:putBufferNumber!15 "Xcmdbuf"',
68 \ substitute(l[-2], '".*/', '"', ''))
69 call assert_equal('1:startDocumentListen!16', l[-1])
70 let g:last += 3
Bram Moolenaar321efdd2016-07-15 17:09:11 +020071
Bram Moolenaar173d8412020-04-19 14:02:26 +020072 " Keep the command buffer loaded for communication
73 hide
74
75 sleep 1m
76
77 " getCursor test
Bram Moolenaarb152b6a2022-09-29 21:37:33 +010078 call writefile(['foo bar', 'foo bar', 'foo bar'], 'Xfile1', 'D')
Bram Moolenaar173d8412020-04-19 14:02:26 +020079 split Xfile1
80 call cursor(3, 4)
81 sleep 10m
82 call appendbufline(cmdbufnr, '$', 'getCursor_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +020083 call WaitFor('len(ReadXnetbeans()) >= (g:last + 5)')
84 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +020085 call assert_equal(['send: 0:getCursor/30', '30 -1 3 3 19'], l[-2:])
86 let g:last += 5
87
88 " Test for E627
89 call appendbufline(cmdbufnr, '$', 'E627_Test')
90 call WaitForError('E627:')
Bram Moolenaar95650152020-07-19 18:24:32 +020091 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
92 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +020093 call assert_equal('send: 0 setReadOnly!31', l[-1])
94 let g:last += 3
95
96 " Test for E628
97 call appendbufline(cmdbufnr, '$', 'E628_Test')
98 call WaitForError('E628:')
Bram Moolenaar95650152020-07-19 18:24:32 +020099 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
100 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200101 call assert_equal('send: 0:setReadOnly 32', l[-1])
102 let g:last += 3
103
104 " Test for E632
105 call appendbufline(cmdbufnr, '$', 'E632_Test')
106 call WaitForError('E632:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200107 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
108 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200109 call assert_equal(['send: 0:getLength/33', '33 0'], l[-2:])
110 let g:last += 4
111
112 " Test for E633
113 call appendbufline(cmdbufnr, '$', 'E633_Test')
114 call WaitForError('E633:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200115 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
116 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200117 call assert_equal(['send: 0:getText/34', '34 '], l[-2:])
118 let g:last += 4
119
120 " Test for E634
121 call appendbufline(cmdbufnr, '$', 'E634_Test')
122 call WaitForError('E634:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200123 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
124 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200125 call assert_equal(['send: 0:remove/35 1 1', '35'], l[-2:])
126 let g:last += 4
127
128 " Test for E635
129 call appendbufline(cmdbufnr, '$', 'E635_Test')
130 call WaitForError('E635:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200131 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
132 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200133 call assert_equal(['send: 0:insert/36 0 "line1\n"', '36'], l[-2:])
134 let g:last += 4
135
136 " Test for E636
137 call appendbufline(cmdbufnr, '$', 'E636_Test')
138 call WaitForError('E636:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200139 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
140 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200141 call assert_equal('send: 0:create!37', l[-1])
142 let g:last += 3
143
144 " Test for E637
145 call appendbufline(cmdbufnr, '$', 'E637_Test')
146 call WaitForError('E637:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200147 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
148 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200149 call assert_equal('send: 0:startDocumentListen!38', l[-1])
150 let g:last += 3
151
152 " Test for E638
153 call appendbufline(cmdbufnr, '$', 'E638_Test')
154 call WaitForError('E638:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200155 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
156 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200157 call assert_equal('send: 0:stopDocumentListen!39', l[-1])
158 let g:last += 3
159
160 " Test for E639
161 call appendbufline(cmdbufnr, '$', 'E639_Test')
162 call WaitForError('E639:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200163 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
164 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200165 call assert_equal('send: 0:setTitle!40 "Title"', l[-1])
166 let g:last += 3
167
168 " Test for E640
169 call appendbufline(cmdbufnr, '$', 'E640_Test')
170 call WaitForError('E640:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200171 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
172 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200173 call assert_equal('send: 0:initDone!41', l[-1])
174 let g:last += 3
175
176 " Test for E641
177 call appendbufline(cmdbufnr, '$', 'E641_Test')
178 call WaitForError('E641:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200179 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
180 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200181 call assert_equal('send: 0:putBufferNumber!42 "XSomeBuf"', l[-1])
182 let g:last += 3
183
184 " Test for E642
185 call appendbufline(cmdbufnr, '$', 'E642_Test')
186 call WaitForError('E642:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200187 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
188 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200189 call assert_equal('send: 9:putBufferNumber!43 "XInvalidBuf"', l[-1])
190 let g:last += 3
191
192 " Test for E643
193 call appendbufline(cmdbufnr, '$', 'E643_Test')
194 call WaitForError('E643:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200195 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
196 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200197 call assert_equal('send: 0:setFullName!44 "XSomeBuf"', l[-1])
198 let g:last += 3
199
200 enew!
201
202 " Test for E644
203 call appendbufline(cmdbufnr, '$', 'E644_Test')
204 call WaitForError('E644:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200205 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
206 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200207 call assert_equal('send: 0:editFile!45 "Xfile3"', l[-1])
208 let g:last += 3
209
210 " Test for E645 (shown only when verbose > 0)
211 call appendbufline(cmdbufnr, '$', 'E645_Test')
212 set verbose=1
213 call WaitForError('E645:')
214 set verbose&
Bram Moolenaar95650152020-07-19 18:24:32 +0200215 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
216 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200217 call assert_equal('send: 0:setVisible!46 T', l[-1])
218 let g:last += 3
219
220 " Test for E646 (shown only when verbose > 0)
221 call appendbufline(cmdbufnr, '$', 'E646_Test')
222 set verbose=1
223 call WaitForError('E646:')
224 set verbose&
Bram Moolenaar95650152020-07-19 18:24:32 +0200225 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
226 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200227 call assert_equal('send: 0:setModified!47 T', l[-1])
228 let g:last += 3
229
230 " Test for E647
231 call appendbufline(cmdbufnr, '$', 'E647_Test')
232 call WaitForError('E647:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200233 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
234 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200235 call assert_equal('send: 0:setDot!48 1/1', l[-1])
236 let g:last += 3
237
238 " Test for E648
239 call appendbufline(cmdbufnr, '$', 'E648_Test')
240 call WaitForError('E648:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200241 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
242 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200243 call assert_equal('send: 0:close!49', l[-1])
244 let g:last += 3
245
246 " Test for E650
247 call appendbufline(cmdbufnr, '$', 'E650_Test')
248 call WaitForError('E650:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200249 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
250 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200251 call assert_equal('send: 0:defineAnnoType!50 1 "abc" "a" "a" 1 1', l[-1])
252 let g:last += 3
253
254 " Test for E651
255 call appendbufline(cmdbufnr, '$', 'E651_Test')
256 call WaitForError('E651:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200257 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
258 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200259 call assert_equal('send: 0:addAnno!51 1 1 1 1', l[-1])
260 let g:last += 3
261
262 " Test for E652
263 call appendbufline(cmdbufnr, '$', 'E652_Test')
264 call WaitForError('E652:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200265 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
266 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200267 call assert_equal(['send: 0:getAnno/52 8', '52 0'], l[-2:])
268 let g:last += 4
269
270 " editFile test
Bram Moolenaarb152b6a2022-09-29 21:37:33 +0100271 call writefile(['foo bar1', 'foo bar2', 'foo bar3'], 'Xfile3', 'D')
Bram Moolenaar173d8412020-04-19 14:02:26 +0200272 call appendbufline(cmdbufnr, '$', 'editFile_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200273 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
274 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200275 call assert_equal('send: 2:editFile!53 "Xfile3"', l[-2])
276 call assert_match('0:fileOpened=0 ".*/Xfile3" T F', l[-1])
277 call assert_equal('Xfile3', bufname())
278 let g:last += 4
279
280 " getLength test
281 call appendbufline(cmdbufnr, '$', 'getLength_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200282 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
283 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200284 call assert_equal(['send: 2:getLength/54', '54 27'], l[-2:])
285 let g:last += 4
286
287 " getModified test
288 call appendbufline(cmdbufnr, '$', 'getModified_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200289 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
290 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200291 call assert_equal(['send: 2:getModified/55', '55 0'], l[-2:])
292 let g:last += 4
293
294 " getText test
295 call appendbufline(cmdbufnr, '$', 'getText_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200296 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
297 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200298 call assert_equal(['send: 2:getText/56',
299 \ '56 "foo bar1\nfoo bar2\nfoo bar3\n"'], l[-2:])
300 let g:last += 4
301
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100302 " setDot test with lnum/col
303 call cursor(1, 1)
Bram Moolenaar173d8412020-04-19 14:02:26 +0200304 call appendbufline(cmdbufnr, '$', 'setDot_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200305 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
306 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200307 call assert_equal('send: 2:setDot!57 3/6', l[-1])
Bram Moolenaar6fd3a4b2020-11-03 11:53:29 +0100308 sleep 10m
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100309 call assert_equal([0, 3, 7, 0], getpos('.'))
310 let g:last += 3
311
312 " setDot test with an offset
313 call cursor(1, 1)
314 call appendbufline(cmdbufnr, '$', 'setDot2_Test')
315 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
316 let l = ReadXnetbeans()
317 call assert_equal('send: 2:setDot!57 9', l[-1])
Bram Moolenaar6fd3a4b2020-11-03 11:53:29 +0100318 sleep 10m
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100319 call assert_equal([0, 2, 1, 0], getpos('.'))
Bram Moolenaar173d8412020-04-19 14:02:26 +0200320 let g:last += 3
321
322 " startDocumentListen test
323 call appendbufline(cmdbufnr, '$', 'startDocumentListen_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200324 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
325 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200326 call assert_equal('send: 2:startDocumentListen!58', l[-1])
327 let g:last += 3
328
329 " make some changes to the buffer and check whether the netbeans server
330 " received the notifications
331 call append(2, 'blue sky')
332 1d
Bram Moolenaar95650152020-07-19 18:24:32 +0200333 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
334 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200335 call assert_match('2:insert=\d\+ 18 "blue sky"', l[-3])
336 call assert_match('2:insert=\d\+ 26 "\\n"', l[-2])
337 call assert_match('2:remove=\d\+ 0 9', l[-1])
338 let g:last += 3
339
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100340 " Change case using the ~ command with 'whichwrap' containing '~'
341 set whichwrap+=~
342 normal 2G$~
343 set whichwrap&
344 call WaitFor('len(ReadXnetbeans()) >= (g:last + 2)')
345 let l = ReadXnetbeans()
346 call assert_match('2:remove=\d\+ 16 1', l[-4])
347 call assert_match('2:insert=\d\+ 16 "Y"', l[-3])
348 call assert_match('2:remove=\d\+ 18 0', l[-2])
349 call assert_match('2:insert=\d\+ 18 ""', l[-1])
350 let g:last += 4
351
352 " Test for replacing spaces with a tab character using 'softtabstop' and
353 " 'noexpandtab'
354 setlocal softtabstop=4
355 setlocal noexpandtab
356 exe "normal I\<Tab>\<Tab>"
357 setlocal expandtab&
358 setlocal softtabstop&
359 call WaitFor('len(ReadXnetbeans()) >= (g:last + 18)')
360 let l = ReadXnetbeans()
361 call assert_match('2:insert=\d\+ 18 " foo bar3"', l[-3])
362 call assert_match('2:remove=\d\+ 26 8', l[-2])
363 call assert_match('2:insert=\d\+ 26 "\t"', l[-1])
364 let g:last += 18
365
Yegappan Lakshmanan2ac71842021-05-31 19:23:01 +0200366 " Test for changing case of multiple lines using ~
367 normal ggVG~
368 call WaitFor('len(ReadXnetbeans()) >= (g:last + 6)')
369 let l = ReadXnetbeans()
370 call assert_match('2:remove=\d\+ 0 8', l[-6])
371 call assert_match('2:insert=\d\+ 0 "FOO BAR2"', l[-5])
372 call assert_match('2:remove=\d\+ 9 8', l[-4])
373 call assert_match('2:insert=\d\+ 9 "BLUE SKy"', l[-3])
374 call assert_match('2:remove=\d\+ 18 9', l[-2])
375 call assert_match('2:insert=\d\+ 18 "\tFOO BAR3"', l[-1])
376 let g:last += 6
377
378 " Test for changing case of a visual block using ~
379 exe "normal ggw\<C-V>$~"
380 call WaitFor('len(ReadXnetbeans()) >= (g:last + 2)')
381 let l = ReadXnetbeans()
382 call assert_match('2:remove=\d\+ 4 4', l[-2])
383 call assert_match('2:insert=\d\+ 4 "bar2"', l[-1])
384 let g:last += 2
385
386 " Increment a number using <C-A> in visual mode
387 exe "normal! gg$v6\<C-A>"
388 call WaitFor('len(ReadXnetbeans()) >= (g:last + 6)')
389 let l = ReadXnetbeans()
390 call assert_match('2:remove=\d\+ 0 9', l[-4])
391 call assert_match('2:insert=\d\+ 0 "FOO bar8"', l[-3])
392 call assert_match('2:remove=\d\+ 7 1', l[-2])
393 call assert_match('2:insert=\d\+ 7 "8"', l[-1])
394 let g:last += 6
395
396 " Decrement a number using <C-X> in visual mode
397 exe "normal! gg$v3\<C-X>"
398 call WaitFor('len(ReadXnetbeans()) >= (g:last + 6)')
399 let l = ReadXnetbeans()
400 call assert_match('2:remove=\d\+ 0 9', l[-4])
401 call assert_match('2:insert=\d\+ 0 "FOO bar5"', l[-3])
402 call assert_match('2:remove=\d\+ 7 1', l[-2])
403 call assert_match('2:insert=\d\+ 7 "5"', l[-1])
404 let g:last += 6
405
Bram Moolenaar173d8412020-04-19 14:02:26 +0200406 " stopDocumentListen test
407 call appendbufline(cmdbufnr, '$', 'stopDocumentListen_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200408 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
409 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200410 call assert_equal('send: 2:stopDocumentListen!59', l[-1])
411 let g:last += 3
412
413 " Wait for vim to process the previous netbeans message
414 sleep 1m
415
416 " modify the buffer and make sure that the netbeans server is not notified
417 call append(2, 'clear sky')
418 1d
419
420 " defineAnnoType test
421 call appendbufline(cmdbufnr, '$', 'define_anno_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200422 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
423 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200424 call assert_equal('send: 2:defineAnnoType!60 1 "s1" "x" "=>" blue none', l[-1])
425 sleep 1m
Bram Moolenaar37d1b4f2020-05-13 17:16:04 +0200426 call assert_equal({'name': '1', 'texthl': 'NB_s1', 'text': '=>'},
Bram Moolenaar32e5ec02020-11-06 13:44:21 +0100427 \ sign_getdefined()->get(0, {}))
Bram Moolenaar173d8412020-04-19 14:02:26 +0200428 let g:last += 3
429
430 " defineAnnoType with a long color name
431 call appendbufline(cmdbufnr, '$', 'E532_Test')
432 call WaitForError('E532:')
Bram Moolenaar95650152020-07-19 18:24:32 +0200433 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
434 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200435 call assert_equal('send: 2:defineAnnoType!61 1 "s1" "x" "=>" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa none', l[-1])
436 let g:last += 3
437
438 " addAnno test
439 call appendbufline(cmdbufnr, '$', 'add_anno_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200440 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
441 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200442 call assert_equal('send: 2:addAnno!62 1 1 2/1 0', l[-1])
443 sleep 1m
444 call assert_equal([{'lnum': 2, 'id': 1, 'name': '1', 'priority': 10,
445 \ 'group': ''}], sign_getplaced()[0].signs)
446 let g:last += 3
447
448 " getAnno test
449 call appendbufline(cmdbufnr, '$', 'get_anno_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200450 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
451 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200452 call assert_equal(['send: 2:getAnno/63 1', '63 2'], l[-2:])
453 let g:last += 4
454
455 " removeAnno test
456 call appendbufline(cmdbufnr, '$', 'remove_anno_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200457 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
458 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200459 call assert_equal('send: 2:removeAnno!64 1', l[-1])
460 sleep 1m
461 call assert_equal([], sign_getplaced())
462 let g:last += 3
463
464 " getModified test to get the number of modified buffers
465 call appendbufline(cmdbufnr, '$', 'getModifiedAll_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200466 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
467 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200468 call assert_equal(['send: 0:getModified/65', '65 2'], l[-2:])
469 let g:last += 4
470
471 let bufcount = len(getbufinfo())
472
473 " create test to create a new buffer
474 call appendbufline(cmdbufnr, '$', 'create_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200475 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
476 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200477 call assert_equal('send: 3:create!66', l[-1])
478 " Wait for vim to process the previous netbeans message
479 sleep 10m
480 call assert_equal(bufcount + 1, len(getbufinfo()))
481 let g:last += 3
482
483 " setTitle test
484 call appendbufline(cmdbufnr, '$', 'setTitle_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200485 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
486 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200487 call assert_equal('send: 3:setTitle!67 "Xfile4"', l[-1])
488 let g:last += 3
489
490 " setFullName test
491 call appendbufline(cmdbufnr, '$', 'setFullName_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200492 call WaitFor('len(ReadXnetbeans()) >= (g:last + 5)')
493 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200494 call assert_equal('send: 3:setFullName!68 "Xfile4"', l[-3])
495 call assert_match('0:fileOpened=0 ".*/Xfile4" T F', l[-1])
496 call assert_equal('Xfile4', bufname())
497 let g:last += 5
498
499 " initDone test
500 call appendbufline(cmdbufnr, '$', 'initDone_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200501 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
502 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200503 call assert_equal('send: 3:initDone!69', l[-1])
504 let g:last += 3
505
506 " setVisible test
507 hide enew
508 call appendbufline(cmdbufnr, '$', 'setVisible_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200509 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
510 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200511 call assert_equal('send: 3:setVisible!70 T', l[-1])
512 let g:last += 3
513
514 " setModtime test
515 call appendbufline(cmdbufnr, '$', 'setModtime_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200516 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
517 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200518 call assert_equal('send: 3:setModtime!71 6', l[-1])
519 let g:last += 3
520
521 " insert test
522 call appendbufline(cmdbufnr, '$', 'insert_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200523 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
524 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200525 call assert_equal(['send: 3:insert/72 0 "line1\nline2\n"', '72'], l[-2:])
526 call assert_equal(['line1', 'line2'], getline(1, '$'))
527 let g:last += 4
528
529 " remove test
530 call appendbufline(cmdbufnr, '$', 'remove_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200531 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
532 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200533 call assert_equal(['send: 3:remove/73 3 4', '73'], l[-2:])
534 call assert_equal(['linine2'], getline(1, '$'))
535 let g:last += 4
536
537 " remove with invalid offset
538 call appendbufline(cmdbufnr, '$', 'remove_invalid_offset_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200539 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
540 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200541 call assert_equal(['send: 3:remove/74 900 4', '74 !bad position'], l[-2:])
542 let g:last += 4
543
544 " remove with invalid count
545 call appendbufline(cmdbufnr, '$', 'remove_invalid_count_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200546 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
547 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200548 call assert_equal(['send: 3:remove/75 1 800', '75 !bad count'], l[-2:])
549 let g:last += 4
550
551 " guard test
552 %d
553 call setline(1, ['foo bar', 'foo bar', 'foo bar'])
Bram Moolenaar95650152020-07-19 18:24:32 +0200554 call WaitFor('len(ReadXnetbeans()) >= (g:last + 8)')
Bram Moolenaar173d8412020-04-19 14:02:26 +0200555 let g:last += 8
556
557 call appendbufline(cmdbufnr, '$', 'guard_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200558 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
559 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200560 call assert_equal('send: 3:guard!76 8 7', l[-1])
561 sleep 1m
562 " second line is guarded. Try modifying the line
563 call assert_fails('normal 2GIbaz', 'E463:')
564 call assert_fails('normal 2GAbaz', 'E463:')
565 call assert_fails('normal dd', 'E463:')
566 call assert_equal([{'name': '1', 'texthl': 'NB_s1', 'text': '=>'},
567 \ {'name': '10000', 'linehl': 'NBGuarded'}],
568 \ sign_getdefined())
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100569 let s = sign_getplaced()[0].signs[0]
570 call assert_equal(2, s.lnum)
571 call assert_equal('10000', s.name)
Bram Moolenaar173d8412020-04-19 14:02:26 +0200572 let g:last += 3
573
574 " setModified test
575 call appendbufline(cmdbufnr, '$', 'setModified_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200576 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
577 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200578 call assert_equal('send: 3:setModified!77 T', l[-1])
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100579 sleep 1m
Bram Moolenaar173d8412020-04-19 14:02:26 +0200580 call assert_equal(1, &modified)
581 let g:last += 3
582
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100583 " clear setModified test
584 call appendbufline(cmdbufnr, '$', 'setModifiedClear_Test')
585 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
586 let l = ReadXnetbeans()
587 call assert_equal('send: 3:setModified!77 F', l[-1])
588 sleep 1m
589 call assert_equal(0, &modified)
590 let g:last += 3
591
Bram Moolenaar173d8412020-04-19 14:02:26 +0200592 " insertDone test
593 let v:statusmsg = ''
594 call appendbufline(cmdbufnr, '$', 'insertDone_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200595 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
596 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200597 call assert_equal('send: 3:insertDone!78 T F', l[-1])
598 sleep 1m
Bram Moolenaar3f40ce72020-07-05 14:10:13 +0200599 call assert_match('.*/Xfile4" 3L, 0B', v:statusmsg)
Bram Moolenaar173d8412020-04-19 14:02:26 +0200600 let g:last += 3
601
602 " saveDone test
603 let v:statusmsg = ''
604 call appendbufline(cmdbufnr, '$', 'saveDone_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200605 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
606 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200607 call assert_equal('send: 3:saveDone!79', l[-1])
608 sleep 1m
Bram Moolenaar3f40ce72020-07-05 14:10:13 +0200609 call assert_match('.*/Xfile4" 3L, 0B', v:statusmsg)
Bram Moolenaar173d8412020-04-19 14:02:26 +0200610 let g:last += 3
611
612 " unimplemented command test
613 call appendbufline(cmdbufnr, '$', 'invalidcmd_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200614 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
615 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200616 call assert_equal('send: 3:invalidcmd!80', l[-1])
617 let g:last += 3
618
619 " unimplemented function test
620 call appendbufline(cmdbufnr, '$', 'invalidfunc_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200621 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
622 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200623 call assert_equal(['send: 3:invalidfunc/81', '81'], l[-2:])
624 let g:last += 4
625
626 " Test for removeAnno cmd failure
627 call appendbufline(cmdbufnr, '$', 'removeAnno_fail_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200628 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
629 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200630 call assert_equal(['send: 0:removeAnno/82 1', '82'], l[-2:])
631 let g:last += 4
632
633 " Test for guard cmd failure
634 call appendbufline(cmdbufnr, '$', 'guard_fail_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200635 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
636 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200637 call assert_equal(['send: 0:guard/83 1 1', '83'], l[-2:])
638 let g:last += 4
639
640 " Test for save cmd failure
641 call appendbufline(cmdbufnr, '$', 'save_fail_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200642 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
643 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200644 call assert_equal(['send: 0:save/84', '84'], l[-2:])
645 let g:last += 4
646
647 " Test for netbeansBuffer cmd failure
648 call appendbufline(cmdbufnr, '$', 'netbeansBuffer_fail_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200649 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
650 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200651 call assert_equal(['send: 0:netbeansBuffer/85 T', '85'], l[-2:])
652 let g:last += 4
653
654 " nbkey test
655 call cursor(3, 3)
656 nbkey "\<C-F2>"
Bram Moolenaar95650152020-07-19 18:24:32 +0200657 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
658 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200659 call assert_equal(['3:newDotAndMark=85 18 18',
660 \ '3:keyCommand=85 ""\<C-F2>""',
661 \ '3:keyAtPos=85 ""\<C-F2>"" 18 3/2'], l[-3:])
662 let g:last += 3
663
664 " setExitDelay test
665 call appendbufline(cmdbufnr, '$', 'setExitDelay_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200666 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
667 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200668 call assert_equal('send: 0:setExitDelay!86 2', l[-1])
669 let g:last += 3
670
671 " setReadonly test
672 call appendbufline(cmdbufnr, '$', 'setReadOnly_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200673 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
674 let l = ReadXnetbeans()
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100675 call assert_equal('send: 3:setReadOnly!87 T', l[-1])
676 sleep 1m
677 call assert_equal(1, &readonly)
678 let g:last += 3
679
680 " clear setReadonly test
681 call appendbufline(cmdbufnr, '$', 'setReadOnlyClear_Test')
682 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
683 let l = ReadXnetbeans()
684 call assert_equal('send: 3:setReadOnly!88 F', l[-1])
685 sleep 1m
686 call assert_equal(0, &readonly)
687 let g:last += 3
688
689 " save test
690 call setbufvar(bufnr('Xfile4'), '&modified', 1)
691 call appendbufline(cmdbufnr, '$', 'save_Test')
692 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
693 let l = ReadXnetbeans()
694 call assert_equal('send: 3:save!89', l[-1])
695 sleep 1m
696 call assert_true(filereadable('Xfile4'))
Bram Moolenaar173d8412020-04-19 14:02:26 +0200697 let g:last += 3
698
699 " close test. Don't use buffer 10 after this
700 call appendbufline(cmdbufnr, '$', 'close_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200701 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
702 let l = ReadXnetbeans()
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100703 call assert_equal('send: 3:close!90', l[-2])
704 call assert_equal('3:killed=90', l[-1])
Bram Moolenaar173d8412020-04-19 14:02:26 +0200705 call assert_equal(1, winnr('$'))
706 let g:last += 4
707
708 " specialKeys test
709 call appendbufline(cmdbufnr, '$', 'specialKeys_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200710 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
711 let l = ReadXnetbeans()
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100712 call assert_equal('send: 0:specialKeys!91 "F12 F13 C-F13"', l[-1])
Bram Moolenaar173d8412020-04-19 14:02:26 +0200713 sleep 1m
714 call assert_equal(':nbkey F12<CR>', maparg('<F12>', 'n'))
715 call assert_equal(':nbkey F13<CR>', maparg('<F13>', 'n'))
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100716 call assert_equal(':nbkey C-F13<CR>', maparg('<C-F13>', 'n'))
Bram Moolenaar173d8412020-04-19 14:02:26 +0200717 let g:last += 3
718
719 " Open a buffer not monitored by netbeans
720 enew | only!
721 nbkey "\<C-F3>"
Bram Moolenaar95650152020-07-19 18:24:32 +0200722 call WaitFor('len(ReadXnetbeans()) >= (g:last + 1)')
723 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200724 call assert_equal('0:fileOpened=0 "" T F', l[-1])
725 let g:last += 1
726
Bram Moolenaar494e9062020-05-31 21:28:02 +0200727 " Test for writing a netbeans buffer
728 call appendbufline(cmdbufnr, '$', 'nbbufwrite_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200729 call WaitFor('len(ReadXnetbeans()) >= (g:last + 5)')
Bram Moolenaar494e9062020-05-31 21:28:02 +0200730 call assert_fails('write', 'E656:')
731 call setline(1, ['one', 'two'])
732 call assert_fails('1write!', 'E657:')
733 write
Bram Moolenaar95650152020-07-19 18:24:32 +0200734 call WaitFor('len(ReadXnetbeans()) >= (g:last + 10)')
Bram Moolenaar494e9062020-05-31 21:28:02 +0200735 let g:last += 10
736
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100737 if has('mouse')
738 " Test for mouse button release
739 let save_mouse = &mouse
740 set mouse=a
741 call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt')
742 let &mouse = save_mouse
743 call WaitFor('len(ReadXnetbeans()) >= (g:last + 2)')
744 let l = ReadXnetbeans()
745 call assert_equal('4:newDotAndMark=93 0 0', l[-2])
746 call assert_equal('4:buttonRelease=93 0 1 -1', l[-1])
747 let g:last += 2
748 endif
749
750 " Test for startAtomic
751 call appendbufline(cmdbufnr, '$', 'startAtomic_Test')
752 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
753 let l = ReadXnetbeans()
754 call assert_equal('send: 0:startAtomic!94', l[-1])
755 let g:last += 3
756
757 " Test for endAtomic
758 call appendbufline(cmdbufnr, '$', 'endAtomic_Test')
759 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
760 let l = ReadXnetbeans()
761 call assert_equal('send: 0:endAtomic!95', l[-1])
762 let g:last += 3
763
764 " Test for invoking a netbeans key binding
765 let special_keys = [
766 \ ["\<F1>", 'F1'], ["\<S-F1>", 'S-F1'],
767 \ ["\<F2>", 'F2'], ["\<S-F2>", 'S-F2'],
768 \ ["\<F3>", 'F3'], ["\<S-F3>", 'S-F3'],
769 \ ["\<F4>", 'F4'], ["\<S-F4>", 'S-F4'],
770 \ ["\<F5>", 'F5'], ["\<S-F5>", 'S-F5'],
771 \ ["\<F6>", 'F6'], ["\<S-F6>", 'S-F6'],
772 \ ["\<F7>", 'F7'], ["\<S-F7>", 'S-F7'],
773 \ ["\<F8>", 'F8'], ["\<S-F8>", 'S-F8'],
774 \ ["\<F9>", 'F9'], ["\<S-F9>", 'S-F9'],
775 \ ["\<F11>", 'F11'], ["\<S-F11>", 'S-F11'],
776 \ ["\<F12>", 'F12'], ["\<S-F12>", 'S-F12'], ['!', '!']
777 \ ]
778 for [key, name] in special_keys
779 call feedkeys("\<F21>" .. key, 'xt')
780 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
781 let l = ReadXnetbeans()
782 call assert_match('4:keyCommand=\d\+ "' .. name .. '"', l[-2])
783 call assert_match('4:keyAtPos=\d\+ "' .. name .. '" 0 1/0', l[-1])
784 let g:last += 3
785 endfor
786 call feedkeys("\<F21>\<C-S-M-F9>", 'xt')
787 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
788 let l = ReadXnetbeans()
789 call assert_match('4:keyCommand=\d\+ "CSM-F9"', l[-2])
790 call assert_match('4:keyAtPos=\d\+ "CSM-F9" 0 1/0', l[-1])
791 let g:last += 3
792
793 if has('signs') && has('mouse')
794 sign define S1 linehl=Search text==>
795 sign define S2 linehl=ErrorMsg text=!!
796 sign place 10 line=1 name=S1
797 sign place 20 line=1 name=S2
798
799 let save_mouse = &mouse
800 set mouse=a
801 call assert_equal('S2', sign_getplaced()[0].signs[0].name)
802 call test_setmouse(1, 1)
803 call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt')
804 call assert_equal('S1', sign_getplaced()[0].signs[0].name)
805 call test_setmouse(1, 1)
806 call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt')
807 call assert_equal('S2', sign_getplaced()[0].signs[0].name)
808 let &mouse = save_mouse
809
810 sign unplace 10
811 sign unplace 20
812 sign undefine S1
813 sign undefine S2
814 endif
815
816 " define a large number of annotations
817 call appendbufline(cmdbufnr, '$', 'AnnoScale_Test')
818 call WaitFor('len(ReadXnetbeans()) >= (g:last + 26)')
819 let l = ReadXnetbeans()
820 call assert_equal('2:defineAnnoType!60 25 "s25" "x" "=>" blue none', l[-1])
821 sleep 1m
822 call assert_true(len(sign_getdefined()) >= 25)
823 let g:last += 26
824
Bram Moolenaar173d8412020-04-19 14:02:26 +0200825 " detach
826 call appendbufline(cmdbufnr, '$', 'detach_Test')
Bram Moolenaar95650152020-07-19 18:24:32 +0200827 call WaitFor('len(ReadXnetbeans()) >= (g:last + 8)')
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100828 call WaitForAssert({-> assert_equal('0:disconnect=97', ReadXnetbeans()[-1])})
Bram Moolenaar173d8412020-04-19 14:02:26 +0200829
Bram Moolenaar37d1b4f2020-05-13 17:16:04 +0200830 " the connection was closed
Bram Moolenaar8ddef482016-10-09 15:43:25 +0200831 call assert_false(has("netbeans_enabled"))
Bram Moolenaar321efdd2016-07-15 17:09:11 +0200832
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100833 " Remove all the signs
834 call sign_unplace('*')
835 call sign_undefine()
836
Bram Moolenaardbfa7952020-11-02 20:04:22 +0100837 call delete('Xfile4')
Bram Moolenaar321efdd2016-07-15 17:09:11 +0200838endfunc
839
840func Test_nb_basic()
841 call ch_log('Test_nb_basic')
842 call s:run_server('Nb_basic')
843endfunc
Bram Moolenaar603d6572016-07-15 17:41:56 +0200844
845func Nb_file_auth(port)
Bram Moolenaarc20e0d52017-11-02 18:19:19 +0100846 call delete("Xnetbeans")
Bram Moolenaarb152b6a2022-09-29 21:37:33 +0100847 call writefile([], "Xnetbeans", 'D')
Bram Moolenaarc20e0d52017-11-02 18:19:19 +0100848
Bram Moolenaar603d6572016-07-15 17:41:56 +0200849 call assert_fails('nbstart =notexist', 'E660:')
Bram Moolenaarb152b6a2022-09-29 21:37:33 +0100850 call writefile(['host=localhost', 'port=' . a:port, 'auth=bunny'], 'Xnbauth', 'D')
Bram Moolenaar53bdec22016-07-20 00:03:18 +0200851 if has('unix')
852 call setfperm('Xnbauth', "rw-r--r--")
853 call assert_fails('nbstart =Xnbauth', 'E668:')
854 endif
Bram Moolenaar603d6572016-07-15 17:41:56 +0200855 call setfperm('Xnbauth', "rw-------")
Bram Moolenaarffdf08c2016-08-27 19:52:47 +0200856 exe 'nbstart =Xnbauth'
Bram Moolenaar603d6572016-07-15 17:41:56 +0200857 call assert_true(has("netbeans_enabled"))
858
Bram Moolenaar95650152020-07-19 18:24:32 +0200859 call WaitFor('len(ReadXnetbeans()) > 2')
Bram Moolenaar603d6572016-07-15 17:41:56 +0200860 nbclose
Bram Moolenaar95650152020-07-19 18:24:32 +0200861 let lines = ReadXnetbeans()
Bram Moolenaar603d6572016-07-15 17:41:56 +0200862 call assert_equal('AUTH bunny', lines[0])
863 call assert_equal('0:version=0 "2.5"', lines[1])
864 call assert_equal('0:startupDone=0', lines[2])
865
866 call delete("Xnbauth")
Bram Moolenaar603d6572016-07-15 17:41:56 +0200867endfunc
868
869func Test_nb_file_auth()
870 call ch_log('Test_nb_file_auth')
871 call s:run_server('Nb_file_auth')
872endfunc
Bram Moolenaar173d8412020-04-19 14:02:26 +0200873
Bram Moolenaar8e7d6222020-12-18 19:49:56 +0100874" Test for quitting Vim with an open netbeans connection
Bram Moolenaar173d8412020-04-19 14:02:26 +0200875func Nb_quit_with_conn(port)
876 call delete("Xnetbeans")
Bram Moolenaarb152b6a2022-09-29 21:37:33 +0100877 call writefile([], "Xnetbeans", 'D')
Bram Moolenaar173d8412020-04-19 14:02:26 +0200878 let after =<< trim END
Christian Brabandteb380b92025-07-07 20:53:55 +0200879 source util/shared.vim
Bram Moolenaar22286892020-11-05 20:50:51 +0100880 set cpo&vim
Bram Moolenaar173d8412020-04-19 14:02:26 +0200881
Bram Moolenaar95650152020-07-19 18:24:32 +0200882 func ReadXnetbeans()
883 let l = readfile("Xnetbeans")
884 return filter(l, 'v:val !~ "^0:geometry="')
885 endfunc
886
James McCoy765d82a2023-01-09 16:25:59 +0000887 try
888 " Establish the connection with the netbeans server
889 exe 'nbstart :localhost:' .. g:port .. ':star'
890 call assert_true(has("netbeans_enabled"))
891 call WaitFor('len(ReadXnetbeans()) >= 3')
892 let l = ReadXnetbeans()
893 call assert_equal(['AUTH star',
894 \ '0:version=0 "2.5"',
895 \ '0:startupDone=0'], l[-3:])
Bram Moolenaar173d8412020-04-19 14:02:26 +0200896
James McCoy765d82a2023-01-09 16:25:59 +0000897 " Open the command buffer to communicate with the server
898 split Xcmdbuf
899 call WaitFor('len(ReadXnetbeans()) >= 6')
900 let l = ReadXnetbeans()
901 call assert_equal('0:fileOpened=0 "Xcmdbuf" T F',
902 \ substitute(l[-3], '".*/', '"', ''))
903 call assert_equal('send: 1:putBufferNumber!15 "Xcmdbuf"',
904 \ substitute(l[-2], '".*/', '"', ''))
905 call assert_equal('1:startDocumentListen!16', l[-1])
906 sleep 1m
Bram Moolenaar173d8412020-04-19 14:02:26 +0200907
James McCoy765d82a2023-01-09 16:25:59 +0000908 quit!
909 quit!
910 finally
911 qall!
912 endtry
Bram Moolenaar173d8412020-04-19 14:02:26 +0200913 END
914 if RunVim(['let g:port = ' .. a:port], after, '')
Bram Moolenaar95650152020-07-19 18:24:32 +0200915 call WaitFor('len(ReadXnetbeans()) >= 9')
916 let l = ReadXnetbeans()
Bram Moolenaar173d8412020-04-19 14:02:26 +0200917 call assert_equal('1:unmodified=16', l[-3])
918 call assert_equal('1:killed=16', l[-2])
919 call assert_equal('0:disconnect=16', l[-1])
920 endif
Bram Moolenaar173d8412020-04-19 14:02:26 +0200921endfunc
922
923func Test_nb_quit_with_conn()
924 " Exiting Vim with a netbeans connection doesn't work properly on
925 " MS-Windows.
926 CheckUnix
927 call s:run_server('Nb_quit_with_conn')
928endfunc
929
Bram Moolenaar32e5ec02020-11-06 13:44:21 +0100930func Nb_bwipe_buffer(port)
931 call delete("Xnetbeans")
932 call writefile([], "Xnetbeans")
933
934 " Last line number in the Xnetbeans file. Used to verify the result of the
935 " communication with the netbeans server
936 let g:last = 0
937
938 " Establish the connection with the netbeans server
939 exe 'nbstart :localhost:' .. a:port .. ':bunny'
940 call WaitFor('len(ReadXnetbeans()) > (g:last + 2)')
941 let l = ReadXnetbeans()
942 call assert_equal(['AUTH bunny',
943 \ '0:version=0 "2.5"',
944 \ '0:startupDone=0'], l[-3:])
945 let g:last += 3
946
947 " Open the command buffer to communicate with the server
948 split Xcmdbuf
949 call WaitFor('len(ReadXnetbeans()) > (g:last + 2)')
950 let l = ReadXnetbeans()
951 call assert_equal('0:fileOpened=0 "Xcmdbuf" T F',
952 \ substitute(l[-3], '".*/', '"', ''))
953 call assert_equal('send: 1:putBufferNumber!15 "Xcmdbuf"',
954 \ substitute(l[-2], '".*/', '"', ''))
955 call assert_equal('1:startDocumentListen!16', l[-1])
956 let g:last += 3
957
958 sleep 10m
959endfunc
960
961" This test used to reference a buffer after it was freed leading to an ASAN
962" error.
963func Test_nb_bwipe_buffer()
964 call s:run_server('Nb_bwipe_buffer')
Bram Moolenaar50dc3ec2020-11-16 18:39:43 +0100965 silent! %bwipe!
Bram Moolenaar32e5ec02020-11-06 13:44:21 +0100966 sleep 100m
967 nbclose
968endfunc
969
Bram Moolenaar173d8412020-04-19 14:02:26 +0200970" vim: shiftwidth=2 sts=2 expandtab