summaryrefslogtreecommitdiffstatshomepage
path: root/test/functional/shada/buffers_spec.lua
blob: 2c1425058cb95e73110fc09698c094510f1e94f8 (plain)
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
-- shada buffer list saving/reading support
local t = require('test.testutil')
local n = require('test.functional.testnvim')()
local t_shada = require('test.functional.shada.testutil')

local nvim_command, fn, eq, api = n.command, n.fn, t.eq, n.api
local expect_exit = n.expect_exit

local reset, clear = t_shada.reset, t_shada.clear

describe('shada support code', function()
  local testfilename = 'Xtestfile-functional-shada-buffers'
  local testfilename_2 = 'Xtestfile-functional-shada-buffers-2'
  after_each(clear)

  it('is able to dump and restore buffer list', function()
    reset('set shada+=%')
    nvim_command('edit ' .. testfilename)
    nvim_command('edit ' .. testfilename_2)
    expect_exit(nvim_command, 'qall')
    reset('set shada+=%')
    eq(3, fn.bufnr('$'))
    eq('', fn.bufname(1))
    eq(testfilename, fn.bufname(2))
    eq(testfilename_2, fn.bufname(3))
  end)

  it('does not restore buffer list without % in &shada', function()
    reset('set shada+=%')
    nvim_command('edit ' .. testfilename)
    nvim_command('edit ' .. testfilename_2)
    expect_exit(nvim_command, 'qall')
    reset()
    eq(1, fn.bufnr('$'))
    eq('', fn.bufname(1))
  end)

  it('does not dump buffer list without % in &shada', function()
    reset()
    nvim_command('edit ' .. testfilename)
    nvim_command('edit ' .. testfilename_2)
    expect_exit(nvim_command, 'qall')
    reset('set shada+=%')
    eq(1, fn.bufnr('$'))
    eq('', fn.bufname(1))
  end)

  it('does not dump unlisted buffer', function()
    reset('set shada+=%')
    nvim_command('edit ' .. testfilename)
    nvim_command('edit ' .. testfilename_2)
    api.nvim_set_option_value('buflisted', false, {})
    expect_exit(nvim_command, 'qall')
    reset('set shada+=%')
    eq(2, fn.bufnr('$'))
    eq('', fn.bufname(1))
    eq(testfilename, fn.bufname(2))
  end)

  it('does not dump quickfix buffer', function()
    reset('set shada+=%')
    nvim_command('edit ' .. testfilename)
    nvim_command('edit ' .. testfilename_2)
    api.nvim_set_option_value('buftype', 'quickfix', {})
    expect_exit(nvim_command, 'qall')
    reset('set shada+=%')
    eq(2, fn.bufnr('$'))
    eq('', fn.bufname(1))
    eq(testfilename, fn.bufname(2))
  end)

  it('does not dump unnamed buffers', function()
    reset('set shada+=% hidden')
    api.nvim_buf_set_lines(0, 0, 1, true, { 'foo' })
    nvim_command('enew')
    api.nvim_buf_set_lines(0, 0, 1, true, { 'bar' })
    eq(2, fn.bufnr('$'))
    expect_exit(nvim_command, 'qall!')
    reset('set shada+=% hidden')
    eq(1, fn.bufnr('$'))
    eq('', fn.bufname(1))
  end)

  it('restores 1 buffer with %1 in &shada, #5759', function()
    reset('set shada+=%1')
    nvim_command('edit ' .. testfilename)
    nvim_command('edit ' .. testfilename_2)
    expect_exit(nvim_command, 'qall')
    reset('set shada+=%1')
    eq(2, fn.bufnr('$'))
    eq('', fn.bufname(1))
    eq(testfilename, fn.bufname(2))
  end)

  it("does not add 'nobuflisted' buffers to v:oldfiles", function()
    reset("set shada='100")
    nvim_command('edit ' .. testfilename)
    nvim_command('setlocal nobuflisted')
    nvim_command('edit ' .. testfilename_2)
    nvim_command('setlocal buflisted')
    expect_exit(nvim_command, 'qall')
    reset("set shada='100")
    local oldfiles = api.nvim_get_vvar('oldfiles')
    eq(1, #oldfiles)
    t.matches(vim.pesc(testfilename_2), oldfiles[1])
  end)

  it("saves bdelete'd buffer to v:oldfiles #39010", function()
    reset("set shada='100")
    nvim_command('edit ' .. testfilename)
    nvim_command('bdelete')
    nvim_command('edit ' .. testfilename_2)
    expect_exit(nvim_command, 'qall')
    reset("set shada='100")
    local oldfiles = api.nvim_get_vvar('oldfiles')
    eq(2, #oldfiles)
  end)

  it("does not dump bdelete'd buffer to buffer list", function()
    reset('set shada+=%')
    nvim_command('edit ' .. testfilename)
    nvim_command('edit ' .. testfilename_2)
    nvim_command('bdelete ' .. testfilename)
    expect_exit(nvim_command, 'qall')
    reset('set shada+=%')
    eq(2, fn.bufnr('$'))
    eq('', fn.bufname(1))
    eq(testfilename_2, fn.bufname(2))
  end)
end)