aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-07-19 07:14:32 +0800
committerGitHub <noreply@github.com>2023-07-19 07:14:32 +0800
commitab5cdbd167353a0c6a0ef0b864d78af13029339c (patch)
tree5a3e8b3d5a56d6cea9b878103f7563c0756fce5b
parentbe74807eef13ff8c90d55cf8b22b01d6d33b1641 (diff)
downloadrneovim-ab5cdbd167353a0c6a0ef0b864d78af13029339c.tar.gz
rneovim-ab5cdbd167353a0c6a0ef0b864d78af13029339c.tar.bz2
rneovim-ab5cdbd167353a0c6a0ef0b864d78af13029339c.zip
test(startup_spec): add a test for #18315 (#24391)
-rw-r--r--src/nvim/runtime.c3
-rw-r--r--test/functional/core/startup_spec.lua42
2 files changed, 34 insertions, 11 deletions
diff --git a/src/nvim/runtime.c b/src/nvim/runtime.c
index 9614937c4c..290b773371 100644
--- a/src/nvim/runtime.c
+++ b/src/nvim/runtime.c
@@ -1237,7 +1237,8 @@ void load_plugins(void)
add_pack_start_dirs();
}
- // don't use source_runtime() yet so we can check for :packloadall below
+ // Don't use source_runtime_vim_lua() yet so we can check for :packloadall below.
+ // NB: after calling this "rtp_copy" may have been freed if it wasn't copied.
source_in_path_vim_lua(rtp_copy, plugin_pattern, DIP_ALL | DIP_NOAFTER);
TIME_MSG("loading rtp plugins");
diff --git a/test/functional/core/startup_spec.lua b/test/functional/core/startup_spec.lua
index c541e32353..dcbb55a9d7 100644
--- a/test/functional/core/startup_spec.lua
+++ b/test/functional/core/startup_spec.lua
@@ -917,27 +917,27 @@ describe('runtime:', function()
local plugin_folder_path = table.concat({xconfig, 'nvim', 'plugin'}, pathsep)
local plugin_file_path = table.concat({plugin_folder_path, 'plugin.lua'}, pathsep)
mkdir_p(plugin_folder_path)
+ finally(function()
+ rmdir(plugin_folder_path)
+ end)
write_file(plugin_file_path, [[ vim.g.lua_plugin = 1 ]])
clear{ args_rm={'-u'}, env=xenv }
eq(1, eval('g:lua_plugin'))
- rmdir(plugin_folder_path)
end)
it('loads plugin/*.lua from start packages', function()
- local plugin_path = table.concat({xconfig, 'nvim', 'pack', 'category',
- 'start', 'test_plugin'}, pathsep)
+ local plugin_path = table.concat({xconfig, 'nvim', 'pack', 'category', 'start', 'test_plugin'}, pathsep)
local plugin_folder_path = table.concat({plugin_path, 'plugin'}, pathsep)
- local plugin_file_path = table.concat({plugin_folder_path, 'plugin.lua'},
- pathsep)
+ local plugin_file_path = table.concat({plugin_folder_path, 'plugin.lua'}, pathsep)
local profiler_file = 'test_startuptime.log'
+ mkdir_p(plugin_folder_path)
finally(function()
os.remove(profiler_file)
rmdir(plugin_path)
end)
- mkdir_p(plugin_folder_path)
write_file(plugin_file_path, [[vim.g.lua_plugin = 2]])
clear{ args_rm={'-u'}, args={'--startuptime', profiler_file}, env=xenv }
@@ -961,19 +961,41 @@ describe('runtime:', function()
local plugin_after_path = table.concat({plugin_path, 'after', 'plugin'}, pathsep)
local plugin_file_path = table.concat({plugin_folder_path, 'plugin.lua'}, pathsep)
local plugin_after_file_path = table.concat({plugin_after_path, 'helloo.lua'}, pathsep)
-
mkdir_p(plugin_folder_path)
- write_file(plugin_file_path, [[table.insert(_G.lista, "unos")]])
mkdir_p(plugin_after_path)
+ finally(function()
+ rmdir(plugin_path)
+ end)
+
+ write_file(plugin_file_path, [[table.insert(_G.lista, "unos")]])
write_file(plugin_after_file_path, [[table.insert(_G.lista, "dos")]])
clear{ args_rm={'-u'}, args={'--cmd', 'lua _G.lista = {}'}, env=xenv }
eq({'unos', 'dos'}, exec_lua "return _G.lista")
-
- rmdir(plugin_path)
end)
+ it('no crash setting &rtp in plugins with :packloadall called before #18315', function()
+ local plugin_folder_path = table.concat({xconfig, 'nvim', 'plugin'}, pathsep)
+ mkdir_p(plugin_folder_path)
+ finally(function()
+ rmdir(plugin_folder_path)
+ end)
+
+ write_file(table.concat({plugin_folder_path, 'plugin.vim'}, pathsep), [[
+ let &runtimepath = &runtimepath
+ let g:vim_plugin = 1
+ ]])
+ write_file(table.concat({plugin_folder_path, 'plugin.lua'}, pathsep), [[
+ vim.o.runtimepath = vim.o.runtimepath
+ vim.g.lua_plugin = 1
+ ]])
+
+ clear{ args_rm={'-u'}, args = {'--cmd', 'packloadall'}, env=xenv }
+
+ eq(1, eval('g:vim_plugin'))
+ eq(1, eval('g:lua_plugin'))
+ end)
it("loads ftdetect/*.{vim,lua} respecting 'rtp' order", function()
local ftdetect_folder = table.concat({xconfig, 'nvim', 'ftdetect'}, pathsep)