1321efdd7SBram Moolenaar" Test the netbeans interface. 2321efdd7SBram Moolenaar 3b46fecd3SBram Moolenaarsource check.vim 4b46fecd3SBram MoolenaarCheckFeature netbeans_intg 5321efdd7SBram Moolenaar 6321efdd7SBram Moolenaarsource shared.vim 7321efdd7SBram Moolenaar 8321efdd7SBram Moolenaarlet s:python = PythonProg() 9321efdd7SBram Moolenaarif s:python == '' 10b46fecd3SBram Moolenaar throw 'Skipped: python program missing' 11321efdd7SBram Moolenaarendif 12321efdd7SBram Moolenaar 134b96df5aSBram Moolenaar" Run "testfunc" after starting the server and stop the server afterwards. 14321efdd7SBram Moolenaarfunc s:run_server(testfunc, ...) 15321efdd7SBram Moolenaar call RunServer('test_netbeans.py', a:testfunc, a:000) 16321efdd7SBram Moolenaarendfunc 17321efdd7SBram Moolenaar 18173d841eSBram Moolenaar" Wait for an exception (error) to be thrown. This is used to check whether a 19173d841eSBram Moolenaar" message from the netbeans server causes an error. It takes some time for Vim 20173d841eSBram Moolenaar" to process a netbeans message. So a sleep is used below to account for this. 21173d841eSBram Moolenaarfunc WaitForError(errcode) 22173d841eSBram Moolenaar let save_exception = '' 23173d841eSBram Moolenaar for i in range(200) 24173d841eSBram Moolenaar try 25173d841eSBram Moolenaar sleep 5m 26173d841eSBram Moolenaar catch 27173d841eSBram Moolenaar let save_exception = v:exception 28173d841eSBram Moolenaar break 29173d841eSBram Moolenaar endtry 30173d841eSBram Moolenaar endfor 31173d841eSBram Moolenaar call assert_match(a:errcode, save_exception) 32173d841eSBram Moolenaarendfunc 33173d841eSBram Moolenaar 3495650159SBram Moolenaar" Read the "Xnetbeans" file and filter out geometry messages. 3595650159SBram Moolenaarfunc ReadXnetbeans() 3695650159SBram Moolenaar let l = readfile("Xnetbeans") 3732e5ec0bSBram Moolenaar " Xnetbeans may include '0:geometry=' messages in the GUI Vim if the window 3895650159SBram Moolenaar " position, size, or z order are changed. Remove these messages because 3950dc3eccSBram Moolenaar " these messages will break the assert for the output. 4095650159SBram Moolenaar return filter(l, 'v:val !~ "^0:geometry="') 4195650159SBram Moolenaarendfunc 4295650159SBram Moolenaar 43321efdd7SBram Moolenaarfunc Nb_basic(port) 44321efdd7SBram Moolenaar call delete("Xnetbeans") 45c20e0d52SBram Moolenaar call writefile([], "Xnetbeans") 46173d841eSBram Moolenaar 47173d841eSBram Moolenaar " Last line number in the Xnetbeans file. Used to verify the result of the 48173d841eSBram Moolenaar " communication with the netbeans server 49173d841eSBram Moolenaar let g:last = 0 50173d841eSBram Moolenaar 51173d841eSBram Moolenaar " Establish the connection with the netbeans server 52173d841eSBram Moolenaar exe 'nbstart :localhost:' .. a:port .. ':bunny' 53321efdd7SBram Moolenaar call assert_true(has("netbeans_enabled")) 5495650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) > (g:last + 2)') 5595650159SBram Moolenaar let l = ReadXnetbeans() 56173d841eSBram Moolenaar call assert_equal(['AUTH bunny', 57173d841eSBram Moolenaar \ '0:version=0 "2.5"', 58173d841eSBram Moolenaar \ '0:startupDone=0'], l[-3:]) 59173d841eSBram Moolenaar let g:last += 3 60321efdd7SBram Moolenaar 61173d841eSBram Moolenaar " Trying to connect again to netbeans server should fail 62173d841eSBram Moolenaar call assert_fails("exe 'nbstart :localhost:' . a:port . ':bunny'", 'E511:') 63321efdd7SBram Moolenaar 64173d841eSBram Moolenaar " Open the command buffer to communicate with the server 65173d841eSBram Moolenaar split Xcmdbuf 66173d841eSBram Moolenaar let cmdbufnr = bufnr() 6795650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) > (g:last + 2)') 6895650159SBram Moolenaar let l = ReadXnetbeans() 69173d841eSBram Moolenaar call assert_equal('0:fileOpened=0 "Xcmdbuf" T F', 70173d841eSBram Moolenaar \ substitute(l[-3], '".*/', '"', '')) 71173d841eSBram Moolenaar call assert_equal('send: 1:putBufferNumber!15 "Xcmdbuf"', 72173d841eSBram Moolenaar \ substitute(l[-2], '".*/', '"', '')) 73173d841eSBram Moolenaar call assert_equal('1:startDocumentListen!16', l[-1]) 74173d841eSBram Moolenaar let g:last += 3 75321efdd7SBram Moolenaar 76173d841eSBram Moolenaar " Keep the command buffer loaded for communication 77173d841eSBram Moolenaar hide 78173d841eSBram Moolenaar 79173d841eSBram Moolenaar sleep 1m 80173d841eSBram Moolenaar 81173d841eSBram Moolenaar " getCursor test 82173d841eSBram Moolenaar call writefile(['foo bar', 'foo bar', 'foo bar'], 'Xfile1') 83173d841eSBram Moolenaar split Xfile1 84173d841eSBram Moolenaar call cursor(3, 4) 85173d841eSBram Moolenaar sleep 10m 86173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'getCursor_Test') 8795650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 5)') 8895650159SBram Moolenaar let l = ReadXnetbeans() 89173d841eSBram Moolenaar call assert_equal(['send: 0:getCursor/30', '30 -1 3 3 19'], l[-2:]) 90173d841eSBram Moolenaar let g:last += 5 91173d841eSBram Moolenaar 92173d841eSBram Moolenaar " Test for E627 93173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E627_Test') 94173d841eSBram Moolenaar call WaitForError('E627:') 9595650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 9695650159SBram Moolenaar let l = ReadXnetbeans() 97173d841eSBram Moolenaar call assert_equal('send: 0 setReadOnly!31', l[-1]) 98173d841eSBram Moolenaar let g:last += 3 99173d841eSBram Moolenaar 100173d841eSBram Moolenaar " Test for E628 101173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E628_Test') 102173d841eSBram Moolenaar call WaitForError('E628:') 10395650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 10495650159SBram Moolenaar let l = ReadXnetbeans() 105173d841eSBram Moolenaar call assert_equal('send: 0:setReadOnly 32', l[-1]) 106173d841eSBram Moolenaar let g:last += 3 107173d841eSBram Moolenaar 108173d841eSBram Moolenaar " Test for E632 109173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E632_Test') 110173d841eSBram Moolenaar call WaitForError('E632:') 11195650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 11295650159SBram Moolenaar let l = ReadXnetbeans() 113173d841eSBram Moolenaar call assert_equal(['send: 0:getLength/33', '33 0'], l[-2:]) 114173d841eSBram Moolenaar let g:last += 4 115173d841eSBram Moolenaar 116173d841eSBram Moolenaar " Test for E633 117173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E633_Test') 118173d841eSBram Moolenaar call WaitForError('E633:') 11995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 12095650159SBram Moolenaar let l = ReadXnetbeans() 121173d841eSBram Moolenaar call assert_equal(['send: 0:getText/34', '34 '], l[-2:]) 122173d841eSBram Moolenaar let g:last += 4 123173d841eSBram Moolenaar 124173d841eSBram Moolenaar " Test for E634 125173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E634_Test') 126173d841eSBram Moolenaar call WaitForError('E634:') 12795650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 12895650159SBram Moolenaar let l = ReadXnetbeans() 129173d841eSBram Moolenaar call assert_equal(['send: 0:remove/35 1 1', '35'], l[-2:]) 130173d841eSBram Moolenaar let g:last += 4 131173d841eSBram Moolenaar 132173d841eSBram Moolenaar " Test for E635 133173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E635_Test') 134173d841eSBram Moolenaar call WaitForError('E635:') 13595650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 13695650159SBram Moolenaar let l = ReadXnetbeans() 137173d841eSBram Moolenaar call assert_equal(['send: 0:insert/36 0 "line1\n"', '36'], l[-2:]) 138173d841eSBram Moolenaar let g:last += 4 139173d841eSBram Moolenaar 140173d841eSBram Moolenaar " Test for E636 141173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E636_Test') 142173d841eSBram Moolenaar call WaitForError('E636:') 14395650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 14495650159SBram Moolenaar let l = ReadXnetbeans() 145173d841eSBram Moolenaar call assert_equal('send: 0:create!37', l[-1]) 146173d841eSBram Moolenaar let g:last += 3 147173d841eSBram Moolenaar 148173d841eSBram Moolenaar " Test for E637 149173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E637_Test') 150173d841eSBram Moolenaar call WaitForError('E637:') 15195650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 15295650159SBram Moolenaar let l = ReadXnetbeans() 153173d841eSBram Moolenaar call assert_equal('send: 0:startDocumentListen!38', l[-1]) 154173d841eSBram Moolenaar let g:last += 3 155173d841eSBram Moolenaar 156173d841eSBram Moolenaar " Test for E638 157173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E638_Test') 158173d841eSBram Moolenaar call WaitForError('E638:') 15995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 16095650159SBram Moolenaar let l = ReadXnetbeans() 161173d841eSBram Moolenaar call assert_equal('send: 0:stopDocumentListen!39', l[-1]) 162173d841eSBram Moolenaar let g:last += 3 163173d841eSBram Moolenaar 164173d841eSBram Moolenaar " Test for E639 165173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E639_Test') 166173d841eSBram Moolenaar call WaitForError('E639:') 16795650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 16895650159SBram Moolenaar let l = ReadXnetbeans() 169173d841eSBram Moolenaar call assert_equal('send: 0:setTitle!40 "Title"', l[-1]) 170173d841eSBram Moolenaar let g:last += 3 171173d841eSBram Moolenaar 172173d841eSBram Moolenaar " Test for E640 173173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E640_Test') 174173d841eSBram Moolenaar call WaitForError('E640:') 17595650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 17695650159SBram Moolenaar let l = ReadXnetbeans() 177173d841eSBram Moolenaar call assert_equal('send: 0:initDone!41', l[-1]) 178173d841eSBram Moolenaar let g:last += 3 179173d841eSBram Moolenaar 180173d841eSBram Moolenaar " Test for E641 181173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E641_Test') 182173d841eSBram Moolenaar call WaitForError('E641:') 18395650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 18495650159SBram Moolenaar let l = ReadXnetbeans() 185173d841eSBram Moolenaar call assert_equal('send: 0:putBufferNumber!42 "XSomeBuf"', l[-1]) 186173d841eSBram Moolenaar let g:last += 3 187173d841eSBram Moolenaar 188173d841eSBram Moolenaar " Test for E642 189173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E642_Test') 190173d841eSBram Moolenaar call WaitForError('E642:') 19195650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 19295650159SBram Moolenaar let l = ReadXnetbeans() 193173d841eSBram Moolenaar call assert_equal('send: 9:putBufferNumber!43 "XInvalidBuf"', l[-1]) 194173d841eSBram Moolenaar let g:last += 3 195173d841eSBram Moolenaar 196173d841eSBram Moolenaar " Test for E643 197173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E643_Test') 198173d841eSBram Moolenaar call WaitForError('E643:') 19995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 20095650159SBram Moolenaar let l = ReadXnetbeans() 201173d841eSBram Moolenaar call assert_equal('send: 0:setFullName!44 "XSomeBuf"', l[-1]) 202173d841eSBram Moolenaar let g:last += 3 203173d841eSBram Moolenaar 204173d841eSBram Moolenaar enew! 205173d841eSBram Moolenaar 206173d841eSBram Moolenaar " Test for E644 207173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E644_Test') 208173d841eSBram Moolenaar call WaitForError('E644:') 20995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 21095650159SBram Moolenaar let l = ReadXnetbeans() 211173d841eSBram Moolenaar call assert_equal('send: 0:editFile!45 "Xfile3"', l[-1]) 212173d841eSBram Moolenaar let g:last += 3 213173d841eSBram Moolenaar 214173d841eSBram Moolenaar " Test for E645 (shown only when verbose > 0) 215173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E645_Test') 216173d841eSBram Moolenaar set verbose=1 217173d841eSBram Moolenaar call WaitForError('E645:') 218173d841eSBram Moolenaar set verbose& 21995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 22095650159SBram Moolenaar let l = ReadXnetbeans() 221173d841eSBram Moolenaar call assert_equal('send: 0:setVisible!46 T', l[-1]) 222173d841eSBram Moolenaar let g:last += 3 223173d841eSBram Moolenaar 224173d841eSBram Moolenaar " Test for E646 (shown only when verbose > 0) 225173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E646_Test') 226173d841eSBram Moolenaar set verbose=1 227173d841eSBram Moolenaar call WaitForError('E646:') 228173d841eSBram Moolenaar set verbose& 22995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 23095650159SBram Moolenaar let l = ReadXnetbeans() 231173d841eSBram Moolenaar call assert_equal('send: 0:setModified!47 T', l[-1]) 232173d841eSBram Moolenaar let g:last += 3 233173d841eSBram Moolenaar 234173d841eSBram Moolenaar " Test for E647 235173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E647_Test') 236173d841eSBram Moolenaar call WaitForError('E647:') 23795650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 23895650159SBram Moolenaar let l = ReadXnetbeans() 239173d841eSBram Moolenaar call assert_equal('send: 0:setDot!48 1/1', l[-1]) 240173d841eSBram Moolenaar let g:last += 3 241173d841eSBram Moolenaar 242173d841eSBram Moolenaar " Test for E648 243173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E648_Test') 244173d841eSBram Moolenaar call WaitForError('E648:') 24595650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 24695650159SBram Moolenaar let l = ReadXnetbeans() 247173d841eSBram Moolenaar call assert_equal('send: 0:close!49', l[-1]) 248173d841eSBram Moolenaar let g:last += 3 249173d841eSBram Moolenaar 250173d841eSBram Moolenaar " Test for E650 251173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E650_Test') 252173d841eSBram Moolenaar call WaitForError('E650:') 25395650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 25495650159SBram Moolenaar let l = ReadXnetbeans() 255173d841eSBram Moolenaar call assert_equal('send: 0:defineAnnoType!50 1 "abc" "a" "a" 1 1', l[-1]) 256173d841eSBram Moolenaar let g:last += 3 257173d841eSBram Moolenaar 258173d841eSBram Moolenaar " Test for E651 259173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E651_Test') 260173d841eSBram Moolenaar call WaitForError('E651:') 26195650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 26295650159SBram Moolenaar let l = ReadXnetbeans() 263173d841eSBram Moolenaar call assert_equal('send: 0:addAnno!51 1 1 1 1', l[-1]) 264173d841eSBram Moolenaar let g:last += 3 265173d841eSBram Moolenaar 266173d841eSBram Moolenaar " Test for E652 267173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E652_Test') 268173d841eSBram Moolenaar call WaitForError('E652:') 26995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 27095650159SBram Moolenaar let l = ReadXnetbeans() 271173d841eSBram Moolenaar call assert_equal(['send: 0:getAnno/52 8', '52 0'], l[-2:]) 272173d841eSBram Moolenaar let g:last += 4 273173d841eSBram Moolenaar 274173d841eSBram Moolenaar " editFile test 275173d841eSBram Moolenaar call writefile(['foo bar1', 'foo bar2', 'foo bar3'], 'Xfile3') 276173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'editFile_Test') 27795650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 27895650159SBram Moolenaar let l = ReadXnetbeans() 279173d841eSBram Moolenaar call assert_equal('send: 2:editFile!53 "Xfile3"', l[-2]) 280173d841eSBram Moolenaar call assert_match('0:fileOpened=0 ".*/Xfile3" T F', l[-1]) 281173d841eSBram Moolenaar call assert_equal('Xfile3', bufname()) 282173d841eSBram Moolenaar let g:last += 4 283173d841eSBram Moolenaar 284173d841eSBram Moolenaar " getLength test 285173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'getLength_Test') 28695650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 28795650159SBram Moolenaar let l = ReadXnetbeans() 288173d841eSBram Moolenaar call assert_equal(['send: 2:getLength/54', '54 27'], l[-2:]) 289173d841eSBram Moolenaar let g:last += 4 290173d841eSBram Moolenaar 291173d841eSBram Moolenaar " getModified test 292173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'getModified_Test') 29395650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 29495650159SBram Moolenaar let l = ReadXnetbeans() 295173d841eSBram Moolenaar call assert_equal(['send: 2:getModified/55', '55 0'], l[-2:]) 296173d841eSBram Moolenaar let g:last += 4 297173d841eSBram Moolenaar 298173d841eSBram Moolenaar " getText test 299173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'getText_Test') 30095650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 30195650159SBram Moolenaar let l = ReadXnetbeans() 302173d841eSBram Moolenaar call assert_equal(['send: 2:getText/56', 303173d841eSBram Moolenaar \ '56 "foo bar1\nfoo bar2\nfoo bar3\n"'], l[-2:]) 304173d841eSBram Moolenaar let g:last += 4 305173d841eSBram Moolenaar 306dbfa795dSBram Moolenaar " setDot test with lnum/col 307dbfa795dSBram Moolenaar call cursor(1, 1) 308173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'setDot_Test') 30995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 31095650159SBram Moolenaar let l = ReadXnetbeans() 311173d841eSBram Moolenaar call assert_equal('send: 2:setDot!57 3/6', l[-1]) 3126fd3a4baSBram Moolenaar sleep 10m 313dbfa795dSBram Moolenaar call assert_equal([0, 3, 7, 0], getpos('.')) 314dbfa795dSBram Moolenaar let g:last += 3 315dbfa795dSBram Moolenaar 316dbfa795dSBram Moolenaar " setDot test with an offset 317dbfa795dSBram Moolenaar call cursor(1, 1) 318dbfa795dSBram Moolenaar call appendbufline(cmdbufnr, '$', 'setDot2_Test') 319dbfa795dSBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 320dbfa795dSBram Moolenaar let l = ReadXnetbeans() 321dbfa795dSBram Moolenaar call assert_equal('send: 2:setDot!57 9', l[-1]) 3226fd3a4baSBram Moolenaar sleep 10m 323dbfa795dSBram Moolenaar call assert_equal([0, 2, 1, 0], getpos('.')) 324173d841eSBram Moolenaar let g:last += 3 325173d841eSBram Moolenaar 326173d841eSBram Moolenaar " startDocumentListen test 327173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'startDocumentListen_Test') 32895650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 32995650159SBram Moolenaar let l = ReadXnetbeans() 330173d841eSBram Moolenaar call assert_equal('send: 2:startDocumentListen!58', l[-1]) 331173d841eSBram Moolenaar let g:last += 3 332173d841eSBram Moolenaar 333173d841eSBram Moolenaar " make some changes to the buffer and check whether the netbeans server 334173d841eSBram Moolenaar " received the notifications 335173d841eSBram Moolenaar call append(2, 'blue sky') 336173d841eSBram Moolenaar 1d 33795650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 33895650159SBram Moolenaar let l = ReadXnetbeans() 339173d841eSBram Moolenaar call assert_match('2:insert=\d\+ 18 "blue sky"', l[-3]) 340173d841eSBram Moolenaar call assert_match('2:insert=\d\+ 26 "\\n"', l[-2]) 341173d841eSBram Moolenaar call assert_match('2:remove=\d\+ 0 9', l[-1]) 342173d841eSBram Moolenaar let g:last += 3 343173d841eSBram Moolenaar 344dbfa795dSBram Moolenaar " Change case using the ~ command with 'whichwrap' containing '~' 345dbfa795dSBram Moolenaar set whichwrap+=~ 346dbfa795dSBram Moolenaar normal 2G$~ 347dbfa795dSBram Moolenaar set whichwrap& 348dbfa795dSBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 2)') 349dbfa795dSBram Moolenaar let l = ReadXnetbeans() 350dbfa795dSBram Moolenaar call assert_match('2:remove=\d\+ 16 1', l[-4]) 351dbfa795dSBram Moolenaar call assert_match('2:insert=\d\+ 16 "Y"', l[-3]) 352dbfa795dSBram Moolenaar call assert_match('2:remove=\d\+ 18 0', l[-2]) 353dbfa795dSBram Moolenaar call assert_match('2:insert=\d\+ 18 ""', l[-1]) 354dbfa795dSBram Moolenaar let g:last += 4 355dbfa795dSBram Moolenaar 356dbfa795dSBram Moolenaar " Test for replacing spaces with a tab character using 'softtabstop' and 357dbfa795dSBram Moolenaar " 'noexpandtab' 358dbfa795dSBram Moolenaar setlocal softtabstop=4 359dbfa795dSBram Moolenaar setlocal noexpandtab 360dbfa795dSBram Moolenaar exe "normal I\<Tab>\<Tab>" 361dbfa795dSBram Moolenaar setlocal expandtab& 362dbfa795dSBram Moolenaar setlocal softtabstop& 363dbfa795dSBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 18)') 364dbfa795dSBram Moolenaar let l = ReadXnetbeans() 365dbfa795dSBram Moolenaar call assert_match('2:insert=\d\+ 18 " foo bar3"', l[-3]) 366dbfa795dSBram Moolenaar call assert_match('2:remove=\d\+ 26 8', l[-2]) 367dbfa795dSBram Moolenaar call assert_match('2:insert=\d\+ 26 "\t"', l[-1]) 368dbfa795dSBram Moolenaar let g:last += 18 369dbfa795dSBram Moolenaar 370*2ac7184dSYegappan Lakshmanan " Test for changing case of multiple lines using ~ 371*2ac7184dSYegappan Lakshmanan normal ggVG~ 372*2ac7184dSYegappan Lakshmanan call WaitFor('len(ReadXnetbeans()) >= (g:last + 6)') 373*2ac7184dSYegappan Lakshmanan let l = ReadXnetbeans() 374*2ac7184dSYegappan Lakshmanan call assert_match('2:remove=\d\+ 0 8', l[-6]) 375*2ac7184dSYegappan Lakshmanan call assert_match('2:insert=\d\+ 0 "FOO BAR2"', l[-5]) 376*2ac7184dSYegappan Lakshmanan call assert_match('2:remove=\d\+ 9 8', l[-4]) 377*2ac7184dSYegappan Lakshmanan call assert_match('2:insert=\d\+ 9 "BLUE SKy"', l[-3]) 378*2ac7184dSYegappan Lakshmanan call assert_match('2:remove=\d\+ 18 9', l[-2]) 379*2ac7184dSYegappan Lakshmanan call assert_match('2:insert=\d\+ 18 "\tFOO BAR3"', l[-1]) 380*2ac7184dSYegappan Lakshmanan let g:last += 6 381*2ac7184dSYegappan Lakshmanan 382*2ac7184dSYegappan Lakshmanan " Test for changing case of a visual block using ~ 383*2ac7184dSYegappan Lakshmanan exe "normal ggw\<C-V>$~" 384*2ac7184dSYegappan Lakshmanan call WaitFor('len(ReadXnetbeans()) >= (g:last + 2)') 385*2ac7184dSYegappan Lakshmanan let l = ReadXnetbeans() 386*2ac7184dSYegappan Lakshmanan call assert_match('2:remove=\d\+ 4 4', l[-2]) 387*2ac7184dSYegappan Lakshmanan call assert_match('2:insert=\d\+ 4 "bar2"', l[-1]) 388*2ac7184dSYegappan Lakshmanan let g:last += 2 389*2ac7184dSYegappan Lakshmanan 390*2ac7184dSYegappan Lakshmanan " Increment a number using <C-A> in visual mode 391*2ac7184dSYegappan Lakshmanan exe "normal! gg$v6\<C-A>" 392*2ac7184dSYegappan Lakshmanan call WaitFor('len(ReadXnetbeans()) >= (g:last + 6)') 393*2ac7184dSYegappan Lakshmanan let l = ReadXnetbeans() 394*2ac7184dSYegappan Lakshmanan call assert_match('2:remove=\d\+ 0 9', l[-4]) 395*2ac7184dSYegappan Lakshmanan call assert_match('2:insert=\d\+ 0 "FOO bar8"', l[-3]) 396*2ac7184dSYegappan Lakshmanan call assert_match('2:remove=\d\+ 7 1', l[-2]) 397*2ac7184dSYegappan Lakshmanan call assert_match('2:insert=\d\+ 7 "8"', l[-1]) 398*2ac7184dSYegappan Lakshmanan let g:last += 6 399*2ac7184dSYegappan Lakshmanan 400*2ac7184dSYegappan Lakshmanan " Decrement a number using <C-X> in visual mode 401*2ac7184dSYegappan Lakshmanan exe "normal! gg$v3\<C-X>" 402*2ac7184dSYegappan Lakshmanan call WaitFor('len(ReadXnetbeans()) >= (g:last + 6)') 403*2ac7184dSYegappan Lakshmanan let l = ReadXnetbeans() 404*2ac7184dSYegappan Lakshmanan call assert_match('2:remove=\d\+ 0 9', l[-4]) 405*2ac7184dSYegappan Lakshmanan call assert_match('2:insert=\d\+ 0 "FOO bar5"', l[-3]) 406*2ac7184dSYegappan Lakshmanan call assert_match('2:remove=\d\+ 7 1', l[-2]) 407*2ac7184dSYegappan Lakshmanan call assert_match('2:insert=\d\+ 7 "5"', l[-1]) 408*2ac7184dSYegappan Lakshmanan let g:last += 6 409*2ac7184dSYegappan Lakshmanan 410173d841eSBram Moolenaar " stopDocumentListen test 411173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'stopDocumentListen_Test') 41295650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 41395650159SBram Moolenaar let l = ReadXnetbeans() 414173d841eSBram Moolenaar call assert_equal('send: 2:stopDocumentListen!59', l[-1]) 415173d841eSBram Moolenaar let g:last += 3 416173d841eSBram Moolenaar 417173d841eSBram Moolenaar " Wait for vim to process the previous netbeans message 418173d841eSBram Moolenaar sleep 1m 419173d841eSBram Moolenaar 420173d841eSBram Moolenaar " modify the buffer and make sure that the netbeans server is not notified 421173d841eSBram Moolenaar call append(2, 'clear sky') 422173d841eSBram Moolenaar 1d 423173d841eSBram Moolenaar 424173d841eSBram Moolenaar " defineAnnoType test 425173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'define_anno_Test') 42695650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 42795650159SBram Moolenaar let l = ReadXnetbeans() 428173d841eSBram Moolenaar call assert_equal('send: 2:defineAnnoType!60 1 "s1" "x" "=>" blue none', l[-1]) 429173d841eSBram Moolenaar sleep 1m 43037d1b4f9SBram Moolenaar call assert_equal({'name': '1', 'texthl': 'NB_s1', 'text': '=>'}, 43132e5ec0bSBram Moolenaar \ sign_getdefined()->get(0, {})) 432173d841eSBram Moolenaar let g:last += 3 433173d841eSBram Moolenaar 434173d841eSBram Moolenaar " defineAnnoType with a long color name 435173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'E532_Test') 436173d841eSBram Moolenaar call WaitForError('E532:') 43795650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 43895650159SBram Moolenaar let l = ReadXnetbeans() 439173d841eSBram Moolenaar call assert_equal('send: 2:defineAnnoType!61 1 "s1" "x" "=>" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa none', l[-1]) 440173d841eSBram Moolenaar let g:last += 3 441173d841eSBram Moolenaar 442173d841eSBram Moolenaar " addAnno test 443173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'add_anno_Test') 44495650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 44595650159SBram Moolenaar let l = ReadXnetbeans() 446173d841eSBram Moolenaar call assert_equal('send: 2:addAnno!62 1 1 2/1 0', l[-1]) 447173d841eSBram Moolenaar sleep 1m 448173d841eSBram Moolenaar call assert_equal([{'lnum': 2, 'id': 1, 'name': '1', 'priority': 10, 449173d841eSBram Moolenaar \ 'group': ''}], sign_getplaced()[0].signs) 450173d841eSBram Moolenaar let g:last += 3 451173d841eSBram Moolenaar 452173d841eSBram Moolenaar " getAnno test 453173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'get_anno_Test') 45495650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 45595650159SBram Moolenaar let l = ReadXnetbeans() 456173d841eSBram Moolenaar call assert_equal(['send: 2:getAnno/63 1', '63 2'], l[-2:]) 457173d841eSBram Moolenaar let g:last += 4 458173d841eSBram Moolenaar 459173d841eSBram Moolenaar " removeAnno test 460173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'remove_anno_Test') 46195650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 46295650159SBram Moolenaar let l = ReadXnetbeans() 463173d841eSBram Moolenaar call assert_equal('send: 2:removeAnno!64 1', l[-1]) 464173d841eSBram Moolenaar sleep 1m 465173d841eSBram Moolenaar call assert_equal([], sign_getplaced()) 466173d841eSBram Moolenaar let g:last += 3 467173d841eSBram Moolenaar 468173d841eSBram Moolenaar " getModified test to get the number of modified buffers 469173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'getModifiedAll_Test') 47095650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 47195650159SBram Moolenaar let l = ReadXnetbeans() 472173d841eSBram Moolenaar call assert_equal(['send: 0:getModified/65', '65 2'], l[-2:]) 473173d841eSBram Moolenaar let g:last += 4 474173d841eSBram Moolenaar 475173d841eSBram Moolenaar let bufcount = len(getbufinfo()) 476173d841eSBram Moolenaar 477173d841eSBram Moolenaar " create test to create a new buffer 478173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'create_Test') 47995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 48095650159SBram Moolenaar let l = ReadXnetbeans() 481173d841eSBram Moolenaar call assert_equal('send: 3:create!66', l[-1]) 482173d841eSBram Moolenaar " Wait for vim to process the previous netbeans message 483173d841eSBram Moolenaar sleep 10m 484173d841eSBram Moolenaar call assert_equal(bufcount + 1, len(getbufinfo())) 485173d841eSBram Moolenaar let g:last += 3 486173d841eSBram Moolenaar 487173d841eSBram Moolenaar " setTitle test 488173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'setTitle_Test') 48995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 49095650159SBram Moolenaar let l = ReadXnetbeans() 491173d841eSBram Moolenaar call assert_equal('send: 3:setTitle!67 "Xfile4"', l[-1]) 492173d841eSBram Moolenaar let g:last += 3 493173d841eSBram Moolenaar 494173d841eSBram Moolenaar " setFullName test 495173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'setFullName_Test') 49695650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 5)') 49795650159SBram Moolenaar let l = ReadXnetbeans() 498173d841eSBram Moolenaar call assert_equal('send: 3:setFullName!68 "Xfile4"', l[-3]) 499173d841eSBram Moolenaar call assert_match('0:fileOpened=0 ".*/Xfile4" T F', l[-1]) 500173d841eSBram Moolenaar call assert_equal('Xfile4', bufname()) 501173d841eSBram Moolenaar let g:last += 5 502173d841eSBram Moolenaar 503173d841eSBram Moolenaar " initDone test 504173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'initDone_Test') 50595650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 50695650159SBram Moolenaar let l = ReadXnetbeans() 507173d841eSBram Moolenaar call assert_equal('send: 3:initDone!69', l[-1]) 508173d841eSBram Moolenaar let g:last += 3 509173d841eSBram Moolenaar 510173d841eSBram Moolenaar " setVisible test 511173d841eSBram Moolenaar hide enew 512173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'setVisible_Test') 51395650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 51495650159SBram Moolenaar let l = ReadXnetbeans() 515173d841eSBram Moolenaar call assert_equal('send: 3:setVisible!70 T', l[-1]) 516173d841eSBram Moolenaar let g:last += 3 517173d841eSBram Moolenaar 518173d841eSBram Moolenaar " setModtime test 519173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'setModtime_Test') 52095650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 52195650159SBram Moolenaar let l = ReadXnetbeans() 522173d841eSBram Moolenaar call assert_equal('send: 3:setModtime!71 6', l[-1]) 523173d841eSBram Moolenaar let g:last += 3 524173d841eSBram Moolenaar 525173d841eSBram Moolenaar " insert test 526173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'insert_Test') 52795650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 52895650159SBram Moolenaar let l = ReadXnetbeans() 529173d841eSBram Moolenaar call assert_equal(['send: 3:insert/72 0 "line1\nline2\n"', '72'], l[-2:]) 530173d841eSBram Moolenaar call assert_equal(['line1', 'line2'], getline(1, '$')) 531173d841eSBram Moolenaar let g:last += 4 532173d841eSBram Moolenaar 533173d841eSBram Moolenaar " remove test 534173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'remove_Test') 53595650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 53695650159SBram Moolenaar let l = ReadXnetbeans() 537173d841eSBram Moolenaar call assert_equal(['send: 3:remove/73 3 4', '73'], l[-2:]) 538173d841eSBram Moolenaar call assert_equal(['linine2'], getline(1, '$')) 539173d841eSBram Moolenaar let g:last += 4 540173d841eSBram Moolenaar 541173d841eSBram Moolenaar " remove with invalid offset 542173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'remove_invalid_offset_Test') 54395650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 54495650159SBram Moolenaar let l = ReadXnetbeans() 545173d841eSBram Moolenaar call assert_equal(['send: 3:remove/74 900 4', '74 !bad position'], l[-2:]) 546173d841eSBram Moolenaar let g:last += 4 547173d841eSBram Moolenaar 548173d841eSBram Moolenaar " remove with invalid count 549173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'remove_invalid_count_Test') 55095650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 55195650159SBram Moolenaar let l = ReadXnetbeans() 552173d841eSBram Moolenaar call assert_equal(['send: 3:remove/75 1 800', '75 !bad count'], l[-2:]) 553173d841eSBram Moolenaar let g:last += 4 554173d841eSBram Moolenaar 555173d841eSBram Moolenaar " guard test 556173d841eSBram Moolenaar %d 557173d841eSBram Moolenaar call setline(1, ['foo bar', 'foo bar', 'foo bar']) 55895650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 8)') 559173d841eSBram Moolenaar let g:last += 8 560173d841eSBram Moolenaar 561173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'guard_Test') 56295650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 56395650159SBram Moolenaar let l = ReadXnetbeans() 564173d841eSBram Moolenaar call assert_equal('send: 3:guard!76 8 7', l[-1]) 565173d841eSBram Moolenaar sleep 1m 566173d841eSBram Moolenaar " second line is guarded. Try modifying the line 567173d841eSBram Moolenaar call assert_fails('normal 2GIbaz', 'E463:') 568173d841eSBram Moolenaar call assert_fails('normal 2GAbaz', 'E463:') 569173d841eSBram Moolenaar call assert_fails('normal dd', 'E463:') 570173d841eSBram Moolenaar call assert_equal([{'name': '1', 'texthl': 'NB_s1', 'text': '=>'}, 571173d841eSBram Moolenaar \ {'name': '10000', 'linehl': 'NBGuarded'}], 572173d841eSBram Moolenaar \ sign_getdefined()) 573dbfa795dSBram Moolenaar let s = sign_getplaced()[0].signs[0] 574dbfa795dSBram Moolenaar call assert_equal(2, s.lnum) 575dbfa795dSBram Moolenaar call assert_equal('10000', s.name) 576173d841eSBram Moolenaar let g:last += 3 577173d841eSBram Moolenaar 578173d841eSBram Moolenaar " setModified test 579173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'setModified_Test') 58095650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 58195650159SBram Moolenaar let l = ReadXnetbeans() 582173d841eSBram Moolenaar call assert_equal('send: 3:setModified!77 T', l[-1]) 583dbfa795dSBram Moolenaar sleep 1m 584173d841eSBram Moolenaar call assert_equal(1, &modified) 585173d841eSBram Moolenaar let g:last += 3 586173d841eSBram Moolenaar 587dbfa795dSBram Moolenaar " clear setModified test 588dbfa795dSBram Moolenaar call appendbufline(cmdbufnr, '$', 'setModifiedClear_Test') 589dbfa795dSBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 590dbfa795dSBram Moolenaar let l = ReadXnetbeans() 591dbfa795dSBram Moolenaar call assert_equal('send: 3:setModified!77 F', l[-1]) 592dbfa795dSBram Moolenaar sleep 1m 593dbfa795dSBram Moolenaar call assert_equal(0, &modified) 594dbfa795dSBram Moolenaar let g:last += 3 595dbfa795dSBram Moolenaar 596173d841eSBram Moolenaar " insertDone test 597173d841eSBram Moolenaar let v:statusmsg = '' 598173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'insertDone_Test') 59995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 60095650159SBram Moolenaar let l = ReadXnetbeans() 601173d841eSBram Moolenaar call assert_equal('send: 3:insertDone!78 T F', l[-1]) 602173d841eSBram Moolenaar sleep 1m 6033f40ce78SBram Moolenaar call assert_match('.*/Xfile4" 3L, 0B', v:statusmsg) 604173d841eSBram Moolenaar let g:last += 3 605173d841eSBram Moolenaar 606173d841eSBram Moolenaar " saveDone test 607173d841eSBram Moolenaar let v:statusmsg = '' 608173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'saveDone_Test') 60995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 61095650159SBram Moolenaar let l = ReadXnetbeans() 611173d841eSBram Moolenaar call assert_equal('send: 3:saveDone!79', l[-1]) 612173d841eSBram Moolenaar sleep 1m 6133f40ce78SBram Moolenaar call assert_match('.*/Xfile4" 3L, 0B', v:statusmsg) 614173d841eSBram Moolenaar let g:last += 3 615173d841eSBram Moolenaar 616173d841eSBram Moolenaar " unimplemented command test 617173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'invalidcmd_Test') 61895650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 61995650159SBram Moolenaar let l = ReadXnetbeans() 620173d841eSBram Moolenaar call assert_equal('send: 3:invalidcmd!80', l[-1]) 621173d841eSBram Moolenaar let g:last += 3 622173d841eSBram Moolenaar 623173d841eSBram Moolenaar " unimplemented function test 624173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'invalidfunc_Test') 62595650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 62695650159SBram Moolenaar let l = ReadXnetbeans() 627173d841eSBram Moolenaar call assert_equal(['send: 3:invalidfunc/81', '81'], l[-2:]) 628173d841eSBram Moolenaar let g:last += 4 629173d841eSBram Moolenaar 630173d841eSBram Moolenaar " Test for removeAnno cmd failure 631173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'removeAnno_fail_Test') 63295650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 63395650159SBram Moolenaar let l = ReadXnetbeans() 634173d841eSBram Moolenaar call assert_equal(['send: 0:removeAnno/82 1', '82'], l[-2:]) 635173d841eSBram Moolenaar let g:last += 4 636173d841eSBram Moolenaar 637173d841eSBram Moolenaar " Test for guard cmd failure 638173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'guard_fail_Test') 63995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 64095650159SBram Moolenaar let l = ReadXnetbeans() 641173d841eSBram Moolenaar call assert_equal(['send: 0:guard/83 1 1', '83'], l[-2:]) 642173d841eSBram Moolenaar let g:last += 4 643173d841eSBram Moolenaar 644173d841eSBram Moolenaar " Test for save cmd failure 645173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'save_fail_Test') 64695650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 64795650159SBram Moolenaar let l = ReadXnetbeans() 648173d841eSBram Moolenaar call assert_equal(['send: 0:save/84', '84'], l[-2:]) 649173d841eSBram Moolenaar let g:last += 4 650173d841eSBram Moolenaar 651173d841eSBram Moolenaar " Test for netbeansBuffer cmd failure 652173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'netbeansBuffer_fail_Test') 65395650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 65495650159SBram Moolenaar let l = ReadXnetbeans() 655173d841eSBram Moolenaar call assert_equal(['send: 0:netbeansBuffer/85 T', '85'], l[-2:]) 656173d841eSBram Moolenaar let g:last += 4 657173d841eSBram Moolenaar 658173d841eSBram Moolenaar " nbkey test 659173d841eSBram Moolenaar call cursor(3, 3) 660173d841eSBram Moolenaar nbkey "\<C-F2>" 66195650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 66295650159SBram Moolenaar let l = ReadXnetbeans() 663173d841eSBram Moolenaar call assert_equal(['3:newDotAndMark=85 18 18', 664173d841eSBram Moolenaar \ '3:keyCommand=85 ""\<C-F2>""', 665173d841eSBram Moolenaar \ '3:keyAtPos=85 ""\<C-F2>"" 18 3/2'], l[-3:]) 666173d841eSBram Moolenaar let g:last += 3 667173d841eSBram Moolenaar 668173d841eSBram Moolenaar " setExitDelay test 669173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'setExitDelay_Test') 67095650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 67195650159SBram Moolenaar let l = ReadXnetbeans() 672173d841eSBram Moolenaar call assert_equal('send: 0:setExitDelay!86 2', l[-1]) 673173d841eSBram Moolenaar let g:last += 3 674173d841eSBram Moolenaar 675173d841eSBram Moolenaar " setReadonly test 676173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'setReadOnly_Test') 67795650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 67895650159SBram Moolenaar let l = ReadXnetbeans() 679dbfa795dSBram Moolenaar call assert_equal('send: 3:setReadOnly!87 T', l[-1]) 680dbfa795dSBram Moolenaar sleep 1m 681dbfa795dSBram Moolenaar call assert_equal(1, &readonly) 682dbfa795dSBram Moolenaar let g:last += 3 683dbfa795dSBram Moolenaar 684dbfa795dSBram Moolenaar " clear setReadonly test 685dbfa795dSBram Moolenaar call appendbufline(cmdbufnr, '$', 'setReadOnlyClear_Test') 686dbfa795dSBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 687dbfa795dSBram Moolenaar let l = ReadXnetbeans() 688dbfa795dSBram Moolenaar call assert_equal('send: 3:setReadOnly!88 F', l[-1]) 689dbfa795dSBram Moolenaar sleep 1m 690dbfa795dSBram Moolenaar call assert_equal(0, &readonly) 691dbfa795dSBram Moolenaar let g:last += 3 692dbfa795dSBram Moolenaar 693dbfa795dSBram Moolenaar " save test 694dbfa795dSBram Moolenaar call setbufvar(bufnr('Xfile4'), '&modified', 1) 695dbfa795dSBram Moolenaar call appendbufline(cmdbufnr, '$', 'save_Test') 696dbfa795dSBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 697dbfa795dSBram Moolenaar let l = ReadXnetbeans() 698dbfa795dSBram Moolenaar call assert_equal('send: 3:save!89', l[-1]) 699dbfa795dSBram Moolenaar sleep 1m 700dbfa795dSBram Moolenaar call assert_true(filereadable('Xfile4')) 701173d841eSBram Moolenaar let g:last += 3 702173d841eSBram Moolenaar 703173d841eSBram Moolenaar " close test. Don't use buffer 10 after this 704173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'close_Test') 70595650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)') 70695650159SBram Moolenaar let l = ReadXnetbeans() 707dbfa795dSBram Moolenaar call assert_equal('send: 3:close!90', l[-2]) 708dbfa795dSBram Moolenaar call assert_equal('3:killed=90', l[-1]) 709173d841eSBram Moolenaar call assert_equal(1, winnr('$')) 710173d841eSBram Moolenaar let g:last += 4 711173d841eSBram Moolenaar 712173d841eSBram Moolenaar " specialKeys test 713173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'specialKeys_Test') 71495650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 71595650159SBram Moolenaar let l = ReadXnetbeans() 716dbfa795dSBram Moolenaar call assert_equal('send: 0:specialKeys!91 "F12 F13 C-F13"', l[-1]) 717173d841eSBram Moolenaar sleep 1m 718173d841eSBram Moolenaar call assert_equal(':nbkey F12<CR>', maparg('<F12>', 'n')) 719173d841eSBram Moolenaar call assert_equal(':nbkey F13<CR>', maparg('<F13>', 'n')) 720dbfa795dSBram Moolenaar call assert_equal(':nbkey C-F13<CR>', maparg('<C-F13>', 'n')) 721173d841eSBram Moolenaar let g:last += 3 722173d841eSBram Moolenaar 723173d841eSBram Moolenaar " Open a buffer not monitored by netbeans 724173d841eSBram Moolenaar enew | only! 725173d841eSBram Moolenaar nbkey "\<C-F3>" 72695650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 1)') 72795650159SBram Moolenaar let l = ReadXnetbeans() 728173d841eSBram Moolenaar call assert_equal('0:fileOpened=0 "" T F', l[-1]) 729173d841eSBram Moolenaar let g:last += 1 730173d841eSBram Moolenaar 731494e9069SBram Moolenaar " Test for writing a netbeans buffer 732494e9069SBram Moolenaar call appendbufline(cmdbufnr, '$', 'nbbufwrite_Test') 73395650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 5)') 734494e9069SBram Moolenaar call assert_fails('write', 'E656:') 735494e9069SBram Moolenaar call setline(1, ['one', 'two']) 736494e9069SBram Moolenaar call assert_fails('1write!', 'E657:') 737494e9069SBram Moolenaar write 73895650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 10)') 739494e9069SBram Moolenaar let g:last += 10 740494e9069SBram Moolenaar 741dbfa795dSBram Moolenaar if has('mouse') 742dbfa795dSBram Moolenaar " Test for mouse button release 743dbfa795dSBram Moolenaar let save_mouse = &mouse 744dbfa795dSBram Moolenaar set mouse=a 745dbfa795dSBram Moolenaar call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt') 746dbfa795dSBram Moolenaar let &mouse = save_mouse 747dbfa795dSBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 2)') 748dbfa795dSBram Moolenaar let l = ReadXnetbeans() 749dbfa795dSBram Moolenaar call assert_equal('4:newDotAndMark=93 0 0', l[-2]) 750dbfa795dSBram Moolenaar call assert_equal('4:buttonRelease=93 0 1 -1', l[-1]) 751dbfa795dSBram Moolenaar let g:last += 2 752dbfa795dSBram Moolenaar endif 753dbfa795dSBram Moolenaar 754dbfa795dSBram Moolenaar " Test for startAtomic 755dbfa795dSBram Moolenaar call appendbufline(cmdbufnr, '$', 'startAtomic_Test') 756dbfa795dSBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 757dbfa795dSBram Moolenaar let l = ReadXnetbeans() 758dbfa795dSBram Moolenaar call assert_equal('send: 0:startAtomic!94', l[-1]) 759dbfa795dSBram Moolenaar let g:last += 3 760dbfa795dSBram Moolenaar 761dbfa795dSBram Moolenaar " Test for endAtomic 762dbfa795dSBram Moolenaar call appendbufline(cmdbufnr, '$', 'endAtomic_Test') 763dbfa795dSBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 764dbfa795dSBram Moolenaar let l = ReadXnetbeans() 765dbfa795dSBram Moolenaar call assert_equal('send: 0:endAtomic!95', l[-1]) 766dbfa795dSBram Moolenaar let g:last += 3 767dbfa795dSBram Moolenaar 768dbfa795dSBram Moolenaar " Test for invoking a netbeans key binding 769dbfa795dSBram Moolenaar let special_keys = [ 770dbfa795dSBram Moolenaar \ ["\<F1>", 'F1'], ["\<S-F1>", 'S-F1'], 771dbfa795dSBram Moolenaar \ ["\<F2>", 'F2'], ["\<S-F2>", 'S-F2'], 772dbfa795dSBram Moolenaar \ ["\<F3>", 'F3'], ["\<S-F3>", 'S-F3'], 773dbfa795dSBram Moolenaar \ ["\<F4>", 'F4'], ["\<S-F4>", 'S-F4'], 774dbfa795dSBram Moolenaar \ ["\<F5>", 'F5'], ["\<S-F5>", 'S-F5'], 775dbfa795dSBram Moolenaar \ ["\<F6>", 'F6'], ["\<S-F6>", 'S-F6'], 776dbfa795dSBram Moolenaar \ ["\<F7>", 'F7'], ["\<S-F7>", 'S-F7'], 777dbfa795dSBram Moolenaar \ ["\<F8>", 'F8'], ["\<S-F8>", 'S-F8'], 778dbfa795dSBram Moolenaar \ ["\<F9>", 'F9'], ["\<S-F9>", 'S-F9'], 779dbfa795dSBram Moolenaar \ ["\<F11>", 'F11'], ["\<S-F11>", 'S-F11'], 780dbfa795dSBram Moolenaar \ ["\<F12>", 'F12'], ["\<S-F12>", 'S-F12'], ['!', '!'] 781dbfa795dSBram Moolenaar \ ] 782dbfa795dSBram Moolenaar for [key, name] in special_keys 783dbfa795dSBram Moolenaar call feedkeys("\<F21>" .. key, 'xt') 784dbfa795dSBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 785dbfa795dSBram Moolenaar let l = ReadXnetbeans() 786dbfa795dSBram Moolenaar call assert_match('4:keyCommand=\d\+ "' .. name .. '"', l[-2]) 787dbfa795dSBram Moolenaar call assert_match('4:keyAtPos=\d\+ "' .. name .. '" 0 1/0', l[-1]) 788dbfa795dSBram Moolenaar let g:last += 3 789dbfa795dSBram Moolenaar endfor 790dbfa795dSBram Moolenaar call feedkeys("\<F21>\<C-S-M-F9>", 'xt') 791dbfa795dSBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)') 792dbfa795dSBram Moolenaar let l = ReadXnetbeans() 793dbfa795dSBram Moolenaar call assert_match('4:keyCommand=\d\+ "CSM-F9"', l[-2]) 794dbfa795dSBram Moolenaar call assert_match('4:keyAtPos=\d\+ "CSM-F9" 0 1/0', l[-1]) 795dbfa795dSBram Moolenaar let g:last += 3 796dbfa795dSBram Moolenaar 797dbfa795dSBram Moolenaar if has('signs') && has('mouse') 798dbfa795dSBram Moolenaar sign define S1 linehl=Search text==> 799dbfa795dSBram Moolenaar sign define S2 linehl=ErrorMsg text=!! 800dbfa795dSBram Moolenaar sign place 10 line=1 name=S1 801dbfa795dSBram Moolenaar sign place 20 line=1 name=S2 802dbfa795dSBram Moolenaar 803dbfa795dSBram Moolenaar let save_mouse = &mouse 804dbfa795dSBram Moolenaar set mouse=a 805dbfa795dSBram Moolenaar call assert_equal('S2', sign_getplaced()[0].signs[0].name) 806dbfa795dSBram Moolenaar call test_setmouse(1, 1) 807dbfa795dSBram Moolenaar call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt') 808dbfa795dSBram Moolenaar call assert_equal('S1', sign_getplaced()[0].signs[0].name) 809dbfa795dSBram Moolenaar call test_setmouse(1, 1) 810dbfa795dSBram Moolenaar call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt') 811dbfa795dSBram Moolenaar call assert_equal('S2', sign_getplaced()[0].signs[0].name) 812dbfa795dSBram Moolenaar let &mouse = save_mouse 813dbfa795dSBram Moolenaar 814dbfa795dSBram Moolenaar sign unplace 10 815dbfa795dSBram Moolenaar sign unplace 20 816dbfa795dSBram Moolenaar sign undefine S1 817dbfa795dSBram Moolenaar sign undefine S2 818dbfa795dSBram Moolenaar endif 819dbfa795dSBram Moolenaar 820dbfa795dSBram Moolenaar " define a large number of annotations 821dbfa795dSBram Moolenaar call appendbufline(cmdbufnr, '$', 'AnnoScale_Test') 822dbfa795dSBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 26)') 823dbfa795dSBram Moolenaar let l = ReadXnetbeans() 824dbfa795dSBram Moolenaar call assert_equal('2:defineAnnoType!60 25 "s25" "x" "=>" blue none', l[-1]) 825dbfa795dSBram Moolenaar sleep 1m 826dbfa795dSBram Moolenaar call assert_true(len(sign_getdefined()) >= 25) 827dbfa795dSBram Moolenaar let g:last += 26 828dbfa795dSBram Moolenaar 829173d841eSBram Moolenaar " detach 830173d841eSBram Moolenaar call appendbufline(cmdbufnr, '$', 'detach_Test') 83195650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= (g:last + 8)') 832dbfa795dSBram Moolenaar call WaitForAssert({-> assert_equal('0:disconnect=97', ReadXnetbeans()[-1])}) 833173d841eSBram Moolenaar 83437d1b4f9SBram Moolenaar " the connection was closed 8358ddef48dSBram Moolenaar call assert_false(has("netbeans_enabled")) 836321efdd7SBram Moolenaar 837dbfa795dSBram Moolenaar " Remove all the signs 838dbfa795dSBram Moolenaar call sign_unplace('*') 839dbfa795dSBram Moolenaar call sign_undefine() 840dbfa795dSBram Moolenaar 841321efdd7SBram Moolenaar call delete("Xnetbeans") 842173d841eSBram Moolenaar call delete('Xfile1') 843173d841eSBram Moolenaar call delete('Xfile3') 844dbfa795dSBram Moolenaar call delete('Xfile4') 845321efdd7SBram Moolenaarendfunc 846321efdd7SBram Moolenaar 847321efdd7SBram Moolenaarfunc Test_nb_basic() 848321efdd7SBram Moolenaar call ch_log('Test_nb_basic') 849321efdd7SBram Moolenaar call s:run_server('Nb_basic') 850321efdd7SBram Moolenaarendfunc 851603d6572SBram Moolenaar 852603d6572SBram Moolenaarfunc Nb_file_auth(port) 853c20e0d52SBram Moolenaar call delete("Xnetbeans") 854c20e0d52SBram Moolenaar call writefile([], "Xnetbeans") 855c20e0d52SBram Moolenaar 856603d6572SBram Moolenaar call assert_fails('nbstart =notexist', 'E660:') 857603d6572SBram Moolenaar call writefile(['host=localhost', 'port=' . a:port, 'auth=bunny'], 'Xnbauth') 85853bdec2aSBram Moolenaar if has('unix') 859603d6572SBram Moolenaar call setfperm('Xnbauth', "rw-r--r--") 860603d6572SBram Moolenaar call assert_fails('nbstart =Xnbauth', 'E668:') 86153bdec2aSBram Moolenaar endif 862603d6572SBram Moolenaar call setfperm('Xnbauth', "rw-------") 863ffdf08c9SBram Moolenaar exe 'nbstart =Xnbauth' 864603d6572SBram Moolenaar call assert_true(has("netbeans_enabled")) 865603d6572SBram Moolenaar 86695650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) > 2') 867603d6572SBram Moolenaar nbclose 86895650159SBram Moolenaar let lines = ReadXnetbeans() 869603d6572SBram Moolenaar call assert_equal('AUTH bunny', lines[0]) 870603d6572SBram Moolenaar call assert_equal('0:version=0 "2.5"', lines[1]) 871603d6572SBram Moolenaar call assert_equal('0:startupDone=0', lines[2]) 872603d6572SBram Moolenaar 873603d6572SBram Moolenaar call delete("Xnbauth") 874603d6572SBram Moolenaar call delete("Xnetbeans") 875603d6572SBram Moolenaarendfunc 876603d6572SBram Moolenaar 877603d6572SBram Moolenaarfunc Test_nb_file_auth() 878603d6572SBram Moolenaar call ch_log('Test_nb_file_auth') 879603d6572SBram Moolenaar call s:run_server('Nb_file_auth') 880603d6572SBram Moolenaarendfunc 881173d841eSBram Moolenaar 8828e7d6223SBram Moolenaar" Test for quitting Vim with an open netbeans connection 883173d841eSBram Moolenaarfunc Nb_quit_with_conn(port) 884173d841eSBram Moolenaar call delete("Xnetbeans") 885173d841eSBram Moolenaar call writefile([], "Xnetbeans") 886173d841eSBram Moolenaar let after =<< trim END 887173d841eSBram Moolenaar source shared.vim 88822286895SBram Moolenaar set cpo&vim 889173d841eSBram Moolenaar 89095650159SBram Moolenaar func ReadXnetbeans() 89195650159SBram Moolenaar let l = readfile("Xnetbeans") 89295650159SBram Moolenaar return filter(l, 'v:val !~ "^0:geometry="') 89395650159SBram Moolenaar endfunc 89495650159SBram Moolenaar 895173d841eSBram Moolenaar " Establish the connection with the netbeans server 896173d841eSBram Moolenaar exe 'nbstart :localhost:' .. g:port .. ':star' 897173d841eSBram Moolenaar call assert_true(has("netbeans_enabled")) 89895650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= 3') 89995650159SBram Moolenaar let l = ReadXnetbeans() 900173d841eSBram Moolenaar call assert_equal(['AUTH star', 901173d841eSBram Moolenaar \ '0:version=0 "2.5"', 902173d841eSBram Moolenaar \ '0:startupDone=0'], l[-3:]) 903173d841eSBram Moolenaar 904173d841eSBram Moolenaar " Open the command buffer to communicate with the server 905173d841eSBram Moolenaar split Xcmdbuf 90695650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= 6') 90795650159SBram Moolenaar let l = ReadXnetbeans() 908173d841eSBram Moolenaar call assert_equal('0:fileOpened=0 "Xcmdbuf" T F', 909173d841eSBram Moolenaar \ substitute(l[-3], '".*/', '"', '')) 910173d841eSBram Moolenaar call assert_equal('send: 1:putBufferNumber!15 "Xcmdbuf"', 911173d841eSBram Moolenaar \ substitute(l[-2], '".*/', '"', '')) 912173d841eSBram Moolenaar call assert_equal('1:startDocumentListen!16', l[-1]) 913173d841eSBram Moolenaar sleep 1m 914173d841eSBram Moolenaar 915173d841eSBram Moolenaar quit! 916173d841eSBram Moolenaar quit! 917173d841eSBram Moolenaar END 918173d841eSBram Moolenaar if RunVim(['let g:port = ' .. a:port], after, '') 91995650159SBram Moolenaar call WaitFor('len(ReadXnetbeans()) >= 9') 92095650159SBram Moolenaar let l = ReadXnetbeans() 921173d841eSBram Moolenaar call assert_equal('1:unmodified=16', l[-3]) 922173d841eSBram Moolenaar call assert_equal('1:killed=16', l[-2]) 923173d841eSBram Moolenaar call assert_equal('0:disconnect=16', l[-1]) 924173d841eSBram Moolenaar endif 925173d841eSBram Moolenaar call delete('Xnetbeans') 926173d841eSBram Moolenaarendfunc 927173d841eSBram Moolenaar 928173d841eSBram Moolenaarfunc Test_nb_quit_with_conn() 929173d841eSBram Moolenaar " Exiting Vim with a netbeans connection doesn't work properly on 930173d841eSBram Moolenaar " MS-Windows. 931173d841eSBram Moolenaar CheckUnix 932173d841eSBram Moolenaar call s:run_server('Nb_quit_with_conn') 933173d841eSBram Moolenaarendfunc 934173d841eSBram Moolenaar 93532e5ec0bSBram Moolenaarfunc Nb_bwipe_buffer(port) 93632e5ec0bSBram Moolenaar call delete("Xnetbeans") 93732e5ec0bSBram Moolenaar call writefile([], "Xnetbeans") 93832e5ec0bSBram Moolenaar 93932e5ec0bSBram Moolenaar " Last line number in the Xnetbeans file. Used to verify the result of the 94032e5ec0bSBram Moolenaar " communication with the netbeans server 94132e5ec0bSBram Moolenaar let g:last = 0 94232e5ec0bSBram Moolenaar 94332e5ec0bSBram Moolenaar " Establish the connection with the netbeans server 94432e5ec0bSBram Moolenaar exe 'nbstart :localhost:' .. a:port .. ':bunny' 94532e5ec0bSBram Moolenaar call WaitFor('len(ReadXnetbeans()) > (g:last + 2)') 94632e5ec0bSBram Moolenaar let l = ReadXnetbeans() 94732e5ec0bSBram Moolenaar call assert_equal(['AUTH bunny', 94832e5ec0bSBram Moolenaar \ '0:version=0 "2.5"', 94932e5ec0bSBram Moolenaar \ '0:startupDone=0'], l[-3:]) 95032e5ec0bSBram Moolenaar let g:last += 3 95132e5ec0bSBram Moolenaar 95232e5ec0bSBram Moolenaar " Open the command buffer to communicate with the server 95332e5ec0bSBram Moolenaar split Xcmdbuf 95432e5ec0bSBram Moolenaar call WaitFor('len(ReadXnetbeans()) > (g:last + 2)') 95532e5ec0bSBram Moolenaar let l = ReadXnetbeans() 95632e5ec0bSBram Moolenaar call assert_equal('0:fileOpened=0 "Xcmdbuf" T F', 95732e5ec0bSBram Moolenaar \ substitute(l[-3], '".*/', '"', '')) 95832e5ec0bSBram Moolenaar call assert_equal('send: 1:putBufferNumber!15 "Xcmdbuf"', 95932e5ec0bSBram Moolenaar \ substitute(l[-2], '".*/', '"', '')) 96032e5ec0bSBram Moolenaar call assert_equal('1:startDocumentListen!16', l[-1]) 96132e5ec0bSBram Moolenaar let g:last += 3 96232e5ec0bSBram Moolenaar 96332e5ec0bSBram Moolenaar sleep 10m 96432e5ec0bSBram Moolenaarendfunc 96532e5ec0bSBram Moolenaar 96632e5ec0bSBram Moolenaar" This test used to reference a buffer after it was freed leading to an ASAN 96732e5ec0bSBram Moolenaar" error. 96832e5ec0bSBram Moolenaarfunc Test_nb_bwipe_buffer() 96932e5ec0bSBram Moolenaar call s:run_server('Nb_bwipe_buffer') 97050dc3eccSBram Moolenaar silent! %bwipe! 97132e5ec0bSBram Moolenaar sleep 100m 97232e5ec0bSBram Moolenaar nbclose 97332e5ec0bSBram Moolenaarendfunc 97432e5ec0bSBram Moolenaar 975173d841eSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 976