aboutsummaryrefslogtreecommitdiff
path: root/test/functional/legacy/031_close_commands_spec.lua
blob: 974df0c21dd0e75ba4f7b1fa5a5c8b2f04a5c8cd (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
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
-- Test for commands that close windows and/or buffers
-- :quit
-- :close
-- :hide
-- :only
-- :sall
-- :all
-- :ball
-- :buf
-- :edit

local n = require('test.functional.testnvim')()

local feed = n.feed
local clear = n.clear
local source = n.source
local insert = n.insert
local expect = n.expect
local feed_command = n.feed_command
local expect_exit = n.expect_exit

describe('Commands that close windows and/or buffers', function()
  local function cleanup()
    os.remove('Xtest1')
    os.remove('Xtest2')
    os.remove('Xtest3')
  end
  setup(function()
    cleanup()
    clear()
  end)
  teardown(function()
    cleanup()
  end)

  it('is working', function()
    insert('testtext')

    feed('GA 1<Esc>:$w! Xtest1<CR>')
    feed('$r2:$w! Xtest2<CR>')
    feed('$r3:$w! Xtest3<CR>')
    feed_command('n! Xtest1 Xtest2')
    feed('A 1<Esc>:set hidden<CR>')

    -- Test for working :n when hidden set
    feed_command('n')
    expect('testtext 2')

    -- Test for failing :rew when hidden not set
    feed_command('set nohidden')
    feed('A 2<Esc>:rew<CR>')
    expect('testtext 2 2')

    -- Test for working :rew when hidden set
    feed_command('set hidden')
    feed_command('rew')
    expect('testtext 1 1')

    -- Test for :all keeping a buffer when it's modified
    feed_command('set nohidden')
    feed('A 1<Esc>:sp<CR>')
    feed_command('n Xtest2 Xtest3')
    feed_command('all')
    feed_command('1wincmd w')
    expect('testtext 1 1 1')

    -- Test abandoning changed buffer, should be unloaded even when 'hidden' set
    feed_command('set hidden')
    feed('A 1<Esc>:q!<CR>')
    expect('testtext 2 2')
    feed_command('unhide')
    expect('testtext 2 2')

    -- Test ":hide" hides anyway when 'hidden' not set
    feed_command('set nohidden')
    feed('A 2<Esc>:hide<CR>')
    expect('testtext 3')

    -- Test ":edit" failing in modified buffer when 'hidden' not set
    feed('A 3<Esc>:e Xtest1<CR>')
    expect('testtext 3 3')

    -- Test ":edit" working in modified buffer when 'hidden' set
    feed_command('set hidden')
    feed_command('e Xtest1')
    expect('testtext 1')

    -- Test ":close" not hiding when 'hidden' not set in modified buffer
    feed_command('sp Xtest3')
    feed_command('set nohidden')
    feed('A 3<Esc>:close<CR>')
    expect('testtext 3 3 3')

    -- Test ":close!" does hide when 'hidden' not set in modified buffer
    feed('A 3<Esc>:close!<CR>')
    feed_command('set nohidden')
    expect('testtext 1')

    -- Test ":all!" hides changed buffer
    feed_command('sp Xtest4')
    feed('GA 4<Esc>:all!<CR>')
    feed_command('1wincmd w')
    expect('testtext 2 2 2')

    -- Test ":q!" and hidden buffer.
    feed_command('bw! Xtest1 Xtest2 Xtest3 Xtest4')
    feed_command('sp Xtest1')
    feed_command('wincmd w')
    feed_command('bw!')
    feed_command('set modified')
    feed_command('bot sp Xtest2')
    feed_command('set modified')
    feed_command('bot sp Xtest3')
    feed_command('set modified')
    feed_command('wincmd t')
    feed_command('hide')
    feed_command('q!')
    expect('testtext 3')
    feed_command('q!')
    feed('<CR>')
    expect('testtext 1')
    expect_exit(
      source,
      [[
      q!
      " Now nvim should have exited
      throw "Oh, Not finished yet."]]
    )
  end)
end)