require('plenary.async').tests.add_to_env() local TmpDir = require('tests.tmpdir') local files = require('oil.adapters.files') local test_util = require('tests.test_util') a.describe('files adapter', function() local tmpdir a.before_each(function() tmpdir = TmpDir.new() end) a.after_each(function() if tmpdir then tmpdir:dispose() end test_util.reset_editor() end) a.it('tmpdir creates files and asserts they exist', function() tmpdir:create({ 'a.txt', 'foo/b.txt', 'foo/c.txt', 'bar/' }) tmpdir:assert_fs({ ['a.txt'] = 'a.txt', ['foo/b.txt'] = 'foo/b.txt', ['foo/c.txt'] = 'foo/c.txt', ['bar/'] = true, }) end) a.it('Creates files', function() local err = a.wrap(files.perform_action, 2)({ url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a.txt', entry_type = 'file', type = 'create', }) assert.is_nil(err) tmpdir:assert_fs({ ['a.txt'] = '', }) end) a.it('Creates directories', function() local err = a.wrap(files.perform_action, 2)({ url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a', entry_type = 'directory', type = 'create', }) assert.is_nil(err) tmpdir:assert_fs({ ['a/'] = true, }) end) a.it('Deletes files', function() tmpdir:create({ 'a.txt' }) a.util.scheduler() local url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a.txt' local err = a.wrap(files.perform_action, 2)({ url = url, entry_type = 'file', type = 'delete', }) assert.is_nil(err) tmpdir:assert_fs({}) end) a.it('Deletes directories', function() tmpdir:create({ 'a/' }) local url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a' local err = a.wrap(files.perform_action, 2)({ url = url, entry_type = 'directory', type = 'delete', }) assert.is_nil(err) tmpdir:assert_fs({}) end) a.it('Moves files', function() tmpdir:create({ 'a.txt' }) a.util.scheduler() local src_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a.txt' local dest_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'b.txt' local err = a.wrap(files.perform_action, 2)({ src_url = src_url, dest_url = dest_url, entry_type = 'file', type = 'move', }) assert.is_nil(err) tmpdir:assert_fs({ ['b.txt'] = 'a.txt', }) end) a.it('Moves directories', function() tmpdir:create({ 'a/a.txt' }) a.util.scheduler() local src_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a' local dest_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'b' local err = a.wrap(files.perform_action, 2)({ src_url = src_url, dest_url = dest_url, entry_type = 'directory', type = 'move', }) assert.is_nil(err) tmpdir:assert_fs({ ['b/a.txt'] = 'a/a.txt', ['b/'] = true, }) end) a.it('Copies files', function() tmpdir:create({ 'a.txt' }) a.util.scheduler() local src_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a.txt' local dest_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'b.txt' local err = a.wrap(files.perform_action, 2)({ src_url = src_url, dest_url = dest_url, entry_type = 'file', type = 'copy', }) assert.is_nil(err) tmpdir:assert_fs({ ['a.txt'] = 'a.txt', ['b.txt'] = 'a.txt', }) end) a.it('Recursively copies directories', function() tmpdir:create({ 'a/a.txt' }) a.util.scheduler() local src_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a' local dest_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'b' local err = a.wrap(files.perform_action, 2)({ src_url = src_url, dest_url = dest_url, entry_type = 'directory', type = 'copy', }) assert.is_nil(err) tmpdir:assert_fs({ ['b/a.txt'] = 'a/a.txt', ['b/'] = true, ['a/a.txt'] = 'a/a.txt', ['a/'] = true, }) end) a.it('Editing a new oil://path/ creates an oil buffer', function() local tmpdir_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. '/' vim.cmd.edit({ args = { tmpdir_url } }) test_util.wait_oil_ready() local new_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'newdir' vim.cmd.edit({ args = { new_url } }) test_util.wait_oil_ready() assert.equals('oil', vim.bo.filetype) -- The normalization will add a '/' assert.equals(new_url .. '/', vim.api.nvim_buf_get_name(0)) end) a.it('Editing a new oil://file.rb creates a normal buffer', function() local tmpdir_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. '/' vim.cmd.edit({ args = { tmpdir_url } }) test_util.wait_for_autocmd('BufReadPost') local new_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'file.rb' vim.cmd.edit({ args = { new_url } }) test_util.wait_for_autocmd('BufReadPost') assert.equals('ruby', vim.bo.filetype) assert.equals(vim.fn.fnamemodify(tmpdir.path, ':p') .. 'file.rb', vim.api.nvim_buf_get_name(0)) assert.equals(tmpdir.path .. '/file.rb', vim.fn.bufname()) end) end)