neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit b4dd11cd5d9ac1568cbeae43caf1a6131781ea63
parent 0232a63fa53b6875c8e6e2022a92693affb5c17d
Author: Evgeni Chasnovski <evgeni.chasnovski@gmail.com>
Date:   Fri, 16 Jan 2026 18:49:14 +0200

test(pack): use a helper to `vim.pack.add` inside `testnvim` instance

Problem: A lot of test cases require executing `vim.pack.add()` inside
  `testnvim` instance to install and/or add plugins. This requires
  access to the information about tested repo sources (stored in a Lua
  variable inside a runner instance), so it needs to go
  `exec_lua(function() vim.pack.add({...}) end)` route, which in
  formatted form adds two more lines. Since it is very frequent, it pads
  test files with (mostly avoidable and unncessary) lines.

Solution: Add `vim_pack_add()` helper specifically to execute
  `vim.pack.add` inside `testnvim` instance. Use it where possible:
  usually when `vim.pack.add` is not a subject of the test. It is not
  quite doable for some cases, though:
  - When error in `vim.pack.add` is tested.
  - When specification includes `vim.version.range` (since `exec_lua`
    seems to not transfer necessary class metatables).

  This removes ~100 lines from the file at the cost of sometimes using
  `vim_pack_add` and sometimes having to reside to `vim.pack.add`.
  Which seems like a positive trade-off.

  This also allows making a more compact `exec_lua('vim.pack.update()')`
  instructions since `vim.pack.update` doesn't depend on the upvalues
  stored in test runner instance.

Diffstat:
Mtest/functional/plugin/pack_spec.lua | 375++++++++++++++++++++++++++++---------------------------------------------------
1 file changed, 131 insertions(+), 244 deletions(-)

