patch 9.0.0078: star register is unexpectedly changed when deleting
Problem: Star register is changed when deleting and both "unnamed" and
"unnamedplus" are in 'clipboard'.
Solution: Make the use of the star register work as documented. (Ernie Rael,
closes #10669)
diff --git a/src/testdir/check.vim b/src/testdir/check.vim
index d64e845..c4dca0b 100644
--- a/src/testdir/check.vim
+++ b/src/testdir/check.vim
@@ -233,6 +233,15 @@
endif
endfunc
+" Command to check that there are two clipboards
+command CheckTwoClipboards call CheckTwoClipboards()
+func CheckTwoClipboards()
+ " avoid changing the clipboard here, only X11 supports both
+ if !has('X11')
+ throw 'Skipped: requires two clipboards'
+ endif
+endfunc
+
" Command to check for satisfying any of the conditions.
" e.g. CheckAnyOf Feature:bsd Feature:sun Linux
command -nargs=+ CheckAnyOf call CheckAnyOf(<f-args>)
diff --git a/src/testdir/test_registers.vim b/src/testdir/test_registers.vim
index 3522649..35bd1e0 100644
--- a/src/testdir/test_registers.vim
+++ b/src/testdir/test_registers.vim
@@ -411,6 +411,36 @@
bwipe!
endfunc
+" Test unnamed for both clipboard registers (* and +)
+func Test_clipboard_regs_both_unnamed()
+ CheckNotGui
+ CheckFeature clipboard_working
+ CheckTwoClipboards
+
+ let @* = 'xxx'
+ let @+ = 'xxx'
+
+ new
+
+ set clipboard=unnamed,unnamedplus
+ call setline(1, ['foo', 'bar'])
+
+ " op_yank copies to both
+ :1
+ :normal yw
+ call assert_equal('foo', getreg('*'))
+ call assert_equal('foo', getreg('+'))
+
+ " op_delete only copies to '+'
+ :2
+ :normal dw
+ call assert_equal('foo', getreg('*'))
+ call assert_equal('bar', getreg('+'))
+
+ set clipboard&vim
+ bwipe!
+endfunc
+
" Test for restarting the current mode (insert or virtual replace) after
" executing the contents of a register
func Test_put_reg_restart_mode()