Patch 8.2.1942
Problem:    Insufficient test coverage for the Netbeans interface.
Solution:   Add more tests. Fix an uncovered bug. (Yegappan Lakshmanan,
            closes #7240)
Files:      runtime/doc/netbeans.txt, src/mouse.c,
            src/testdir/test_netbeans.py, src/testdir/test_netbeans.vim,
            src/testdir/test_quickfix.vim


*** ../vim-8.2.1941/runtime/doc/netbeans.txt    2020-04-19 14:02:22.423687037 
+0200
--- runtime/doc/netbeans.txt    2020-11-02 20:02:11.424064518 +0100
***************
*** 362,373 ****
  offset                A number argument that indicates a byte position in a 
buffer.
                The first byte has offset zero.  Line breaks are counted for
                how they appear in the file (CR/LF counts for two bytes).
!               Note that a multi-byte character is counted for the number of
                bytes it takes.
  
  lnum/col      Argument with a line number and column number position.  The
                line number starts with one, the column is the byte position,
!               starting with zero.  Note that a multi-byte character counts
                for several columns.
  
  pathname      String argument: file name with full path.
--- 362,373 ----
  offset                A number argument that indicates a byte position in a 
buffer.
                The first byte has offset zero.  Line breaks are counted for
                how they appear in the file (CR/LF counts for two bytes).
!               Note that a multibyte character is counted for the number of
                bytes it takes.
  
  lnum/col      Argument with a line number and column number position.  The
                line number starts with one, the column is the byte position,
!               starting with zero.  Note that a multibyte character counts
                for several columns.
  
  pathname      String argument: file name with full path.
***************
*** 562,570 ****
                saved directly by the Vim Controller.
                New in version 2.3.
  
! setReadOnly
!               Set a file as readonly
!               Implemented in version 2.3.
  
  setStyle      Not implemented.
  
--- 562,571 ----
                saved directly by the Vim Controller.
                New in version 2.3.
  
! setReadOnly readonly
!               When the boolean argument "readonly" is "T" for True, mark the
!               buffer as readonly, when it is "F" for False, mark it as not
!               readonly.  Implemented in version 2.3.
  
  setStyle      Not implemented.
  
*** ../vim-8.2.1941/src/mouse.c 2020-09-08 22:45:31.113504961 +0200
--- src/mouse.c 2020-11-02 19:58:58.364583736 +0100
***************
*** 2929,2938 ****
  
      // skip line number and fold column in front of the line
      col -= win_col_off(win);
!     if (col < 0)
      {
  #ifdef FEAT_NETBEANS_INTG
!       netbeans_gutter_click(lnum);
  #endif
        col = 0;
      }
--- 2929,2940 ----
  
      // skip line number and fold column in front of the line
      col -= win_col_off(win);
!     if (col <= 0)
      {
  #ifdef FEAT_NETBEANS_INTG
!       // if mouse is clicked on the gutter, then inform the netbeans server
!       if (*colp < win_col_off(win))
!           netbeans_gutter_click(lnum);
  #endif
        col = 0;
      }
*** ../vim-8.2.1941/src/testdir/test_netbeans.py        2020-05-31 
21:27:58.331221914 +0200
--- src/testdir/test_netbeans.py        2020-11-02 19:58:58.364583736 +0100
***************
*** 41,46 ****
--- 41,48 ----
              elif re.match('1:insert=.* "\\\\n"', line):
                  # extract the command from the previous line
                  cmd = re.search('.*"(.*)"', self.prev_line).group(1)
+ 
+                 # map of test names and the netbeans commands/functions
                  testmap = {
                    'getCursor_Test' : '0:getCursor/30\n',
                    'E627_Test' : '0 setReadOnly!31\n',
***************
*** 70,75 ****
--- 72,78 ----
                    'getModified_Test' : '2:getModified/55\n',
                    'getText_Test' : '2:getText/56\n',
                    'setDot_Test' : '2:setDot!57 3/6\n',
+                   'setDot2_Test' : '2:setDot!57 9\n',
                    'startDocumentListen_Test' : '2:startDocumentListen!58\n',
                    'stopDocumentListen_Test' : '2:stopDocumentListen!59\n',
                    'define_anno_Test' : '2:defineAnnoType!60 1 "s1" "x" "=>" 
blue none\n',
***************
*** 90,95 ****
--- 93,99 ----
                    'remove_invalid_count_Test' : '3:remove/75 1 800\n',
                    'guard_Test' : '3:guard!76 8 7\n',
                    'setModified_Test' : '3:setModified!77 T\n',
+                   'setModifiedClear_Test' : '3:setModified!77 F\n',
                    'insertDone_Test' : '3:insertDone!78 T F\n',
                    'saveDone_Test' : '3:saveDone!79\n',
                    'invalidcmd_Test' : '3:invalidcmd!80\n',
***************
*** 99,109 ****
                    'save_fail_Test' : '0:save/84\n',
                    'netbeansBuffer_fail_Test' : '0:netbeansBuffer/85 T\n',
                    'setExitDelay_Test' : '0:setExitDelay!86 2\n',
!                   'setReadOnly_Test' : '3:setReadOnly!87\n',
!                   'close_Test' : '3:close!88\n',
!                   'specialKeys_Test' : '0:specialKeys!89 "F12 F13"\n',
!                   'nbbufwrite_Test' : '4:editFile!90 
"XnbBuffer"\n4:netbeansBuffer!91 T\n',
!                   'detach_Test' : '2:close!92\n1:close!93\nDETACH\n'
                  }
                  # execute the specified test
                  if cmd not in testmap:
--- 103,118 ----
                    'save_fail_Test' : '0:save/84\n',
                    'netbeansBuffer_fail_Test' : '0:netbeansBuffer/85 T\n',
                    'setExitDelay_Test' : '0:setExitDelay!86 2\n',
!                   'setReadOnly_Test' : '3:setReadOnly!87 T\n',
!                   'setReadOnlyClear_Test' : '3:setReadOnly!88 F\n',
!                   'save_Test' : '3:save!89\n',
!                   'close_Test' : '3:close!90\n',
!                   'specialKeys_Test' : '0:specialKeys!91 "F12 F13 C-F13"\n',
!                   'nbbufwrite_Test' : '4:editFile!92 
"XnbBuffer"\n4:netbeansBuffer!93 T\n',
!                   'startAtomic_Test' : '0:startAtomic!94\n',
!                   'endAtomic_Test' : '0:endAtomic!95\n',
!                   'AnnoScale_Test' : "".join(['2:defineAnnoType!60 ' + str(i) 
+ ' "s' + str(i) + '" "x" "=>" blue none\n' for i in range(2, 26)]),
!                   'detach_Test' : '2:close!96\n1:close!97\nDETACH\n'
                  }
                  # execute the specified test
                  if cmd not in testmap:
