changeset 18804:2d41b63f52de v8.1.2390

patch 8.1.2390: test94 is old style, fix 7.4.441 not tested Commit: https://github.com/vim/vim/commit/309976ec1f033c68480bbc8cc363db5b5ea944f9 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Dec 5 18:16:33 2019 +0100 patch 8.1.2390: test94 is old style, fix 7.4.441 not tested Problem: Test94 is old style, fix 7.4.441 not tested. Solution: Turn test94 into a new style test. Add tests for the fix in patch 7.4.441. (Yegappan Lakshmanan, closes #5316)
author Bram Moolenaar <Bram@vim.org>
date Thu, 05 Dec 2019 18:30:04 +0100
parents 931c46f7f248
children 84ee7a3e71a2
files src/Makefile src/testdir/Make_all.mak src/testdir/Make_vms.mms src/testdir/test94.in src/testdir/test94.ok src/testdir/test_cmdline.vim src/testdir/test_visual.vim src/version.c
diffstat 8 files changed, 325 insertions(+), 383 deletions(-) [+]
line wrap: on
line diff
--- a/src/Makefile
+++ b/src/Makefile
@@ -2257,7 +2257,7 @@ test1 \
 	test64 test69 \
 	test70 test72 \
 	test86 test87 test88 \
-	test94 test95 test99:
+	test95 test99:
 	cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
 
 # Run individual NEW style test.
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -20,7 +20,6 @@ SCRIPTS_ALL = \
 	test69.out \
 	test70.out \
 	test88.out \
-	test94.out \
 	test95.out \
 	test99.out \
 	test_eval.out
--- a/src/testdir/Make_vms.mms
+++ b/src/testdir/Make_vms.mms
@@ -78,7 +78,7 @@ SCRIPT = test1.out \
        test42.out test44.out test49.out \
        test64.out test69.out \
        test72.out test77a.out test88.out \
-       test94.out test95.out test99.out \
+       test95.out test99.out \
        test_eval.out
 
 # Known problems:
