Mercurial > vim
view src/testdir/test_window_cmd.vim @ 13686:61979a75435a v8.0.1715
patch 8.0.1715: terminal buffer can be 1 more than 'terminalscroll' lines
commit https://github.com/vim/vim/commit/8c94a549051cc4d4cbb8cabd321724a85fe40c23
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Apr 15 12:55:13 2018 +0200
patch 8.0.1715: terminal buffer can be 1 more than 'terminalscroll' lines
Problem: Terminal buffer can be 1 more than 'terminalscroll' lines.
Solution: Change > to >=.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 15 Apr 2018 13:00:05 +0200 |
parents | 57da3d873f20 |
children | 60e80884994d |
line wrap: on
line source
" Tests for window cmd (:wincmd, :split, :vsplit, :resize and etc...) func Test_window_cmd_ls0_with_split() set ls=0 set splitbelow split quit call assert_equal(0, &lines - &cmdheight - winheight(0)) new | only! " set splitbelow&vim botright split quit call assert_equal(0, &lines - &cmdheight - winheight(0)) new | only! set ls&vim endfunc func Test_window_cmd_cmdwin_with_vsp() let efmt='Expected 0 but got %d (in ls=%d, %s window)' for v in range(0, 2) exec "set ls=" . v vsplit call feedkeys("q:\<CR>") let ac = &lines - (&cmdheight + winheight(0) + !!v) let emsg = printf(efmt, ac, v, 'left') call assert_equal(0, ac, emsg) wincmd w let ac = &lines - (&cmdheight + winheight(0) + !!v) let emsg = printf(efmt, ac, v, 'right') call assert_equal(0, ac, emsg) new | only! endfor set ls&vim endfunc function Test_window_cmd_wincmd_gf() let fname = 'test_gf.txt' let swp_fname = '.' . fname . '.swp' call writefile([], fname) call writefile([], swp_fname) function s:swap_exists() let v:swapchoice = s:swap_choice endfunc augroup test_window_cmd_wincmd_gf autocmd! exec "autocmd SwapExists " . fname . " call s:swap_exists()" augroup END call setline(1, fname) " (E)dit anyway let s:swap_choice = 'e' wincmd gf call assert_equal(2, tabpagenr()) call assert_equal(fname, bufname("%")) quit! " (Q)uit let s:swap_choice = 'q' wincmd gf call assert_equal(1, tabpagenr()) call assert_notequal(fname, bufname("%")) new | only! call delete(fname) call delete(swp_fname) augroup! test_window_cmd_wincmd_gf endfunc func Test_window_quit() e Xa split Xb call assert_equal(2, winnr('$')) call assert_equal('Xb', bufname(winbufnr(1))) call assert_equal('Xa', bufname(winbufnr(2))) wincmd q call assert_equal(1, winnr('$')) call assert_equal('Xa', bufname(winbufnr(1))) bw Xa Xb endfunc func Test_window_horizontal_split() call assert_equal(1, winnr('$')) 3wincmd s call assert_equal(2, winnr('$')) call assert_equal(3, winheight(0)) call assert_equal(winwidth(1), winwidth(2)) call assert_fails('botright topleft wincmd s', 'E442:') bw endfunc func Test_window_vertical_split() call assert_equal(1, winnr('$')) 3wincmd v call assert_equal(2, winnr('$')) call assert_equal(3, winwidth(0)) call assert_equal(winheight(1), winheight(2)) call assert_fails('botright topleft wincmd v', 'E442:') bw endfunc func Test_window_split_edit_alternate() e Xa e Xb wincmd ^ call assert_equal('Xa', bufname(winbufnr(1))) call assert_equal('Xb', bufname(winbufnr(2))) bw Xa Xb endfunc func Test_window_preview() " Open a preview window pedit Xa call assert_equal(2, winnr('$')) call assert_equal(0, &previewwindow) " Go to the preview window wincmd P call assert_equal(1, &previewwindow) " Close preview window wincmd z call assert_equal(1, winnr('$')) call assert_equal(0, &previewwindow) call assert_fails('wincmd P', 'E441:') endfunc func Test_window_exchange() e Xa " Nothing happens with window exchange when there is 1 window wincmd x call assert_equal(1, winnr('$')) split Xb split Xc call assert_equal('Xc', bufname(winbufnr(1))) call assert_equal('Xb', bufname(winbufnr(2))) call assert_equal('Xa', bufname(winbufnr(3))) " Exchange current window 1 with window 3 3wincmd x call assert_equal('Xa', bufname(winbufnr(1))) call assert_equal('Xb', bufname(winbufnr(2))) call assert_equal('Xc', bufname(winbufnr(3))) " Exchange window with next when at the top window wincmd x call assert_equal('Xb', bufname(winbufnr(1))) call assert_equal('Xa', bufname(winbufnr(2))) call assert_equal('Xc', bufname(winbufnr(3))) " Exchange window with next when at the middle window wincmd j wincmd x call assert_equal('Xb', bufname(winbufnr(1))) call assert_equal('Xc', bufname(winbufnr(2))) call assert_equal('Xa', bufname(winbufnr(3))) " Exchange window with next when at the bottom window. " When there is no next window, it exchanges with the previous window. wincmd j wincmd x call assert_equal('Xb', bufname(winbufnr(1))) call assert_equal('Xa', bufname(winbufnr(2))) call assert_equal('Xc', bufname(winbufnr(3))) bw Xa Xb Xc endfunc func Test_window_rotate() e Xa split Xb split Xc call assert_equal('Xc', bufname(winbufnr(1))) call assert_equal('Xb', bufname(winbufnr(2))) call assert_equal('Xa', bufname(winbufnr(3))) " Rotate downwards wincmd r call assert_equal('Xa', bufname(winbufnr(1))) call assert_equal('Xc', bufname(winbufnr(2))) call assert_equal('Xb', bufname(winbufnr(3))) 2wincmd r call assert_equal('Xc', bufname(winbufnr(1))) call assert_equal('Xb', bufname(winbufnr(2))) call assert_equal('Xa', bufname(winbufnr(3))) " Rotate upwards wincmd R call assert_equal('Xb', bufname(winbufnr(1))) call assert_equal('Xa', bufname(winbufnr(2))) call assert_equal('Xc', bufname(winbufnr(3))) 2wincmd R call assert_equal('Xc', bufname(winbufnr(1))) call assert_equal('Xb', bufname(winbufnr(2))) call assert_equal('Xa', bufname(winbufnr(3))) bot vsplit call assert_fails('wincmd R', 'E443:') bw Xa Xb Xc endfunc func Test_window_height() e Xa split Xb let [wh1, wh2] = [winheight(1), winheight(2)] " Active window (1) should have the same height or 1 more " than the other window. call assert_inrange(wh2, wh2 + 1, wh1) wincmd - call assert_equal(wh1 - 1, winheight(1)) call assert_equal(wh2 + 1, winheight(2)) wincmd + call assert_equal(wh1, winheight(1)) call assert_equal(wh2, winheight(2)) 2wincmd _ call assert_equal(2, winheight(1)) call assert_equal(wh1 + wh2 - 2, winheight(2)) wincmd = call assert_equal(wh1, winheight(1)) call assert_equal(wh2, winheight(2)) 2wincmd _ set winfixheight split Xc let [wh1, wh2, wh3] = [winheight(1), winheight(2), winheight(3)] call assert_equal(2, winheight(2)) call assert_inrange(wh3, wh3 + 1, wh1) 3wincmd + call assert_equal(2, winheight(2)) call assert_equal(wh1 + 3, winheight(1)) call assert_equal(wh3 - 3, winheight(3)) wincmd = call assert_equal(2, winheight(2)) call assert_equal(wh1, winheight(1)) call assert_equal(wh3, winheight(3)) wincmd j set winfixheight& wincmd = let [wh1, wh2, wh3] = [winheight(1), winheight(2), winheight(3)] " Current window (2) should have the same height or 1 more " than the other windows. call assert_inrange(wh1, wh1 + 1, wh2) call assert_inrange(wh3, wh3 + 1, wh2) bw Xa Xb Xc endfunc func Test_window_width() e Xa vsplit Xb let [ww1, ww2] = [winwidth(1), winwidth(2)] " Active window (1) should have the same width or 1 more " than the other window. call assert_inrange(ww2, ww2 + 1, ww1) wincmd < call assert_equal(ww1 - 1, winwidth(1)) call assert_equal(ww2 + 1, winwidth(2)) wincmd > call assert_equal(ww1, winwidth(1)) call assert_equal(ww2, winwidth(2)) 2wincmd | call assert_equal(2, winwidth(1)) call assert_equal(ww1 + ww2 - 2, winwidth(2)) wincmd = call assert_equal(ww1, winwidth(1)) call assert_equal(ww2, winwidth(2)) 2wincmd | set winfixwidth vsplit Xc let [ww1, ww2, ww3] = [winwidth(1), winwidth(2), winwidth(3)] call assert_equal(2, winwidth(2)) call assert_inrange(ww3, ww3 + 1, ww1) 3wincmd > call assert_equal(2, winwidth(2)) call assert_equal(ww1 + 3, winwidth(1)) call assert_equal(ww3 - 3, winwidth(3)) wincmd = call assert_equal(2, winwidth(2)) call assert_equal(ww1, winwidth(1)) call assert_equal(ww3, winwidth(3)) wincmd l set winfixwidth& wincmd = let [ww1, ww2, ww3] = [winwidth(1), winwidth(2), winwidth(3)] " Current window (2) should have the same width or 1 more " than the other windows. call assert_inrange(ww1, ww1 + 1, ww2) call assert_inrange(ww3, ww3 + 1, ww2) bw Xa Xb Xc endfunc func Test_equalalways_on_close() set equalalways vsplit windo split split wincmd J " now we have a frame top-left with two windows, a frame top-right with two " windows and a frame at the bottom, full-width. let height_1 = winheight(1) let height_2 = winheight(2) let height_3 = winheight(3) let height_4 = winheight(4) " closing the bottom window causes all windows to be resized. close call assert_notequal(height_1, winheight(1)) call assert_notequal(height_2, winheight(2)) call assert_notequal(height_3, winheight(3)) call assert_notequal(height_4, winheight(4)) call assert_equal(winheight(1), winheight(3)) call assert_equal(winheight(2), winheight(4)) 1wincmd w split 4wincmd w resize + 5 " left column has three windows, equalized heights. " right column has two windows, top one a bit higher let height_1 = winheight(1) let height_2 = winheight(2) let height_4 = winheight(4) let height_5 = winheight(5) 3wincmd w " closing window in left column equalizes heights in left column but not in " the right column close call assert_notequal(height_1, winheight(1)) call assert_notequal(height_2, winheight(2)) call assert_equal(height_4, winheight(3)) call assert_equal(height_5, winheight(4)) only set equalalways& endfunc func Test_win_screenpos() call assert_equal(1, winnr('$')) split vsplit 10wincmd _ 30wincmd | call assert_equal([1, 1], win_screenpos(1)) call assert_equal([1, 32], win_screenpos(2)) call assert_equal([12, 1], win_screenpos(3)) call assert_equal([0, 0], win_screenpos(4)) only endfunc func Test_window_jump_tag() help /iccf call assert_match('^|iccf|', getline('.')) call assert_equal(2, winnr('$')) 2wincmd } call assert_equal(3, winnr('$')) call assert_match('^|iccf|', getline('.')) wincmd k call assert_match('\*iccf\*', getline('.')) call assert_equal(2, winheight(0)) wincmd z set previewheight=4 help /bugs wincmd } wincmd k call assert_match('\*bugs\*', getline('.')) call assert_equal(4, winheight(0)) set previewheight& %bw! endfunc func Test_window_newtab() e Xa call assert_equal(1, tabpagenr('$')) call assert_equal("\nAlready only one window", execute('wincmd T')) split Xb split Xc wincmd T call assert_equal(2, tabpagenr('$')) call assert_equal(['Xb', 'Xa'], map(tabpagebuflist(1), 'bufname(v:val)')) call assert_equal(['Xc' ], map(tabpagebuflist(2), 'bufname(v:val)')) %bw! endfunc func Test_next_split_all() " This was causing an illegal memory access. n x norm axxx split split s/x s/x all bwipe! endfunc " Tests for adjusting window and contents func GetScreenStr(row) let str = "" for c in range(1,3) let str .= nr2char(screenchar(a:row, c)) endfor return str endfunc func Test_window_contents() enew! | only | new call setline(1, range(1,256)) exe "norm! \<C-W>t\<C-W>=1Gzt\<C-W>w\<C-W>+" redraw let s3=GetScreenStr(1) wincmd p call assert_equal(1, line("w0")) call assert_equal('1 ', s3) exe "norm! \<C-W>t\<C-W>=50Gzt\<C-W>w\<C-W>+" redraw let s3=GetScreenStr(1) wincmd p call assert_equal(50, line("w0")) call assert_equal('50 ', s3) exe "norm! \<C-W>t\<C-W>=59Gzt\<C-W>w\<C-W>+" redraw let s3=GetScreenStr(1) wincmd p call assert_equal(59, line("w0")) call assert_equal('59 ', s3) bwipeout! call test_garbagecollect_now() endfunc func Test_window_colon_command() " This was reading invalid memory. exe "norm! v\<C-W>:\<C-U>echo v:version" endfunc func Test_access_freed_mem() " This was accessing freed memory au * 0 vs xxx arg 0 argadd all all au! bwipe xxx endfunc func Test_visual_cleared_after_window_split() new | only! let smd_save = &showmode set showmode let ls_save = &laststatus set laststatus=1 call setline(1, ['a', 'b', 'c', 'd', '']) norm! G exe "norm! kkvk" redraw exe "norm! \<C-W>v" redraw " check if '-- VISUAL --' disappeared from command line let columns = range(1, &columns) let cmdlinechars = map(columns, 'nr2char(screenchar(&lines, v:val))') let cmdline = join(cmdlinechars, '') let cmdline_ltrim = substitute(cmdline, '^\s*', "", "") let mode_shown = substitute(cmdline_ltrim, '\s*$', "", "") call assert_equal('', mode_shown) let &showmode = smd_save let &laststatus = ls_save bwipe! endfunc " vim: shiftwidth=2 sts=2 expandtab