*** ../vim-8.2.1941/src/testdir/test_netbeans.vim       2020-07-19 
18:24:28.394951652 +0200
--- src/testdir/test_netbeans.vim       2020-11-02 19:58:58.364583736 +0100
***************
*** 303,313 ****
          \ '56 "foo bar1\nfoo bar2\nfoo bar3\n"'], l[-2:])
    let g:last += 4
  
!   " setDot test
    call appendbufline(cmdbufnr, '$', 'setDot_Test')
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
    let l = ReadXnetbeans()
    call assert_equal('send: 2:setDot!57 3/6', l[-1])
    let g:last += 3
  
    " startDocumentListen test
--- 303,324 ----
          \ '56 "foo bar1\nfoo bar2\nfoo bar3\n"'], l[-2:])
    let g:last += 4
  
!   " setDot test with lnum/col
!   call cursor(1, 1)
    call appendbufline(cmdbufnr, '$', 'setDot_Test')
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
    let l = ReadXnetbeans()
    call assert_equal('send: 2:setDot!57 3/6', l[-1])
+   call assert_equal([0, 3, 7, 0], getpos('.'))
+   let g:last += 3
+ 
+   " setDot test with an offset
+   call cursor(1, 1)
+   call appendbufline(cmdbufnr, '$', 'setDot2_Test')
+   call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
+   let l = ReadXnetbeans()
+   call assert_equal('send: 2:setDot!57 9', l[-1])
+   call assert_equal([0, 2, 1, 0], getpos('.'))
    let g:last += 3
  
    " startDocumentListen test