diff --git a/test/functional/plugin/pack_spec.lua b/test/functional/plugin/pack_spec.lua @@ -258,6 +258,13 @@ end -- Utility -------------------------------------------------------------------- +--- Execute `vim.pack.add()` inside `testnvim` instance +local function vim_pack_add(specs, opts) + exec_lua(function() + vim.pack.add(specs, opts) + end) +end + local function watch_events(event) exec_lua(function() _G.event_log = _G.event_log or {} --- @type table[] @@ -413,15 +420,11 @@ describe('vim.pack', function() describe('add()', function() it('installs only once', function() - exec_lua(function() - vim.pack.add({ repos_src.basic }) - end) + vim_pack_add({ repos_src.basic }) n.clear() watch_events({ 'PackChanged' }) - exec_lua(function() - vim.pack.add({ repos_src.basic }) - end) + vim_pack_add({ repos_src.basic }) eq(exec_lua('return #_G.event_log'), 0) -- Should not create redundant stash entry @@ -450,9 +453,7 @@ describe('vim.pack', function() -- Do not confirm installation to see what happens (should not error) mock_confirm(2) - exec_lua(function() - vim.pack.add({ repos_src.basic, { src = repos_src.defbranch, name = 'other-name' } }) - end) + vim_pack_add({ repos_src.basic, { src = repos_src.defbranch, name = 'other-name' } }) eq(false, pack_exists('basic')) eq(false, pack_exists('defbranch')) eq({ plugins = {} }, get_lock_tbl()) @@ -468,9 +469,7 @@ describe('vim.pack', function() -- Should remove lock data if not confirmed during lockfile sync n.clear() - exec_lua(function() - vim.pack.add({ repos_src.basic }) - end) + vim_pack_add({ repos_src.basic }) eq(true, pack_exists('basic')) eq('table', type(get_lock_tbl().plugins.basic)) @@ -478,9 +477,7 @@ describe('vim.pack', function() n.clear() mock_confirm(2) - exec_lua(function() - vim.pack.add({ repos_src.basic }) - end) + vim_pack_add({ repos_src.basic }) eq(false, pack_exists('basic')) eq({ plugins = {} }, get_lock_tbl()) @@ -492,9 +489,7 @@ describe('vim.pack', function() it('respects `opts.confirm`', function() mock_confirm(1) - exec_lua(function() - vim.pack.add({ repos_src.basic }, { confirm = false }) - end) + vim_pack_add({ repos_src.basic }, { confirm = false }) eq(0, exec_lua('return #_G.confirm_log')) eq(true, pack_exists('basic')) @@ -506,9 +501,7 @@ describe('vim.pack', function() n.clear() mock_confirm(1) - exec_lua(function() - vim.pack.add({}, { confirm = false }) - end) + vim_pack_add({}, { confirm = false }) eq(0, exec_lua('return #_G.confirm_log')) eq(true, pack_exists('basic')) end) @@ -516,24 +509,18 @@ describe('vim.pack', function() it('can always confirm in current session', function() mock_confirm(3) - exec_lua(function() - vim.pack.add({ repos_src.basic }) - end) + vim_pack_add({ repos_src.basic }) eq(1, exec_lua('return #_G.confirm_log')) eq('basic main', exec_lua('return require("basic")')) - exec_lua(function() - vim.pack.add({ repos_src.defbranch }) - end) + vim_pack_add({ repos_src.defbranch }) eq(1, exec_lua('return #_G.confirm_log')) eq('defbranch dev', exec_lua('return require("defbranch")')) -- Should still ask in next session n.clear() mock_confirm(3) - exec_lua(function() - vim.pack.add({ repos_src.plugindirs }) - end) + vim_pack_add({ repos_src.plugindirs }) eq(1, exec_lua('return #_G.confirm_log')) eq('plugindirs main', exec_lua('return require("plugindirs")')) end) @@ -604,9 +591,7 @@ describe('vim.pack', function() end) it('updates lockfile', function() - exec_lua(function() - vim.pack.add({ repos_src.basic }) - end) + vim_pack_add({ repos_src.basic }) local ref_lockfile = { plugins = { basic = { rev = git_get_hash('main', 'basic'), src = repos_src.basic }, @@ -615,21 +600,14 @@ describe('vim.pack', function() eq(ref_lockfile, get_lock_tbl()) n.clear() - exec_lua(function() - vim.pack.add({ { src = repos_src.basic, version = 'main' } }) - end) + vim_pack_add({ { src = repos_src.basic, version = 'main' } }) ref_lockfile.plugins.basic.version = "'main'" eq(ref_lockfile, get_lock_tbl()) end) it('uses lockfile during install', function() - exec_lua(function() - vim.pack.add({ - { src = repos_src.basic, version = 'feat-branch' }, - repos_src.defbranch, - }) - end) + vim_pack_add({ { src = repos_src.basic, version = 'feat-branch' }, repos_src.defbranch }) -- Mock clean initial install, but with lockfile present vim.fs.rm(pack_get_dir(), { force = true, recursive = true }) @@ -646,11 +624,9 @@ describe('vim.pack', function() eq(ref_lockfile, get_lock_tbl()) mock_confirm(1) - exec_lua(function() - -- Should use revision from lockfile (pointing at latest 'feat-branch' - -- commit) and not use latest `main` commit - vim.pack.add({ { src = repos_src.basic, version = 'main' } }) - end) + -- Should use revision from lockfile (pointing at latest 'feat-branch' + -- commit) and not use latest `main` commit + vim_pack_add({ { src = repos_src.basic, version = 'main' } }) pack_assert_content('basic', 'return "basic feat-branch"') local confirm_log = exec_lua('return _G.confirm_log') @@ -695,12 +671,10 @@ describe('vim.pack', function() end) it('regenerates manually deleted lockfile', function() - exec_lua(function() - vim.pack.add({ - { src = repos_src.basic, name = 'other', version = 'feat-branch' }, - repos_src.defbranch, - }) - end) + vim_pack_add({ + { src = repos_src.basic, name = 'other', version = 'feat-branch' }, + repos_src.defbranch, + }) local lock_path = get_lock_path() eq(true, vim.uv.fs_stat(lock_path) ~= nil) @@ -710,9 +684,7 @@ describe('vim.pack', function() -- Should try its best to regenerate lockfile based on installed plugins fn.delete(get_lock_path()) n.clear() - exec_lua(function() - vim.pack.add({}) - end) + vim_pack_add({}) local ref_lockfile = { plugins = { -- No `version = 'feat-branch'` as there is no way to get that info @@ -727,27 +699,23 @@ describe('vim.pack', function() eq(ref_messages, n.exec_capture('messages')) -- Calling `add()` with `version` should still add it to lockfile - exec_lua(function() - vim.pack.add({ { src = repos_src.basic, name = 'other', version = 'feat-branch' } }) - end) + vim_pack_add({ { src = repos_src.basic, name = 'other', version = 'feat-branch' } }) eq("'feat-branch'", get_lock_tbl().plugins.other.version) end) it('repairs corrupted lock data for installed plugins', function() - exec_lua(function() - vim.pack.add({ - -- Should preserve present `version` - { src = repos_src.basic, version = 'feat-branch' }, - repos_src.defbranch, - repos_src.semver, - repos_src.helptags, - }) - end) + vim_pack_add({ + -- Should preserve present `version` + { src = repos_src.basic, version = 'feat-branch' }, + repos_src.defbranch, + repos_src.semver, + repos_src.helptags, + }) local lock_tbl = get_lock_tbl() local ref_lock_tbl = vim.deepcopy(lock_tbl) local assert = function() - exec_lua('vim.pack.add({})') + vim_pack_add({}) eq(ref_lock_tbl, get_lock_tbl()) eq(true, pack_exists('basic')) eq(true, pack_exists('defbranch')) @@ -783,9 +751,7 @@ describe('vim.pack', function() end) it('removes unrepairable corrupted data and plugins', function() - exec_lua(function() - vim.pack.add({ repos_src.basic, repos_src.defbranch, repos_src.semver, repos_src.helptags }) - end) + vim_pack_add({ repos_src.basic, repos_src.defbranch, repos_src.semver, repos_src.helptags }) local lock_tbl = get_lock_tbl() local ref_lock_tbl = vim.deepcopy(lock_tbl) @@ -809,7 +775,7 @@ describe('vim.pack', function() fn.writefile(vim.split(lockfile_text, '\n'), get_lock_path()) n.clear() - exec_lua('vim.pack.add({})') + vim_pack_add({}) ref_lock_tbl.plugins.basic = nil ref_lock_tbl.plugins.defbranch = nil ref_lock_tbl.plugins.semver = nil @@ -823,10 +789,8 @@ describe('vim.pack', function() it('installs at proper version', function() local out = exec_lua(function() - vim.pack.add({ - { src = repos_src.basic, version = 'feat-branch' }, - }) - -- Should have plugin available immediately after + vim.pack.add({ { src = repos_src.basic, version = 'feat-branch' } }) + -- Should have plugin available immediately (not even on the next loop) return require('basic') end) @@ -842,9 +806,7 @@ describe('vim.pack', function() it('installs with submodules', function() mock_git_file_transport() - exec_lua(function() - vim.pack.add({ repos_src.with_subs }) - end) + vim_pack_add({ repos_src.with_subs }) local sub_lua_file = vim.fs.joinpath(pack_get_plug_path('with_subs'), 'sub', 'sub.lua') eq('return "sub main"', fn.readblob(sub_lua_file)) @@ -860,9 +822,7 @@ describe('vim.pack', function() it('can install from the Internet', function() t.skip(skip_integ, 'NVIM_TEST_INTEG not set: skipping network integration test') - exec_lua(function() - vim.pack.add({ 'https://github.com/neovim/nvim-lspconfig' }) - end) + vim_pack_add({ 'https://github.com/neovim/nvim-lspconfig' }) eq(true, exec_lua('return pcall(require, "lspconfig")')) end) @@ -923,19 +883,15 @@ describe('vim.pack', function() it('shows progress report during installation', function() track_nvim_echo() - exec_lua(function() - vim.pack.add({ repos_src.basic, repos_src.defbranch }) - end) + vim_pack_add({ repos_src.basic, repos_src.defbranch }) assert_progress_report('Installing plugins', { 'basic', 'defbranch' }) end) it('triggers relevant events', function() watch_events({ 'PackChangedPre', 'PackChanged' }) - exec_lua(function() - -- Should provide event-data respecting manual `version` without inferring default - vim.pack.add({ { src = repos_src.basic, version = 'feat-branch' }, repos_src.defbranch }) - end) + -- Should provide event-data respecting manual `version` without inferring default + vim_pack_add({ { src = repos_src.basic, version = 'feat-branch' }, repos_src.defbranch }) local log = exec_lua('return _G.event_log') local find_event = make_find_packchanged(log) @@ -967,10 +923,9 @@ describe('vim.pack', function() it('respects plugin/ and after/plugin/ scripts', function() local function assert(load, ref) - local opts = { load = load } + vim_pack_add({ { src = repos_src.plugindirs, name = 'plugin % dirs' } }, { load = load }) + -- Should handle bad plugin directory name local out = exec_lua(function() - -- Should handle bad plugin directory name - vim.pack.add({ { src = repos_src.plugindirs, name = 'plugin % dirs' } }, opts) return { vim.g._plugin, vim.g._plugin_vim, @@ -982,7 +937,6 @@ describe('vim.pack', function() vim.g._after_plugin_bad, } end) - eq(ref, out) -- Should add necessary directories to runtimepath regardless of `opts.load` @@ -1043,9 +997,7 @@ describe('vim.pack', function() end) it('generates help tags', function() - exec_lua(function() - vim.pack.add({ { src = repos_src.helptags, name = 'help tags' } }) - end) + vim_pack_add({ { src = repos_src.helptags, name = 'help tags' } }) local target_tags = fn.getcompletion('my-test', 'help') table.sort(target_tags) eq({ 'my-test-help', 'my-test-help-bad', 'my-test-help-sub-bad' }, target_tags) @@ -1097,14 +1049,12 @@ describe('vim.pack', function() end) it('normalizes each spec', function() - exec_lua(function() - vim.pack.add({ - repos_src.basic, -- String should be inferred as `{ src = ... }` - { src = repos_src.defbranch }, -- Default `version` is remote's default branch - { src = repos_src['gitsuffix.git'] }, -- Default `name` comes from `src` repo name - { src = repos_src.plugindirs, name = 'plugin/dirs' }, -- Ensure proper directory name - }) - end) + vim_pack_add({ + repos_src.basic, -- String should be inferred as `{ src = ... }` + { src = repos_src.defbranch }, -- Default `version` is remote's default branch + { src = repos_src['gitsuffix.git'] }, -- Default `name` comes from `src` repo name + { src = repos_src.plugindirs, name = 'plugin/dirs' }, -- Ensure proper directory name + }) eq('basic main', exec_lua('return require("basic")')) eq('defbranch dev', exec_lua('return require("defbranch")')) @@ -1116,9 +1066,7 @@ describe('vim.pack', function() end) it('handles problematic names', function() - exec_lua(function() - vim.pack.add({ { src = repos_src.basic, name = 'bad % name' } }) - end) + vim_pack_add({ { src = repos_src.basic, name = 'bad % name' } }) eq('basic main', exec_lua('return require("basic")')) end) @@ -1127,9 +1075,7 @@ describe('vim.pack', function() fn.setenv('GIT_DIR', vim.fs.joinpath(fn.getcwd(), '.git')) local ref_environ = fn.environ() - exec_lua(function() - vim.pack.add({ repos_src.basic }) - end) + vim_pack_add({ repos_src.basic }) eq('basic main', exec_lua('return require("basic")')) eq(ref_environ, fn.environ()) @@ -1189,13 +1135,11 @@ describe('vim.pack', function() short_hashes = { fetch_head = git_get_short_hash('HEAD', 'fetch') } -- Install initial versions of tested plugins - exec_lua(function() - vim.pack.add({ - { src = repos_src.fetch, version = 'main' }, - { src = repos_src.semver, version = 'v0.3.0' }, - repos_src.defbranch, - }) - end) + vim_pack_add({ + { src = repos_src.fetch, version = 'main' }, + { src = repos_src.semver, version = 'v0.3.0' }, + repos_src.defbranch, + }) n.clear() -- Mock remote repo update @@ -1224,13 +1168,11 @@ describe('vim.pack', function() describe('confirmation buffer', function() it('works', function() - exec_lua(function() - vim.pack.add({ - repos_src.fetch, - { src = repos_src.semver, version = 'v0.3.0' }, - { src = repos_src.defbranch, version = 'does-not-exist' }, - }) - end) + vim_pack_add({ + repos_src.fetch, + { src = repos_src.semver, version = 'v0.3.0' }, + { src = repos_src.defbranch, version = 'does-not-exist' }, + }) pack_assert_content('fetch', 'return "fetch main"') exec_lua(function() @@ -1399,10 +1341,8 @@ describe('vim.pack', function() end) it('can be dismissed with `:quit`', function() - exec_lua(function() - vim.pack.add({ repos_src.fetch }) - vim.pack.update({ 'fetch' }) - end) + vim_pack_add({ repos_src.fetch }) + exec_lua('vim.pack.update({ "fetch" })') eq('nvim-pack', api.nvim_get_option_value('filetype', {})) -- Should not apply updates @@ -1411,10 +1351,8 @@ describe('vim.pack', function() end) it('closes full tabpage', function() - exec_lua(function() - vim.pack.add({ repos_src.fetch }) - vim.pack.update() - end) + vim_pack_add({ repos_src.fetch }) + exec_lua('vim.pack.update()') -- Confirm with `:write` local confirm_tabpage = api.nvim_get_current_tabpage() @@ -1446,14 +1384,12 @@ describe('vim.pack', function() it('has in-process LSP features', function() t.skip(not is_jit(), "Non LuaJIT reports errors differently due to 'coxpcall'") track_nvim_echo() - exec_lua(function() - vim.pack.add({ - repos_src.fetch, - -- No `semver` to test with non-active plugins - { src = repos_src.defbranch, version = 'does-not-exist' }, - }) - vim.pack.update() - end) + vim_pack_add({ + repos_src.fetch, + -- No `semver` to test with non-active plugins + { src = repos_src.defbranch, version = 'does-not-exist' }, + }) + exec_lua('vim.pack.update()') eq(1, exec_lua('return #vim.lsp.get_clients({ bufnr = 0 })')) @@ -1625,16 +1561,14 @@ describe('vim.pack', function() it('has buffer-local mappings', function() t.skip(not is_jit(), "Non LuaJIT reports update errors differently due to 'coxpcall'") - exec_lua(function() - vim.pack.add({ - repos_src.fetch, - { src = repos_src.semver, version = 'v0.3.0' }, - { src = repos_src.defbranch, version = 'does-not-exist' }, - }) - -- Enable sourcing filetype script (that creates mappings) - vim.cmd('filetype plugin on') - vim.pack.update() - end) + vim_pack_add({ + repos_src.fetch, + { src = repos_src.semver, version = 'v0.3.0' }, + { src = repos_src.defbranch, version = 'does-not-exist' }, + }) + -- Enable sourcing filetype script (that creates mappings) + n.exec('filetype plugin on') + exec_lua('vim.pack.update()') -- Plugin sections navigation local function assert(keys, ref_cursor) @@ -1659,12 +1593,11 @@ describe('vim.pack', function() it('suggests newer versions when on non-tagged commit', function() local commit = git_get_hash('0.3.1~', 'semver') - exec_lua(function() - -- Make fresh install for cleaner test - vim.pack.del({ 'semver' }) - vim.pack.add({ { src = repos_src.semver, version = commit } }) - vim.pack.update({ 'semver' }) - end) + + -- Make fresh install for cleaner test + exec_lua('vim.pack.del({ "semver" })') + vim_pack_add({ { src = repos_src.semver, version = commit } }) + exec_lua('vim.pack.update({ "semver" })') -- Should correctly infer that 0.3.0 is the latest version and suggest -- versions greater than that @@ -1673,9 +1606,7 @@ describe('vim.pack', function() end) it('updates lockfile', function() - exec_lua(function() - vim.pack.add({ repos_src.fetch }) - end) + vim_pack_add({ repos_src.fetch }) local ref_fetch_lock = { rev = hashes.fetch_head, src = repos_src.fetch } eq(ref_fetch_lock, get_lock_tbl().plugins.fetch) @@ -1723,28 +1654,22 @@ describe('vim.pack', function() it('works with submodules', function() mock_git_file_transport() - exec_lua(function() - vim.pack.add({ { src = repos_src.with_subs, version = 'init-commit' } }) - end) + vim_pack_add({ { src = repos_src.with_subs, version = 'init-commit' } }) local sub_lua_file = vim.fs.joinpath(pack_get_plug_path('with_subs'), 'sub', 'sub.lua') eq('return "sub init"', fn.readblob(sub_lua_file)) n.clear() mock_git_file_transport() - exec_lua(function() - vim.pack.add({ repos_src.with_subs }) - vim.pack.update({ 'with_subs' }) - end) + vim_pack_add({ repos_src.with_subs }) + exec_lua('vim.pack.update({ "with_subs" })') n.exec('write') eq('return "sub main"', fn.readblob(sub_lua_file)) end) it('can force update', function() - exec_lua(function() - vim.pack.add({ repos_src.fetch }) - vim.pack.update({ 'fetch' }, { force = true }) - end) + vim_pack_add({ repos_src.fetch }) + exec_lua('vim.pack.update({ "fetch" }, { force = true })') -- Apply changes immediately local fetch_src = repos_src.fetch @@ -1793,9 +1718,7 @@ describe('vim.pack', function() end) it('can use lockfile revision as a target', function() - exec_lua(function() - vim.pack.add({ repos_src.fetch }) - end) + vim_pack_add({ repos_src.fetch }) pack_assert_content('fetch', 'return "fetch main"') -- Mock "update -> revert lockfile -> revert plugin" @@ -1827,9 +1750,7 @@ describe('vim.pack', function() it('can change `src` of installed plugin', function() local basic_src = repos_src.basic local defbranch_src = repos_src.defbranch - exec_lua(function() - vim.pack.add({ basic_src }) - end) + vim_pack_add({ basic_src }) local function assert_origin(ref) -- Should be in sync both on disk and in lockfile @@ -1844,9 +1765,7 @@ describe('vim.pack', function() watch_events({ 'PackChangedPre', 'PackChanged' }) assert_origin(basic_src) - exec_lua(function() - vim.pack.add({ { src = defbranch_src, name = 'basic' } }) - end) + vim_pack_add({ { src = defbranch_src, name = 'basic' } }) -- Should not yet (after `add()`) affect plugin source assert_origin(basic_src) @@ -1863,18 +1782,13 @@ describe('vim.pack', function() -- Should work with forced update n.clear() - exec_lua(function() - vim.pack.add({ basic_src }) - vim.pack.update({ 'basic' }, { force = true }) - end) + vim_pack_add({ basic_src }) + exec_lua('vim.pack.update({ "basic" }, { force = true })') assert_origin(basic_src) end) it('can do offline update', function() - n.exec_lua(function() - vim.pack.add({ { src = repos_src.defbranch, version = 'main' } }) - end) - + vim_pack_add({ { src = repos_src.defbranch, version = 'main' } }) track_nvim_echo() pack_assert_content('defbranch', 'return "defbranch dev"') @@ -1891,11 +1805,9 @@ describe('vim.pack', function() it('shows progress report', function() track_nvim_echo() - exec_lua(function() - vim.pack.add({ repos_src.fetch, repos_src.defbranch }) - -- Should also include updates from not active plugins - vim.pack.update() - end) + vim_pack_add({ repos_src.fetch, repos_src.defbranch }) + -- Should also include updates from not active plugins + exec_lua('vim.pack.update()') -- During initial download assert_progress_report('Downloading updates', { 'fetch', 'defbranch', 'semver' }) @@ -1911,20 +1823,16 @@ describe('vim.pack', function() repo_write_file('fetch', 'lua/fetch.lua', 'return "fetch new 3"') git_add_commit('Commit to be added 3', 'fetch') - exec_lua(function() - vim.pack.add({ repos_src.fetch, repos_src.defbranch }) - vim.pack.update(nil, { force = true }) - end) + vim_pack_add({ repos_src.fetch, repos_src.defbranch }) + exec_lua('vim.pack.update(nil, { force = true })') assert_progress_report('Updating', { 'fetch', 'defbranch', 'semver' }) end) it('triggers relevant events', function() watch_events({ 'PackChangedPre', 'PackChanged' }) - exec_lua(function() - vim.pack.add({ repos_src.fetch, repos_src.defbranch }) - _G.event_log = {} - vim.pack.update() - end) + vim_pack_add({ repos_src.fetch, repos_src.defbranch }) + exec_lua('_G.event_log = {}') + exec_lua('vim.pack.update()') eq({}, exec_lua('return _G.event_log')) -- Should trigger relevant events only for actually updated plugins @@ -1939,11 +1847,10 @@ describe('vim.pack', function() it('stashes before applying changes', function() local fetch_lua_file = vim.fs.joinpath(pack_get_plug_path('fetch'), 'lua', 'fetch.lua') fn.writefile({ 'A text that will be stashed' }, fetch_lua_file) - exec_lua(function() - vim.pack.add({ repos_src.fetch }) - vim.pack.update() - vim.cmd('write') - end) + + vim_pack_add({ repos_src.fetch }) + exec_lua('vim.pack.update()') + n.exec('write') local fetch_path = pack_get_plug_path('fetch') local stash_list = system_sync({ 'git', 'stash', 'list' }, { cwd = fetch_path }).stdout or '' @@ -1958,10 +1865,8 @@ describe('vim.pack', function() fn.setenv('GIT_DIR', vim.fs.joinpath(fn.getcwd(), '.git')) local ref_environ = fn.environ() - exec_lua(function() - vim.pack.add({ repos_src.fetch }) - vim.pack.update({ 'fetch' }, { force = true }) - end) + vim_pack_add({ repos_src.fetch }) + exec_lua('vim.pack.update({ "fetch" }, { force = true })') pack_assert_content('fetch', 'return "fetch new 2"') eq(ref_environ, fn.environ()) @@ -2005,9 +1910,7 @@ describe('vim.pack', function() -- Should first check if every plugin name represents installed plugin -- If not - stop early before any update - exec_lua(function() - vim.pack.add({ repos_src.basic }) - end) + vim_pack_add({ repos_src.basic }) assert('Plugin `ccc` is not installed', { 'ccc', 'basic', 'aaa' }) @@ -2077,13 +1980,11 @@ describe('vim.pack', function() -- Should also list non-active plugins n.clear() - - exec_lua(function() - vim.pack.add({ repos_src.defbranch }) - end) + vim_pack_add({ repos_src.defbranch }) defbranch_data = make_defbranch_data(true, true) basic_data = make_basic_data(false, true) plugindirs_data = make_plugindirs_data(false, true) + -- Should first list active, then non-active (including their latest -- set `version` which is inferred from lockfile) eq({ defbranch_data, basic_data, plugindirs_data }, exec_lua('return vim.pack.get()')) @@ -2109,11 +2010,11 @@ describe('vim.pack', function() end) it('respects `data` field', function() + vim_pack_add({ + { src = repos_src.basic, version = 'feat-branch', data = { test = 'value' } }, + { src = repos_src.defbranch, data = 'value' }, + }) local out = exec_lua(function() - vim.pack.add({ - { src = repos_src.basic, version = 'feat-branch', data = { test = 'value' } }, - { src = repos_src.defbranch, data = 'value' }, - }) local plugs = vim.pack.get() ---@type table<string,string> return { basic = plugs[1].spec.data.test, defbranch = plugs[2].spec.data } @@ -2122,9 +2023,7 @@ describe('vim.pack', function() end) it('works with `del()`', function() - exec_lua(function() - vim.pack.add({ repos_src.defbranch, { src = repos_src.basic, version = 'feat-branch' } }) - end) + vim_pack_add({ repos_src.defbranch, { src = repos_src.basic, version = 'feat-branch' } }) exec_lua(function() _G.get_log = {} @@ -2144,9 +2043,7 @@ describe('vim.pack', function() end) it('works with out of sync lockfile', function() - exec_lua(function() - vim.pack.add({ repos_src.basic, repos_src.defbranch }) - end) + vim_pack_add({ repos_src.basic, repos_src.defbranch }) eq(2, vim.tbl_count(get_lock_tbl().plugins)) -- Should first autoinstall missing plugin (with confirmation) @@ -2168,10 +2065,8 @@ describe('vim.pack', function() describe('del()', function() it('works', function() - exec_lua(function() - local basic_spec = { src = repos_src.basic, version = 'feat-branch' } - vim.pack.add({ repos_src.plugindirs, repos_src.defbranch, basic_spec }) - end) + local basic_spec = { src = repos_src.basic, version = 'feat-branch' } + vim_pack_add({ repos_src.plugindirs, repos_src.defbranch, basic_spec }) local assert_on_disk = function(installed_map) local installed = {} @@ -2193,9 +2088,7 @@ describe('vim.pack', function() -- By default should delete only non-active plugins, even if -- there is active one among input plugin names n.clear() - exec_lua(function() - vim.pack.add({ repos_src.defbranch }) - end) + vim_pack_add({ repos_src.defbranch }) watch_events({ 'PackChangedPre', 'PackChanged' }) local err = pcall_err(exec_lua, function() @@ -2236,9 +2129,7 @@ describe('vim.pack', function() end) it('works without prior `add()`', function() - exec_lua(function() - vim.pack.add({ repos_src.basic }) - end) + vim_pack_add({ repos_src.basic }) n.clear() eq(true, pack_exists('basic')) @@ -2250,9 +2141,7 @@ describe('vim.pack', function() end) it('works with out of sync lockfile', function() - exec_lua(function() - vim.pack.add({ repos_src.basic, repos_src.defbranch, repos_src.plugindirs }) - end) + vim_pack_add({ repos_src.basic, repos_src.defbranch, repos_src.plugindirs }) eq(3, vim.tbl_count(get_lock_tbl().plugins)) -- Should first autoinstall missing plugin (with confirmation) @@ -2286,9 +2175,7 @@ describe('vim.pack', function() -- Should first check if every plugin name represents installed plugin -- If not - stop early before any delete - exec_lua(function() - vim.pack.add({ repos_src.basic }) - end) + vim_pack_add({ repos_src.basic }) assert('Plugin `ccc` is not installed', { 'ccc', 'basic', 'aaa' }) eq(true, pack_exists('basic'))