deleted file mode 100644
--- a/src/testdir/test94.in
+++ /dev/null
@@ -1,257 +0,0 @@
-Test for Visual mode and operators
-
-Tests for the two kinds of operations: Those executed with Visual mode
-followed by an operator and those executed via Operator-pending mode. Also
-part of the test are mappings, counts, and repetition with the . command.
-
-Test cases:
-- Visual modes (v V CTRL-V) followed by an operator; count; repeating
-- Visual mode maps; count; repeating
-  - Simple
-  - With an Ex command (custom text object)
-- Operator-pending mode maps
-  - Simple
-  - With Ex command moving the cursor
-  - With Ex command and Visual selection (custom text object)
-- Patch 7.3.879: Properly abort Ex command in Operator-pending mode
-
-STARTTEST
-:so small.vim
-:set belloff=all
-:set enc=utf-8 nocp viminfo+=nviminfo
-:
-:" User functions
-:function MoveToCap()
-:  call search('\u', 'W')
-:endfunction
-:function SelectInCaps()
-:  let [line1, col1] = searchpos('\u', 'bcnW')
-:  let [line2, col2] = searchpos('.\u', 'nW')
-:  call setpos("'<", [0, line1, col1, 0])
-:  call setpos("'>", [0, line2, col2, 0])
-:  normal! gv
-:endfunction
-:
-:" Visual modes followed by operator
-/^apple
-lvld.l3vd.:
-/^line 1
-Vcnewlinej.j2Vd.:
-/^xxxx
-jlc  l.l2c----l.:
-:
-:" Visual mode maps (movement and text object)
-:vnoremap W /\u/s-1<CR>
-:vnoremap iW :<C-U>call SelectInCaps()<CR>
-/^Kiwi
-vWcNol.fD2vd.:
-/^Jambu
-llviWc-l.l2vdl.:
-:
-:" Operator-pending mode maps (movement and text object)
-:onoremap W /\u/<CR>
-:onoremap <Leader>W :<C-U>call MoveToCap()<CR>
-:onoremap iW :<C-U>call SelectInCaps()<CR>
-/^Pineapple
-cW-l.l2.l.:
-/^Juniper
-g?\WfD.:
-/^Lemon
-yiWPlciWNewfr.:
-:
-:" Patch 7.3.879: Properly abort Operator-pending mode for "dv:<Esc>" etc.
-/^zzzz
-dV:
dv:
:set noma | let v:errmsg = ''
-d:
:set ma | put = v:errmsg =~# '^E21' ? 'ok' : 'failed'
-dv:dV::set noma | let v:errmsg = ''
-d::set ma | put = v:errmsg =~# '^E21' ? 'failed' : 'ok'
-:
-:$put =''
-:$put ='characterwise visual mode: replace last line'
-:$put ='a'
-:let @" = 'x'
-:let v:errmsg = ''
-v$p
-:$put ='---'
-:$put ='v:errmsg='.v:errmsg
-:
-:$put =''
-:$put ='characterwise visual mode: delete middle line'
-:$put ='a'
-:$put ='b'
-:$put ='c'
-kkv$d
-:$put ='---'
-:
-:$put =''
-:$put ='characterwise visual mode: delete middle two line'
-:$put ='a'
-:$put ='b'
-:$put ='c'
-kkvj$d
-:$put ='---'
-:
-:$put =''
-:$put ='characterwise visual mode: delete last line'
-:$put ='a'
-:$put ='b'
-:$put ='c'
-v$d
-:$put ='---'
-:
-:$put =''
-:$put ='characterwise visual mode: delete last two line'
-:$put ='a'
-:$put ='b'
-:$put ='c'
-kvj$d
-:$put ='---'
-:
-:" Select mode maps
-:snoremap <lt>End> <End>
-:snoremap <lt>Down> <Down>
-:snoremap <lt>Del> <Del>
-:
-:$put =''
-:$put ='characterwise select mode: delete middle line'
-:$put ='a'
-:$put ='b'
-:$put ='c'
-kkgh<End><Del>
-:$put ='---'
-:
-:$put =''
-:$put ='characterwise select mode: delete middle two line'
-:$put ='a'
-:$put ='b'
-:$put ='c'
-kkgh<Down><End><Del>
-:$put ='---'
-:
-:$put =''
-:$put ='characterwise select mode: delete last line'
-:$put ='a'
-:$put ='b'
-:$put ='c'
-gh<End><Del>
-:$put ='---'
-:
-:$put =''
-:$put ='characterwise select mode: delete last two line'
-:$put ='a'
-:$put ='b'
-:$put ='c'
-kgh<Down><End><Del>
-:$put ='---'
-:
-:$put =''
-:$put ='linewise select mode: delete middle line'
-:$put ='a'
-:$put ='b'
-:$put ='c'
-kkgH<Del>
-:$put ='---'
-:
-:$put =''
-:$put ='linewise select mode: delete middle two line'
-:$put ='a'
-:$put ='b'
-:$put ='c'
-kkgH<Down><Del>
-:$put ='---'
-:
-:$put =''
-:$put ='linewise select mode: delete last line'
-:$put ='a'
-:$put ='b'
-:$put ='c'
-gH<Del>
-:$put ='---'
-:
-:$put =''
-:$put ='linewise select mode: delete last two line'
-:$put ='a'
-:$put ='b'
-:$put ='c'
-kgH<Down><Del>
-:$put ='---'
-:
-:$put =''
-:$put ='v_p: replace last character with line register at middle line'
-:$put ='aaa'
-:$put ='bbb'
-:$put ='ccc'
-:-2yank
-k$vp
-:$put ='---'
-:
-:$put =''
-:$put ='v_p: replace last character with line register at middle line selecting newline'
-:$put ='aaa'
-:$put ='bbb'
-:$put ='ccc'
-:-2yank
-k$v$p
-:$put ='---'
-:
-:$put =''
-:$put ='v_p: replace last character with line register at last line'
-:$put ='aaa'
-:$put ='bbb'
-:$put ='ccc'
-:-2yank
-$vp
-:$put ='---'
-:
-:$put =''
-:$put ='v_p: replace last character with line register at last line selecting newline'
-:$put ='aaa'
-:$put ='bbb'
-:$put ='ccc'
-:-2yank
-$v$p
-:$put ='---'
-:
-:$put =''
-:$put ='gv in exclusive select mode after operation'
-:$put ='zzz '
-:$put ='äà '
-:set selection=exclusive
-kv3lyjv3lpgvcxxx
-:$put ='---'
-:
-:$put =''
-:$put ='gv in exclusive select mode without operation'
-:$put ='zzz '
-:set selection=exclusive
-0v3lgvcxxx
-:$put ='---'
-:/^start:/+2,$w! test.out
-:q!
-ENDTEST
-
-start:
-
-apple banana cherry
-
-line 1 line 1
-line 2 line 2
-line 3 line 3
-line 4 line 4
-line 5 line 5
-line 6 line 6
-
-xxxxxxxxxxxxx
-xxxxxxxxxxxxx
-xxxxxxxxxxxxx
-xxxxxxxxxxxxx
-
-KiwiRaspberryDateWatermelonPeach
-JambuRambutanBananaTangerineMango
-
-PineappleQuinceLoganberryOrangeGrapefruitKiwiZ
-JuniperDurianZ
-LemonNectarineZ
-
-zzzz
-zzzz
deleted file mode 100644
--- a/src/testdir/test94.ok
+++ /dev/null
@@ -1,123 +0,0 @@
-a y
-
-newline
-newline
-
-    --------x
-    --------x
-xxxx--------x
-xxxx--------x
-
-NoNoberryach
---ago
-
-----Z
-WhavcreQhevnaZ
-LemonNewNewZ
-
-zzz
-ok
-ok
-
-characterwise visual mode: replace last line
-x
----
-v:errmsg=
-
-characterwise visual mode: delete middle line
-b
-c
----
-
-characterwise visual mode: delete middle two line
-c
----
-
-characterwise visual mode: delete last line
-a
-b
-
----
-
-characterwise visual mode: delete last two line
-a
-
----
-
-characterwise select mode: delete middle line
-b
-c
----
-
-characterwise select mode: delete middle two line
-c
----
-
-characterwise select mode: delete last line
-a
-b
-
----
-
-characterwise select mode: delete last two line
-a
-
----
-
-linewise select mode: delete middle line
-b
-c
----
-
-linewise select mode: delete middle two line
-c
----
-
-linewise select mode: delete last line
-a
-b
----
-
-linewise select mode: delete last two line
-a
----
-
-v_p: replace last character with line register at middle line
-aaa
-bb
-aaa
-
-ccc
----
-
-v_p: replace last character with line register at middle line selecting newline
-aaa
-bb
-aaa
-ccc
----
-
-v_p: replace last character with line register at last line
-aaa
-bbb
-cc
-aaa
-
----
-
-v_p: replace last character with line register at last line selecting newline
-aaa
-bbb
-cc
-aaa
-
----
-
-gv in exclusive select mode after operation
-zzz 
-xxx 
----
-
-gv in exclusive select mode without operation
-xxx 
----
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -848,3 +848,26 @@ func Test_cmdwin_feedkeys()
   " This should not generate E488
   call feedkeys("q:\<CR>", 'x')
 endfunc
