Skip to content

Commit dbfa795

Browse files
committed
patch 8.2.1942: insufficient test coverage for the Netbeans interface
Problem: Insufficient test coverage for the Netbeans interface. Solution: Add more tests. Fix an uncovered bug. (Yegappan Lakshmanan, closes #7240)
1 parent 399db04 commit dbfa795

6 files changed

Lines changed: 199 additions & 18 deletions

File tree

runtime/doc/netbeans.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -562,9 +562,10 @@ setModtime time
562562
saved directly by the Vim Controller.
563563
New in version 2.3.
564564

565-
setReadOnly
566-
Set a file as readonly
567-
Implemented in version 2.3.
565+
setReadOnly readonly
566+
When the boolean argument "readonly" is "T" for True, mark the
567+
buffer as readonly, when it is "F" for False, mark it as not
568+
readonly. Implemented in version 2.3.
568569

569570
setStyle Not implemented.
570571

src/mouse.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2929,10 +2929,12 @@ mouse_comp_pos(
29292929

29302930
// skip line number and fold column in front of the line
29312931
col -= win_col_off(win);
2932-
if (col < 0)
2932+
if (col <= 0)
29332933
{
29342934
#ifdef FEAT_NETBEANS_INTG
2935-
netbeans_gutter_click(lnum);
2935+
// if mouse is clicked on the gutter, then inform the netbeans server
2936+
if (*colp < win_col_off(win))
2937+
netbeans_gutter_click(lnum);
29362938
#endif
29372939
col = 0;
29382940
}

src/testdir/test_netbeans.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ def process_msgs(self, msgbuf):
4141
elif re.match('1:insert=.* "\\\\n"', line):
4242
# extract the command from the previous line
4343
cmd = re.search('.*"(.*)"', self.prev_line).group(1)
44+
45+
# map of test names and the netbeans commands/functions
4446
testmap = {
4547
'getCursor_Test' : '0:getCursor/30\n',
4648
'E627_Test' : '0 setReadOnly!31\n',
@@ -70,6 +72,7 @@ def process_msgs(self, msgbuf):
7072
'getModified_Test' : '2:getModified/55\n',
7173
'getText_Test' : '2:getText/56\n',
7274
'setDot_Test' : '2:setDot!57 3/6\n',
75+
'setDot2_Test' : '2:setDot!57 9\n',
7376
'startDocumentListen_Test' : '2:startDocumentListen!58\n',
7477
'stopDocumentListen_Test' : '2:stopDocumentListen!59\n',
7578
'define_anno_Test' : '2:defineAnnoType!60 1 "s1" "x" "=>" blue none\n',
@@ -90,6 +93,7 @@ def process_msgs(self, msgbuf):
9093
'remove_invalid_count_Test' : '3:remove/75 1 800\n',
9194
'guard_Test' : '3:guard!76 8 7\n',
9295
'setModified_Test' : '3:setModified!77 T\n',
96+
'setModifiedClear_Test' : '3:setModified!77 F\n',
9397
'insertDone_Test' : '3:insertDone!78 T F\n',
9498
'saveDone_Test' : '3:saveDone!79\n',
9599
'invalidcmd_Test' : '3:invalidcmd!80\n',
@@ -99,11 +103,16 @@ def process_msgs(self, msgbuf):
99103
'save_fail_Test' : '0:save/84\n',
100104
'netbeansBuffer_fail_Test' : '0:netbeansBuffer/85 T\n',
101105
'setExitDelay_Test' : '0:setExitDelay!86 2\n',
102-
'setReadOnly_Test' : '3:setReadOnly!87\n',
103-
'close_Test' : '3:close!88\n',
104-
'specialKeys_Test' : '0:specialKeys!89 "F12 F13"\n',
105-
'nbbufwrite_Test' : '4:editFile!90 "XnbBuffer"\n4:netbeansBuffer!91 T\n',
106-
'detach_Test' : '2:close!92\n1:close!93\nDETACH\n'
106+
'setReadOnly_Test' : '3:setReadOnly!87 T\n',
107+
'setReadOnlyClear_Test' : '3:setReadOnly!88 F\n',
108+
'save_Test' : '3:save!89\n',
109+
'close_Test' : '3:close!90\n',
110+
'specialKeys_Test' : '0:specialKeys!91 "F12 F13 C-F13"\n',
111+
'nbbufwrite_Test' : '4:editFile!92 "XnbBuffer"\n4:netbeansBuffer!93 T\n',
112+
'startAtomic_Test' : '0:startAtomic!94\n',
113+
'endAtomic_Test' : '0:endAtomic!95\n',
114+
'AnnoScale_Test' : "".join(['2:defineAnnoType!60 ' + str(i) + ' "s' + str(i) + '" "x" "=>" blue none\n' for i in range(2, 26)]),
115+
'detach_Test' : '2:close!96\n1:close!97\nDETACH\n'
107116
}
108117
# execute the specified test
109118
if cmd not in testmap:

src/testdir/test_netbeans.vim

Lines changed: 171 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -303,11 +303,22 @@ func Nb_basic(port)
303303
\ '56 "foo bar1\nfoo bar2\nfoo bar3\n"'], l[-2:])
304304
let g:last += 4
305305

