aboutsummaryrefslogtreecommitdiff
path: root/test/functional/legacy/031_close_commands_spec.lua
blob: d02b1a2049d3d3c3ffe8abc627db594b0db7d5f5 (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
-- 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 feed_command = helpers.feed_command
local expect_exit = helpers.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)