***************
*** 328,333 ****
--- 339,370 ----
    call assert_match('2:remove=\d\+ 0 9', l[-1])
    let g:last += 3
  
+   " Change case using the ~ command with 'whichwrap' containing '~'
+   set whichwrap+=~
+   normal 2G$~
+   set whichwrap&
+   call WaitFor('len(ReadXnetbeans()) >= (g:last + 2)')
+   let l = ReadXnetbeans()
+   call assert_match('2:remove=\d\+ 16 1', l[-4])
+   call assert_match('2:insert=\d\+ 16 "Y"', l[-3])
+   call assert_match('2:remove=\d\+ 18 0', l[-2])
+   call assert_match('2:insert=\d\+ 18 ""', l[-1])
+   let g:last += 4
+ 
+   " Test for replacing spaces with a tab character using 'softtabstop' and
+   " 'noexpandtab'
+   setlocal softtabstop=4
+   setlocal noexpandtab
+   exe "normal I\<Tab>\<Tab>"
+   setlocal expandtab&
+   setlocal softtabstop&
+   call WaitFor('len(ReadXnetbeans()) >= (g:last + 18)')
+   let l = ReadXnetbeans()
+   call assert_match('2:insert=\d\+ 18 "        foo bar3"', l[-3])
+   call assert_match('2:remove=\d\+ 26 8', l[-2])
+   call assert_match('2:insert=\d\+ 26 "\t"', l[-1])
+   let g:last += 18
+ 
    " stopDocumentListen test
    call appendbufline(cmdbufnr, '$', 'stopDocumentListen_Test')
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
***************
*** 491,498 ****
    call assert_equal([{'name': '1', 'texthl': 'NB_s1', 'text': '=>'},
          \ {'name': '10000', 'linehl': 'NBGuarded'}],
          \ sign_getdefined())
!   call assert_equal([{'lnum': 2, 'id': 1000000, 'name': '10000',
!         \ 'priority': 10, 'group': ''}], sign_getplaced()[0].signs)
    let g:last += 3
  
    " setModified test
--- 528,536 ----
    call assert_equal([{'name': '1', 'texthl': 'NB_s1', 'text': '=>'},
          \ {'name': '10000', 'linehl': 'NBGuarded'}],
          \ sign_getdefined())
!   let s = sign_getplaced()[0].signs[0]
!   call assert_equal(2, s.lnum)
!   call assert_equal('10000', s.name)
    let g:last += 3
  
    " setModified test
***************
*** 500,508 ****
--- 538,556 ----
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
    let l = ReadXnetbeans()
    call assert_equal('send: 3:setModified!77 T', l[-1])
+   sleep 1m
    call assert_equal(1, &modified)
    let g:last += 3
  
+   " clear setModified test
+   call appendbufline(cmdbufnr, '$', 'setModifiedClear_Test')
+   call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
+   let l = ReadXnetbeans()
+   call assert_equal('send: 3:setModified!77 F', l[-1])
+   sleep 1m
+   call assert_equal(0, &modified)
+   let g:last += 3
+ 
    " insertDone test
    let v:statusmsg = ''
    call appendbufline(cmdbufnr, '$', 'insertDone_Test')
***************
*** 586,600 ****
    call appendbufline(cmdbufnr, '$', 'setReadOnly_Test')
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
    let l = ReadXnetbeans()
!   call assert_equal('send: 3:setReadOnly!87', l[-1])
    let g:last += 3
  
    " close test. Don't use buffer 10 after this
    call appendbufline(cmdbufnr, '$', 'close_Test')
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
    let l = ReadXnetbeans()
!   call assert_equal('send: 3:close!88', l[-2])
!   call assert_equal('3:killed=88', l[-1])
    call assert_equal(1, winnr('$'))
    let g:last += 4
  
--- 634,669 ----
    call appendbufline(cmdbufnr, '$', 'setReadOnly_Test')
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
    let l = ReadXnetbeans()
