neovim

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

012_directory_spec.lua (2378B)


      1 -- Tests for 'directory' option.
      2 -- - ".", in same dir as file
      3 -- - "./dir", in directory relative to file
      4 -- - "dir", in directory relative to current dir
      5 
      6 local t = require('test.testutil')
      7 local n = require('test.functional.testnvim')()
      8 
      9 local eq = t.eq
     10 local neq = t.neq
     11 local poke_eventloop = n.poke_eventloop
     12 local fn = n.fn
     13 local api = n.api
     14 local clear = n.clear
     15 local insert = n.insert
     16 local command = n.command
     17 local write_file = t.write_file
     18 local mkdir = t.mkdir
     19 
     20 local function ls_dir_sorted(dirname)
     21  local files = {}
     22  for f in vim.fs.dir(dirname) do
     23    if f ~= '.' and f ~= '..' then
     24      table.insert(files, f)
     25    end
     26  end
     27  table.sort(files)
     28  return files
     29 end
     30 
     31 describe("'directory' option", function()
     32  setup(function()
     33    local text = [[
     34      start of testfile
     35      line 2 Abcdefghij
     36      line 3 Abcdefghij
     37      end of testfile
     38      ]]
     39    write_file('Xtest1', text)
     40    mkdir('Xtest.je')
     41    mkdir('Xtest2')
     42    write_file('Xtest2/Xtest3', text)
     43    clear()
     44  end)
     45  teardown(function()
     46    command('%bwipe!')
     47    api.nvim_set_option_value('swapfile', false, {})
     48    api.nvim_set_option_value('directory', '.', {})
     49    n.rmdir('Xtest.je')
     50    n.rmdir('Xtest2')
     51    os.remove('Xtest1')
     52  end)
     53 
     54  it('is working', function()
     55    insert([[
     56      start of testfile
     57      line 2 Abcdefghij
     58      line 3 Abcdefghij
     59      end of testfile]])
     60 
     61    api.nvim_set_option_value('swapfile', true, {})
     62    api.nvim_set_option_value('directory', '.', {})
     63 
     64    -- sanity check: files should not exist yet.
     65    eq(nil, vim.uv.fs_stat('.Xtest1.swp'))
     66 
     67    command('edit! Xtest1')
     68    poke_eventloop()
     69    eq('Xtest1', fn.buffer_name('%'))
     70    -- Verify that the swapfile exists. In the legacy test this was done by
     71    -- reading the output from :!ls.
     72    neq(nil, vim.uv.fs_stat('.Xtest1.swp'))
     73 
     74    api.nvim_set_option_value('directory', './Xtest2,.', {})
     75    command('edit Xtest1')
     76    poke_eventloop()
     77 
     78    -- swapfile should no longer exist in CWD.
     79    eq(nil, vim.uv.fs_stat('.Xtest1.swp'))
     80 
     81    eq({ 'Xtest1.swp', 'Xtest3' }, ls_dir_sorted('Xtest2'))
     82 
     83    api.nvim_set_option_value('directory', 'Xtest.je', {})
     84    command('bdelete')
     85    command('edit Xtest2/Xtest3')
     86    eq(true, api.nvim_get_option_value('swapfile', {}))
     87    poke_eventloop()
     88 
     89    eq({ 'Xtest3' }, ls_dir_sorted('Xtest2'))
     90    eq({ 'Xtest3.swp' }, ls_dir_sorted('Xtest.je'))
     91  end)
     92 end)