local helpers, lfs = require('test.functional.helpers'), require('lfs')
local clear, execute, eq, neq, spawn, nvim_prog, set_session, wait, write_file
  = helpers.clear, helpers.execute, helpers.eq, helpers.neq, helpers.spawn,
  helpers.nvim_prog, helpers.set_session, helpers.wait, helpers.write_file

describe(':wviminfo', function()
  local viminfo_file = 'wviminfo_test'
  local session

  before_each(function()
    if session then
      session:exit(0)
    end

    -- Override the default session because we need 'swapfile' for these tests.
    local session = spawn({nvim_prog, '-u', 'NONE', '--embed',
                           '--cmd', 'set swapfile'})
    set_session(session)

    os.remove(viminfo_file)
  end)

  it('creates a viminfo file', function()
    -- file should _not_ exist
    eq(nil, lfs.attributes(viminfo_file))
    execute('wv! '..viminfo_file)
    wait()
    -- file _should_ exist
    neq(nil, lfs.attributes(viminfo_file))
  end)

  it('overwrites existing files', function()
    local text = 'wviminfo test'

    -- Create a dummy file
    write_file(viminfo_file, text)

    -- sanity check
    eq(text, io.open(viminfo_file):read())
    neq(nil, lfs.attributes(viminfo_file))

    execute('wv! '..viminfo_file)
    wait()

    -- File should have been overwritten with a viminfo file.
    local line1 = io.lines(viminfo_file)()
    assert(nil ~= string.find(line1, 'This viminfo file was generated by Nvim'),
      viminfo_file..' should be a viminfo-formatted file')
  end)

  teardown(function()
    os.remove(viminfo_file)
  end)
end)
