1" Test the netbeans interface. 2 3source check.vim 4CheckFeature netbeans_intg 5 6source shared.vim 7 8let s:python = PythonProg() 9if s:python == '' 10 throw 'Skipped: python program missing' 11endif 12 13" Run "testfunc" after starting the server and stop the server afterwards. 14func s:run_server(testfunc, ...) 15 call RunServer('test_netbeans.py', a:testfunc, a:000) 16endfunc 17 18" Wait for an exception (error) to be thrown. This is used to check whether a 19" message from the netbeans server causes an error. It takes some time for Vim 20" to process a netbeans message. So a sleep is used below to account for this. 21func WaitForError(errcode) 22 let save_exception = '' 23 for i in range(200) 24 try 25 sleep 5m 26 catch 27 let save_exception = v:exception 28 break 29 endtry 30 endfor 31 call assert_match(a:errcode, save_exception) 32endfunc 33 34" Read the "Xnetbeans" file and filter out geometry messages. 35func ReadXnetbeans() 36 let l = readfile("Xnetbeans") 37 " Xnetbeans may include '0:geometry=' messages in the GUI Vim if the window 38 " position, size, or z order are changed. Remove these messages because 39 " these messages will break the assert for the output. 40 return filter(l, 'v:val !~ "^0:geometry="') 41endfunc 42 43func Nb_basic(port) 44 call delete("Xnetbeans") 45 call writefile([], "Xnetbeans") 46 47 " Last line number in the Xnetbeans file. Used to verify the result of the 48 " communication with the netbeans server 49 let g:last = 0 50 51 " Establish the connection with the netbeans server 52 exe 'nbstart :localhost:' .. a:port .. ':bunny' 53 call assert_true(has("netbeans_enabled")) 54 call WaitFor('len(ReadXnetbeans()) > (g:last + 2)') 55 let l = ReadXnetbeans() 56 call assert_equal(['AUTH bunny', 57 \ '0:version=0 "2.5"', 58 \ '0:startupDone=0'], l[-3:]) 59 let g:last += 3 60 61 " Trying to connect again to netbeans server should fail 62 call assert_fails("exe 'nbstart :localhost:' . a:port . ':bunny'", 'E511:') 63 64 " Open the command buffer to communicate with the server 65 split Xcmdbuf 66 let cmdbufnr = bufnr() 67 call WaitFor('len(ReadXnetbeans()) > (g:last + 2)') 68 let l = ReadXnetbeans() 69 call assert_equal('0:fileOpened=0 "Xcmdbuf" T F', 70 \ substitute(l[-3], '".*/', '"', '')) 71 call assert_equal('send: 1:putBufferNumber!15 "Xcmdbuf"', 72 \ substitute(l[-2], '".*/', '"', '')) 73 call assert_equal('1:startDocumentListen!16', l[-1]) 74 let g:last += 3 75 76 " Keep the command buffer loaded for communication 77 hide 78 79 sleep 1m 80 81 " getCursor test 82 call writefile(['foo bar', 'foo bar', 'foo bar'], 'Xfile1') 83 split Xfile1 84 call cursor(3, 4) 85 sleep 10m 86 call appendbufline(cmdbufnr, '$', 'getCursor_Test') 87 call WaitFor('len(ReadXnetbeans()) >= (g:last + 5)') 88 let l = ReadXnetbeans() 89 call assert_equal(['send: 0:getCursor/30', '30 -1 3 3 19'], l[-2:]) 90 let g:last += 5 91 92 " Test for E627 93 call appendbufline(cmdbufnr, '$', 'E627_Test') 94 call WaitForError('E627:') 95 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 96 let l = ReadXnetbeans() 97 call assert_equal('send: 0 setReadOnly!31', l[-1]) 98 let g:last += 3 99 100 " Test for E628 101 call appendbufline(cmdbufnr, '$', 'E628_Test') 102 call WaitForError('E628:') 103 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 104 let l = ReadXnetbeans() 105 call assert_equal('send: 0:setReadOnly 32', l[-1]) 106 let g:last += 3 107 108 " Test for E632 109 call appendbufline(cmdbufnr, '$', 'E632_Test') 110 call WaitForError('E632:') 111 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 112 let l = ReadXnetbeans() 113 call assert_equal(['send: 0:getLength/33', '33 0'], l[-2:]) 114 let g:last += 4 115 116 " Test for E633 117 call appendbufline(cmdbufnr, '$', 'E633_Test') 118 call WaitForError('E633:') 119 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 120 let l = ReadXnetbeans() 121 call assert_equal(['send: 0:getText/34', '34 '], l[-2:]) 122 let g:last += 4 123 124 " Test for E634 125 call appendbufline(cmdbufnr, '$', 'E634_Test') 126 call WaitForError('E634:') 127 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 128 let l = ReadXnetbeans() 129 call assert_equal(['send: 0:remove/35 1 1', '35'], l[-2:]) 130 let g:last += 4 131 132 " Test for E635 133 call appendbufline(cmdbufnr, '$', 'E635_Test') 134 call WaitForError('E635:') 135 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 136 let l = ReadXnetbeans() 137 call assert_equal(['send: 0:insert/36 0 "line1\n"', '36'], l[-2:]) 138 let g:last += 4 139 140 " Test for E636 141 call appendbufline(cmdbufnr, '$', 'E636_Test') 142 call WaitForError('E636:') 143 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 144 let l = ReadXnetbeans() 145 call assert_equal('send: 0:create!37', l[-1]) 146 let g:last += 3 147 148 " Test for E637 149 call appendbufline(cmdbufnr, '$', 'E637_Test') 150 call WaitForError('E637:') 151 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 152 let l = ReadXnetbeans() 153 call assert_equal('send: 0:startDocumentListen!38', l[-1]) 154 let g:last += 3 155 156 " Test for E638 157 call appendbufline(cmdbufnr, '$', 'E638_Test') 158 call WaitForError('E638:') 159 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 160 let l = ReadXnetbeans() 161 call assert_equal('send: 0:stopDocumentListen!39', l[-1]) 162 let g:last += 3 163 164 " Test for E639 165 call appendbufline(cmdbufnr, '$', 'E639_Test') 166 call WaitForError('E639:') 167 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 168 let l = ReadXnetbeans() 169 call assert_equal('send: 0:setTitle!40 "Title"', l[-1]) 170 let g:last += 3 171 172 " Test for E640 173 call appendbufline(cmdbufnr, '$', 'E640_Test') 174 call WaitForError('E640:') 175 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 176 let l = ReadXnetbeans() 177 call assert_equal('send: 0:initDone!41', l[-1]) 178 let g:last += 3 179 180 " Test for E641 181 call appendbufline(cmdbufnr, '$', 'E641_Test') 182 call WaitForError('E641:') 183 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 184 let l = ReadXnetbeans() 185 call assert_equal('send: 0:putBufferNumber!42 "XSomeBuf"', l[-1]) 186 let g:last += 3 187 188 " Test for E642 189 call appendbufline(cmdbufnr, '$', 'E642_Test') 190 call WaitForError('E642:') 191 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 192 let l = ReadXnetbeans() 193 call assert_equal('send: 9:putBufferNumber!43 "XInvalidBuf"', l[-1]) 194 let g:last += 3 195 196 " Test for E643 197 call appendbufline(cmdbufnr, '$', 'E643_Test') 198 call WaitForError('E643:') 199 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 200 let l = ReadXnetbeans() 201 call assert_equal('send: 0:setFullName!44 "XSomeBuf"', l[-1]) 202 let g:last += 3 203 204 enew! 205 206 " Test for E644 207 call appendbufline(cmdbufnr, '$', 'E644_Test') 208 call WaitForError('E644:') 209 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 210 let l = ReadXnetbeans() 211 call assert_equal('send: 0:editFile!45 "Xfile3"', l[-1]) 212 let g:last += 3 213 214 " Test for E645 (shown only when verbose > 0) 215 call appendbufline(cmdbufnr, '$', 'E645_Test') 216 set verbose=1 217 call WaitForError('E645:') 218 set verbose& 219 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 220 let l = ReadXnetbeans() 221 call assert_equal('send: 0:setVisible!46 T', l[-1]) 222 let g:last += 3 223 224 " Test for E646 (shown only when verbose > 0) 225 call appendbufline(cmdbufnr, '$', 'E646_Test') 226 set verbose=1 227 call WaitForError('E646:') 228 set verbose& 229 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 230 let l = ReadXnetbeans() 231 call assert_equal('send: 0:setModified!47 T', l[-1]) 232 let g:last += 3 233 234 " Test for E647 235 call appendbufline(cmdbufnr, '$', 'E647_Test') 236 call WaitForError('E647:') 237 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 238 let l = ReadXnetbeans() 239 call assert_equal('send: 0:setDot!48 1/1', l[-1]) 240 let g:last += 3 241 242 " Test for E648 243 call appendbufline(cmdbufnr, '$', 'E648_Test') 244 call WaitForError('E648:') 245 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 246 let l = ReadXnetbeans() 247 call assert_equal('send: 0:close!49', l[-1]) 248 let g:last += 3 249 250 " Test for E650 251 call appendbufline(cmdbufnr, '$', 'E650_Test') 252 call WaitForError('E650:') 253 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 254 let l = ReadXnetbeans() 255 call assert_equal('send: 0:defineAnnoType!50 1 "abc" "a" "a" 1 1', l[-1]) 256 let g:last += 3 257 258 " Test for E651 259 call appendbufline(cmdbufnr, '$', 'E651_Test') 260 call WaitForError('E651:') 261 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 262 let l = ReadXnetbeans() 263 call assert_equal('send: 0:addAnno!51 1 1 1 1', l[-1]) 264 let g:last += 3 265 266 " Test for E652 267 call appendbufline(cmdbufnr, '$', 'E652_Test') 268 call WaitForError('E652:') 269 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 270 let l = ReadXnetbeans() 271 call assert_equal(['send: 0:getAnno/52 8', '52 0'], l[-2:]) 272 let g:last += 4 273 274 " editFile test 275 call writefile(['foo bar1', 'foo bar2', 'foo bar3'], 'Xfile3') 276 call appendbufline(cmdbufnr, '$', 'editFile_Test') 277 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 278 let l = ReadXnetbeans() 279 call assert_equal('send: 2:editFile!53 "Xfile3"', l[-2]) 280 call assert_match('0:fileOpened=0 ".*/Xfile3" T F', l[-1]) 281 call assert_equal('Xfile3', bufname()) 282 let g:last += 4 283 284 " getLength test 285 call appendbufline(cmdbufnr, '$', 'getLength_Test') 286 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 287 let l = ReadXnetbeans() 288 call assert_equal(['send: 2:getLength/54', '54 27'], l[-2:]) 289 let g:last += 4 290 291 " getModified test 292 call appendbufline(cmdbufnr, '$', 'getModified_Test') 293 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 294 let l = ReadXnetbeans() 295 call assert_equal(['send: 2:getModified/55', '55 0'], l[-2:]) 296 let g:last += 4 297 298 " getText test 299 call appendbufline(cmdbufnr, '$', 'getText_Test') 300 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 301 let l = ReadXnetbeans() 302 call assert_equal(['send: 2:getText/56', 303 \ '56 "foo bar1\nfoo bar2\nfoo bar3\n"'], l[-2:]) 304 let g:last += 4 305 306 " setDot test with lnum/col 307 call cursor(1, 1) 308 call appendbufline(cmdbufnr, '$', 'setDot_Test') 309 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 310 let l = ReadXnetbeans() 311 call assert_equal('send: 2:setDot!57 3/6', l[-1]) 312 sleep 10m 313 call assert_equal([0, 3, 7, 0], getpos('.')) 314 let g:last += 3 315 316 " setDot test with an offset 317 call cursor(1, 1) 318 call appendbufline(cmdbufnr, '$', 'setDot2_Test') 319 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 320 let l = ReadXnetbeans() 321 call assert_equal('send: 2:setDot!57 9', l[-1]) 322 sleep 10m 323 call assert_equal([0, 2, 1, 0], getpos('.')) 324 let g:last += 3 325 326 " startDocumentListen test 327 call appendbufline(cmdbufnr, '$', 'startDocumentListen_Test') 328 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 329 let l = ReadXnetbeans() 330 call assert_equal('send: 2:startDocumentListen!58', l[-1]) 331 let g:last += 3 332 333 " make some changes to the buffer and check whether the netbeans server 334 " received the notifications 335 call append(2, 'blue sky') 336 1d 337 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 338 let l = ReadXnetbeans() 339 call assert_match('2:insert=\d\+ 18 "blue sky"', l[-3]) 340 call assert_match('2:insert=\d\+ 26 "\\n"', l[-2]) 341 call assert_match('2:remove=\d\+ 0 9', l[-1]) 342 let g:last += 3 343 344 " Change case using the ~ command with 'whichwrap' containing '~' 345 set whichwrap+=~ 346 normal 2G$~ 347 set whichwrap& 348 call WaitFor('len(ReadXnetbeans()) >= (g:last + 2)') 349 let l = ReadXnetbeans() 350 call assert_match('2:remove=\d\+ 16 1', l[-4]) 351 call assert_match('2:insert=\d\+ 16 "Y"', l[-3]) 352 call assert_match('2:remove=\d\+ 18 0', l[-2]) 353 call assert_match('2:insert=\d\+ 18 ""', l[-1]) 354 let g:last += 4 355 356 " Test for replacing spaces with a tab character using 'softtabstop' and 357 " 'noexpandtab' 358 setlocal softtabstop=4 359 setlocal noexpandtab 360 exe "normal I\<Tab>\<Tab>" 361 setlocal expandtab& 362 setlocal softtabstop& 363 call WaitFor('len(ReadXnetbeans()) >= (g:last + 18)') 364 let l = ReadXnetbeans() 365 call assert_match('2:insert=\d\+ 18 " foo bar3"', l[-3]) 366 call assert_match('2:remove=\d\+ 26 8', l[-2]) 367 call assert_match('2:insert=\d\+ 26 "\t"', l[-1]) 368 let g:last += 18 369 370 " stopDocumentListen test 371 call appendbufline(cmdbufnr, '$', 'stopDocumentListen_Test') 372 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 373 let l = ReadXnetbeans() 374 call assert_equal('send: 2:stopDocumentListen!59', l[-1]) 375 let g:last += 3 376 377 " Wait for vim to process the previous netbeans message 378 sleep 1m 379 380 " modify the buffer and make sure that the netbeans server is not notified 381 call append(2, 'clear sky') 382 1d 383 384 " defineAnnoType test 385 call appendbufline(cmdbufnr, '$', 'define_anno_Test') 386 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 387 let l = ReadXnetbeans() 388 call assert_equal('send: 2:defineAnnoType!60 1 "s1" "x" "=>" blue none', l[-1]) 389 sleep 1m 390 call assert_equal({'name': '1', 'texthl': 'NB_s1', 'text': '=>'}, 391 \ sign_getdefined()->get(0, {})) 392 let g:last += 3 393 394 " defineAnnoType with a long color name 395 call appendbufline(cmdbufnr, '$', 'E532_Test') 396 call WaitForError('E532:') 397 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 398 let l = ReadXnetbeans() 399 call assert_equal('send: 2:defineAnnoType!61 1 "s1" "x" "=>" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa none', l[-1]) 400 let g:last += 3 401 402 " addAnno test 403 call appendbufline(cmdbufnr, '$', 'add_anno_Test') 404 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 405 let l = ReadXnetbeans() 406 call assert_equal('send: 2:addAnno!62 1 1 2/1 0', l[-1]) 407 sleep 1m 408 call assert_equal([{'lnum': 2, 'id': 1, 'name': '1', 'priority': 10, 409 \ 'group': ''}], sign_getplaced()[0].signs) 410 let g:last += 3 411 412 " getAnno test 413 call appendbufline(cmdbufnr, '$', 'get_anno_Test') 414 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 415 let l = ReadXnetbeans() 416 call assert_equal(['send: 2:getAnno/63 1', '63 2'], l[-2:]) 417 let g:last += 4 418 419 " removeAnno test 420 call appendbufline(cmdbufnr, '$', 'remove_anno_Test') 421 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 422 let l = ReadXnetbeans() 423 call assert_equal('send: 2:removeAnno!64 1', l[-1]) 424 sleep 1m 425 call assert_equal([], sign_getplaced()) 426 let g:last += 3 427 428 " getModified test to get the number of modified buffers 429 call appendbufline(cmdbufnr, '$', 'getModifiedAll_Test') 430 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 431 let l = ReadXnetbeans() 432 call assert_equal(['send: 0:getModified/65', '65 2'], l[-2:]) 433 let g:last += 4 434 435 let bufcount = len(getbufinfo()) 436 437 " create test to create a new buffer 438 call appendbufline(cmdbufnr, '$', 'create_Test') 439 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 440 let l = ReadXnetbeans() 441 call assert_equal('send: 3:create!66', l[-1]) 442 " Wait for vim to process the previous netbeans message 443 sleep 10m 444 call assert_equal(bufcount + 1, len(getbufinfo())) 445 let g:last += 3 446 447 " setTitle test 448 call appendbufline(cmdbufnr, '$', 'setTitle_Test') 449 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 450 let l = ReadXnetbeans() 451 call assert_equal('send: 3:setTitle!67 "Xfile4"', l[-1]) 452 let g:last += 3 453 454 " setFullName test 455 call appendbufline(cmdbufnr, '$', 'setFullName_Test') 456 call WaitFor('len(ReadXnetbeans()) >= (g:last + 5)') 457 let l = ReadXnetbeans() 458 call assert_equal('send: 3:setFullName!68 "Xfile4"', l[-3]) 459 call assert_match('0:fileOpened=0 ".*/Xfile4" T F', l[-1]) 460 call assert_equal('Xfile4', bufname()) 461 let g:last += 5 462 463 " initDone test 464 call appendbufline(cmdbufnr, '$', 'initDone_Test') 465 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 466 let l = ReadXnetbeans() 467 call assert_equal('send: 3:initDone!69', l[-1]) 468 let g:last += 3 469 470 " setVisible test 471 hide enew 472 call appendbufline(cmdbufnr, '$', 'setVisible_Test') 473 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 474 let l = ReadXnetbeans() 475 call assert_equal('send: 3:setVisible!70 T', l[-1]) 476 let g:last += 3 477 478 " setModtime test 479 call appendbufline(cmdbufnr, '$', 'setModtime_Test') 480 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 481 let l = ReadXnetbeans() 482 call assert_equal('send: 3:setModtime!71 6', l[-1]) 483 let g:last += 3 484 485 " insert test 486 call appendbufline(cmdbufnr, '$', 'insert_Test') 487 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 488 let l = ReadXnetbeans() 489 call assert_equal(['send: 3:insert/72 0 "line1\nline2\n"', '72'], l[-2:]) 490 call assert_equal(['line1', 'line2'], getline(1, '$')) 491 let g:last += 4 492 493 " remove test 494 call appendbufline(cmdbufnr, '$', 'remove_Test') 495 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 496 let l = ReadXnetbeans() 497 call assert_equal(['send: 3:remove/73 3 4', '73'], l[-2:]) 498 call assert_equal(['linine2'], getline(1, '$')) 499 let g:last += 4 500 501 " remove with invalid offset 502 call appendbufline(cmdbufnr, '$', 'remove_invalid_offset_Test') 503 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 504 let l = ReadXnetbeans() 505 call assert_equal(['send: 3:remove/74 900 4', '74 !bad position'], l[-2:]) 506 let g:last += 4 507 508 " remove with invalid count 509 call appendbufline(cmdbufnr, '$', 'remove_invalid_count_Test') 510 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 511 let l = ReadXnetbeans() 512 call assert_equal(['send: 3:remove/75 1 800', '75 !bad count'], l[-2:]) 513 let g:last += 4 514 515 " guard test 516 %d 517 call setline(1, ['foo bar', 'foo bar', 'foo bar']) 518 call WaitFor('len(ReadXnetbeans()) >= (g:last + 8)') 519 let g:last += 8 520 521 call appendbufline(cmdbufnr, '$', 'guard_Test') 522 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 523 let l = ReadXnetbeans() 524 call assert_equal('send: 3:guard!76 8 7', l[-1]) 525 sleep 1m 526 " second line is guarded. Try modifying the line 527 call assert_fails('normal 2GIbaz', 'E463:') 528 call assert_fails('normal 2GAbaz', 'E463:') 529 call assert_fails('normal dd', 'E463:') 530 call assert_equal([{'name': '1', 'texthl': 'NB_s1', 'text': '=>'}, 531 \ {'name': '10000', 'linehl': 'NBGuarded'}], 532 \ sign_getdefined()) 533 let s = sign_getplaced()[0].signs[0] 534 call assert_equal(2, s.lnum) 535 call assert_equal('10000', s.name) 536 let g:last += 3 537 538 " setModified test 539 call appendbufline(cmdbufnr, '$', 'setModified_Test') 540 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 541 let l = ReadXnetbeans() 542 call assert_equal('send: 3:setModified!77 T', l[-1]) 543 sleep 1m 544 call assert_equal(1, &modified) 545 let g:last += 3 546 547 " clear setModified test 548 call appendbufline(cmdbufnr, '$', 'setModifiedClear_Test') 549 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 550 let l = ReadXnetbeans() 551 call assert_equal('send: 3:setModified!77 F', l[-1]) 552 sleep 1m 553 call assert_equal(0, &modified) 554 let g:last += 3 555 556 " insertDone test 557 let v:statusmsg = '' 558 call appendbufline(cmdbufnr, '$', 'insertDone_Test') 559 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 560 let l = ReadXnetbeans() 561 call assert_equal('send: 3:insertDone!78 T F', l[-1]) 562 sleep 1m 563 call assert_match('.*/Xfile4" 3L, 0B', v:statusmsg) 564 let g:last += 3 565 566 " saveDone test 567 let v:statusmsg = '' 568 call appendbufline(cmdbufnr, '$', 'saveDone_Test') 569 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 570 let l = ReadXnetbeans() 571 call assert_equal('send: 3:saveDone!79', l[-1]) 572 sleep 1m 573 call assert_match('.*/Xfile4" 3L, 0B', v:statusmsg) 574 let g:last += 3 575 576 " unimplemented command test 577 call appendbufline(cmdbufnr, '$', 'invalidcmd_Test') 578 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 579 let l = ReadXnetbeans() 580 call assert_equal('send: 3:invalidcmd!80', l[-1]) 581 let g:last += 3 582 583 " unimplemented function test 584 call appendbufline(cmdbufnr, '$', 'invalidfunc_Test') 585 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 586 let l = ReadXnetbeans() 587 call assert_equal(['send: 3:invalidfunc/81', '81'], l[-2:]) 588 let g:last += 4 589 590 " Test for removeAnno cmd failure 591 call appendbufline(cmdbufnr, '$', 'removeAnno_fail_Test') 592 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 593 let l = ReadXnetbeans() 594 call assert_equal(['send: 0:removeAnno/82 1', '82'], l[-2:]) 595 let g:last += 4 596 597 " Test for guard cmd failure 598 call appendbufline(cmdbufnr, '$', 'guard_fail_Test') 599 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 600 let l = ReadXnetbeans() 601 call assert_equal(['send: 0:guard/83 1 1', '83'], l[-2:]) 602 let g:last += 4 603 604 " Test for save cmd failure 605 call appendbufline(cmdbufnr, '$', 'save_fail_Test') 606 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 607 let l = ReadXnetbeans() 608 call assert_equal(['send: 0:save/84', '84'], l[-2:]) 609 let g:last += 4 610 611 " Test for netbeansBuffer cmd failure 612 call appendbufline(cmdbufnr, '$', 'netbeansBuffer_fail_Test') 613 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 614 let l = ReadXnetbeans() 615 call assert_equal(['send: 0:netbeansBuffer/85 T', '85'], l[-2:]) 616 let g:last += 4 617 618 " nbkey test 619 call cursor(3, 3) 620 nbkey "\<C-F2>" 621 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 622 let l = ReadXnetbeans() 623 call assert_equal(['3:newDotAndMark=85 18 18', 624 \ '3:keyCommand=85 ""\<C-F2>""', 625 \ '3:keyAtPos=85 ""\<C-F2>"" 18 3/2'], l[-3:]) 626 let g:last += 3 627 628 " setExitDelay test 629 call appendbufline(cmdbufnr, '$', 'setExitDelay_Test') 630 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 631 let l = ReadXnetbeans() 632 call assert_equal('send: 0:setExitDelay!86 2', l[-1]) 633 let g:last += 3 634 635 " setReadonly test 636 call appendbufline(cmdbufnr, '$', 'setReadOnly_Test') 637 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 638 let l = ReadXnetbeans() 639 call assert_equal('send: 3:setReadOnly!87 T', l[-1]) 640 sleep 1m 641 call assert_equal(1, &readonly) 642 let g:last += 3 643 644 " clear setReadonly test 645 call appendbufline(cmdbufnr, '$', 'setReadOnlyClear_Test') 646 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 647 let l = ReadXnetbeans() 648 call assert_equal('send: 3:setReadOnly!88 F', l[-1]) 649 sleep 1m 650 call assert_equal(0, &readonly) 651 let g:last += 3 652 653 " save test 654 call setbufvar(bufnr('Xfile4'), '&modified', 1) 655 call appendbufline(cmdbufnr, '$', 'save_Test') 656 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 657 let l = ReadXnetbeans() 658 call assert_equal('send: 3:save!89', l[-1]) 659 sleep 1m 660 call assert_true(filereadable('Xfile4')) 661 let g:last += 3 662 663 " close test. Don't use buffer 10 after this 664 call appendbufline(cmdbufnr, '$', 'close_Test') 665 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 666 let l = ReadXnetbeans() 667 call assert_equal('send: 3:close!90', l[-2]) 668 call assert_equal('3:killed=90', l[-1]) 669 call assert_equal(1, winnr('$')) 670 let g:last += 4 671 672 " specialKeys test 673 call appendbufline(cmdbufnr, '$', 'specialKeys_Test') 674 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 675 let l = ReadXnetbeans() 676 call assert_equal('send: 0:specialKeys!91 "F12 F13 C-F13"', l[-1]) 677 sleep 1m 678 call assert_equal(':nbkey F12<CR>', maparg('<F12>', 'n')) 679 call assert_equal(':nbkey F13<CR>', maparg('<F13>', 'n')) 680 call assert_equal(':nbkey C-F13<CR>', maparg('<C-F13>', 'n')) 681 let g:last += 3 682 683 " Open a buffer not monitored by netbeans 684 enew | only! 685 nbkey "\<C-F3>" 686 call WaitFor('len(ReadXnetbeans()) >= (g:last + 1)') 687 let l = ReadXnetbeans() 688 call assert_equal('0:fileOpened=0 "" T F', l[-1]) 689 let g:last += 1 690 691 " Test for writing a netbeans buffer 692 call appendbufline(cmdbufnr, '$', 'nbbufwrite_Test') 693 call WaitFor('len(ReadXnetbeans()) >= (g:last + 5)') 694 call assert_fails('write', 'E656:') 695 call setline(1, ['one', 'two']) 696 call assert_fails('1write!', 'E657:') 697 write 698 call WaitFor('len(ReadXnetbeans()) >= (g:last + 10)') 699 let g:last += 10 700 701 if has('mouse') 702 " Test for mouse button release 703 let save_mouse = &mouse 704 set mouse=a 705 call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt') 706 let &mouse = save_mouse 707 call WaitFor('len(ReadXnetbeans()) >= (g:last + 2)') 708 let l = ReadXnetbeans() 709 call assert_equal('4:newDotAndMark=93 0 0', l[-2]) 710 call assert_equal('4:buttonRelease=93 0 1 -1', l[-1]) 711 let g:last += 2 712 endif 713 714 " Test for startAtomic 715 call appendbufline(cmdbufnr, '$', 'startAtomic_Test') 716 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 717 let l = ReadXnetbeans() 718 call assert_equal('send: 0:startAtomic!94', l[-1]) 719 let g:last += 3 720 721 " Test for endAtomic 722 call appendbufline(cmdbufnr, '$', 'endAtomic_Test') 723 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 724 let l = ReadXnetbeans() 725 call assert_equal('send: 0:endAtomic!95', l[-1]) 726 let g:last += 3 727 728 " Test for invoking a netbeans key binding 729 let special_keys = [ 730 \ ["\<F1>", 'F1'], ["\<S-F1>", 'S-F1'], 731 \ ["\<F2>", 'F2'], ["\<S-F2>", 'S-F2'], 732 \ ["\<F3>", 'F3'], ["\<S-F3>", 'S-F3'], 733 \ ["\<F4>", 'F4'], ["\<S-F4>", 'S-F4'], 734 \ ["\<F5>", 'F5'], ["\<S-F5>", 'S-F5'], 735 \ ["\<F6>", 'F6'], ["\<S-F6>", 'S-F6'], 736 \ ["\<F7>", 'F7'], ["\<S-F7>", 'S-F7'], 737 \ ["\<F8>", 'F8'], ["\<S-F8>", 'S-F8'], 738 \ ["\<F9>", 'F9'], ["\<S-F9>", 'S-F9'], 739 \ ["\<F11>", 'F11'], ["\<S-F11>", 'S-F11'], 740 \ ["\<F12>", 'F12'], ["\<S-F12>", 'S-F12'], ['!', '!'] 741 \ ] 742 for [key, name] in special_keys 743 call feedkeys("\<F21>" .. key, 'xt') 744 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 745 let l = ReadXnetbeans() 746 call assert_match('4:keyCommand=\d\+ "' .. name .. '"', l[-2]) 747 call assert_match('4:keyAtPos=\d\+ "' .. name .. '" 0 1/0', l[-1]) 748 let g:last += 3 749 endfor 750 call feedkeys("\<F21>\<C-S-M-F9>", 'xt') 751 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 752 let l = ReadXnetbeans() 753 call assert_match('4:keyCommand=\d\+ "CSM-F9"', l[-2]) 754 call assert_match('4:keyAtPos=\d\+ "CSM-F9" 0 1/0', l[-1]) 755 let g:last += 3 756 757 if has('signs') && has('mouse') 758 sign define S1 linehl=Search text==> 759 sign define S2 linehl=ErrorMsg text=!! 760 sign place 10 line=1 name=S1 761 sign place 20 line=1 name=S2 762 763 let save_mouse = &mouse 764 set mouse=a 765 call assert_equal('S2', sign_getplaced()[0].signs[0].name) 766 call test_setmouse(1, 1) 767 call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt') 768 call assert_equal('S1', sign_getplaced()[0].signs[0].name) 769 call test_setmouse(1, 1) 770 call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt') 771 call assert_equal('S2', sign_getplaced()[0].signs[0].name) 772 let &mouse = save_mouse 773 774 sign unplace 10 775 sign unplace 20 776 sign undefine S1 777 sign undefine S2 778 endif 779 780 " define a large number of annotations 781 call appendbufline(cmdbufnr, '$', 'AnnoScale_Test') 782 call WaitFor('len(ReadXnetbeans()) >= (g:last + 26)') 783 let l = ReadXnetbeans() 784 call assert_equal('2:defineAnnoType!60 25 "s25" "x" "=>" blue none', l[-1]) 785 sleep 1m 786 call assert_true(len(sign_getdefined()) >= 25) 787 let g:last += 26 788 789 " detach 790 call appendbufline(cmdbufnr, '$', 'detach_Test') 791 call WaitFor('len(ReadXnetbeans()) >= (g:last + 8)') 792 call WaitForAssert({-> assert_equal('0:disconnect=97', ReadXnetbeans()[-1])}) 793 794 " the connection was closed 795 call assert_false(has("netbeans_enabled")) 796 797 " Remove all the signs 798 call sign_unplace('*') 799 call sign_undefine() 800 801 call delete("Xnetbeans") 802 call delete('Xfile1') 803 call delete('Xfile3') 804 call delete('Xfile4') 805endfunc 806 807func Test_nb_basic() 808 call ch_log('Test_nb_basic') 809 call s:run_server('Nb_basic') 810endfunc 811 812func Nb_file_auth(port) 813 call delete("Xnetbeans") 814 call writefile([], "Xnetbeans") 815 816 call assert_fails('nbstart =notexist', 'E660:') 817 call writefile(['host=localhost', 'port=' . a:port, 'auth=bunny'], 'Xnbauth') 818 if has('unix') 819 call setfperm('Xnbauth', "rw-r--r--") 820 call assert_fails('nbstart =Xnbauth', 'E668:') 821 endif 822 call setfperm('Xnbauth', "rw-------") 823 exe 'nbstart =Xnbauth' 824 call assert_true(has("netbeans_enabled")) 825 826 call WaitFor('len(ReadXnetbeans()) > 2') 827 nbclose 828 let lines = ReadXnetbeans() 829 call assert_equal('AUTH bunny', lines[0]) 830 call assert_equal('0:version=0 "2.5"', lines[1]) 831 call assert_equal('0:startupDone=0', lines[2]) 832 833 call delete("Xnbauth") 834 call delete("Xnetbeans") 835endfunc 836 837func Test_nb_file_auth() 838 call ch_log('Test_nb_file_auth') 839 call s:run_server('Nb_file_auth') 840endfunc 841 842" Test for quiting Vim with an open netbeans connection 843func Nb_quit_with_conn(port) 844 call delete("Xnetbeans") 845 call writefile([], "Xnetbeans") 846 let after =<< trim END 847 source shared.vim 848 set cpo&vim 849 850 func ReadXnetbeans() 851 let l = readfile("Xnetbeans") 852 return filter(l, 'v:val !~ "^0:geometry="') 853 endfunc 854 855 " Establish the connection with the netbeans server 856 exe 'nbstart :localhost:' .. g:port .. ':star' 857 call assert_true(has("netbeans_enabled")) 858 call WaitFor('len(ReadXnetbeans()) >= 3') 859 let l = ReadXnetbeans() 860 call assert_equal(['AUTH star', 861 \ '0:version=0 "2.5"', 862 \ '0:startupDone=0'], l[-3:]) 863 864 " Open the command buffer to communicate with the server 865 split Xcmdbuf 866 call WaitFor('len(ReadXnetbeans()) >= 6') 867 let l = ReadXnetbeans() 868 call assert_equal('0:fileOpened=0 "Xcmdbuf" T F', 869 \ substitute(l[-3], '".*/', '"', '')) 870 call assert_equal('send: 1:putBufferNumber!15 "Xcmdbuf"', 871 \ substitute(l[-2], '".*/', '"', '')) 872 call assert_equal('1:startDocumentListen!16', l[-1]) 873 sleep 1m 874 875 quit! 876 quit! 877 END 878 if RunVim(['let g:port = ' .. a:port], after, '') 879 call WaitFor('len(ReadXnetbeans()) >= 9') 880 let l = ReadXnetbeans() 881 call assert_equal('1:unmodified=16', l[-3]) 882 call assert_equal('1:killed=16', l[-2]) 883 call assert_equal('0:disconnect=16', l[-1]) 884 endif 885 call delete('Xnetbeans') 886endfunc 887 888func Test_nb_quit_with_conn() 889 " Exiting Vim with a netbeans connection doesn't work properly on 890 " MS-Windows. 891 CheckUnix 892 call s:run_server('Nb_quit_with_conn') 893endfunc 894 895func Nb_bwipe_buffer(port) 896 call delete("Xnetbeans") 897 call writefile([], "Xnetbeans") 898 899 " Last line number in the Xnetbeans file. Used to verify the result of the 900 " communication with the netbeans server 901 let g:last = 0 902 903 " Establish the connection with the netbeans server 904 exe 'nbstart :localhost:' .. a:port .. ':bunny' 905 call WaitFor('len(ReadXnetbeans()) > (g:last + 2)') 906 let l = ReadXnetbeans() 907 call assert_equal(['AUTH bunny', 908 \ '0:version=0 "2.5"', 909 \ '0:startupDone=0'], l[-3:]) 910 let g:last += 3 911 912 " Open the command buffer to communicate with the server 913 split Xcmdbuf 914 call WaitFor('len(ReadXnetbeans()) > (g:last + 2)') 915 let l = ReadXnetbeans() 916 call assert_equal('0:fileOpened=0 "Xcmdbuf" T F', 917 \ substitute(l[-3], '".*/', '"', '')) 918 call assert_equal('send: 1:putBufferNumber!15 "Xcmdbuf"', 919 \ substitute(l[-2], '".*/', '"', '')) 920 call assert_equal('1:startDocumentListen!16', l[-1]) 921 let g:last += 3 922 923 sleep 10m 924endfunc 925 926" This test used to reference a buffer after it was freed leading to an ASAN 927" error. 928func Test_nb_bwipe_buffer() 929 call s:run_server('Nb_bwipe_buffer') 930 silent! %bwipe! 931 sleep 100m 932 nbclose 933endfunc 934 935" vim: shiftwidth=2 sts=2 expandtab 936