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

local helpers = require('test.functional.helpers')(after_each)

local feed = helpers.feed
local clear = helpers.clear
local source = helpers.source
local insert = helpers.insert
local expect = helpers.expect
local execute = helpers.execute

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>')
    execute('n! Xtest1 Xtest2')
    feed('A 1<Esc>:set hidden<CR>')

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

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

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

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

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

    -- Test ":hide" hides anyway when 'hidden' not set
    execute('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
    execute('set hidden')
    execute('e Xtest1')
    expect('testtext 1')

    -- Test ":close" not hiding when 'hidden' not set in modified buffer
    execute('sp Xtest3')
    execute('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>')
    execute('set nohidden')
    expect('testtext 1')

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

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