306-
" setDot test
306+
" setDot test with lnum/col
307+
call cursor(1, 1)
307308
call appendbufline(cmdbufnr, '$', 'setDot_Test')
308309
call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
309310
let l = ReadXnetbeans()
310311
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('.'))
311322
let g:last += 3
312323

313324
" startDocumentListen test
@@ -328,6 +339,32 @@ func Nb_basic(port)
328339
call assert_match('2:remove=\d\+ 0 9', l[-1])
329340
let g:last += 3
330341

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+
331368
" stopDocumentListen test
332369
call appendbufline(cmdbufnr, '$', 'stopDocumentListen_Test')
333370
call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
@@ -491,18 +528,29 @@ func Nb_basic(port)
491528
call assert_equal([{'name': '1', 'texthl': 'NB_s1', 'text': '=>'},
492529
\ {'name': '10000', 'linehl': 'NBGuarded'}],
493530
\ sign_getdefined())
494-
call assert_equal([{'lnum': 2, 'id': 1000000, 'name': '10000',
495-
\ 'priority': 10, 'group': ''}], sign_getplaced()[0].signs)
531+
let s = sign_getplaced()[0].signs[0]
532+
call assert_equal(2, s.lnum)
533+
call assert_equal('10000', s.name)
496534
let g:last += 3
497535

498536
" setModified test
499537
call appendbufline(cmdbufnr, '$', 'setModified_Test')
500538
call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
501539
let l = ReadXnetbeans()
502540
call assert_equal('send: 3:setModified!77 T', l[-1])
541+
sleep 1m
503542
call assert_equal(1, &modified)
504543
let g:last += 3
505544

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+
506554
" insertDone test
507555
let v:statusmsg = ''
508556
call appendbufline(cmdbufnr, '$', 'insertDone_Test')
@@ -586,26 +634,48 @@ func Nb_basic(port)
586634
call appendbufline(cmdbufnr, '$', 'setReadOnly_Test')
587635
call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
588636
let l = ReadXnetbeans()
589-
call assert_equal('send: 3:setReadOnly!87', l[-1])
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'))
590659
let g:last += 3
591660

592661
" close test. Don't use buffer 10 after this
593662
call appendbufline(cmdbufnr, '$', 'close_Test')
594663
call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
595664
let l = ReadXnetbeans()
596-
call assert_equal('send: 3:close!88', l[-2])
597-
call assert_equal('3:killed=88', l[-1])
665+
call assert_equal('send: 3:close!90', l[-2])
666+
call assert_equal('3:killed=90', l[-1])
598667
call assert_equal(1, winnr('$'))
599668
let g:last += 4
600669

601670
" specialKeys test
602671
call appendbufline(cmdbufnr, '$', 'specialKeys_Test')
603672
call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
604673
let l = ReadXnetbeans()
605-
call assert_equal('send: 0:specialKeys!89 "F12 F13"', l[-1])
674+
call assert_equal('send: 0:specialKeys!91 "F12 F13 C-F13"', l[-1])
606675
sleep 1m
607676
call assert_equal(':nbkey F12<CR>', maparg('<F12>', 'n'))
608677
call assert_equal(':nbkey F13<CR>', maparg('<F13>', 'n'))
678+
call assert_equal(':nbkey C-F13<CR>', maparg('<C-F13>', 'n'))
609679
let g:last += 3
610680

611681
" Open a buffer not monitored by netbeans
@@ -626,17 +696,110 @@ func Nb_basic(port)
626696
call WaitFor('len(ReadXnetbeans()) >= (g:last + 10)')
627697
let g:last += 10
628698

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+
629787
" detach
630788
call appendbufline(cmdbufnr, '$', 'detach_Test')
631789
call WaitFor('len(ReadXnetbeans()) >= (g:last + 8)')
632-
call WaitForAssert({-> assert_equal('0:disconnect=93', ReadXnetbeans()[-1])})
790+
call WaitForAssert({-> assert_equal('0:disconnect=97', ReadXnetbeans()[-1])})
633791

634792
" the connection was closed
635793
call assert_false(has("netbeans_enabled"))
636794

795+
" Remove all the signs
796+
call sign_unplace('*')
797+
call sign_undefine()
798+
637799
call delete("Xnetbeans")
638800
call delete('Xfile1')
639801
call delete('Xfile3')
802+
call delete('Xfile4')
640803
endfunc
641804

642805
func Test_nb_basic()

src/testdir/test_quickfix.vim

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3949,6 +3949,10 @@ func Test_lhelpgrep_autocmd()
39493949
au BufEnter * call setqflist([], 'f')
39503950
augroup END
39513951
call assert_fails('helpgrep quickfix', 'E925:')
3952+
" run the test with a help window already open
3953+
help
3954+
wincmd w
3955+
call assert_fails('helpgrep quickfix', 'E925:')
39523956
augroup QF_Test
39533957
au! BufEnter
39543958
augroup END

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,8 @@ static char *(features[]) =
750750

751751
static int included_patches[] =
752752
{ /* Add new patch number below this line */
753+
/**/
754+
1942,
753755
/**/
754756
1941,
755757
/**/

0 commit comments

Comments
 (0)