!   call assert_equal('send: 3:setReadOnly!87 T', l[-1])
!   sleep 1m
!   call assert_equal(1, &readonly)
!   let g:last += 3
! 
!   " clear setReadonly test
!   call appendbufline(cmdbufnr, '$', 'setReadOnlyClear_Test')
!   call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
!   let l = ReadXnetbeans()
!   call assert_equal('send: 3:setReadOnly!88 F', l[-1])
!   sleep 1m
!   call assert_equal(0, &readonly)
!   let g:last += 3
! 
!   " save test
!   call setbufvar(bufnr('Xfile4'), '&modified', 1)
!   call appendbufline(cmdbufnr, '$', 'save_Test')
!   call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
!   let l = ReadXnetbeans()
!   call assert_equal('send: 3:save!89', l[-1])
!   sleep 1m
!   call assert_true(filereadable('Xfile4'))
    let g:last += 3
  
    " close test. Don't use buffer 10 after this
    call appendbufline(cmdbufnr, '$', 'close_Test')
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 4)')
    let l = ReadXnetbeans()
!   call assert_equal('send: 3:close!90', l[-2])
!   call assert_equal('3:killed=90', l[-1])
    call assert_equal(1, winnr('$'))
    let g:last += 4
  
***************
*** 602,611 ****
    call appendbufline(cmdbufnr, '$', 'specialKeys_Test')
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
    let l = ReadXnetbeans()
!   call assert_equal('send: 0:specialKeys!89 "F12 F13"', l[-1])
    sleep 1m
    call assert_equal(':nbkey F12<CR>', maparg('<F12>', 'n'))
    call assert_equal(':nbkey F13<CR>', maparg('<F13>', 'n'))
    let g:last += 3
  
    " Open a buffer not monitored by netbeans
--- 671,681 ----
    call appendbufline(cmdbufnr, '$', 'specialKeys_Test')
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
    let l = ReadXnetbeans()
!   call assert_equal('send: 0:specialKeys!91 "F12 F13 C-F13"', l[-1])
    sleep 1m
    call assert_equal(':nbkey F12<CR>', maparg('<F12>', 'n'))
    call assert_equal(':nbkey F13<CR>', maparg('<F13>', 'n'))
+   call assert_equal(':nbkey C-F13<CR>', maparg('<C-F13>', 'n'))
    let g:last += 3
  
    " Open a buffer not monitored by netbeans
***************
*** 626,642 ****
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 10)')
    let g:last += 10
  
    " detach
    call appendbufline(cmdbufnr, '$', 'detach_Test')
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 8)')
!   call WaitForAssert({-> assert_equal('0:disconnect=93', 
ReadXnetbeans()[-1])})
  
    " the connection was closed
    call assert_false(has("netbeans_enabled"))
  
    call delete("Xnetbeans")
    call delete('Xfile1')
    call delete('Xfile3')
  endfunc
  
  func Test_nb_basic()
--- 696,805 ----
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 10)')
    let g:last += 10
  
