aboutsummaryrefslogtreecommitdiff
path: root/test/functional/ex_cmds/oldfiles_spec.lua
blob: a218bb663326ad75857d7ea0b88a6864fd97f899 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
local Screen = require('test.functional.ui.screen')
local helpers = require('test.functional.helpers')(after_each)

local buf, eq, execute = helpers.curbufmeths, helpers.eq, helpers.execute
local feed, nvim_prog, wait = helpers.feed, helpers.nvim_prog, helpers.wait
local ok, set_session, spawn = helpers.ok, helpers.set_session, helpers.spawn

local shada_file = 'test.shada'

--
-- helpers.clear() uses "-i NONE", which is not useful for this test.
--
local function _clear()
  set_session(spawn({nvim_prog,
                     '-u', 'NONE',
                     '--cmd', 'set noswapfile undodir=. directory=. viewdir=. backupdir=.',
                     '--embed'}))
end

describe(':oldfiles', function()
  before_each(_clear)

  after_each(function()
    os.remove(shada_file)
  end)

  local function add_padding(s)
    return s .. string.rep(' ', 96 - string.len(s))
  end

  it('shows most recently used files', function()
    local screen = Screen.new(100, 5)
    screen:attach()
    execute('edit testfile1')
    execute('edit testfile2')
    execute('wshada ' .. shada_file)
    execute('rshada! ' .. shada_file)
    local oldfiles = helpers.meths.get_vvar('oldfiles')
    execute('oldfiles')
    screen:expect([[
      testfile2                                                                                           |
      1: ]].. add_padding(oldfiles[1]) ..[[ |
      2: ]].. add_padding(oldfiles[2]) ..[[ |
                                                                                                          |
      Press ENTER or type command to continue^                                                             |
    ]])
  end)
end)

describe(':browse oldfiles', function()
  local filename
  local filename2
  local oldfiles

  before_each(function()
    _clear()
    execute('edit testfile1')
    filename = buf.get_name()
    execute('edit testfile2')
    filename2 = buf.get_name()
    execute('wshada ' .. shada_file)
    wait()
    _clear()
    execute('rshada! ' .. shada_file)

    -- Ensure nvim is out of "Press ENTER..." screen
    feed('<cr>')

    -- Ensure v:oldfiles isn't busted.  Since things happen so fast,
    -- the ordering of v:oldfiles is unstable (it uses qsort() under-the-hood).
    -- Let's verify the contents and the length of v:oldfiles before moving on.
    oldfiles = helpers.meths.get_vvar('oldfiles')
    eq(2, #oldfiles)
    ok(filename == oldfiles[1] or filename == oldfiles[2])
    ok(filename2 == oldfiles[1] or filename2 == oldfiles[2])

    execute('browse oldfiles')
  end)

  after_each(function()
    os.remove(shada_file)
  end)

  it('provides a prompt and edits the chosen file', function()
    feed('2<cr>')
    eq(oldfiles[2], buf.get_name())
  end)

  it('provides a prompt and does nothing on <cr>', function()
    feed('<cr>')
    eq('', buf.get_name())
  end)

  it('provides a prompt and does nothing if choice is out-of-bounds', function()
    feed('3<cr>')
    eq('', buf.get_name())
  end)
end)