mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	functests: Add tests for XDG defaults
This commit is contained in:
		@@ -216,17 +216,47 @@ local function merge_args(...)
 | 
				
			|||||||
  return argv
 | 
					  return argv
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function spawn(argv, merge)
 | 
					local function spawn(argv, merge, env)
 | 
				
			||||||
  local child_stream = ChildProcessStream.spawn(merge and merge_args(prepend_argv, argv) or argv)
 | 
					  local child_stream = ChildProcessStream.spawn(
 | 
				
			||||||
 | 
					      merge and merge_args(prepend_argv, argv) or argv,
 | 
				
			||||||
 | 
					      env)
 | 
				
			||||||
  return Session.new(child_stream)
 | 
					  return Session.new(child_stream)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function clear(...)
 | 
					local function clear(...)
 | 
				
			||||||
  local args = {unpack(nvim_argv)}
 | 
					  local args = {unpack(nvim_argv)}
 | 
				
			||||||
  for _, arg in ipairs({...}) do
 | 
					  local new_args
 | 
				
			||||||
 | 
					  local env = nil
 | 
				
			||||||
 | 
					  local opts = select(1, ...)
 | 
				
			||||||
 | 
					  if type(opts) == 'table' then
 | 
				
			||||||
 | 
					    if opts.env then
 | 
				
			||||||
 | 
					      local env_tbl = {}
 | 
				
			||||||
 | 
					      for k, v in pairs(opts.env) do
 | 
				
			||||||
 | 
					        assert(type(k) == 'string')
 | 
				
			||||||
 | 
					        assert(type(v) == 'string')
 | 
				
			||||||
 | 
					        env_tbl[k] = v
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      for _, k in ipairs({
 | 
				
			||||||
 | 
					        'HOME',
 | 
				
			||||||
 | 
					        'ASAN_OPTIONS',
 | 
				
			||||||
 | 
					        'LD_LIBRARY_PATH', 'PATH',
 | 
				
			||||||
 | 
					        'NVIM_LOG_FILE',
 | 
				
			||||||
 | 
					      }) do
 | 
				
			||||||
 | 
					        env_tbl[k] = os.getenv(k)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      env = {}
 | 
				
			||||||
 | 
					      for k, v in pairs(env_tbl) do
 | 
				
			||||||
 | 
					        env[#env + 1] = k .. '=' .. v
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    new_args = opts.args or {}
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    new_args = {...}
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  for _, arg in ipairs(new_args) do
 | 
				
			||||||
    table.insert(args, arg)
 | 
					    table.insert(args, arg)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  set_session(spawn(args))
 | 
					  set_session(spawn(args, nil, env))
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function insert(...)
 | 
					local function insert(...)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,12 @@
 | 
				
			|||||||
local helpers = require('test.functional.helpers')(after_each)
 | 
					local helpers = require('test.functional.helpers')(after_each)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local Screen = require('test.functional.ui.screen')
 | 
					local Screen = require('test.functional.ui.screen')
 | 
				
			||||||
local eval, eq = helpers.eval, helpers.eq
 | 
					
 | 
				
			||||||
 | 
					local meths = helpers.meths
 | 
				
			||||||
local execute = helpers.execute
 | 
					local execute = helpers.execute
 | 
				
			||||||
 | 
					local clear = helpers.clear
 | 
				
			||||||
 | 
					local eval = helpers.eval
 | 
				
			||||||
 | 
					local eq = helpers.eq
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function init_session(...)
 | 
					local function init_session(...)
 | 
				
			||||||
  local args = { helpers.nvim_prog, '-i', 'NONE', '--embed',
 | 
					  local args = { helpers.nvim_prog, '-i', 'NONE', '--embed',
 | 
				
			||||||
@@ -76,3 +81,165 @@ describe('startup defaults', function()
 | 
				
			|||||||
    end)
 | 
					    end)
 | 
				
			||||||
  end)
 | 
					  end)
 | 
				
			||||||
