diff options
Diffstat (limited to 'test/functional/ui/float_spec.lua')
-rw-r--r-- | test/functional/ui/float_spec.lua | 139 |
1 files changed, 127 insertions, 12 deletions
diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua index 9b79c272b5..18916b70db 100644 --- a/test/functional/ui/float_spec.lua +++ b/test/functional/ui/float_spec.lua @@ -8,6 +8,7 @@ local command, feed_command = helpers.command, helpers.feed_command local eval = helpers.eval local eq = helpers.eq local neq = helpers.neq +local expect = helpers.expect local exec_lua = helpers.exec_lua local insert = helpers.insert local meths = helpers.meths @@ -418,40 +419,154 @@ describe('float window', function() end) describe('with only one tabpage', function() + local old_buf, old_win + local float_opts = {relative = 'editor', row = 1, col = 1, width = 1, height = 1} + before_each(function() + old_buf = meths.get_current_buf() + old_win = meths.get_current_win() + end) describe('closing the last non-floating window gives E444', function() - local old_win before_each(function() - old_win = meths.get_current_win() - meths.open_win(0, true, {relative = 'editor', row = 1, col = 1, width = 1, height = 1}) + meths.open_win(old_buf, true, float_opts) end) it('if called from non-floating window', function() meths.set_current_win(old_win) - eq('Vim:E444: Cannot close last window', pcall_err(meths.win_close, old_win, false)) + eq('Vim:E444: Cannot close last window', + pcall_err(meths.win_close, old_win, false)) end) it('if called from floating window', function() - eq('Vim:E444: Cannot close last window', pcall_err(meths.win_close, old_win, false)) + eq('Vim:E444: Cannot close last window', + pcall_err(meths.win_close, old_win, false)) + end) + end) + describe("deleting the last non-floating window's buffer", function() + before_each(function() + insert('foo') + end) + describe('when there is only one buffer leaves that window with an empty buffer', function() + before_each(function() + meths.open_win(old_buf, true, float_opts) + end) + it('if called from non-floating window', function() + meths.set_current_win(old_win) + meths.buf_delete(old_buf, {force = true}) + eq(old_win, meths.get_current_win()) + expect('') + eq(1, #meths.list_wins()) + end) + it('if called from floating window', function() + meths.buf_delete(old_buf, {force = true}) + eq(old_win, meths.get_current_win()) + expect('') + eq(1, #meths.list_wins()) + end) + end) + describe('when there are other buffers closes other windows with that buffer', function() + local other_buf, same_buf_win, other_buf_win + before_each(function() + same_buf_win = meths.open_win(old_buf, false, float_opts) + other_buf = meths.create_buf(true, false) + other_buf_win = meths.open_win(other_buf, true, float_opts) + insert('bar') + meths.set_current_win(old_win) + end) + it('if called from non-floating window', function() + meths.buf_delete(old_buf, {force = true}) + eq(old_win, meths.get_current_win()) + eq(other_buf, meths.get_current_buf()) + expect('bar') + eq(2, #meths.list_wins()) + end) + it('if called from floating window with the same buffer', function() + meths.set_current_win(same_buf_win) + meths.buf_delete(old_buf, {force = true}) + eq(old_win, meths.get_current_win()) + eq(other_buf, meths.get_current_buf()) + expect('bar') + eq(2, #meths.list_wins()) + end) + -- TODO: this case is too hard to deal with + pending('if called from floating window with another buffer', function() + meths.set_current_win(other_buf_win) + meths.buf_delete(old_buf, {force = true}) + end) end) end) end) describe('with multiple tabpages', function() + local old_tabpage, old_buf, old_win + local float_opts = {relative = 'editor', row = 1, col = 1, width = 1, height = 1} + before_each(function() + old_tabpage = meths.get_current_tabpage() + insert('oldtab') + command('tabnew') + old_buf = meths.get_current_buf() + old_win = meths.get_current_win() + end) describe('closing the last non-floating window', function() - local old_tabpage, old_win - before_each(function() - old_tabpage = meths.get_current_tabpage() - command('tabnew') - old_win = meths.get_current_win() - meths.open_win(0, true, {relative = 'editor', row = 1, col = 1, width = 1, height = 1}) - end) describe('when all floating windows are closeable closes the tabpage', function() + before_each(function() + meths.open_win(old_buf, true, float_opts) + end) it('if called from non-floating window', function() meths.set_current_win(old_win) meths.win_close(old_win, false) eq(old_tabpage, meths.get_current_tabpage()) + expect('oldtab') + eq(1, #meths.list_tabpages()) end) it('if called from floating window', function() meths.win_close(old_win, false) eq(old_tabpage, meths.get_current_tabpage()) + expect('oldtab') + eq(1, #meths.list_tabpages()) + end) + end) + describe('when there are non-closeable floating windows gives E5601', function() + before_each(function() + command('set nohidden') + local other_buf = meths.create_buf(true, false) + meths.open_win(other_buf, true, float_opts) + insert('foo') + end) + it('if called from non-floating window', function() + meths.set_current_win(old_win) + eq('Vim:E5601: Cannot close window, only floating window would remain', + pcall_err(meths.win_close, old_win, false)) + end) + it('if called from floating window', function() + eq('Vim:E5601: Cannot close window, only floating window would remain', + pcall_err(meths.win_close, old_win, false)) + end) + end) + end) + describe("deleting the last non-floating window's buffer", function() + describe('when all floating windows are closeable closes the tabpage', function() + local other_buf, same_buf_win, other_buf_win + before_each(function() + same_buf_win = meths.open_win(old_buf, false, float_opts) + other_buf = meths.create_buf(true, false) + other_buf_win = meths.open_win(other_buf, true, float_opts) + meths.set_current_win(old_win) + end) + it('if called from non-floating window', function() + meths.buf_delete(old_buf, {force = false}) + eq(old_tabpage, meths.get_current_tabpage()) + expect('oldtab') + eq(1, #meths.list_tabpages()) + end) + it('if called from floating window with the same buffer', function() + meths.set_current_win(same_buf_win) + meths.buf_delete(old_buf, {force = false}) + eq(old_tabpage, meths.get_current_tabpage()) + expect('oldtab') + eq(1, #meths.list_tabpages()) + end) + -- TODO: this case is too hard to deal with + pending('if called from floating window with another buffer', function() + meths.set_current_win(other_buf_win) + meths.buf_delete(old_buf, {force = false}) end) end) end) |