neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

031_close_commands_spec.lua (3278B)


      1 -- Test for commands that close windows and/or buffers
      2 -- :quit
      3 -- :close
      4 -- :hide
      5 -- :only
      6 -- :sall
      7 -- :all
      8 -- :ball
      9 -- :buf
     10 -- :edit
     11 
     12 local n = require('test.functional.testnvim')()
     13 
     14 local feed = n.feed
     15 local clear = n.clear
     16 local source = n.source
     17 local insert = n.insert
     18 local expect = n.expect
     19 local feed_command = n.feed_command
     20 local expect_exit = n.expect_exit
     21 
     22 describe('Commands that close windows and/or buffers', function()
     23  local function cleanup()
     24    os.remove('Xtest1')
     25    os.remove('Xtest2')
     26    os.remove('Xtest3')
     27  end
     28  setup(function()
     29    cleanup()
     30    clear()
     31  end)
     32  teardown(function()
     33    cleanup()
     34  end)
     35 
     36  it('is working', function()
     37    insert('testtext')
     38 
     39    feed('GA 1<Esc>:$w! Xtest1<CR>')
     40    feed('$r2:$w! Xtest2<CR>')
     41    feed('$r3:$w! Xtest3<CR>')
     42    feed_command('n! Xtest1 Xtest2')
     43    feed('A 1<Esc>:set hidden<CR>')
     44 
     45    -- Test for working :n when hidden set
     46    feed_command('n')
     47    expect('testtext 2')
     48 
     49    -- Test for failing :rew when hidden not set
     50    feed_command('set nohidden')
     51    feed('A 2<Esc>:rew<CR>')
     52    expect('testtext 2 2')
     53 
     54    -- Test for working :rew when hidden set
     55    feed_command('set hidden')
     56    feed_command('rew')
     57    expect('testtext 1 1')
     58 
     59    -- Test for :all keeping a buffer when it's modified
     60    feed_command('set nohidden')
     61    feed('A 1<Esc>:sp<CR>')
     62    feed_command('n Xtest2 Xtest3')
     63    feed_command('all')
     64    feed_command('1wincmd w')
     65    expect('testtext 1 1 1')
     66 
     67    -- Test abandoning changed buffer, should be unloaded even when 'hidden' set
     68    feed_command('set hidden')
     69    feed('A 1<Esc>:q!<CR>')
     70    expect('testtext 2 2')
     71    feed_command('unhide')
     72    expect('testtext 2 2')
     73 
     74    -- Test ":hide" hides anyway when 'hidden' not set
     75    feed_command('set nohidden')
     76    feed('A 2<Esc>:hide<CR>')
     77    expect('testtext 3')
     78 
     79    -- Test ":edit" failing in modified buffer when 'hidden' not set
     80    feed('A 3<Esc>:e Xtest1<CR>')
     81    expect('testtext 3 3')
     82 
     83    -- Test ":edit" working in modified buffer when 'hidden' set
     84    feed_command('set hidden')
     85    feed_command('e Xtest1')
     86    expect('testtext 1')
     87 
     88    -- Test ":close" not hiding when 'hidden' not set in modified buffer
     89    feed_command('sp Xtest3')
     90    feed_command('set nohidden')
     91    feed('A 3<Esc>:close<CR>')
     92    expect('testtext 3 3 3')
     93 
     94    -- Test ":close!" does hide when 'hidden' not set in modified buffer
     95    feed('A 3<Esc>:close!<CR>')
     96    feed_command('set nohidden')
     97    expect('testtext 1')
     98 
     99    -- Test ":all!" hides changed buffer
    100    feed_command('sp Xtest4')
    101    feed('GA 4<Esc>:all!<CR>')
    102    feed_command('1wincmd w')
    103    expect('testtext 2 2 2')
    104 
    105    -- Test ":q!" and hidden buffer.
    106    feed_command('bw! Xtest1 Xtest2 Xtest3 Xtest4')
    107    feed_command('sp Xtest1')
    108    feed_command('wincmd w')
    109    feed_command('bw!')
    110    feed_command('set modified')
    111    feed_command('bot sp Xtest2')
    112    feed_command('set modified')
    113    feed_command('bot sp Xtest3')
    114    feed_command('set modified')
    115    feed_command('wincmd t')
    116    feed_command('hide')
    117    feed_command('q!')
    118    expect('testtext 3')
    119    feed_command('q!')
    120    feed('<CR>')
    121    expect('testtext 1')
    122    expect_exit(
    123      source,
    124      [[
    125      q!
    126      " Now nvim should have exited
    127      throw "Oh, Not finished yet."]]
    128    )
    129  end)
    130 end)