end)
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe('XDG-based defaults', function()
 | 
				
			||||||
 | 
					  -- Need to be in separate describe() block to not run clear() twice.
 | 
				
			||||||
 | 
					  -- Do not put before_each() here for the same reasons.
 | 
				
			||||||
 | 
					  describe('with too long XDG variables', function()
 | 
				
			||||||
 | 
					    before_each(function()
 | 
				
			||||||
 | 
					      clear({env={
 | 
				
			||||||
 | 
					        XDG_CONFIG_HOME=('/x'):rep(4096),
 | 
				
			||||||
 | 
					        XDG_CONFIG_DIRS=(('/a'):rep(2048)
 | 
				
			||||||
 | 
					                         .. ':' .. ('/b'):rep(2048)
 | 
				
			||||||
 | 
					                         .. (':/c'):rep(512)),
 | 
				
			||||||
 | 
					        XDG_DATA_HOME=('/X'):rep(4096),
 | 
				
			||||||
 | 
					        XDG_DATA_DIRS=(('/A'):rep(2048)
 | 
				
			||||||
 | 
					                       .. ':' .. ('/B'):rep(2048)
 | 
				
			||||||
 | 
					                       .. (':/C'):rep(512)),
 | 
				
			||||||
 | 
					      }})
 | 
				
			||||||
 | 
					    end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it('are correctly set', function()
 | 
				
			||||||
 | 
					      eq((('/x'):rep(4096) .. '/nvim'
 | 
				
			||||||
 | 
					          .. ',' .. ('/a'):rep(2048) .. '/nvim'
 | 
				
			||||||
 | 
					          .. ',' .. ('/b'):rep(2048) .. '/nvim'
 | 
				
			||||||
 | 
					          .. (',' .. '/c/nvim'):rep(512)
 | 
				
			||||||
 | 
					          .. ',' .. ('/X'):rep(4096) .. '/nvim/site'
 | 
				
			||||||
 | 
					          .. ',' .. ('/A'):rep(2048) .. '/nvim/site'
 | 
				
			||||||
 | 
					          .. ',' .. ('/B'):rep(2048) .. '/nvim/site'
 | 
				
			||||||
 | 
					          .. (',' .. '/C/nvim/site'):rep(512)
 | 
				
			||||||
 | 
					          .. ',' .. eval('$VIMRUNTIME')
 | 
				
			||||||
 | 
					          .. (',' .. '/C/nvim/site/after'):rep(512)
 | 
				
			||||||
 | 
					          .. ',' .. ('/B'):rep(2048) .. '/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',' .. ('/A'):rep(2048) .. '/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',' .. ('/X'):rep(4096) .. '/nvim/site/after'
 | 
				
			||||||
 | 
					          .. (',' .. '/c/nvim/after'):rep(512)
 | 
				
			||||||
 | 
					          .. ',' .. ('/b'):rep(2048) .. '/nvim/after'
 | 
				
			||||||
 | 
					          .. ',' .. ('/a'):rep(2048) .. '/nvim/after'
 | 
				
			||||||
 | 
					          .. ',' .. ('/x'):rep(4096) .. '/nvim/after'
 | 
				
			||||||
 | 
					      ), meths.get_option('runtimepath'))
 | 
				
			||||||
 | 
					      meths.command('set runtimepath&')
 | 
				
			||||||
 | 
					      meths.command('set backupdir&')
 | 
				
			||||||
 | 
					      meths.command('set directory&')
 | 
				
			||||||
 | 
					      meths.command('set undodir&')
 | 
				
			||||||
 | 
					      meths.command('set viewdir&')
 | 
				
			||||||
 | 
					      eq((('/x'):rep(4096) .. '/nvim'
 | 
				
			||||||
 | 
					          .. ',' .. ('/a'):rep(2048) .. '/nvim'
 | 
				
			||||||
 | 
					          .. ',' .. ('/b'):rep(2048) .. '/nvim'
 | 
				
			||||||
 | 
					          .. (',' .. '/c/nvim'):rep(512)
 | 
				
			||||||
 | 
					          .. ',' .. ('/X'):rep(4096) .. '/nvim/site'
 | 
				
			||||||
 | 
					          .. ',' .. ('/A'):rep(2048) .. '/nvim/site'
 | 
				
			||||||
 | 
					          .. ',' .. ('/B'):rep(2048) .. '/nvim/site'
 | 
				
			||||||
 | 
					          .. (',' .. '/C/nvim/site'):rep(512)
 | 
				
			||||||
 | 
					          .. ',' .. eval('$VIMRUNTIME')
 | 
				
			||||||
 | 
					          .. (',' .. '/C/nvim/site/after'):rep(512)
 | 
				
			||||||
 | 
					          .. ',' .. ('/B'):rep(2048) .. '/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',' .. ('/A'):rep(2048) .. '/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',' .. ('/X'):rep(4096) .. '/nvim/site/after'
 | 
				
			||||||
 | 
					          .. (',' .. '/c/nvim/after'):rep(512)
 | 
				
			||||||
 | 
					          .. ',' .. ('/b'):rep(2048) .. '/nvim/after'
 | 
				
			||||||
 | 
					          .. ',' .. ('/a'):rep(2048) .. '/nvim/after'
 | 
				
			||||||
 | 
					          .. ',' .. ('/x'):rep(4096) .. '/nvim/after'
 | 
				
			||||||
 | 
					      ), meths.get_option('runtimepath'))
 | 
				
			||||||
 | 
					      eq('.,' .. ('/X'):rep(4096) .. '/nvim/backup',
 | 
				
			||||||
 | 
					         meths.get_option('backupdir'))
 | 
				
			||||||
 | 
					      eq(('/X'):rep(4096) .. '/nvim/swap//', meths.get_option('directory'))
 | 
				
			||||||
 | 
					      eq(('/X'):rep(4096) .. '/nvim/undo', meths.get_option('undodir'))
 | 
				
			||||||
 | 
					      eq(('/X'):rep(4096) .. '/nvim/view', meths.get_option('viewdir'))
 | 
				
			||||||
 | 
					    end)
 | 
				
			||||||
 | 
					  end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe('with XDG variables that can be expanded', function()
 | 
				
			||||||
 | 
					    before_each(function()
 | 
				
			||||||
 | 
					      clear({env={
 | 
				
			||||||
 | 
					        XDG_CONFIG_HOME='$XDG_DATA_HOME',
 | 
				
			||||||
 | 
					        XDG_CONFIG_DIRS='$XDG_DATA_DIRS',
 | 
				
			||||||
 | 
					        XDG_DATA_HOME='$XDG_CONFIG_HOME',
 | 
				
			||||||
 | 
					        XDG_DATA_DIRS='$XDG_CONFIG_DIRS',
 | 
				
			||||||
 | 
					      }})
 | 
				
			||||||
 | 
					    end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it('are not expanded', function()
 | 
				
			||||||
 | 
					      eq(('$XDG_DATA_HOME/nvim'
 | 
				
			||||||
 | 
					          .. ',$XDG_DATA_DIRS/nvim'
 | 
				
			||||||
 | 
					          .. ',$XDG_CONFIG_HOME/nvim/site'
 | 
				
			||||||
 | 
					          .. ',$XDG_CONFIG_DIRS/nvim/site'
 | 
				
			||||||
 | 
					          .. ',' .. eval('$VIMRUNTIME')
 | 
				
			||||||
 | 
					          .. ',$XDG_CONFIG_DIRS/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',$XDG_CONFIG_HOME/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',$XDG_DATA_DIRS/nvim/after'
 | 
				
			||||||
 | 
					          .. ',$XDG_DATA_HOME/nvim/after'
 | 
				
			||||||
 | 
					      ), meths.get_option('runtimepath'))
 | 
				
			||||||
 | 
					      meths.command('set runtimepath&')
 | 
				
			||||||
 | 
					      meths.command('set backupdir&')
 | 
				
			||||||
 | 
					      meths.command('set directory&')
 | 
				
			||||||
 | 
					      meths.command('set undodir&')
 | 
				
			||||||
 | 
					      meths.command('set viewdir&')
 | 
				
			||||||
 | 
					      eq(('$XDG_DATA_HOME/nvim'
 | 
				
			||||||
 | 
					          .. ',$XDG_DATA_DIRS/nvim'
 | 
				
			||||||
 | 
					          .. ',$XDG_CONFIG_HOME/nvim/site'
 | 
				
			||||||
 | 
					          .. ',$XDG_CONFIG_DIRS/nvim/site'
 | 
				
			||||||
 | 
					          .. ',' .. eval('$VIMRUNTIME')
 | 
				
			||||||
 | 
					          .. ',$XDG_CONFIG_DIRS/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',$XDG_CONFIG_HOME/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',$XDG_DATA_DIRS/nvim/after'
 | 
				
			||||||
 | 
					          .. ',$XDG_DATA_HOME/nvim/after'
 | 
				
			||||||
 | 
					      ), meths.get_option('runtimepath'))
 | 
				
			||||||
 | 
					      eq('.,$XDG_CONFIG_HOME/nvim/backup', meths.get_option('backupdir'))
 | 
				
			||||||
 | 
					      eq('$XDG_CONFIG_HOME/nvim/swap//', meths.get_option('directory'))
 | 
				
			||||||
 | 
					      eq('$XDG_CONFIG_HOME/nvim/undo', meths.get_option('undodir'))
 | 
				
			||||||
 | 
					      eq('$XDG_CONFIG_HOME/nvim/view', meths.get_option('viewdir'))
 | 
				
			||||||
 | 
					    end)
 | 
				
			||||||
 | 
					  end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe('with commas', function()
 | 
				
			||||||
 | 
					    before_each(function()
 | 
				
			||||||
 | 
					      clear({env={
 | 
				
			||||||
 | 
					        XDG_CONFIG_HOME=', , ,',
 | 
				
			||||||
 | 
					        XDG_CONFIG_DIRS=',-,-,:-,-,-',
 | 
				
			||||||
 | 
					        XDG_DATA_HOME=',=,=,',
 | 
				
			||||||
 | 
					        XDG_DATA_DIRS=',≡,≡,:≡,≡,≡',
 | 
				
			||||||
 | 
					      }})
 | 
				
			||||||
 | 
					    end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it('are escaped properly', function()
 | 
				
			||||||
 | 
					      eq(('\\, \\, \\,/nvim'
 | 
				
			||||||
 | 
					          .. ',\\,-\\,-\\,/nvim'
 | 
				
			||||||
 | 
					          .. ',-\\,-\\,-/nvim'
 | 
				
			||||||
 | 
					          .. ',\\,=\\,=\\,/nvim/site'
 | 
				
			||||||
 | 
					          .. ',\\,≡\\,≡\\,/nvim/site'
 | 
				
			||||||
 | 
					          .. ',≡\\,≡\\,≡/nvim/site'
 | 
				
			||||||
 | 
					          .. ',' .. eval('$VIMRUNTIME')
 | 
				
			||||||
 | 
					          .. ',≡\\,≡\\,≡/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',\\,≡\\,≡\\,/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',\\,=\\,=\\,/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',-\\,-\\,-/nvim/after'
 | 
				
			||||||
 | 
					          .. ',\\,-\\,-\\,/nvim/after'
 | 
				
			||||||
 | 
					          .. ',\\, \\, \\,/nvim/after'
 | 
				
			||||||
 | 
					      ), meths.get_option('runtimepath'))
 | 
				
			||||||
 | 
					      meths.command('set runtimepath&')
 | 
				
			||||||
 | 
					      meths.command('set backupdir&')
 | 
				
			||||||
 | 
					      meths.command('set directory&')
 | 
				
			||||||
 | 
					      meths.command('set undodir&')
 | 
				
			||||||
 | 
					      meths.command('set viewdir&')
 | 
				
			||||||
 | 
					      eq(('\\, \\, \\,/nvim'
 | 
				
			||||||
 | 
					          .. ',\\,-\\,-\\,/nvim'
 | 
				
			||||||
 | 
					          .. ',-\\,-\\,-/nvim'
 | 
				
			||||||
 | 
					          .. ',\\,=\\,=\\,/nvim/site'
 | 
				
			||||||
 | 
					          .. ',\\,≡\\,≡\\,/nvim/site'
 | 
				
			||||||
 | 
					          .. ',≡\\,≡\\,≡/nvim/site'
 | 
				
			||||||
 | 
					          .. ',' .. eval('$VIMRUNTIME')
 | 
				
			||||||
 | 
					          .. ',≡\\,≡\\,≡/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',\\,≡\\,≡\\,/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',\\,=\\,=\\,/nvim/site/after'
 | 
				
			||||||
 | 
					          .. ',-\\,-\\,-/nvim/after'
 | 
				
			||||||
 | 
					          .. ',\\,-\\,-\\,/nvim/after'
 | 
				
			||||||
 | 
					          .. ',\\, \\, \\,/nvim/after'
 | 
				
			||||||
 | 
					      ), meths.get_option('runtimepath'))
 | 
				
			||||||
 | 
					      eq('.,\\,=\\,=\\,/nvim/backup', meths.get_option('backupdir'))
 | 
				
			||||||
 | 
					      eq('\\,=\\,=\\,/nvim/swap//', meths.get_option('directory'))
 | 
				
			||||||
 | 
					      eq('\\,=\\,=\\,/nvim/undo', meths.get_option('undodir'))
 | 
				
			||||||
 | 
					      eq('\\,=\\,=\\,/nvim/view', meths.get_option('viewdir'))
 | 
				
			||||||
 | 
					    end)
 | 
				
			||||||
 | 
					  end)
 | 
				
			||||||
 | 
					end)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								third-party/cmake/BuildLuarocks.cmake
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								third-party/cmake/BuildLuarocks.cmake
									
									
									
									
										vendored
									
									
								
							@@ -152,7 +152,7 @@ if(USE_BUNDLED_BUSTED)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  add_custom_command(OUTPUT ${HOSTDEPS_LIB_DIR}/luarocks/rocks/nvim-client
 | 
					  add_custom_command(OUTPUT ${HOSTDEPS_LIB_DIR}/luarocks/rocks/nvim-client
 | 
				
			||||||
    COMMAND ${LUAROCKS_BINARY}
 | 
					    COMMAND ${LUAROCKS_BINARY}
 | 
				
			||||||
    ARGS build https://raw.githubusercontent.com/neovim/lua-client/0.0.1-24/nvim-client-0.0.1-24.rockspec ${LUAROCKS_BUILDARGS}
 | 
					    ARGS build https://raw.githubusercontent.com/neovim/lua-client/0.0.1-25/nvim-client-0.0.1-25.rockspec ${LUAROCKS_BUILDARGS}
 | 
				
			||||||
    DEPENDS luv)
 | 
					    DEPENDS luv)
 | 
				
			||||||
  add_custom_target(nvim-client
 | 
					  add_custom_target(nvim-client
 | 
				
			||||||
    DEPENDS ${HOSTDEPS_LIB_DIR}/luarocks/rocks/nvim-client)
 | 
					    DEPENDS ${HOSTDEPS_LIB_DIR}/luarocks/rocks/nvim-client)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user