diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2023-11-29 21:52:58 +0000 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2023-11-29 21:52:58 +0000 |
commit | 931bffbda3668ddc609fc1da8f9eb576b170aa52 (patch) | |
tree | d8c1843a95da5ea0bb4acc09f7e37843d9995c86 /test/functional/options/defaults_spec.lua | |
parent | 142d9041391780ac15b89886a54015fdc5c73995 (diff) | |
parent | 4a8bf24ac690004aedf5540fa440e788459e5e34 (diff) | |
download | rneovim-userreg.tar.gz rneovim-userreg.tar.bz2 rneovim-userreg.zip |
Merge remote-tracking branch 'upstream/master' into userreguserreg
Diffstat (limited to 'test/functional/options/defaults_spec.lua')
-rw-r--r-- | test/functional/options/defaults_spec.lua | 146 |
1 files changed, 99 insertions, 47 deletions
diff --git a/test/functional/options/defaults_spec.lua b/test/functional/options/defaults_spec.lua index 84ec43f4cb..7858b626de 100644 --- a/test/functional/options/defaults_spec.lua +++ b/test/functional/options/defaults_spec.lua @@ -8,6 +8,7 @@ local meths = helpers.meths local command = helpers.command local clear = helpers.clear local exc_exec = helpers.exc_exec +local exec_lua = helpers.exec_lua local eval = helpers.eval local eq = helpers.eq local ok = helpers.ok @@ -199,11 +200,23 @@ describe('startup defaults', function() it("'shadafile' ('viminfofile')", function() local env = {XDG_DATA_HOME='Xtest-userdata', XDG_STATE_HOME='Xtest-userstate', XDG_CONFIG_HOME='Xtest-userconfig'} + finally(function() + command('set shadafile=NONE') -- Avoid writing shada file on exit + rmdir('Xtest-userstate') + os.remove('Xtest-foo') + end) + clear{args={}, args_rm={'-i'}, env=env} -- Default 'shadafile' is empty. -- This means use the default location. :help shada-file-name - eq('', meths.get_option('shadafile')) - eq('', meths.get_option('viminfofile')) + eq('', meths.get_option_value('shadafile', {})) + eq('', meths.get_option_value('viminfofile', {})) + -- Handles viminfo/viminfofile as alias for shada/shadafile. + eq('\n shadafile=', eval('execute("set shadafile?")')) + eq('\n shadafile=', eval('execute("set viminfofile?")')) + eq("\n shada=!,'100,<50,s10,h", eval('execute("set shada?")')) + eq("\n shada=!,'100,<50,s10,h", eval('execute("set viminfo?")')) + -- Check that shada data (such as v:oldfiles) is saved/restored. command('edit Xtest-foo') command('write') @@ -212,14 +225,6 @@ describe('startup defaults', function() expect_exit(command, 'qall') clear{args={}, args_rm={'-i'}, env=env} eq({ f }, eval('v:oldfiles')) - os.remove('Xtest-foo') - rmdir('Xtest-userstate') - - -- Handles viminfo/viminfofile as alias for shada/shadafile. - eq('\n shadafile=', eval('execute("set shadafile?")')) - eq('\n shadafile=', eval('execute("set viminfofile?")')) - eq("\n shada=!,'100,<50,s10,h", eval('execute("set shada?")')) - eq("\n shada=!,'100,<50,s10,h", eval('execute("set viminfo?")')) end) it("'packpath'", function() @@ -227,13 +232,13 @@ describe('startup defaults', function() args_rm={'runtimepath'}, } -- Defaults to &runtimepath. - eq(meths.get_option('runtimepath'), meths.get_option('packpath')) + eq(meths.get_option_value('runtimepath', {}), meths.get_option_value('packpath', {})) -- Does not follow modifications to runtimepath. meths.command('set runtimepath+=foo') - neq(meths.get_option('runtimepath'), meths.get_option('packpath')) + neq(meths.get_option_value('runtimepath', {}), meths.get_option_value('packpath', {})) meths.command('set packpath+=foo') - eq(meths.get_option('runtimepath'), meths.get_option('packpath')) + eq(meths.get_option_value('runtimepath', {}), meths.get_option_value('packpath', {})) end) it('v:progpath is set to the absolute path', function() @@ -318,10 +323,10 @@ describe('XDG defaults', function() USER=nil, }}) - eq('.', meths.get_option('backupdir')) - eq('.', meths.get_option('viewdir')) - eq('.', meths.get_option('directory')) - eq('.', meths.get_option('undodir')) + eq('.', meths.get_option_value('backupdir', {})) + eq('.', meths.get_option_value('viewdir', {})) + eq('.', meths.get_option_value('directory', {})) + eq('.', meths.get_option_value('undodir', {})) ok((funcs.tempname()):len() > 4) end) end) @@ -383,7 +388,7 @@ describe('XDG defaults', function() .. ',' .. root_path .. ('/b'):rep(2048) .. '/nvim/after' .. ',' .. root_path .. ('/a'):rep(2048) .. '/nvim/after' .. ',' .. root_path .. ('/x'):rep(4096) .. '/nvim/after' - ):gsub('\\', '/')), (meths.get_option('runtimepath')):gsub('\\', '/')) + ):gsub('\\', '/')), (meths.get_option_value('runtimepath', {})):gsub('\\', '/')) meths.command('set runtimepath&') meths.command('set backupdir&') meths.command('set directory&') @@ -407,15 +412,15 @@ describe('XDG defaults', function() .. ',' .. root_path .. ('/b'):rep(2048) .. '/nvim/after' .. ',' .. root_path .. ('/a'):rep(2048) .. '/nvim/after' .. ',' .. root_path .. ('/x'):rep(4096) .. '/nvim/after' - ):gsub('\\', '/')), (meths.get_option('runtimepath')):gsub('\\', '/')) + ):gsub('\\', '/')), (meths.get_option_value('runtimepath', {})):gsub('\\', '/')) eq('.,' .. root_path .. ('/X'):rep(4096).. '/' .. state_dir .. '/backup//', - (meths.get_option('backupdir'):gsub('\\', '/'))) + (meths.get_option_value('backupdir', {}):gsub('\\', '/'))) eq(root_path .. ('/X'):rep(4096) .. '/' .. state_dir .. '/swap//', - (meths.get_option('directory')):gsub('\\', '/')) + (meths.get_option_value('directory', {})):gsub('\\', '/')) eq(root_path .. ('/X'):rep(4096) .. '/' .. state_dir .. '/undo//', - (meths.get_option('undodir')):gsub('\\', '/')) + (meths.get_option_value('undodir', {})):gsub('\\', '/')) eq(root_path .. ('/X'):rep(4096) .. '/' .. state_dir .. '/view//', - (meths.get_option('viewdir')):gsub('\\', '/')) + (meths.get_option_value('viewdir', {})):gsub('\\', '/')) end) end) @@ -431,7 +436,12 @@ describe('XDG defaults', function() XDG_RUNTIME_DIR='$XDG_RUNTIME_DIR', XDG_STATE_HOME='$XDG_CONFIG_HOME', XDG_DATA_DIRS='$XDG_CONFIG_DIRS', - }}) + } + }) + end) + + after_each(function() + command('set shadafile=NONE') -- Avoid writing shada file on exit end) it('are not expanded', function() @@ -450,7 +460,7 @@ describe('XDG defaults', function() .. ',$XDG_CONFIG_HOME/' .. data_dir .. '/site/after' .. ',$XDG_DATA_DIRS/nvim/after' .. ',$XDG_DATA_HOME/nvim/after' - ):gsub('\\', '/')), (meths.get_option('runtimepath')):gsub('\\', '/')) + ):gsub('\\', '/')), (meths.get_option_value('runtimepath', {})):gsub('\\', '/')) meths.command('set runtimepath&') meths.command('set backupdir&') meths.command('set directory&') @@ -466,15 +476,15 @@ describe('XDG defaults', function() .. ',$XDG_CONFIG_HOME/' .. data_dir .. '/site/after' .. ',$XDG_DATA_DIRS/nvim/after' .. ',$XDG_DATA_HOME/nvim/after' - ):gsub('\\', '/')), (meths.get_option('runtimepath')):gsub('\\', '/')) + ):gsub('\\', '/')), (meths.get_option_value('runtimepath', {})):gsub('\\', '/')) eq(('.,$XDG_CONFIG_HOME/' .. state_dir .. '/backup//'), - meths.get_option('backupdir'):gsub('\\', '/')) + meths.get_option_value('backupdir', {}):gsub('\\', '/')) eq(('$XDG_CONFIG_HOME/' .. state_dir .. '/swap//'), - meths.get_option('directory'):gsub('\\', '/')) + meths.get_option_value('directory', {}):gsub('\\', '/')) eq(('$XDG_CONFIG_HOME/' .. state_dir .. '/undo//'), - meths.get_option('undodir'):gsub('\\', '/')) + meths.get_option_value('undodir', {}):gsub('\\', '/')) eq(('$XDG_CONFIG_HOME/' .. state_dir .. '/view//'), - meths.get_option('viewdir'):gsub('\\', '/')) + meths.get_option_value('viewdir', {}):gsub('\\', '/')) meths.command('set all&') eq(('$XDG_DATA_HOME/nvim' .. ',$XDG_DATA_DIRS/nvim' @@ -486,15 +496,15 @@ describe('XDG defaults', function() .. ',$XDG_CONFIG_HOME/' .. data_dir .. '/site/after' .. ',$XDG_DATA_DIRS/nvim/after' .. ',$XDG_DATA_HOME/nvim/after' - ):gsub('\\', '/'), (meths.get_option('runtimepath')):gsub('\\', '/')) + ):gsub('\\', '/'), (meths.get_option_value('runtimepath', {})):gsub('\\', '/')) eq(('.,$XDG_CONFIG_HOME/' .. state_dir .. '/backup//'), - meths.get_option('backupdir'):gsub('\\', '/')) + meths.get_option_value('backupdir', {}):gsub('\\', '/')) eq(('$XDG_CONFIG_HOME/' .. state_dir .. '/swap//'), - meths.get_option('directory'):gsub('\\', '/')) + meths.get_option_value('directory', {}):gsub('\\', '/')) eq(('$XDG_CONFIG_HOME/' .. state_dir .. '/undo//'), - meths.get_option('undodir'):gsub('\\', '/')) + meths.get_option_value('undodir', {}):gsub('\\', '/')) eq(('$XDG_CONFIG_HOME/' .. state_dir .. '/view//'), - meths.get_option('viewdir'):gsub('\\', '/')) + meths.get_option_value('viewdir', {}):gsub('\\', '/')) eq(nil, (funcs.tempname()):match('XDG_RUNTIME_DIR')) end) end) @@ -529,7 +539,7 @@ describe('XDG defaults', function() .. ',-\\,-\\,-' .. path_sep .. 'nvim' .. path_sep .. 'after' .. ',\\,-\\,-\\,' .. path_sep .. 'nvim' .. path_sep .. 'after' .. ',\\, \\, \\,' .. path_sep .. 'nvim' .. path_sep .. 'after' - ), meths.get_option('runtimepath')) + ), meths.get_option_value('runtimepath', {})) meths.command('set runtimepath&') meths.command('set backupdir&') meths.command('set directory&') @@ -549,15 +559,15 @@ describe('XDG defaults', function() .. ',-\\,-\\,-' .. path_sep ..'nvim' .. path_sep ..'after' .. ',\\,-\\,-\\,' .. path_sep ..'nvim' .. path_sep ..'after' .. ',\\, \\, \\,' .. path_sep ..'nvim' .. path_sep ..'after' - ), meths.get_option('runtimepath')) + ), meths.get_option_value('runtimepath', {})) eq('.,\\,=\\,=\\,' .. path_sep .. state_dir .. '' .. path_sep ..'backup' .. (path_sep):rep(2), - meths.get_option('backupdir')) + meths.get_option_value('backupdir', {})) eq('\\,=\\,=\\,' .. path_sep ..'' .. state_dir .. '' .. path_sep ..'swap' .. (path_sep):rep(2), - meths.get_option('directory')) + meths.get_option_value('directory', {})) eq('\\,=\\,=\\,' .. path_sep ..'' .. state_dir .. '' .. path_sep ..'undo' .. (path_sep):rep(2), - meths.get_option('undodir')) + meths.get_option_value('undodir', {})) eq('\\,=\\,=\\,' .. path_sep ..'' .. state_dir .. '' .. path_sep ..'view' .. (path_sep):rep(2), - meths.get_option('viewdir')) + meths.get_option_value('viewdir', {})) end) end) end) @@ -566,8 +576,12 @@ end) describe('stdpath()', function() -- Windows appends 'nvim-data' instead of just 'nvim' to prevent collisions -- due to XDG_CONFIG_HOME, XDG_DATA_HOME and XDG_STATE_HOME being the same. - local datadir = is_os('win') and 'nvim-data' or 'nvim' - local statedir = is_os('win') and 'nvim-data' or 'nvim' + local function maybe_data(name) + return is_os('win') and name .. '-data' or name + end + + local datadir = maybe_data('nvim') + local statedir = maybe_data('nvim') local env_sep = is_os('win') and ';' or ':' it('acceptance', function() @@ -583,7 +597,45 @@ describe('stdpath()', function() assert_alive() -- Check for crash. #8393 end) - context('returns a String', function() + it('reacts to $NVIM_APPNAME', function() + local appname = 'NVIM_APPNAME_TEST' .. ('_'):rep(106) + clear({env={ NVIM_APPNAME=appname }}) + eq(appname, funcs.fnamemodify(funcs.stdpath('config'), ':t')) + eq(appname, funcs.fnamemodify(funcs.stdpath('cache'), ':t')) + eq(maybe_data(appname), funcs.fnamemodify(funcs.stdpath('log'), ':t')) + eq(maybe_data(appname), funcs.fnamemodify(funcs.stdpath('data'), ':t')) + eq(maybe_data(appname), funcs.fnamemodify(funcs.stdpath('state'), ':t')) + -- config_dirs and data_dirs are empty on windows, so don't check them on + -- that platform + if not is_os('win') then + eq(appname, funcs.fnamemodify(funcs.stdpath('config_dirs')[1], ':t')) + eq(appname, funcs.fnamemodify(funcs.stdpath('data_dirs')[1], ':t')) + end + assert_alive() -- Check for crash. #8393 + + -- Check that Nvim rejects invalid APPNAMEs + -- Call jobstart() and jobwait() in the same RPC request to reduce flakiness. + local function test_appname(testAppname, expected_exitcode) + local lua_code = string.format([[ + local child = vim.fn.jobstart({ vim.v.progpath, '--clean', '--headless', '+qall!' }, { env = { NVIM_APPNAME = %q } }) + return vim.fn.jobwait({ child }, %d)[1] + ]], alter_slashes(testAppname), 3000) + eq(expected_exitcode, exec_lua(lua_code)) + end + -- Invalid appnames: + test_appname('a/../b', 1) + test_appname('../a', 1) + test_appname('a/..', 1) + test_appname('..', 1) + test_appname('.', 1) + test_appname('/', 1) + test_appname(is_os('win') and 'C:/a/b' or '/a/b', 1) + -- Valid appnames: + test_appname('a/b', 0) + test_appname('a/b\\c', 0) + end) + + describe('returns a String', function() describe('with "config"' , function () it('knows XDG_CONFIG_HOME', function() @@ -718,7 +770,7 @@ describe('stdpath()', function() end) end) - context('returns a List', function() + describe('returns a List', function() -- Some OS specific variables the system would have set. local function base_env() if is_os('win') then @@ -870,8 +922,8 @@ describe('stdpath()', function() end) it('on non-strings', function() - eq('Vim(call):E731: using Dictionary as a String', exc_exec('call stdpath({"eris": 23})')) - eq('Vim(call):E730: using List as a String', exc_exec('call stdpath([23])')) + eq('Vim(call):E731: Using a Dictionary as a String', exc_exec('call stdpath({"eris": 23})')) + eq('Vim(call):E730: Using a List as a String', exc_exec('call stdpath([23])')) end) end) end) |