diff options
Diffstat (limited to 'test')
| -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) | 
