diff options
author | erw7 <erw7.github@gmail.com> | 2020-09-08 14:40:12 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-07 22:40:12 -0700 |
commit | aa4557920696c45335f42f03e7b23b7038b5864e (patch) | |
tree | 9196fdfc30fcfca719d8ddf3bad32051646c67da | |
parent | 6abbc157af0d94cf2f8840511a744422db382eae (diff) | |
download | rneovim-aa4557920696c45335f42f03e7b23b7038b5864e.tar.gz rneovim-aa4557920696c45335f42f03e7b23b7038b5864e.tar.bz2 rneovim-aa4557920696c45335f42f03e7b23b7038b5864e.zip |
win/env: fix stdpath()/XDG_* initialization, parsing #12829
- Windows environment variables are semicolon-separated, but some logic
was assuming colon (:). This broke initialization and parsing of
XDG_CONFIG_DIRS, XDG_DATA_DIRS, 'runtimepath', stdpath(), etc.
- test/defaults_spec: enable tests on Windows
ref #12793
-rw-r--r-- | src/nvim/eval.c | 2 | ||||
-rw-r--r-- | src/nvim/option.c | 56 | ||||
-rw-r--r-- | test/functional/options/defaults_spec.lua | 220 |
3 files changed, 149 insertions, 129 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 21a5603b93..32830c5d7f 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -7075,7 +7075,7 @@ void get_xdg_var_list(const XDGVarType xdg, typval_T *rettv) do { size_t dir_len; const char *dir; - iter = vim_env_iter(':', dirs, iter, &dir, &dir_len); + iter = vim_env_iter(ENV_SEPCHAR, dirs, iter, &dir, &dir_len); if (dir != NULL && dir_len > 0) { char *dir_with_nvim = xmemdupz(dir, dir_len); dir_with_nvim = concat_fnames_realloc(dir_with_nvim, "nvim", true); diff --git a/src/nvim/option.c b/src/nvim/option.c index a70a634966..8d74cead8d 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -347,22 +347,23 @@ static char *strcpy_comma_escaped(char *dest, const char *src, const size_t len) return &dest[len + shift]; } -/// Compute length of a colon-separated value, doubled and with some suffixes +/// Compute length of a ENV_SEPCHAR-separated value, doubled and with some +/// suffixes /// -/// @param[in] val Colon-separated array value. +/// @param[in] val ENV_SEPCHAR-separated array value. /// @param[in] common_suf_len Length of the common suffix which is appended to /// each item in the array, twice. /// @param[in] single_suf_len Length of the suffix which is appended to each /// item in the array once. /// -/// @return Length of the comma-separated string array that contains each item -/// in the original array twice with suffixes with given length +/// @return Length of the ENV_SEPCHAR-separated string array that contains each +/// item in the original array twice with suffixes with given length /// (common_suf is present after each new item, single_suf is present /// after half of the new items) and with commas after each item, commas /// inside the values are escaped. -static inline size_t compute_double_colon_len(const char *const val, - const size_t common_suf_len, - const size_t single_suf_len) +static inline size_t compute_double_env_sep_len(const char *const val, + const size_t common_suf_len, + const size_t single_suf_len) FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE { if (val == NULL || *val == NUL) { @@ -373,7 +374,7 @@ static inline size_t compute_double_colon_len(const char *const val, do { size_t dir_len; const char *dir; - iter = vim_env_iter(':', val, iter, &dir, &dir_len); + iter = vim_env_iter(ENV_SEPCHAR, val, iter, &dir, &dir_len); if (dir != NULL && dir_len > 0) { ret += ((dir_len + memcnt(dir, ',', dir_len) + common_suf_len + !after_pathsep(dir, dir + dir_len)) * 2 @@ -385,13 +386,13 @@ static inline size_t compute_double_colon_len(const char *const val, #define NVIM_SIZE (sizeof("nvim") - 1) -/// Add directories to a comma-separated array from a colon-separated one +/// Add directories to a ENV_SEPCHAR-separated array from a colon-separated one /// /// Commas are escaped in process. To each item PATHSEP "nvim" is appended in /// addition to suf1 and suf2. /// /// @param[in,out] dest Destination comma-separated array. -/// @param[in] val Source colon-separated array. +/// @param[in] val Source ENV_SEPCHAR-separated array. /// @param[in] suf1 If not NULL, suffix appended to destination. Prior to it /// directory separator is appended. Suffix must not contain /// commas. @@ -404,10 +405,10 @@ static inline size_t compute_double_colon_len(const char *const val, /// Otherwise in reverse. /// /// @return (dest + appended_characters_length) -static inline char *add_colon_dirs(char *dest, const char *const val, - const char *const suf1, const size_t len1, - const char *const suf2, const size_t len2, - const bool forward) +static inline char *add_env_sep_dirs(char *dest, const char *const val, + const char *const suf1, const size_t len1, + const char *const suf2, const size_t len2, + const bool forward) FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_RET FUNC_ATTR_NONNULL_ARG(1) { if (val == NULL || *val == NUL) { @@ -417,8 +418,8 @@ static inline char *add_colon_dirs(char *dest, const char *const val, do { size_t dir_len; const char *dir; - iter = (forward ? vim_env_iter : vim_env_iter_rev)(':', val, iter, &dir, - &dir_len); + iter = (forward ? vim_env_iter : vim_env_iter_rev)(ENV_SEPCHAR, val, iter, + &dir, &dir_len); if (dir != NULL && dir_len > 0) { dest = strcpy_comma_escaped(dest, dir, dir_len); if (!after_pathsep(dest - 1, dest)) { @@ -581,10 +582,11 @@ static void set_runtimepath_default(bool clean_arg) rtp_size += libdir_len + memcnt(libdir, ',', libdir_len) + 1; } } - rtp_size += compute_double_colon_len(data_dirs, NVIM_SIZE + 1 + SITE_SIZE + 1, - AFTER_SIZE + 1); - rtp_size += compute_double_colon_len(config_dirs, NVIM_SIZE + 1, - AFTER_SIZE + 1); + rtp_size += compute_double_env_sep_len(data_dirs, + NVIM_SIZE + 1 + SITE_SIZE + 1, + AFTER_SIZE + 1); + rtp_size += compute_double_env_sep_len(config_dirs, NVIM_SIZE + 1, + AFTER_SIZE + 1); if (rtp_size == 0) { return; } @@ -592,20 +594,20 @@ static void set_runtimepath_default(bool clean_arg) char *rtp_cur = rtp; rtp_cur = add_dir(rtp_cur, config_home, config_len, kXDGConfigHome, NULL, 0, NULL, 0); - rtp_cur = add_colon_dirs(rtp_cur, config_dirs, NULL, 0, NULL, 0, true); + rtp_cur = add_env_sep_dirs(rtp_cur, config_dirs, NULL, 0, NULL, 0, true); rtp_cur = add_dir(rtp_cur, data_home, data_len, kXDGDataHome, "site", SITE_SIZE, NULL, 0); - rtp_cur = add_colon_dirs(rtp_cur, data_dirs, "site", SITE_SIZE, NULL, 0, - true); + rtp_cur = add_env_sep_dirs(rtp_cur, data_dirs, "site", SITE_SIZE, NULL, 0, + true); rtp_cur = add_dir(rtp_cur, vimruntime, vimruntime_len, kXDGNone, NULL, 0, NULL, 0); rtp_cur = add_dir(rtp_cur, libdir, libdir_len, kXDGNone, NULL, 0, NULL, 0); - rtp_cur = add_colon_dirs(rtp_cur, data_dirs, "site", SITE_SIZE, - "after", AFTER_SIZE, false); + rtp_cur = add_env_sep_dirs(rtp_cur, data_dirs, "site", SITE_SIZE, + "after", AFTER_SIZE, false); rtp_cur = add_dir(rtp_cur, data_home, data_len, kXDGDataHome, "site", SITE_SIZE, "after", AFTER_SIZE); - rtp_cur = add_colon_dirs(rtp_cur, config_dirs, "after", AFTER_SIZE, NULL, 0, - false); + rtp_cur = add_env_sep_dirs(rtp_cur, config_dirs, "after", AFTER_SIZE, NULL, 0, + false); rtp_cur = add_dir(rtp_cur, config_home, config_len, kXDGConfigHome, "after", AFTER_SIZE, NULL, 0); // Strip trailing comma. diff --git a/test/functional/options/defaults_spec.lua b/test/functional/options/defaults_spec.lua index 11ce26410d..92d077ed14 100644 --- a/test/functional/options/defaults_spec.lua +++ b/test/functional/options/defaults_spec.lua @@ -290,9 +290,6 @@ describe('XDG-based defaults', function() end) end) - -- TODO(jkeyes): tests below fail on win32 because of path separator. - if helpers.pending_win32(pending) then return end - local function vimruntime_and_libdir() local vimruntime = eval('$VIMRUNTIME') -- libdir is hard to calculate reliably across various ci platforms @@ -301,71 +298,78 @@ describe('XDG-based defaults', function() return vimruntime, libdir end + local env_sep = iswin() and ';' or ':' + local data_dir = iswin() and 'nvim-data' or 'nvim' + local root_path = iswin() and 'C:' or '' + 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)), + XDG_CONFIG_HOME=(root_path .. ('/x'):rep(4096)), + XDG_CONFIG_DIRS=(root_path .. ('/a'):rep(2048) + .. env_sep.. root_path .. ('/b'):rep(2048) + .. (env_sep .. root_path .. '/c'):rep(512)), + XDG_DATA_HOME=(root_path .. ('/X'):rep(4096)), + XDG_DATA_DIRS=(root_path .. ('/A'):rep(2048) + .. env_sep .. root_path .. ('/B'):rep(2048) + .. (env_sep .. root_path .. '/C'):rep(512)), }}) end) it('are correctly set', function() local vimruntime, libdir = vimruntime_and_libdir() - 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) + eq(((root_path .. ('/x'):rep(4096) .. '/nvim' + .. ',' .. root_path .. ('/a'):rep(2048) .. '/nvim' + .. ',' .. root_path .. ('/b'):rep(2048) .. '/nvim' + .. (',' .. root_path .. '/c/nvim'):rep(512) + .. ',' .. root_path .. ('/X'):rep(4096) .. '/' .. data_dir .. '/site' + .. ',' .. root_path .. ('/A'):rep(2048) .. '/nvim/site' + .. ',' .. root_path .. ('/B'):rep(2048) .. '/nvim/site' + .. (',' .. root_path .. '/C/nvim/site'):rep(512) .. ',' .. vimruntime .. ',' .. libdir - .. (',' .. '/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')) + .. (',' .. root_path .. '/C/nvim/site/after'):rep(512) + .. ',' .. root_path .. ('/B'):rep(2048) .. '/nvim/site/after' + .. ',' .. root_path .. ('/A'):rep(2048) .. '/nvim/site/after' + .. ',' .. root_path .. ('/X'):rep(4096) .. '/' .. data_dir .. '/site/after' + .. (',' .. root_path .. '/c/nvim/after'):rep(512) + .. ',' .. 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('\\', '/')) 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) + eq(((root_path .. ('/x'):rep(4096) .. '/nvim' + .. ',' .. root_path .. ('/a'):rep(2048) .. '/nvim' + .. ',' .. root_path .. ('/b'):rep(2048) .. '/nvim' + .. (',' .. root_path .. '/c/nvim'):rep(512) + .. ',' .. root_path .. ('/X'):rep(4096) .. '/' .. data_dir .. '/site' + .. ',' .. root_path .. ('/A'):rep(2048) .. '/nvim/site' + .. ',' .. root_path .. ('/B'):rep(2048) .. '/nvim/site' + .. (',' .. root_path .. '/C/nvim/site'):rep(512) .. ',' .. vimruntime .. ',' .. libdir - .. (',' .. '/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')) + .. (',' .. root_path .. '/C/nvim/site/after'):rep(512) + .. ',' .. root_path .. ('/B'):rep(2048) .. '/nvim/site/after' + .. ',' .. root_path .. ('/A'):rep(2048) .. '/nvim/site/after' + .. ',' .. root_path .. ('/X'):rep(4096) .. '/' .. data_dir .. '/site/after' + .. (',' .. root_path .. '/c/nvim/after'):rep(512) + .. ',' .. 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('\\', '/')) + eq('.,' .. root_path .. ('/X'):rep(4096).. '/' .. data_dir .. '/backup', + (meths.get_option('backupdir'):gsub('\\', '/'))) + eq(root_path .. ('/X'):rep(4096) .. '/' .. data_dir .. '/swap//', + (meths.get_option('directory')):gsub('\\', '/')) + eq(root_path .. ('/X'):rep(4096) .. '/' .. data_dir .. '/undo', + (meths.get_option('undodir')):gsub('\\', '/')) + eq(root_path .. ('/X'):rep(4096) .. '/' .. data_dir .. '/view', + (meths.get_option('viewdir')):gsub('\\', '/')) end) end) @@ -381,53 +385,61 @@ describe('XDG-based defaults', function() it('are not expanded', function() local vimruntime, libdir = vimruntime_and_libdir() - eq(('$XDG_DATA_HOME/nvim' + eq((('$XDG_DATA_HOME/nvim' .. ',$XDG_DATA_DIRS/nvim' - .. ',$XDG_CONFIG_HOME/nvim/site' + .. ',$XDG_CONFIG_HOME/' .. data_dir .. '/site' .. ',$XDG_CONFIG_DIRS/nvim/site' .. ',' .. vimruntime .. ',' .. libdir .. ',$XDG_CONFIG_DIRS/nvim/site/after' - .. ',$XDG_CONFIG_HOME/nvim/site/after' + .. ',$XDG_CONFIG_HOME/' .. data_dir .. '/site/after' .. ',$XDG_DATA_DIRS/nvim/after' .. ',$XDG_DATA_HOME/nvim/after' - ), meths.get_option('runtimepath')) + ):gsub('\\', '/')), (meths.get_option('runtimepath')):gsub('\\', '/')) 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' + eq((('$XDG_DATA_HOME/nvim' .. ',$XDG_DATA_DIRS/nvim' - .. ',$XDG_CONFIG_HOME/nvim/site' + .. ',$XDG_CONFIG_HOME/' .. data_dir .. '/site' .. ',$XDG_CONFIG_DIRS/nvim/site' .. ',' .. vimruntime .. ',' .. libdir .. ',$XDG_CONFIG_DIRS/nvim/site/after' - .. ',$XDG_CONFIG_HOME/nvim/site/after' + .. ',$XDG_CONFIG_HOME/' .. data_dir .. '/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')) + ):gsub('\\', '/')), (meths.get_option('runtimepath')):gsub('\\', '/')) + eq(('.,$XDG_CONFIG_HOME/' .. data_dir .. '/backup'), + meths.get_option('backupdir'):gsub('\\', '/')) + eq(('$XDG_CONFIG_HOME/' .. data_dir .. '/swap//'), + meths.get_option('directory'):gsub('\\', '/')) + eq(('$XDG_CONFIG_HOME/' .. data_dir .. '/undo'), + meths.get_option('undodir'):gsub('\\', '/')) + eq(('$XDG_CONFIG_HOME/' .. data_dir .. '/view'), + meths.get_option('viewdir'):gsub('\\', '/')) meths.command('set all&') eq(('$XDG_DATA_HOME/nvim' .. ',$XDG_DATA_DIRS/nvim' - .. ',$XDG_CONFIG_HOME/nvim/site' + .. ',$XDG_CONFIG_HOME/' .. data_dir .. '/site' .. ',$XDG_CONFIG_DIRS/nvim/site' .. ',' .. vimruntime .. ',' .. libdir .. ',$XDG_CONFIG_DIRS/nvim/site/after' - .. ',$XDG_CONFIG_HOME/nvim/site/after' + .. ',$XDG_CONFIG_HOME/' .. data_dir .. '/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')) + ):gsub('\\', '/'), (meths.get_option('runtimepath')):gsub('\\', '/')) + eq(('.,$XDG_CONFIG_HOME/' .. data_dir .. '/backup'), + meths.get_option('backupdir'):gsub('\\', '/')) + eq(('$XDG_CONFIG_HOME/' .. data_dir .. '/swap//'), + meths.get_option('directory'):gsub('\\', '/')) + eq(('$XDG_CONFIG_HOME/' .. data_dir .. '/undo'), + meths.get_option('undodir'):gsub('\\', '/')) + eq(('$XDG_CONFIG_HOME/' .. data_dir .. '/view'), + meths.get_option('viewdir'):gsub('\\', '/')) end) end) @@ -435,53 +447,58 @@ describe('XDG-based defaults', function() before_each(function() clear({env={ XDG_CONFIG_HOME=', , ,', - XDG_CONFIG_DIRS=',-,-,:-,-,-', + XDG_CONFIG_DIRS=',-,-,' .. env_sep .. '-,-,-', XDG_DATA_HOME=',=,=,', - XDG_DATA_DIRS=',≡,≡,:≡,≡,≡', + XDG_DATA_DIRS=',≡,≡,' .. env_sep .. '≡,≡,≡', }}) end) it('are escaped properly', function() local vimruntime, libdir = vimruntime_and_libdir() - eq(('\\, \\, \\,/nvim' - .. ',\\,-\\,-\\,/nvim' - .. ',-\\,-\\,-/nvim' - .. ',\\,=\\,=\\,/nvim/site' - .. ',\\,≡\\,≡\\,/nvim/site' - .. ',≡\\,≡\\,≡/nvim/site' + local path_sep = iswin() and '\\' or '/' + eq(('\\, \\, \\,' .. path_sep .. 'nvim' + .. ',\\,-\\,-\\,' .. path_sep .. 'nvim' + .. ',-\\,-\\,-' .. path_sep .. 'nvim' + .. ',\\,=\\,=\\,' .. path_sep .. data_dir .. path_sep .. 'site' + .. ',\\,≡\\,≡\\,' .. path_sep .. 'nvim' .. path_sep .. 'site' + .. ',≡\\,≡\\,≡' .. path_sep .. 'nvim' .. path_sep .. 'site' .. ',' .. vimruntime .. ',' .. libdir - .. ',≡\\,≡\\,≡/nvim/site/after' - .. ',\\,≡\\,≡\\,/nvim/site/after' - .. ',\\,=\\,=\\,/nvim/site/after' - .. ',-\\,-\\,-/nvim/after' - .. ',\\,-\\,-\\,/nvim/after' - .. ',\\, \\, \\,/nvim/after' + .. ',≡\\,≡\\,≡' .. path_sep .. 'nvim' .. path_sep .. 'site' .. path_sep .. 'after' + .. ',\\,≡\\,≡\\,' .. path_sep .. 'nvim' .. path_sep .. 'site' .. path_sep .. 'after' + .. ',\\,=\\,=\\,' .. path_sep.. data_dir .. path_sep .. 'site' .. path_sep .. 'after' + .. ',-\\,-\\,-' .. path_sep .. 'nvim' .. path_sep .. 'after' + .. ',\\,-\\,-\\,' .. path_sep .. 'nvim' .. path_sep .. 'after' + .. ',\\, \\, \\,' .. path_sep .. 'nvim' .. path_sep .. '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' + eq(('\\, \\, \\,' .. path_sep .. 'nvim' + .. ',\\,-\\,-\\,' .. path_sep ..'nvim' + .. ',-\\,-\\,-' .. path_sep ..'nvim' + .. ',\\,=\\,=\\,' .. path_sep ..'' .. data_dir .. '' .. path_sep ..'site' + .. ',\\,≡\\,≡\\,' .. path_sep ..'nvim' .. path_sep ..'site' + .. ',≡\\,≡\\,≡' .. path_sep ..'nvim' .. path_sep ..'site' .. ',' .. vimruntime .. ',' .. libdir - .. ',≡\\,≡\\,≡/nvim/site/after' - .. ',\\,≡\\,≡\\,/nvim/site/after' - .. ',\\,=\\,=\\,/nvim/site/after' - .. ',-\\,-\\,-/nvim/after' - .. ',\\,-\\,-\\,/nvim/after' - .. ',\\, \\, \\,/nvim/after' + .. ',≡\\,≡\\,≡' .. path_sep ..'nvim' .. path_sep ..'site' .. path_sep ..'after' + .. ',\\,≡\\,≡\\,' .. path_sep ..'nvim' .. path_sep ..'site' .. path_sep ..'after' + .. ',\\,=\\,=\\,' .. path_sep ..'' .. data_dir .. '' .. path_sep ..'site' .. path_sep ..'after' + .. ',-\\,-\\,-' .. path_sep ..'nvim' .. path_sep ..'after' + .. ',\\,-\\,-\\,' .. path_sep ..'nvim' .. path_sep ..'after' + .. ',\\, \\, \\,' .. path_sep ..'nvim' .. path_sep ..'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')) + eq('.,\\,=\\,=\\,' .. path_sep .. data_dir .. '' .. path_sep ..'backup', + meths.get_option('backupdir')) + eq('\\,=\\,=\\,' .. path_sep ..'' .. data_dir .. '' .. path_sep ..'swap' .. (path_sep):rep(2), + meths.get_option('directory')) + eq('\\,=\\,=\\,' .. path_sep ..'' .. data_dir .. '' .. path_sep ..'undo', + meths.get_option('undodir')) + eq('\\,=\\,=\\,' .. path_sep ..'' .. data_dir .. '' .. path_sep ..'view', + meths.get_option('viewdir')) end) end) end) @@ -491,6 +508,7 @@ describe('stdpath()', function() -- Windows appends 'nvim-data' instead of just 'nvim' to prevent collisions -- due to XDG_CONFIG_HOME and XDG_DATA_HOME being the same. local datadir = iswin() and 'nvim-data' or 'nvim' + local env_sep = iswin() and ';' or ':' it('acceptance', function() clear() -- Do not explicitly set any env vars. @@ -634,13 +652,13 @@ describe('stdpath()', function() local function set_paths_via_system(var_name, paths) local env = base_env() - env[var_name] = table.concat(paths, ':') + env[var_name] = table.concat(paths, env_sep) clear({env=env}) end local function set_paths_at_runtime(var_name, paths) clear({env=base_env()}) - meths.set_var('env_val', table.concat(paths, ':')) + meths.set_var('env_val', table.concat(paths, env_sep)) command(('let $%s=g:env_val'):format(var_name)) end |