Problem: plenary.nvim is deprecated. The test suite depends on plenary's async test runner and coroutine-based utilities, tying the project to an unmaintained dependency. CI also tests against Neovim 0.8-0.11, which are no longer relevant. Solution: replace plenary with busted + nlua (nvim -l). Convert all async test patterns (a.wrap, a.util.sleep, a.util.scheduler) to synchronous equivalents using vim.wait. Rename tests/ to spec/ to follow busted convention. Replace the CI test matrix with nvim-busted-action targeting stable/nightly only. Add .busted config, luarocks test_dependencies, and update the nix devshell.
149 lines
5 KiB
Lua
149 lines
5 KiB
Lua
local TmpDir = require('spec.tmpdir')
|
|
local test_util = require('spec.test_util')
|
|
|
|
describe('freedesktop', function()
|
|
local tmpdir
|
|
local tmphome
|
|
local home = vim.env.XDG_DATA_HOME
|
|
before_each(function()
|
|
require('oil.config').delete_to_trash = true
|
|
tmpdir = TmpDir.new()
|
|
tmphome = TmpDir.new()
|
|
package.loaded['oil.adapters.trash'] = require('oil.adapters.trash.freedesktop')
|
|
vim.env.XDG_DATA_HOME = tmphome.path
|
|
end)
|
|
after_each(function()
|
|
vim.env.XDG_DATA_HOME = home
|
|
if tmpdir then
|
|
tmpdir:dispose()
|
|
end
|
|
if tmphome then
|
|
tmphome:dispose()
|
|
end
|
|
test_util.reset_editor()
|
|
package.loaded['oil.adapters.trash'] = nil
|
|
end)
|
|
|
|
it('files can be moved to the trash', function()
|
|
tmpdir:create({ 'a.txt', 'foo/b.txt' })
|
|
test_util.actions.open({ tmpdir.path })
|
|
test_util.actions.focus('a.txt')
|
|
vim.api.nvim_feedkeys('dd', 'x', true)
|
|
test_util.actions.open({ '--trash', tmpdir.path })
|
|
vim.api.nvim_feedkeys('p', 'x', true)
|
|
test_util.actions.save()
|
|
tmpdir:assert_not_exists('a.txt')
|
|
tmpdir:assert_exists('foo/b.txt')
|
|
test_util.actions.reload()
|
|
assert.are.same({ 'a.txt' }, test_util.parse_entries(0))
|
|
end)
|
|
|
|
it('deleting a file moves it to trash', function()
|
|
tmpdir:create({ 'a.txt', 'foo/b.txt' })
|
|
test_util.actions.open({ tmpdir.path })
|
|
test_util.actions.focus('a.txt')
|
|
vim.api.nvim_feedkeys('dd', 'x', true)
|
|
test_util.actions.save()
|
|
tmpdir:assert_not_exists('a.txt')
|
|
tmpdir:assert_exists('foo/b.txt')
|
|
test_util.actions.open({ '--trash', tmpdir.path })
|
|
assert.are.same({ 'a.txt' }, test_util.parse_entries(0))
|
|
end)
|
|
|
|
it('deleting a directory moves it to trash', function()
|
|
tmpdir:create({ 'a.txt', 'foo/b.txt' })
|
|
test_util.actions.open({ tmpdir.path })
|
|
test_util.actions.focus('foo/')
|
|
vim.api.nvim_feedkeys('dd', 'x', true)
|
|
test_util.actions.save()
|
|
tmpdir:assert_not_exists('foo')
|
|
tmpdir:assert_exists('a.txt')
|
|
test_util.actions.open({ '--trash', tmpdir.path })
|
|
assert.are.same({ 'foo/' }, test_util.parse_entries(0))
|
|
end)
|
|
|
|
it('deleting a file from trash deletes it permanently', function()
|
|
tmpdir:create({ 'a.txt' })
|
|
test_util.actions.open({ tmpdir.path })
|
|
test_util.actions.focus('a.txt')
|
|
vim.api.nvim_feedkeys('dd', 'x', true)
|
|
test_util.actions.save()
|
|
test_util.actions.open({ '--trash', tmpdir.path })
|
|
test_util.actions.focus('a.txt')
|
|
vim.api.nvim_feedkeys('dd', 'x', true)
|
|
test_util.actions.save()
|
|
test_util.actions.reload()
|
|
tmpdir:assert_not_exists('a.txt')
|
|
assert.are.same({}, test_util.parse_entries(0))
|
|
end)
|
|
|
|
it('cannot create files in the trash', function()
|
|
tmpdir:create({ 'a.txt' })
|
|
test_util.actions.open({ tmpdir.path })
|
|
test_util.actions.focus('a.txt')
|
|
vim.api.nvim_feedkeys('dd', 'x', true)
|
|
test_util.actions.save()
|
|
test_util.actions.open({ '--trash', tmpdir.path })
|
|
vim.api.nvim_feedkeys('onew_file.txt', 'x', true)
|
|
test_util.actions.save()
|
|
test_util.actions.reload()
|
|
assert.are.same({ 'a.txt' }, test_util.parse_entries(0))
|
|
end)
|
|
|
|
it('cannot rename files in the trash', function()
|
|
tmpdir:create({ 'a.txt' })
|
|
test_util.actions.open({ tmpdir.path })
|
|
test_util.actions.focus('a.txt')
|
|
vim.api.nvim_feedkeys('dd', 'x', true)
|
|
test_util.actions.save()
|
|
test_util.actions.open({ '--trash', tmpdir.path })
|
|
vim.api.nvim_feedkeys('0facwnew_name', 'x', true)
|
|
test_util.actions.save()
|
|
test_util.actions.reload()
|
|
assert.are.same({ 'a.txt' }, test_util.parse_entries(0))
|
|
end)
|
|
|
|
it('cannot copy files in the trash', function()
|
|
tmpdir:create({ 'a.txt' })
|
|
test_util.actions.open({ tmpdir.path })
|
|
test_util.actions.focus('a.txt')
|
|
vim.api.nvim_feedkeys('dd', 'x', true)
|
|
test_util.actions.save()
|
|
test_util.actions.open({ '--trash', tmpdir.path })
|
|
vim.api.nvim_feedkeys('yypp', 'x', true)
|
|
test_util.actions.save()
|
|
test_util.actions.reload()
|
|
assert.are.same({ 'a.txt' }, test_util.parse_entries(0))
|
|
end)
|
|
|
|
it('can restore files from trash', function()
|
|
tmpdir:create({ 'a.txt' })
|
|
test_util.actions.open({ tmpdir.path })
|
|
test_util.actions.focus('a.txt')
|
|
vim.api.nvim_feedkeys('dd', 'x', true)
|
|
test_util.actions.save()
|
|
test_util.actions.open({ '--trash', tmpdir.path })
|
|
vim.api.nvim_feedkeys('dd', 'x', true)
|
|
test_util.actions.open({ tmpdir.path })
|
|
vim.api.nvim_feedkeys('p', 'x', true)
|
|
test_util.actions.save()
|
|
test_util.actions.reload()
|
|
assert.are.same({ 'a.txt' }, test_util.parse_entries(0))
|
|
tmpdir:assert_fs({
|
|
['a.txt'] = 'a.txt',
|
|
})
|
|
end)
|
|
|
|
it('can have multiple files with the same name in trash', function()
|
|
tmpdir:create({ 'a.txt' })
|
|
test_util.actions.open({ tmpdir.path })
|
|
vim.api.nvim_feedkeys('dd', 'x', true)
|
|
test_util.actions.save()
|
|
tmpdir:create({ 'a.txt' })
|
|
test_util.actions.reload()
|
|
vim.api.nvim_feedkeys('dd', 'x', true)
|
|
test_util.actions.save()
|
|
test_util.actions.open({ '--trash', tmpdir.path })
|
|
assert.are.same({ 'a.txt', 'a.txt' }, test_util.parse_entries(0))
|
|
end)
|
|
end)
|