+
+" Tests for the issues fixed in 7.4.441.
+" When 'cedit' is set to Ctrl-C, opening the command window hangs Vim
+func Test_cmdwin_cedit()
+  exe "set cedit=\<C-c>"
+  normal! :
+  call assert_equal(1, winnr('$'))
+
+  let g:cmd_wintype = ''
+  func CmdWinType()
+      let g:cmd_wintype = getcmdwintype()
+      return ''
+  endfunc
+
+  call feedkeys("\<C-c>a\<C-R>=CmdWinType()\<CR>\<CR>")
+  echo input('')
+  call assert_equal('@', g:cmd_wintype)
+
+  set cedit&vim
+  delfunc CmdWinType
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
--- a/src/testdir/test_visual.vim
+++ b/src/testdir/test_visual.vim
@@ -442,4 +442,302 @@ func Test_visual_block_put()
   enew!
 endfunc
 
+" Visual modes (v V CTRL-V) followed by an operator; count; repeating
+func Test_visual_mode_op()
+  new
+  call append(0, '')
+
+  call setline(1, 'apple banana cherry')
+  call cursor(1, 1)
+  normal lvld.l3vd.
+  call assert_equal('a y', getline(1))
+
+  call setline(1, ['line 1 line 1', 'line 2 line 2', 'line 3 line 3',
+        \ 'line 4 line 4', 'line 5 line 5', 'line 6 line 6'])
+  call cursor(1, 1)
+  exe "normal Vcnewline\<Esc>j.j2Vd."
+  call assert_equal(['newline', 'newline'], getline(1, '$'))
+
+  call deletebufline('', 1, '$')
+  call setline(1, ['xxxxxxxxxxxxx', 'xxxxxxxxxxxxx', 'xxxxxxxxxxxxx',
+        \ 'xxxxxxxxxxxxx'])
+  exe "normal \<C-V>jlc  \<Esc>l.l2\<C-V>c----\<Esc>l."
+  call assert_equal(['    --------x',
+        \ '    --------x',
+        \ 'xxxx--------x',
+        \ 'xxxx--------x'], getline(1, '$'))
+
+  bwipe!
+endfunc
+
+" Visual mode maps (movement and text object)
+" Visual mode maps; count; repeating
+"   - Simple
+"   - With an Ex command (custom text object)
+func Test_visual_mode_maps()
+  new
+  call append(0, '')
+
+  func SelectInCaps()
+    let [line1, col1] = searchpos('\u', 'bcnW')
+    let [line2, col2] = searchpos('.\u', 'nW')
+    call setpos("'<", [0, line1, col1, 0])
+    call setpos("'>", [0, line2, col2, 0])
+    normal! gv
+  endfunction
+
+  vnoremap W /\u/s-1<CR>
+  vnoremap iW :<C-U>call SelectInCaps()<CR>
+
+  call setline(1, 'KiwiRaspberryDateWatermelonPeach')
+  call cursor(1, 1)
+  exe "normal vWcNo\<Esc>l.fD2vd."
+  call assert_equal('NoNoberryach', getline(1))
+
+  call setline(1, 'JambuRambutanBananaTangerineMango')
+  call cursor(1, 1)
+  exe "normal llviWc-\<Esc>l.l2vdl."
+  call assert_equal('--ago', getline(1))
+
+  vunmap W
+  vunmap iW
+  bwipe!
+  delfunc SelectInCaps
+endfunc
+
+" Operator-pending mode maps (movement and text object)
+"   - Simple
+"   - With Ex command moving the cursor
+"   - With Ex command and Visual selection (custom text object)
+func Test_visual_oper_pending_mode_maps()
+  new
+  call append(0, '')
+
+  func MoveToCap()
+    call search('\u', 'W')
+  endfunction
+
+  func SelectInCaps()
+    let [line1, col1] = searchpos('\u', 'bcnW')
+    let [line2, col2] = searchpos('.\u', 'nW')
+    call setpos("'<", [0, line1, col1, 0])
+    call setpos("'>", [0, line2, col2, 0])
+    normal! gv
+  endfunction
+
+  onoremap W /\u/<CR>
+  onoremap <Leader>W :<C-U>call MoveToCap()<CR>
+  onoremap iW :<C-U>call SelectInCaps()<CR>
+
+  call setline(1, 'PineappleQuinceLoganberryOrangeGrapefruitKiwiZ')
+  call cursor(1, 1)
+  exe "normal cW-\<Esc>l.l2.l."
+  call assert_equal('----Z', getline(1))
+
+  call setline(1, 'JuniperDurianZ')
+  call cursor(1, 1)
+  exe "normal g?\WfD."
+  call assert_equal('WhavcreQhevnaZ', getline(1))
+
+  call setline(1, 'LemonNectarineZ')
+  call cursor(1, 1)
+  exe "normal yiWPlciWNew\<Esc>fr."
+  call assert_equal('LemonNewNewZ', getline(1))
+
+  ounmap W
+  ounmap <Leader>W
+  ounmap iW
+  bwipe!
+  delfunc MoveToCap
+  delfunc SelectInCaps
+endfunc
+
+" Patch 7.3.879: Properly abort Operator-pending mode for "dv:<Esc>" etc.
+func Test_op_pend_mode_abort()
+  new
+  call append(0, '')
+
+  call setline(1, ['zzzz', 'zzzz'])
+  call cursor(1, 1)
+
+  exe "normal dV:\<CR>dv:\<CR>"
+  call assert_equal(['zzz'], getline(1, 2))
+  set nomodifiable
+  call assert_fails('exe "normal d:\<CR>"', 'E21:')
+  set modifiable
+  call feedkeys("dv:\<Esc>dV:\<Esc>", 'xt')
+  call assert_equal(['zzz'], getline(1, 2))
+  set nomodifiable
+  let v:errmsg = ''
+  call feedkeys("d:\<Esc>", 'xt')
+  call assert_true(v:errmsg !~# '^E21:')
+  set modifiable
+
+  bwipe!
+endfunc
+
+func Test_characterwise_visual_mode()
+  new
+
+  " characterwise visual mode: replace last line
+  $put ='a'
+  let @" = 'x'
+  normal v$p
+  call assert_equal('x', getline('$'))
+
+  " characterwise visual mode: delete middle line
+  call deletebufline('', 1, '$')
+  call append('$', ['a', 'b', 'c'])
+  normal G
+  normal kkv$d
+  call assert_equal(['', 'b', 'c'], getline(1, '$'))
+
+  " characterwise visual mode: delete middle two lines
+  call deletebufline('', 1, '$')
+  call append('$', ['a', 'b', 'c'])
+  normal Gkkvj$d
+  call assert_equal(['', 'c'], getline(1, '$'))
+
+  " characterwise visual mode: delete last line
+  call deletebufline('', 1, '$')
+  call append('$', ['a', 'b', 'c'])
+  normal Gv$d
+  call assert_equal(['', 'a', 'b', ''], getline(1, '$'))
+
+  " characterwise visual mode: delete last two lines
+  call deletebufline('', 1, '$')
+  call append('$', ['a', 'b', 'c'])
+  normal Gkvj$d
+  call assert_equal(['', 'a', ''], getline(1, '$'))
+
+  bwipe!
+endfunc
+
+func Test_characterwise_select_mode()
+  new
+
+  " Select mode maps
+  snoremap <lt>End> <End>
+  snoremap <lt>Down> <Down>
+  snoremap <lt>Del> <Del>
+
+  " characterwise select mode: delete middle line
+  call deletebufline('', 1, '$')
+  call append('$', ['a', 'b', 'c'])
+  exe "normal Gkkgh\<End>\<Del>"
+  call assert_equal(['', 'b', 'c'], getline(1, '$'))
+
+  " characterwise select mode: delete middle two lines
+  call deletebufline('', 1, '$')
+  call append('$', ['a', 'b', 'c'])
+  exe "normal Gkkgh\<Down>\<End>\<Del>"
+  call assert_equal(['', 'c'], getline(1, '$'))
+
+  " characterwise select mode: delete last line
+  call deletebufline('', 1, '$')
+  call append('$', ['a', 'b', 'c'])
+  exe "normal Ggh\<End>\<Del>"
+  call assert_equal(['', 'a', 'b', ''], getline(1, '$'))
+
+  " characterwise select mode: delete last two lines
+  call deletebufline('', 1, '$')
+  call append('$', ['a', 'b', 'c'])
+  exe "normal Gkgh\<Down>\<End>\<Del>"
+  call assert_equal(['', 'a', ''], getline(1, '$'))
+
+  sunmap <lt>End>
+  sunmap <lt>Down>
+  sunmap <lt>Del>
+  bwipe!
+endfunc
+
+func Test_linewise_select_mode()
+  new
+
+  " linewise select mode: delete middle line
+  call append('$', ['a', 'b', 'c'])
+  exe "normal GkkgH\<Del>"
+  call assert_equal(['', 'b', 'c'], getline(1, '$'))
+
+
+  " linewise select mode: delete middle two lines
+  call deletebufline('', 1, '$')
+  call append('$', ['a', 'b', 'c'])
+  exe "normal GkkgH\<Down>\<Del>"
+  call assert_equal(['', 'c'], getline(1, '$'))
+
+  " linewise select mode: delete last line
+  call deletebufline('', 1, '$')
+  call append('$', ['a', 'b', 'c'])
+  exe "normal GgH\<Del>"
+  call assert_equal(['', 'a', 'b'], getline(1, '$'))
+
+  " linewise select mode: delete last two lines
+  call deletebufline('', 1, '$')
+  call append('$', ['a', 'b', 'c'])
+  exe "normal GkgH\<Down>\<Del>"
+  call assert_equal(['', 'a'], getline(1, '$'))
+
+  bwipe!
+endfunc
+
+func Test_visual_mode_put()
+  new
+
+  " v_p: replace last character with line register at middle line
+  call append('$', ['aaa', 'bbb', 'ccc'])
+  normal G
+  -2yank
+  normal k$vp
+  call assert_equal(['', 'aaa', 'bb', 'aaa', '', 'ccc'], getline(1, '$'))
+
+  " v_p: replace last character with line register at middle line selecting
+  " newline
+  call deletebufline('', 1, '$')
+  call append('$', ['aaa', 'bbb', 'ccc'])
+  normal G
+  -2yank
+  normal k$v$p
+  call assert_equal(['', 'aaa', 'bb', 'aaa', 'ccc'], getline(1, '$'))
+
+  " v_p: replace last character with line register at last line
+  call deletebufline('', 1, '$')
+  call append('$', ['aaa', 'bbb', 'ccc'])
+  normal G
+  -2yank
+  normal $vp
+  call assert_equal(['', 'aaa', 'bbb', 'cc', 'aaa', ''], getline(1, '$'))
+
+  " v_p: replace last character with line register at last line selecting
+  " newline
+  call deletebufline('', 1, '$')
+  call append('$', ['aaa', 'bbb', 'ccc'])
+  normal G
+  -2yank
+  normal $v$p
+  call assert_equal(['', 'aaa', 'bbb', 'cc', 'aaa', ''], getline(1, '$'))
+
+  bwipe!
+endfunc
+
+func Test_select_mode_gv()
+  new
+
+  " gv in exclusive select mode after operation
+  call append('$', ['zzz ', 'äà '])
+  set selection=exclusive
+  normal Gkv3lyjv3lpgvcxxx
+  call assert_equal(['', 'zzz ', 'xxx '], getline(1, '$'))
+
+  " gv in exclusive select mode without operation
+  call deletebufline('', 1, '$')
+  call append('$', 'zzz ')
+  set selection=exclusive
+  exe "normal G0v3l\<Esc>gvcxxx"
+  call assert_equal(['', 'xxx '], getline(1, '$'))
+
+  set selection&vim
+  bwipe!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2390,
+/**/
     2389,
 /**/
     2388,