aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-08-23 16:32:15 +0800
committerzeertzjq <zeertzjq@outlook.com>2023-08-23 18:24:14 +0800
commit0ba27bb51d3297aec43e78050cc3adcf6879db22 (patch)
tree9ea8990c9bebeca06d5a5e3989f0a70239797610 /test
parent99265d099c2c366eea936438734a323d1fb9b341 (diff)
downloadrneovim-0ba27bb51d3297aec43e78050cc3adcf6879db22.tar.gz
rneovim-0ba27bb51d3297aec43e78050cc3adcf6879db22.tar.bz2
rneovim-0ba27bb51d3297aec43e78050cc3adcf6879db22.zip
vim-patch:9.0.1710: scrolloff options work slightly different
Problem: sidescrolloff and scrolloff options work slightly different than other global-local options Solution: Make it behave consistent for all global-local options It was noticed, that sidescrolloff and scrolloff options behave differently in comparison to other global-local window options like 'listchars' So make those two behave like other global-local options. Also add some extra documentation for a few special local-window options. Add a few tests to make sure all global-local window options behave similar closes: vim/vim#12956 closes: vim/vim#12643 https://github.com/vim/vim/commit/4a8eb6e7a9df10f79bf95301ced012f0d6a13088 Co-authored-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'test')
-rw-r--r--test/functional/lua/vim_spec.lua2
-rw-r--r--test/old/testdir/test_options.vim86
2 files changed, 87 insertions, 1 deletions
diff --git a/test/functional/lua/vim_spec.lua b/test/functional/lua/vim_spec.lua
index 35e87b71da..9338e95d10 100644
--- a/test/functional/lua/vim_spec.lua
+++ b/test/functional/lua/vim_spec.lua
@@ -1548,7 +1548,7 @@ describe('lua stdlib', function()
eq(100, funcs.luaeval "vim.wo.scrolloff")
exec_lua [[
vim.wo[0][0].scrolloff = 200
- vim.cmd "split"
+ vim.cmd "enew"
]]
eq(100, funcs.luaeval "vim.wo.scrolloff")
end)
diff --git a/test/old/testdir/test_options.vim b/test/old/testdir/test_options.vim
index aabb11a76a..12a262f2ad 100644
--- a/test/old/testdir/test_options.vim
+++ b/test/old/testdir/test_options.vim
@@ -1682,4 +1682,90 @@ func Test_string_option_revert_on_failure()
bw!
endfunc
+func Test_set_option_window_global_local()
+ new Xbuffer1
+ let [ _gso, _lso ] = [ &g:scrolloff, &l:scrolloff ]
+ setlocal scrolloff=2
+ setglobal scrolloff=3
+ setl modified
+ " A new buffer has its own window-local options
+ hide enew
+ call assert_equal(-1, &l:scrolloff)
+ call assert_equal(3, &g:scrolloff)
+ " A new window opened with its own buffer-local options
+ new
+ call assert_equal(-1, &l:scrolloff)
+ call assert_equal(3, &g:scrolloff)
+ " Re-open Xbuffer1 and it should use
+ " the previous set window-local options
+ b Xbuffer1
+ call assert_equal(2, &l:scrolloff)
+ call assert_equal(3, &g:scrolloff)
+ bw!
+ bw!
+ let &g:scrolloff = _gso
+endfunc
+
+func GetGlobalLocalWindowOptions()
+ new
+ sil! r $VIMRUNTIME/doc/options.txt
+ " Filter for global or local to window
+ v/^'.*'.*\n.*global or local to window |global-local/d
+ " get option value and type
+ sil %s/^'\([^']*\)'.*'\s\+\(\w\+\)\s\+(default \%(\(".*"\|\d\+\|empty\)\).*/\1 \2 \3/g
+ " sil %s/empty/""/g
+ " split the result
+ " let result=getline(1,'$')->map({_, val -> split(val, ' ')})
+ let result = getline(1, '$')->map({_, val -> matchlist(val, '\([^ ]\+\) \+\([^ ]\+\) \+\(.*\)')[1:3]})
+ bw!
+ return result
+endfunc
+
+func Test_set_option_window_global_local_all()
+ new Xbuffer2
+
+ let optionlist = GetGlobalLocalWindowOptions()
+ for [opt, type, default] in optionlist
+ let _old = eval('&g:' .. opt)
+ if type == 'string'
+ if opt == 'fillchars'
+ exe 'setl ' .. opt .. '=vert:+'
+ exe 'setg ' .. opt .. '=vert:+,fold:+'
+ elseif opt == 'listchars'
+ exe 'setl ' .. opt .. '=tab:>>'
+ exe 'setg ' .. opt .. '=tab:++'
+ elseif opt == 'virtualedit'
+ exe 'setl ' .. opt .. '=all'
+ exe 'setg ' .. opt .. '=block'
+ else
+ exe 'setl ' .. opt .. '=Local'
+ exe 'setg ' .. opt .. '=Global'
+ endif
+ elseif type == 'number'
+ exe 'setl ' .. opt .. '=5'
+ exe 'setg ' .. opt .. '=10'
+ endif
+ setl modified
+ hide enew
+ if type == 'string'
+ call assert_equal('', eval('&l:' .. opt))
+ if opt == 'fillchars'
+ call assert_equal('vert:+,fold:+', eval('&g:' .. opt), 'option:' .. opt)
+ elseif opt == 'listchars'
+ call assert_equal('tab:++', eval('&g:' .. opt), 'option:' .. opt)
+ elseif opt == 'virtualedit'
+ call assert_equal('block', eval('&g:' .. opt), 'option:' .. opt)
+ else
+ call assert_equal('Global', eval('&g:' .. opt), 'option:' .. opt)
+ endif
+ elseif type == 'number'
+ call assert_equal(-1, eval('&l:' .. opt), 'option:' .. opt)
+ call assert_equal(10, eval('&g:' .. opt), 'option:' .. opt)
+ endif
+ bw!
+ exe 'let &g:' .. opt .. '=' .. default
+ endfor
+ bw!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab