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