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 " Test for changing case of multiple lines using ~ 371 normal ggVG~ 372 call WaitFor('len(ReadXnetbeans()) >= (g:last + 6)') 373 let l = ReadXnetbeans() 374 call assert_match('2:remove=\d\+ 0 8', l[-6]) 375 call assert_match('2:insert=\d\+ 0 "FOO BAR2"', l[-5]) 376 call assert_match('2:remove=\d\+ 9 8', l[-4]) 377 call assert_match('2:insert=\d\+ 9 "BLUE SKy"', l[-3]) 378 call assert_match('2:remove=\d\+ 18 9', l[-2]) 379 call assert_match('2:insert=\d\+ 18 "\tFOO BAR3"', l[-1]) 380 let g:last += 6 381 382 " Test for changing case of a visual block using ~ 383 exe "normal ggw\<C-V>$~" 384 call WaitFor('len(ReadXnetbeans()) >= (g:last + 2)') 385 let l = ReadXnetbeans() 386 call assert_match('2:remove=\d\+ 4 4', l[-2]) 387 call assert_match('2:insert=\d\+ 4 "bar2"', l[-1]) 388 let g:last += 2 389 390 " Increment a number using <C-A> in visual mode 391 exe "normal! gg$v6\<C-A>" 392 call WaitFor('len(ReadXnetbeans()) >= (g:last + 6)') 393 let l = ReadXnetbeans() 394 call assert_match('2:remove=\d\+ 0 9', l[-4]) 395 call assert_match('2:insert=\d\+ 0 "FOO bar8"', l[-3]) 396 call assert_match('2:remove=\d\+ 7 1', l[-2]) 397 call assert_match('2:insert=\d\+ 7 "8"', l[-1]) 398 let g:last += 6 399 400 " Decrement a number using <C-X> in visual mode 401 exe "normal! gg$v3\<C-X>" 402 call WaitFor('len(ReadXnetbeans()) >= (g:last + 6)') 403 let l = ReadXnetbeans() 404 call assert_match('2:remove=\d\+ 0 9', l[-4]) 405 call assert_match('2:insert=\d\+ 0 "FOO bar5"', l[-3]) 406 call assert_match('2:remove=\d\+ 7 1', l[-2]) 407 call assert_match('2:insert=\d\+ 7 "5"', l[-1]) 408 let g:last += 6 409 410 " stopDocumentListen test 411 call appendbufline(cmdbufnr, '$', 'stopDocumentListen_Test') 412 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 413 let l = ReadXnetbeans() 414 call assert_equal('send: 2:stopDocumentListen!59', l[-1]) 415 let g:last += 3 416 417 " Wait for vim to process the previous netbeans message 418 sleep 1m 419 420 " modify the buffer and make sure that the netbeans server is not notified 421 call append(2, 'clear sky') 422 1d 423 424 " defineAnnoType test 425 call appendbufline(cmdbufnr, '$', 'define_anno_Test') 426 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 427 let l = ReadXnetbeans() 428 call assert_equal('send: 2:defineAnnoType!60 1 "s1" "x" "=>" blue none', l[-1]) 429 sleep 1m 430 call assert_equal({'name': '1', 'texthl': 'NB_s1', 'text': '=>'}, 431 \ sign_getdefined()->get(0, {})) 432 let g:last += 3 433 434 " defineAnnoType with a long color name 435 call appendbufline(cmdbufnr, '$', 'E532_Test') 436 call WaitForError('E532:') 437 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 438 let l = ReadXnetbeans() 439 call assert_equal('send: 2:defineAnnoType!61 1 "s1" "x" "=>" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa none', l[-1]) 440 let g:last += 3 441 442 " addAnno test 443 call appendbufline(cmdbufnr, '$', 'add_anno_Test') 444 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 445 let l = ReadXnetbeans() 446 call assert_equal('send: 2:addAnno!62 1 1 2/1 0', l[-1]) 447 sleep 1m 448 call assert_equal([{'lnum': 2, 'id': 1, 'name': '1', 'priority': 10, 449 \ 'group': ''}], sign_getplaced()[0].signs) 450 let g:last += 3 451 452 " getAnno test 453 call appendbufline(cmdbufnr, '$', 'get_anno_Test') 454 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 455 let l = ReadXnetbeans() 456 call assert_equal(['send: 2:getAnno/63 1', '63 2'], l[-2:]) 457 let g:last += 4 458 459 " removeAnno test 460 call appendbufline(cmdbufnr, '$', 'remove_anno_Test') 461 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 462 let l = ReadXnetbeans() 463 call assert_equal('send: 2:removeAnno!64 1', l[-1]) 464 sleep 1m 465 call assert_equal([], sign_getplaced()) 466 let g:last += 3 467 468 " getModified test to get the number of modified buffers 469 call appendbufline(cmdbufnr, '$', 'getModifiedAll_Test') 470 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 471 let l = ReadXnetbeans() 472 call assert_equal(['send: 0:getModified/65', '65 2'], l[-2:]) 473 let g:last += 4 474 475 let bufcount = len(getbufinfo()) 476 477 " create test to create a new buffer 478 call appendbufline(cmdbufnr, '$', 'create_Test') 479 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 480 let l = ReadXnetbeans() 481 call assert_equal('send: 3:create!66', l[-1]) 482 " Wait for vim to process the previous netbeans message 483 sleep 10m 484 call assert_equal(bufcount + 1, len(getbufinfo())) 485 let g:last += 3 486 487 " setTitle test 488 call appendbufline(cmdbufnr, '$', 'setTitle_Test') 489 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 490 let l = ReadXnetbeans() 491 call assert_equal('send: 3:setTitle!67 "Xfile4"', l[-1]) 492 let g:last += 3 493 494 " setFullName test 495 call appendbufline(cmdbufnr, '$', 'setFullName_Test') 496 call WaitFor('len(ReadXnetbeans()) >= (g:last + 5)') 497 let l = ReadXnetbeans() 498 call assert_equal('send: 3:setFullName!68 "Xfile4"', l[-3]) 499 call assert_match('0:fileOpened=0 ".*/Xfile4" T F', l[-1]) 500 call assert_equal('Xfile4', bufname()) 501 let g:last += 5 502 503 " initDone test 504 call appendbufline(cmdbufnr, '$', 'initDone_Test') 505 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 506 let l = ReadXnetbeans() 507 call assert_equal('send: 3:initDone!69', l[-1]) 508 let g:last += 3 509 510 " setVisible test 511 hide enew 512 call appendbufline(cmdbufnr, '$', 'setVisible_Test') 513 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 514 let l = ReadXnetbeans() 515 call assert_equal('send: 3:setVisible!70 T', l[-1]) 516 let g:last += 3 517 518 " setModtime test 519 call appendbufline(cmdbufnr, '$', 'setModtime_Test') 520 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 521 let l = ReadXnetbeans() 522 call assert_equal('send: 3:setModtime!71 6', l[-1]) 523 let g:last += 3 524 525 " insert test 526 call appendbufline(cmdbufnr, '$', 'insert_Test') 527 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 528 let l = ReadXnetbeans() 529 call assert_equal(['send: 3:insert/72 0 "line1\nline2\n"', '72'], l[-2:]) 530 call assert_equal(['line1', 'line2'], getline(1, '$')) 531 let g:last += 4 532 533 " remove test 534 call appendbufline(cmdbufnr, '$', 'remove_Test') 535 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 536 let l = ReadXnetbeans() 537 call assert_equal(['send: 3:remove/73 3 4', '73'], l[-2:]) 538 call assert_equal(['linine2'], getline(1, '$')) 539 let g:last += 4 540 541 " remove with invalid offset 542 call appendbufline(cmdbufnr, '$', 'remove_invalid_offset_Test') 543 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 544 let l = ReadXnetbeans() 545 call assert_equal(['send: 3:remove/74 900 4', '74 !bad position'], l[-2:]) 546 let g:last += 4 547 548 " remove with invalid count 549 call appendbufline(cmdbufnr, '$', 'remove_invalid_count_Test') 550 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 551 let l = ReadXnetbeans() 552 call assert_equal(['send: 3:remove/75 1 800', '75 !bad count'], l[-2:]) 553 let g:last += 4 554 555 " guard test 556 %d 557 call setline(1, ['foo bar', 'foo bar', 'foo bar']) 558 call WaitFor('len(ReadXnetbeans()) >= (g:last + 8)') 559 let g:last += 8 560 561 call appendbufline(cmdbufnr, '$', 'guard_Test') 562 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 563 let l = ReadXnetbeans() 564 call assert_equal('send: 3:guard!76 8 7', l[-1]) 565 sleep 1m 566 " second line is guarded. Try modifying the line 567 call assert_fails('normal 2GIbaz', 'E463:') 568 call assert_fails('normal 2GAbaz', 'E463:') 569 call assert_fails('normal dd', 'E463:') 570 call assert_equal([{'name': '1', 'texthl': 'NB_s1', 'text': '=>'}, 571 \ {'name': '10000', 'linehl': 'NBGuarded'}], 572 \ sign_getdefined()) 573 let s = sign_getplaced()[0].signs[0] 574 call assert_equal(2, s.lnum) 575 call assert_equal('10000', s.name) 576 let g:last += 3 577 578 " setModified test 579 call appendbufline(cmdbufnr, '$', 'setModified_Test') 580 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 581 let l = ReadXnetbeans() 582 call assert_equal('send: 3:setModified!77 T', l[-1]) 583 sleep 1m 584 call assert_equal(1, &modified) 585 let g:last += 3 586 587 " clear setModified test 588 call appendbufline(cmdbufnr, '$', 'setModifiedClear_Test') 589 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 590 let l = ReadXnetbeans() 591 call assert_equal('send: 3:setModified!77 F', l[-1]) 592 sleep 1m 593 call assert_equal(0, &modified) 594 let g:last += 3 595 596 " insertDone test 597 let v:statusmsg = '' 598 call appendbufline(cmdbufnr, '$', 'insertDone_Test') 599 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 600 let l = ReadXnetbeans() 601 call assert_equal('send: 3:insertDone!78 T F', l[-1]) 602 sleep 1m 603 call assert_match('.*/Xfile4" 3L, 0B', v:statusmsg) 604 let g:last += 3 605 606 " saveDone test 607 let v:statusmsg = '' 608 call appendbufline(cmdbufnr, '$', 'saveDone_Test') 609 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 610 let l = ReadXnetbeans() 611 call assert_equal('send: 3:saveDone!79', l[-1]) 612 sleep 1m 613 call assert_match('.*/Xfile4" 3L, 0B', v:statusmsg) 614 let g:last += 3 615 616 " unimplemented command test 617 call appendbufline(cmdbufnr, '$', 'invalidcmd_Test') 618 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 619 let l = ReadXnetbeans() 620 call assert_equal('send: 3:invalidcmd!80', l[-1]) 621 let g:last += 3 622 623 " unimplemented function test 624 call appendbufline(cmdbufnr, '$', 'invalidfunc_Test') 625 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 626 let l = ReadXnetbeans() 627 call assert_equal(['send: 3:invalidfunc/81', '81'], l[-2:]) 628 let g:last += 4 629 630 " Test for removeAnno cmd failure 631 call appendbufline(cmdbufnr, '$', 'removeAnno_fail_Test') 632 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 633 let l = ReadXnetbeans() 634 call assert_equal(['send: 0:removeAnno/82 1', '82'], l[-2:]) 635 let g:last += 4 636 637 " Test for guard cmd failure 638 call appendbufline(cmdbufnr, '$', 'guard_fail_Test') 639 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 640 let l = ReadXnetbeans() 641 call assert_equal(['send: 0:guard/83 1 1', '83'], l[-2:]) 642 let g:last += 4 643 644 " Test for save cmd failure 645 call appendbufline(cmdbufnr, '$', 'save_fail_Test') 646 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 647 let l = ReadXnetbeans() 648 call assert_equal(['send: 0:save/84', '84'], l[-2:]) 649 let g:last += 4 650 651 " Test for netbeansBuffer cmd failure 652 call appendbufline(cmdbufnr, '$', 'netbeansBuffer_fail_Test') 653 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 654 let l = ReadXnetbeans() 655 call assert_equal(['send: 0:netbeansBuffer/85 T', '85'], l[-2:]) 656 let g:last += 4 657 658 " nbkey test 659 call cursor(3, 3) 660 nbkey "\<C-F2>" 661 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 662 let l = ReadXnetbeans() 663 call assert_equal(['3:newDotAndMark=85 18 18', 664 \ '3:keyCommand=85 ""\<C-F2>""', 665 \ '3:keyAtPos=85 ""\<C-F2>"" 18 3/2'], l[-3:]) 666 let g:last += 3 667 668 " setExitDelay test 669 call appendbufline(cmdbufnr, '$', 'setExitDelay_Test') 670 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 671 let l = ReadXnetbeans() 672 call assert_equal('send: 0:setExitDelay!86 2', l[-1]) 673 let g:last += 3 674 675 " setReadonly test 676 call appendbufline(cmdbufnr, '$', 'setReadOnly_Test') 677 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 678 let l = ReadXnetbeans() 679 call assert_equal('send: 3:setReadOnly!87 T', l[-1]) 680 sleep 1m 681 call assert_equal(1, &readonly) 682 let g:last += 3 683 684 " clear setReadonly test 685 call appendbufline(cmdbufnr, '$', 'setReadOnlyClear_Test') 686 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 687 let l = ReadXnetbeans() 688 call assert_equal('send: 3:setReadOnly!88 F', l[-1]) 689 sleep 1m 690 call assert_equal(0, &readonly) 691 let g:last += 3 692 693 " save test 694 call setbufvar(bufnr('Xfile4'), '&modified', 1) 695 call appendbufline(cmdbufnr, '$', 'save_Test') 696 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 697 let l = ReadXnetbeans() 698 call assert_equal('send: 3:save!89', l[-1]) 699 sleep 1m 700 call assert_true(filereadable('Xfile4')) 701 let g:last += 3 702 703 " close test. Don't use buffer 10 after this 704 call appendbufline(cmdbufnr, '$', 'close_Test') 705 call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 706 let l = ReadXnetbeans() 707 call assert_equal('send: 3:close!90', l[-2]) 708 call assert_equal('3:killed=90', l[-1]) 709 call assert_equal(1, winnr('$')) 710 let g:last += 4 711 712 " specialKeys test 713 call appendbufline(cmdbufnr, '$', 'specialKeys_Test') 714 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 715 let l = ReadXnetbeans() 716 call assert_equal('send: 0:specialKeys!91 "F12 F13 C-F13"', l[-1]) 717 sleep 1m 718 call assert_equal(':nbkey F12<CR>', maparg('<F12>', 'n')) 719 call assert_equal(':nbkey F13<CR>', maparg('<F13>', 'n')) 720 call assert_equal(':nbkey C-F13<CR>', maparg('<C-F13>', 'n')) 721 let g:last += 3 722 723 " Open a buffer not monitored by netbeans 724 enew | only! 725 nbkey "\<C-F3>" 726 call WaitFor('len(ReadXnetbeans()) >= (g:last + 1)') 727 let l = ReadXnetbeans() 728 call assert_equal('0:fileOpened=0 "" T F', l[-1]) 729 let g:last += 1 730 731 " Test for writing a netbeans buffer 732 call appendbufline(cmdbufnr, '$', 'nbbufwrite_Test') 733 call WaitFor('len(ReadXnetbeans()) >= (g:last + 5)') 734 call assert_fails('write', 'E656:') 735 call setline(1, ['one', 'two']) 736 call assert_fails('1write!', 'E657:') 737 write 738 call WaitFor('len(ReadXnetbeans()) >= (g:last + 10)') 739 let g:last += 10 740 741 if has('mouse') 742 " Test for mouse button release 743 let save_mouse = &mouse 744 set mouse=a 745 call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt') 746 let &mouse = save_mouse 747 call WaitFor('len(ReadXnetbeans()) >= (g:last + 2)') 748 let l = ReadXnetbeans() 749 call assert_equal('4:newDotAndMark=93 0 0', l[-2]) 750 call assert_equal('4:buttonRelease=93 0 1 -1', l[-1]) 751 let g:last += 2 752 endif 753 754 " Test for startAtomic 755 call appendbufline(cmdbufnr, '$', 'startAtomic_Test') 756 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 757 let l = ReadXnetbeans() 758 call assert_equal('send: 0:startAtomic!94', l[-1]) 759 let g:last += 3 760 761 " Test for endAtomic 762 call appendbufline(cmdbufnr, '$', 'endAtomic_Test') 763 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 764 let l = ReadXnetbeans() 765 call assert_equal('send: 0:endAtomic!95', l[-1]) 766 let g:last += 3 767 768 " Test for invoking a netbeans key binding 769 let special_keys = [ 770 \ ["\<F1>", 'F1'], ["\<S-F1>", 'S-F1'], 771 \ ["\<F2>", 'F2'], ["\<S-F2>", 'S-F2'], 772 \ ["\<F3>", 'F3'], ["\<S-F3>", 'S-F3'], 773 \ ["\<F4>", 'F4'], ["\<S-F4>", 'S-F4'], 774 \ ["\<F5>", 'F5'], ["\<S-F5>", 'S-F5'], 775 \ ["\<F6>", 'F6'], ["\<S-F6>", 'S-F6'], 776 \ ["\<F7>", 'F7'], ["\<S-F7>", 'S-F7'], 777 \ ["\<F8>", 'F8'], ["\<S-F8>", 'S-F8'], 778 \ ["\<F9>", 'F9'], ["\<S-F9>", 'S-F9'], 779 \ ["\<F11>", 'F11'], ["\<S-F11>", 'S-F11'], 780 \ ["\<F12>", 'F12'], ["\<S-F12>", 'S-F12'], ['!', '!'] 781 \ ] 782 for [key, name] in special_keys 783 call feedkeys("\<F21>" .. key, 'xt') 784 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 785 let l = ReadXnetbeans() 786 call assert_match('4:keyCommand=\d\+ "' .. name .. '"', l[-2]) 787 call assert_match('4:keyAtPos=\d\+ "' .. name .. '" 0 1/0', l[-1]) 788 let g:last += 3 789 endfor 790 call feedkeys("\<F21>\<C-S-M-F9>", 'xt') 791 call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 792 let l = ReadXnetbeans() 793 call assert_match('4:keyCommand=\d\+ "CSM-F9"', l[-2]) 794 call assert_match('4:keyAtPos=\d\+ "CSM-F9" 0 1/0', l[-1]) 795 let g:last += 3 796 797 if has('signs') && has('mouse') 798 sign define S1 linehl=Search text==> 799 sign define S2 linehl=ErrorMsg text=!! 800 sign place 10 line=1 name=S1 801 sign place 20 line=1 name=S2 802 803 let save_mouse = &mouse 804 set mouse=a 805 call assert_equal('S2', sign_getplaced()[0].signs[0].name) 806 call test_setmouse(1, 1) 807 call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt') 808 call assert_equal('S1', sign_getplaced()[0].signs[0].name) 809 call test_setmouse(1, 1) 810 call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt') 811 call assert_equal('S2', sign_getplaced()[0].signs[0].name) 812 let &mouse = save_mouse 813 814 sign unplace 10 815 sign unplace 20 816 sign undefine S1 817 sign undefine S2 818 endif 819 820 " define a large number of annotations 821 call appendbufline(cmdbufnr, '$', 'AnnoScale_Test') 822 call WaitFor('len(ReadXnetbeans()) >= (g:last + 26)') 823 let l = ReadXnetbeans() 824 call assert_equal('2:defineAnnoType!60 25 "s25" "x" "=>" blue none', l[-1]) 825 sleep 1m 826 call assert_true(len(sign_getdefined()) >= 25) 827 let g:last += 26 828 829 " detach 830 call appendbufline(cmdbufnr, '$', 'detach_Test') 831 call WaitFor('len(ReadXnetbeans()) >= (g:last + 8)') 832 call WaitForAssert({-> assert_equal('0:disconnect=97', ReadXnetbeans()[-1])}) 833 834 " the connection was closed 835 call assert_false(has("netbeans_enabled")) 836 837 " Remove all the signs 838 call sign_unplace('*') 839 call sign_undefine() 840 841 call delete("Xnetbeans") 842 call delete('Xfile1') 843 call delete('Xfile3') 844 call delete('Xfile4') 845endfunc 846 847func Test_nb_basic() 848 call ch_log('Test_nb_basic') 849 call s:run_server('Nb_basic') 850endfunc 851 852func Nb_file_auth(port) 853 call delete("Xnetbeans") 854 call writefile([], "Xnetbeans") 855 856 call assert_fails('nbstart =notexist', 'E660:') 857 call writefile(['host=localhost', 'port=' . a:port, 'auth=bunny'], 'Xnbauth') 858 if has('unix') 859 call setfperm('Xnbauth', "rw-r--r--") 860 call assert_fails('nbstart =Xnbauth', 'E668:') 861 endif 862 call setfperm('Xnbauth', "rw-------") 863 exe 'nbstart =Xnbauth' 864 call assert_true(has("netbeans_enabled")) 865 866 call WaitFor('len(ReadXnetbeans()) > 2') 867 nbclose 868 let lines = ReadXnetbeans() 869 call assert_equal('AUTH bunny', lines[0]) 870 call assert_equal('0:version=0 "2.5"', lines[1]) 871 call assert_equal('0:startupDone=0', lines[2]) 872 873 call delete("Xnbauth") 874 call delete("Xnetbeans") 875endfunc 876 877func Test_nb_file_auth() 878 call ch_log('Test_nb_file_auth') 879 call s:run_server('Nb_file_auth') 880endfunc 881 882" Test for quitting Vim with an open netbeans connection 883func Nb_quit_with_conn(port) 884 call delete("Xnetbeans") 885 call writefile([], "Xnetbeans") 886 let after =<< trim END 887 source shared.vim 888 set cpo&vim 889 890 func ReadXnetbeans() 891 let l = readfile("Xnetbeans") 892 return filter(l, 'v:val !~ "^0:geometry="') 893 endfunc 894 895 " Establish the connection with the netbeans server 896 exe 'nbstart :localhost:' .. g:port .. ':star' 897 call assert_true(has("netbeans_enabled")) 898 call WaitFor('len(ReadXnetbeans()) >= 3') 899 let l = ReadXnetbeans() 900 call assert_equal(['AUTH star', 901 \ '0:version=0 "2.5"', 902 \ '0:startupDone=0'], l[-3:]) 903 904 " Open the command buffer to communicate with the server 905 split Xcmdbuf 906 call WaitFor('len(ReadXnetbeans()) >= 6') 907 let l = ReadXnetbeans() 908 call assert_equal('0:fileOpened=0 "Xcmdbuf" T F', 909 \ substitute(l[-3], '".*/', '"', '')) 910 call assert_equal('send: 1:putBufferNumber!15 "Xcmdbuf"', 911 \ substitute(l[-2], '".*/', '"', '')) 912 call assert_equal('1:startDocumentListen!16', l[-1]) 913 sleep 1m 914 915 quit! 916 quit! 917 END 918 if RunVim(['let g:port = ' .. a:port], after, '') 919 call WaitFor('len(ReadXnetbeans()) >= 9') 920 let l = ReadXnetbeans() 921 call assert_equal('1:unmodified=16', l[-3]) 922 call assert_equal('1:killed=16', l[-2]) 923 call assert_equal('0:disconnect=16', l[-1]) 924 endif 925 call delete('Xnetbeans') 926endfunc 927 928func Test_nb_quit_with_conn() 929 " Exiting Vim with a netbeans connection doesn't work properly on 930 " MS-Windows. 931 CheckUnix 932 call s:run_server('Nb_quit_with_conn') 933endfunc 934 935func Nb_bwipe_buffer(port) 936 call delete("Xnetbeans") 937 call writefile([], "Xnetbeans") 938 939 " Last line number in the Xnetbeans file. Used to verify the result of the 940 " communication with the netbeans server 941 let g:last = 0 942 943 " Establish the connection with the netbeans server 944 exe 'nbstart :localhost:' .. a:port .. ':bunny' 945 call WaitFor('len(ReadXnetbeans()) > (g:last + 2)') 946 let l = ReadXnetbeans() 947 call assert_equal(['AUTH bunny', 948 \ '0:version=0 "2.5"', 949 \ '0:startupDone=0'], l[-3:]) 950 let g:last += 3 951 952 " Open the command buffer to communicate with the server 953 split Xcmdbuf 954 call WaitFor('len(ReadXnetbeans()) > (g:last + 2)') 955 let l = ReadXnetbeans() 956 call assert_equal('0:fileOpened=0 "Xcmdbuf" T F', 957 \ substitute(l[-3], '".*/', '"', '')) 958 call assert_equal('send: 1:putBufferNumber!15 "Xcmdbuf"', 959 \ substitute(l[-2], '".*/', '"', '')) 960 call assert_equal('1:startDocumentListen!16', l[-1]) 961 let g:last += 3 962 963 sleep 10m 964endfunc 965 966" This test used to reference a buffer after it was freed leading to an ASAN 967" error. 968func Test_nb_bwipe_buffer() 969 call s:run_server('Nb_bwipe_buffer') 970 silent! %bwipe! 971 sleep 100m 972 nbclose 973endfunc 974 975" vim: shiftwidth=2 sts=2 expandtab 976