aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/functional/legacy/autocmd_option_spec.lua420
1 files changed, 379 insertions, 41 deletions
diff --git a/test/functional/legacy/autocmd_option_spec.lua b/test/functional/legacy/autocmd_option_spec.lua
index 1914818215..5e586d3a6a 100644
--- a/test/functional/legacy/autocmd_option_spec.lua
+++ b/test/functional/legacy/autocmd_option_spec.lua
@@ -1,6 +1,6 @@
local helpers = require('test.functional.helpers')(after_each)
local nvim = helpers.meths
-local clear, eq, neq = helpers.clear, helpers.eq, helpers.neq
+local clear, eq, neq, eval = helpers.clear, helpers.eq, helpers.neq, helpers.eval
local curbuf, buf = helpers.curbuf, helpers.bufmeths
local curwin = helpers.curwin
local exec_capture = helpers.exec_capture
@@ -10,11 +10,14 @@ local function declare_hook_function()
source([[
fu! AutoCommand(match, bufnr, winnr)
let l:acc = {
- \ 'option' : a:match,
- \ 'oldval' : v:option_old,
- \ 'newval' : v:option_new,
- \ 'scope' : v:option_type,
- \ 'attr' : {
+ \ 'option' : a:match,
+ \ 'oldval' : v:option_old,
+ \ 'oldval_l' : v:option_oldlocal,
+ \ 'oldval_g' : v:option_oldglobal,
+ \ 'newval' : v:option_new,
+ \ 'scope' : v:option_type,
+ \ 'cmd' : v:option_command,
+ \ 'attr' : {
\ 'bufnr' : a:bufnr,
\ 'winnr' : a:winnr,
\ }
@@ -42,13 +45,16 @@ local function get_result()
return ret
end
-local function expected_table(option, oldval, newval, scope, attr)
+local function expected_table(option, oldval, oldval_l, oldval_g, newval, scope, cmd, attr)
return {
- option = option,
- oldval = tostring(oldval),
- newval = tostring(newval),
- scope = scope,
- attr = attr,
+ option = option,
+ oldval = tostring(oldval),
+ oldval_l = tostring(oldval_l),
+ oldval_g = tostring(oldval_g),
+ newval = tostring(newval),
+ scope = scope,
+ cmd = cmd,
+ attr = attr,
}
end
@@ -66,7 +72,7 @@ local function expected_combination(...)
end
for i, v in ipairs(args) do
- local attr = v[5]
+ local attr = v[8]
if not attr then
-- remove attr entries
ret[i].attr = nil
@@ -112,7 +118,7 @@ local function get_new_window_number()
end
describe('au OptionSet', function()
- describe('with any opton (*)', function()
+ describe('with any option (*)', function()
before_each(function()
clear()
@@ -123,44 +129,44 @@ describe('au OptionSet', function()
it('should be called in setting number option', function()
command('set nu')
- expected_combination({'number', 0, 1, 'global'})
+ expected_combination({'number', 0, 0, 0, 1, 'global', 'set'})
command('setlocal nonu')
- expected_combination({'number', 1, 0, 'local'})
+ expected_combination({'number', 1, 1, '', 0, 'local', 'setlocal'})
command('setglobal nonu')
- expected_combination({'number', 1, 0, 'global'})
+ expected_combination({'number', 1, '', 1, 0, 'global', 'setglobal'})
end)
it('should be called in setting autoindent option',function()
command('setlocal ai')
- expected_combination({'autoindent', 0, 1, 'local'})
+ expected_combination({'autoindent', 0, 0, '', 1, 'local', 'setlocal'})
command('setglobal ai')
- expected_combination({'autoindent', 0, 1, 'global'})
+ expected_combination({'autoindent', 0, '', 0, 1, 'global', 'setglobal'})
command('set noai')
- expected_combination({'autoindent', 1, 0, 'global'})
+ expected_combination({'autoindent', 1, 1, 1, 0, 'global', 'set'})
end)
it('should be called in inverting global autoindent option',function()
command('set ai!')
- expected_combination({'autoindent', 0, 1, 'global'})
+ expected_combination({'autoindent', 0, 0, 0, 1, 'global', 'set'})
end)
it('should be called in being unset local autoindent option',function()
command('setlocal ai')
- expected_combination({'autoindent', 0, 1, 'local'})
+ expected_combination({'autoindent', 0, 0, '', 1, 'local', 'setlocal'})
command('setlocal ai<')
- expected_combination({'autoindent', 1, 0, 'local'})
+ expected_combination({'autoindent', 1, 1, '', 0, 'local', 'setlocal'})
end)
it('should be called in setting global list and number option at the same time',function()
command('set list nu')
expected_combination(
- {'list', 0, 1, 'global'},
- {'number', 0, 1, 'global'}
+ {'list', 0, 0, 0, 1, 'global', 'set'},
+ {'number', 0, 0, 0, 1, 'global', 'set'}
)
end)
@@ -171,25 +177,27 @@ describe('au OptionSet', function()
it('should be called in setting local acd', function()
command('setlocal acd')
- expected_combination({'autochdir', 0, 1, 'local'})
+ expected_combination({'autochdir', 0, 0, '', 1, 'local', 'setlocal'})
end)
it('should be called in setting autoread', function()
command('set noar')
- expected_combination({'autoread', 1, 0, 'global'})
+ expected_combination({'autoread', 1, 1, 1, 0, 'global', 'set'})
command('setlocal ar')
- expected_combination({'autoread', 0, 1, 'local'})
+ expected_combination({'autoread', 0, 0, '', 1, 'local', 'setlocal'})
end)
it('should be called in inverting global autoread', function()
command('setglobal invar')
- expected_combination({'autoread', 1, 0, 'global'})
+ expected_combination({'autoread', 1, '', 1, 0, 'global', 'setglobal'})
end)
it('should be called in setting backspace option through :let', function()
+ local oldval = eval('&backspace')
+
command('let &bs=""')
- expected_combination({'backspace', 'indent,eol,start', '', 'global'})
+ expected_combination({'backspace', oldval, oldval, oldval, '', 'global', 'set'})
end)
describe('being set by setbufvar()', function()
@@ -200,7 +208,7 @@ describe('au OptionSet', function()
it('should trigger using correct option name', function()
command('call setbufvar(1, "&backup", 1)')
- expected_combination({'backup', 0, 1, 'local'})
+ expected_combination({'backup', 0, 0, '', 1, 'local', 'setlocal'})
end)
it('should trigger if the current buffer is different from the targetted buffer', function()
@@ -208,9 +216,339 @@ describe('au OptionSet', function()
local new_bufnr = buf.get_number(new_buffer)
command('call setbufvar(' .. new_bufnr .. ', "&buftype", "nofile")')
- expected_combination({'buftype', '', 'nofile', 'local', {bufnr = new_bufnr}})
+ expected_combination({'buftype', '', '', '', 'nofile', 'local', 'setlocal', {bufnr = new_bufnr}})
end)
end)
+
+ it('with string global option', function()
+ local oldval = eval('&backupext')
+
+ command('set backupext=foo')
+ expected_combination({'backupext', oldval, oldval, oldval, 'foo', 'global', 'set'})
+
+ command('set backupext&')
+ expected_combination({'backupext', 'foo', 'foo', 'foo', oldval, 'global', 'set'})
+
+ command('setglobal backupext=bar')
+ expected_combination({'backupext', oldval, '', oldval, 'bar', 'global', 'setglobal'})
+
+ command('noa set backupext&')
+ -- As this is a global option this sets the global value even though :setlocal is used!
+ command('setlocal backupext=baz')
+ expected_combination({'backupext', oldval, oldval, '', 'baz', 'local', 'setlocal'})
+
+ command('noa setglobal backupext=ext_global')
+ command('noa setlocal backupext=ext_local') -- Sets the global(!) value
+ command('set backupext=foo')
+ expected_combination({
+ 'backupext', 'ext_local', 'ext_local', 'ext_local', 'foo', 'global', 'set'
+ })
+ end)
+
+ it('with string global-local (to buffer) option', function()
+ local oldval = eval('&tags')
+
+ command('set tags=tagpath')
+ expected_combination({'tags', oldval, oldval, oldval, 'tagpath', 'global', 'set'})
+
+ command('set tags&')
+ expected_combination({'tags', 'tagpath', 'tagpath', 'tagpath', oldval, 'global', 'set'})
+
+ command('setglobal tags=tagpath1')
+ expected_combination({'tags', oldval, '', oldval, 'tagpath1', 'global', 'setglobal'})
+
+ command('setlocal tags=tagpath2')
+ expected_combination({'tags', 'tagpath1', 'tagpath1', '', 'tagpath2', 'local', 'setlocal'})
+
+ -- Note: v:option_old is the old global value for global-local string options
+ -- but the old local value for all other kinds of options.
+ command('noa setglobal tags=tag_global')
+ command('noa setlocal tags=tag_local')
+ command('set tags=tagpath')
+ expected_combination({
+ 'tags', 'tag_global', 'tag_local', 'tag_global', 'tagpath', 'global', 'set'
+ })
+
+ -- Note: v:option_old is the old global value for global-local string options
+ -- but the old local value for all other kinds of options.
+ command('noa set tags=tag_global')
+ command('noa setlocal tags=')
+ command('set tags=tagpath')
+ expected_combination({'tags', 'tag_global', '', 'tag_global', 'tagpath', 'global', 'set'})
+ end)
+
+ it('with string local (to buffer) option', function()
+ local oldval = eval('&spelllang')
+
+ command('set spelllang=elvish,klingon')
+ expected_combination({'spelllang', oldval, oldval, oldval, 'elvish,klingon', 'global', 'set'})
+
+ command('set spelllang&')
+ expected_combination({
+ 'spelllang', 'elvish,klingon', 'elvish,klingon', 'elvish,klingon', oldval, 'global', 'set'
+ })
+
+ command('setglobal spelllang=elvish')
+ expected_combination({'spelllang', oldval, '', oldval, 'elvish', 'global', 'setglobal'})
+
+ command('noa set spelllang&')
+ command('setlocal spelllang=klingon')
+ expected_combination({'spelllang', oldval, oldval, '', 'klingon', 'local', 'setlocal'})
+
+ -- Note: v:option_old is the old global value for global-local string options
+ -- but the old local value for all other kinds of options.
+ command('noa setglobal spelllang=spellglobal')
+ command('noa setlocal spelllang=spelllocal')
+ command('set spelllang=foo')
+ expected_combination({
+ 'spelllang', 'spelllocal', 'spelllocal', 'spellglobal', 'foo', 'global', 'set'
+ })
+ end)
+
+ it('with string global-local (to window) option', function()
+ local oldval = eval('&statusline')
+
+ command('set statusline=foo')
+ expected_combination({'statusline', oldval, oldval, '', 'foo', 'global', 'set'})
+
+ -- Note: v:option_old is the old global value for global-local string options
+ -- but the old local value for all other kinds of options.
+ command('set statusline&')
+ expected_combination({'statusline', 'foo', 'foo', 'foo', oldval, 'global', 'set'})
+
+ command('setglobal statusline=bar')
+ expected_combination({'statusline', oldval, '', oldval, 'bar', 'global', 'setglobal'})
+
+ command('noa set statusline&')
+ command('setlocal statusline=baz')
+ expected_combination({'statusline', oldval, oldval, '', 'baz', 'local', 'setlocal'})
+
+ -- Note: v:option_old is the old global value for global-local string options
+ -- but the old local value for all other kinds of options.
+ command('noa setglobal statusline=bar')
+ command('noa setlocal statusline=baz')
+ command('set statusline=foo')
+ expected_combination({'statusline', 'bar', 'baz', 'bar', 'foo', 'global', 'set'})
+ end)
+
+ it('with string local (to window) option', function()
+ local oldval = eval('&foldignore')
+
+ command('set foldignore=fo')
+ expected_combination({'foldignore', oldval, oldval, oldval, 'fo', 'global', 'set'})
+
+ command('set foldignore&')
+ expected_combination({'foldignore', 'fo', 'fo', 'fo', oldval, 'global', 'set'})
+
+ command('setglobal foldignore=bar')
+ expected_combination({'foldignore', oldval, '', oldval, 'bar', 'global', 'setglobal'})
+
+ command('noa set foldignore&')
+ command('setlocal foldignore=baz')
+ expected_combination({'foldignore', oldval, oldval, '', 'baz', 'local', 'setlocal'})
+
+ command('noa setglobal foldignore=glob')
+ command('noa setlocal foldignore=loc')
+ command('set foldignore=fo')
+ expected_combination({'foldignore', 'loc', 'loc', 'glob', 'fo', 'global', 'set'})
+ end)
+
+ it('with number global option', function()
+ command('noa setglobal cmdheight=8')
+ command('noa setlocal cmdheight=1') -- Sets the global(!) value
+ command('setglobal cmdheight=2')
+ expected_combination({'cmdheight', 1, '', 1, 2, 'global', 'setglobal'})
+
+ command('noa setglobal cmdheight=8')
+ command('noa setlocal cmdheight=1') -- Sets the global(!) value
+ command('setlocal cmdheight=2')
+ expected_combination({'cmdheight', 1, 1, '', 2, 'local', 'setlocal'})
+
+ command('noa setglobal cmdheight=8')
+ command('noa setlocal cmdheight=1') -- Sets the global(!) value
+ command('set cmdheight=2')
+ expected_combination({'cmdheight', 1, 1, 1, 2, 'global', 'set'})
+
+ command('noa set cmdheight=8')
+ command('set cmdheight=2')
+ expected_combination({'cmdheight', 8, 8, 8, 2, 'global', 'set'})
+ end)
+
+ it('with number global-local (to buffer) option', function()
+ command('noa setglobal undolevels=8')
+ command('noa setlocal undolevels=1')
+ command('setglobal undolevels=2')
+ expected_combination({'undolevels', 8, '', 8, 2, 'global', 'setglobal'})
+
+ command('noa setglobal undolevels=8')
+ command('noa setlocal undolevels=1')
+ command('setlocal undolevels=2')
+ expected_combination({'undolevels', 1, 1, '', 2, 'local', 'setlocal'})
+
+ command('noa setglobal undolevels=8')
+ command('noa setlocal undolevels=1')
+ command('set undolevels=2')
+ expected_combination({'undolevels', 1, 1, 8, 2, 'global', 'set'})
+
+ command('noa set undolevels=8')
+ command('set undolevels=2')
+ expected_combination({'undolevels', 8, 8, 8, 2, 'global', 'set'})
+ end)
+
+ it('with number local (to buffer) option', function()
+ command('noa setglobal wrapmargin=8')
+ command('noa setlocal wrapmargin=1')
+ command('setglobal wrapmargin=2')
+ expected_combination({'wrapmargin', 8, '', 8, 2, 'global', 'setglobal'})
+
+ command('noa setglobal wrapmargin=8')
+ command('noa setlocal wrapmargin=1')
+ command('setlocal wrapmargin=2')
+ expected_combination({'wrapmargin', 1, 1, '', 2, 'local', 'setlocal'})
+
+ command('noa setglobal wrapmargin=8')
+ command('noa setlocal wrapmargin=1')
+ command('set wrapmargin=2')
+ expected_combination({'wrapmargin', 1, 1, 8, 2, 'global', 'set'})
+
+ command('noa set wrapmargin=8')
+ command('set wrapmargin=2')
+ expected_combination({'wrapmargin', 8, 8, 8, 2, 'global', 'set'})
+ end)
+
+ it('with number global-local (to window) option', function()
+ command('noa setglobal scrolloff=8')
+ command('noa setlocal scrolloff=1')
+ command('setglobal scrolloff=2')
+ expected_combination({'scrolloff', 8, '', 8, 2, 'global', 'setglobal'})
+
+ command('noa setglobal scrolloff=8')
+ command('noa setlocal scrolloff=1')
+ command('setlocal scrolloff=2')
+ expected_combination({'scrolloff', 1, 1, '', 2, 'local', 'setlocal'})
+
+ command('noa setglobal scrolloff=8')
+ command('noa setlocal scrolloff=1')
+ command('set scrolloff=2')
+ expected_combination({'scrolloff', 1, 1, 8, 2, 'global', 'set'})
+
+ command('noa set scrolloff=8')
+ command('set scrolloff=2')
+ expected_combination({'scrolloff', 8, 8, 8, 2, 'global', 'set'})
+ end)
+
+ it('with number local (to window) option', function()
+ command('noa setglobal foldcolumn=8')
+ command('noa setlocal foldcolumn=1')
+ command('setglobal foldcolumn=2')
+ expected_combination({'foldcolumn', 8, '', 8, 2, 'global', 'setglobal'})
+
+ command('noa setglobal foldcolumn=8')
+ command('noa setlocal foldcolumn=1')
+ command('setlocal foldcolumn=2')
+ expected_combination({'foldcolumn', 1, 1, '', 2, 'local', 'setlocal'})
+
+ command('noa setglobal foldcolumn=8')
+ command('noa setlocal foldcolumn=1')
+ command('set foldcolumn=2')
+ expected_combination({'foldcolumn', 1, 1, 8, 2, 'global', 'set'})
+
+ command('noa set foldcolumn=8')
+ command('set foldcolumn=2')
+ expected_combination({'foldcolumn', 8, 8, 8, 2, 'global', 'set'})
+ end)
+
+ it('with boolean global option', function()
+ command('noa setglobal nowrapscan')
+ command('noa setlocal wrapscan') -- Sets the global(!) value
+ command('setglobal nowrapscan')
+ expected_combination({'wrapscan', 1, '', 1, 0, 'global', 'setglobal'})
+
+ command('noa setglobal nowrapscan')
+ command('noa setlocal wrapscan') -- Sets the global(!) value
+ command('setlocal nowrapscan')
+ expected_combination({'wrapscan', 1, 1, '', 0, 'local', 'setlocal'})
+
+ command('noa setglobal nowrapscan')
+ command('noa setlocal wrapscan') -- Sets the global(!) value
+ command('set nowrapscan')
+ expected_combination({'wrapscan', 1, 1, 1, 0, 'global', 'set'})
+
+ command('noa set nowrapscan')
+ command('set wrapscan')
+ expected_combination({'wrapscan', 0, 0, 0, 1, 'global', 'set'})
+ end)
+
+ it('with boolean global-local (to buffer) option', function()
+ command('noa setglobal noautoread')
+ command('noa setlocal autoread')
+ command('setglobal autoread')
+ expected_combination({'autoread', 0, '', 0, 1, 'global', 'setglobal'})
+
+ command('noa setglobal noautoread')
+ command('noa setlocal autoread')
+ command('setlocal noautoread')
+ expected_combination({'autoread', 1, 1, '', 0, 'local', 'setlocal'})
+
+ command('noa setglobal noautoread')
+ command('noa setlocal autoread')
+ command('set autoread')
+ expected_combination({'autoread', 1, 1, 0, 1, 'global', 'set'})
+
+ command('noa set noautoread')
+ command('set autoread')
+ expected_combination({'autoread', 0, 0, 0, 1, 'global', 'set'})
+ end)
+
+ it('with boolean local (to buffer) option', function()
+ command('noa setglobal nocindent')
+ command('noa setlocal cindent')
+ command('setglobal cindent')
+ expected_combination({'cindent', 0, '', 0, 1, 'global', 'setglobal'})
+
+ command('noa setglobal nocindent')
+ command('noa setlocal cindent')
+ command('setlocal nocindent')
+ expected_combination({'cindent', 1, 1, '', 0, 'local', 'setlocal'})
+
+ command('noa setglobal nocindent')
+ command('noa setlocal cindent')
+ command('set cindent')
+ expected_combination({'cindent', 1, 1, 0, 1, 'global', 'set'})
+
+ command('noa set nocindent')
+ command('set cindent')
+ expected_combination({'cindent', 0, 0, 0, 1, 'global', 'set'})
+ end)
+
+ it('with boolean local (to window) option', function()
+ command('noa setglobal nocursorcolumn')
+ command('noa setlocal cursorcolumn')
+ command('setglobal cursorcolumn')
+ expected_combination({'cursorcolumn', 0, '', 0, 1, 'global', 'setglobal'})
+
+ command('noa setglobal nocursorcolumn')
+ command('noa setlocal cursorcolumn')
+ command('setlocal nocursorcolumn')
+ expected_combination({'cursorcolumn', 1, 1, '', 0, 'local', 'setlocal'})
+
+ command('noa setglobal nocursorcolumn')
+ command('noa setlocal cursorcolumn')
+ command('set cursorcolumn')
+ expected_combination({'cursorcolumn', 1, 1, 0, 1, 'global', 'set'})
+
+ command('noa set nocursorcolumn')
+ command('set cursorcolumn')
+ expected_combination({'cursorcolumn', 0, 0, 0, 1, 'global', 'set'})
+ end)
+
+ it('with option value converted internally', function()
+ command('noa set backspace=1')
+ command('set backspace=2')
+ expected_combination(({
+ 'backspace', 'indent,eol', 'indent,eol', 'indent,eol', '2', 'global', 'set'
+ }))
+ end)
end)
describe('with specific option', function()
@@ -228,13 +566,13 @@ describe('au OptionSet', function()
expected_empty()
command('setlocal ro')
- expected_combination({'readonly', 0, 1, 'local'})
+ expected_combination({'readonly', 0, 0, '', 1, 'local', 'setlocal'})
command('setglobal ro')
- expected_combination({'readonly', 0, 1, 'global'})
+ expected_combination({'readonly', 0, '', 0, 1, 'global', 'setglobal'})
command('set noro')
- expected_combination({'readonly', 1, 0, 'global'})
+ expected_combination({'readonly', 1, 1, 1, 0, 'global', 'set'})
end)
describe('being set by setbufvar()', function()
@@ -249,7 +587,7 @@ describe('au OptionSet', function()
set_hook('backup')
command('call setbufvar(1, "&backup", 1)')
- expected_combination({'backup', 0, 1, 'local'})
+ expected_combination({'backup', 0, 0, '', 1, 'local', 'setlocal'})
end)
it('should trigger if the current buffer is different from the targetted buffer', function()
@@ -259,7 +597,7 @@ describe('au OptionSet', function()
local new_bufnr = buf.get_number(new_buffer)
command('call setbufvar(' .. new_bufnr .. ', "&buftype", "nofile")')
- expected_combination({'buftype', '', 'nofile', 'local', {bufnr = new_bufnr}})
+ expected_combination({'buftype', '', '', '', 'nofile', 'local', 'setlocal', {bufnr = new_bufnr}})
end)
end)
@@ -275,7 +613,7 @@ describe('au OptionSet', function()
set_hook('backup')
command('call setwinvar(1, "&backup", 1)')
- expected_combination({'backup', 0, 1, 'local'})
+ expected_combination({'backup', 0, 0, '', 1, 'local', 'setlocal'})
end)
it('should not trigger if the current window is different from the targetted window', function()
@@ -295,7 +633,7 @@ describe('au OptionSet', function()
nvim.set_option('autochdir', true)
eq(true, nvim.get_option('autochdir'))
- expected_combination({'autochdir', '0', '1', 'global'})
+ expected_combination({'autochdir', 0, '', 0, 1, 'global', 'setglobal'})
end)
it('should trigger if a number option be set globally', function()
@@ -303,7 +641,7 @@ describe('au OptionSet', function()
nvim.set_option('cmdheight', 5)
eq(5, nvim.get_option('cmdheight'))
- expected_combination({'cmdheight', 1, 5, 'global'})
+ expected_combination({'cmdheight', 1, '', 1, 5, 'global', 'setglobal'})
end)
it('should trigger if a string option be set globally', function()
@@ -311,7 +649,7 @@ describe('au OptionSet', function()
nvim.set_option('ambiwidth', 'double')
eq('double', nvim.get_option('ambiwidth'))
- expected_combination({'ambiwidth', 'single', 'double', 'global'})
+ expected_combination({'ambiwidth', 'single', '', 'single', 'double', 'global', 'setglobal'})
end)
end)
end)