+   if has('mouse')
+     " Test for mouse button release
+     let save_mouse = &mouse
+     set mouse=a
+     call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt')
+     let &mouse = save_mouse
+     call WaitFor('len(ReadXnetbeans()) >= (g:last + 2)')
+     let l = ReadXnetbeans()
+     call assert_equal('4:newDotAndMark=93 0 0', l[-2])
+     call assert_equal('4:buttonRelease=93 0 1 -1', l[-1])
+     let g:last += 2
+   endif
+ 
+   " Test for startAtomic
+   call appendbufline(cmdbufnr, '$', 'startAtomic_Test')
+   call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
+   let l = ReadXnetbeans()
+   call assert_equal('send: 0:startAtomic!94', l[-1])
+   let g:last += 3
+ 
+   " Test for endAtomic
+   call appendbufline(cmdbufnr, '$', 'endAtomic_Test')
+   call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
+   let l = ReadXnetbeans()
+   call assert_equal('send: 0:endAtomic!95', l[-1])
+   let g:last += 3
+ 
+   " Test for invoking a netbeans key binding
+   let special_keys = [
+         \ ["\<F1>", 'F1'], ["\<S-F1>", 'S-F1'],
+         \ ["\<F2>", 'F2'], ["\<S-F2>", 'S-F2'],
+         \ ["\<F3>", 'F3'], ["\<S-F3>", 'S-F3'],
+         \ ["\<F4>", 'F4'], ["\<S-F4>", 'S-F4'],
+         \ ["\<F5>", 'F5'], ["\<S-F5>", 'S-F5'],
+         \ ["\<F6>", 'F6'], ["\<S-F6>", 'S-F6'],
+         \ ["\<F7>", 'F7'], ["\<S-F7>", 'S-F7'],
+         \ ["\<F8>", 'F8'], ["\<S-F8>", 'S-F8'],
+         \ ["\<F9>", 'F9'], ["\<S-F9>", 'S-F9'],
+         \ ["\<F11>", 'F11'], ["\<S-F11>", 'S-F11'],
+         \ ["\<F12>", 'F12'], ["\<S-F12>", 'S-F12'], ['!', '!']
+         \ ]
+   for [key, name] in special_keys
+     call feedkeys("\<F21>" .. key, 'xt')
+     call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
+     let l = ReadXnetbeans()
+     call assert_match('4:keyCommand=\d\+ "' .. name .. '"', l[-2])
+     call assert_match('4:keyAtPos=\d\+ "' .. name .. '" 0 1/0', l[-1])
+     let g:last += 3
+   endfor
+   call feedkeys("\<F21>\<C-S-M-F9>", 'xt')
+   call WaitFor('len(ReadXnetbeans()) >= (g:last + 3)')
+   let l = ReadXnetbeans()
+   call assert_match('4:keyCommand=\d\+ "CSM-F9"', l[-2])
+   call assert_match('4:keyAtPos=\d\+ "CSM-F9" 0 1/0', l[-1])
+   let g:last += 3
+ 
+   if has('signs') && has('mouse')
+     sign define S1 linehl=Search text==>
+     sign define S2 linehl=ErrorMsg text=!!
+     sign place 10 line=1 name=S1
+     sign place 20 line=1 name=S2
+ 
+     let save_mouse = &mouse
+     set mouse=a
+     call assert_equal('S2', sign_getplaced()[0].signs[0].name)
+     call test_setmouse(1, 1)
+     call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt')
+     call assert_equal('S1', sign_getplaced()[0].signs[0].name)
+     call test_setmouse(1, 1)
+     call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt')
+     call assert_equal('S2', sign_getplaced()[0].signs[0].name)
+     let &mouse = save_mouse
+ 
+     sign unplace 10
+     sign unplace 20
+     sign undefine S1
+     sign undefine S2
+   endif
+ 
+   " define a large number of annotations
+   call appendbufline(cmdbufnr, '$', 'AnnoScale_Test')
+   call WaitFor('len(ReadXnetbeans()) >= (g:last + 26)')
+   let l = ReadXnetbeans()
+   call assert_equal('2:defineAnnoType!60 25 "s25" "x" "=>" blue none', l[-1])
+   sleep 1m
+   call assert_true(len(sign_getdefined()) >= 25)
+   let g:last += 26
+ 
    " detach
    call appendbufline(cmdbufnr, '$', 'detach_Test')
    call WaitFor('len(ReadXnetbeans()) >= (g:last + 8)')
!   call WaitForAssert({-> assert_equal('0:disconnect=97', 
ReadXnetbeans()[-1])})
  
    " the connection was closed
    call assert_false(has("netbeans_enabled"))
  
+   " Remove all the signs
+   call sign_unplace('*')
+   call sign_undefine()
+ 
    call delete("Xnetbeans")
    call delete('Xfile1')
    call delete('Xfile3')
+   call delete('Xfile4')
  endfunc
  
  func Test_nb_basic()
*** ../vim-8.2.1941/src/testdir/test_quickfix.vim       2020-10-20 
14:59:08.689104235 +0200
--- src/testdir/test_quickfix.vim       2020-11-02 19:58:58.364583736 +0100
***************
*** 3949,3954 ****
--- 3949,3958 ----
      au BufEnter * call setqflist([], 'f')
    augroup END
    call assert_fails('helpgrep quickfix', 'E925:')
+   " run the test with a help window already open
+   help
+   wincmd w
+   call assert_fails('helpgrep quickfix', 'E925:')
    augroup QF_Test
      au! BufEnter
    augroup END
*** ../vim-8.2.1941/src/version.c       2020-11-01 22:31:05.027982238 +0100
--- src/version.c       2020-11-02 20:00:40.588308951 +0100
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     1942,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
180. You maintain more than six e-mail addresses.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202011021908.0A2J8AjB3574110%40masaka.moolenaar.net.

Raspunde prin e-mail lui