1991dea3aSBram Moolenaar" Tests for window cmd (:wincmd, :split, :vsplit, :resize and etc...) 2991dea3aSBram Moolenaar 36d91bcb4SBram Moolenaarsource check.vim 4a27e1dcdSBram Moolenaar 5991dea3aSBram Moolenaarfunc Test_window_cmd_ls0_with_split() 6991dea3aSBram Moolenaar set ls=0 7991dea3aSBram Moolenaar set splitbelow 8991dea3aSBram Moolenaar split 9991dea3aSBram Moolenaar quit 10991dea3aSBram Moolenaar call assert_equal(0, &lines - &cmdheight - winheight(0)) 11991dea3aSBram Moolenaar new | only! 12991dea3aSBram Moolenaar " 13991dea3aSBram Moolenaar set splitbelow&vim 14991dea3aSBram Moolenaar botright split 15991dea3aSBram Moolenaar quit 16991dea3aSBram Moolenaar call assert_equal(0, &lines - &cmdheight - winheight(0)) 17991dea3aSBram Moolenaar new | only! 18991dea3aSBram Moolenaar set ls&vim 19991dea3aSBram Moolenaarendfunc 20991dea3aSBram Moolenaar 21991dea3aSBram Moolenaarfunc Test_window_cmd_cmdwin_with_vsp() 2221829c5fSBram Moolenaar CheckFeature cmdwin 2321829c5fSBram Moolenaar 24991dea3aSBram Moolenaar let efmt = 'Expected 0 but got %d (in ls=%d, %s window)' 25991dea3aSBram Moolenaar for v in range(0, 2) 26991dea3aSBram Moolenaar exec "set ls=" . v 27991dea3aSBram Moolenaar vsplit 28991dea3aSBram Moolenaar call feedkeys("q:\<CR>") 29991dea3aSBram Moolenaar let ac = &lines - (&cmdheight + winheight(0) + !!v) 30991dea3aSBram Moolenaar let emsg = printf(efmt, ac, v, 'left') 31991dea3aSBram Moolenaar call assert_equal(0, ac, emsg) 32991dea3aSBram Moolenaar wincmd w 33991dea3aSBram Moolenaar let ac = &lines - (&cmdheight + winheight(0) + !!v) 34991dea3aSBram Moolenaar let emsg = printf(efmt, ac, v, 'right') 35991dea3aSBram Moolenaar call assert_equal(0, ac, emsg) 36991dea3aSBram Moolenaar new | only! 37991dea3aSBram Moolenaar endfor 38991dea3aSBram Moolenaar set ls&vim 39991dea3aSBram Moolenaarendfunc 40991dea3aSBram Moolenaar 415d3c9f8cSBram Moolenaar" Test for jumping to windows 425d3c9f8cSBram Moolenaarfunc Test_window_jump() 435d3c9f8cSBram Moolenaar new 445d3c9f8cSBram Moolenaar " jumping to a window with a count greater than the max windows 455d3c9f8cSBram Moolenaar exe "normal 4\<C-W>w" 465d3c9f8cSBram Moolenaar call assert_equal(2, winnr()) 475d3c9f8cSBram Moolenaar only 485d3c9f8cSBram Moolenaarendfunc 495d3c9f8cSBram Moolenaar 505d3c9f8cSBram Moolenaarfunc Test_window_cmd_wincmd_gf() 515d2ca040SBram Moolenaar let fname = 'test_gf.txt' 525d2ca040SBram Moolenaar let swp_fname = '.' . fname . '.swp' 535d2ca040SBram Moolenaar call writefile([], fname) 545d2ca040SBram Moolenaar call writefile([], swp_fname) 555d2ca040SBram Moolenaar function s:swap_exists() 565d2ca040SBram Moolenaar let v:swapchoice = s:swap_choice 575d2ca040SBram Moolenaar endfunc 58eaa49e40SBram Moolenaar " Remove the catch-all that runtest.vim adds 59eaa49e40SBram Moolenaar au! SwapExists 605d2ca040SBram Moolenaar augroup test_window_cmd_wincmd_gf 615d2ca040SBram Moolenaar autocmd! 625d2ca040SBram Moolenaar exec "autocmd SwapExists " . fname . " call s:swap_exists()" 635d2ca040SBram Moolenaar augroup END 645d2ca040SBram Moolenaar 655d2ca040SBram Moolenaar call setline(1, fname) 665d2ca040SBram Moolenaar " (E)dit anyway 675d2ca040SBram Moolenaar let s:swap_choice = 'e' 685d2ca040SBram Moolenaar wincmd gf 695d2ca040SBram Moolenaar call assert_equal(2, tabpagenr()) 705d2ca040SBram Moolenaar call assert_equal(fname, bufname("%")) 715d2ca040SBram Moolenaar quit! 725d2ca040SBram Moolenaar 735d2ca040SBram Moolenaar " (Q)uit 745d2ca040SBram Moolenaar let s:swap_choice = 'q' 755d2ca040SBram Moolenaar wincmd gf 765d2ca040SBram Moolenaar call assert_equal(1, tabpagenr()) 775d2ca040SBram Moolenaar call assert_notequal(fname, bufname("%")) 785d2ca040SBram Moolenaar new | only! 795d2ca040SBram Moolenaar 805d2ca040SBram Moolenaar call delete(fname) 815d2ca040SBram Moolenaar call delete(swp_fname) 825d2ca040SBram Moolenaar augroup! test_window_cmd_wincmd_gf 835d2ca040SBram Moolenaarendfunc 845d2ca040SBram Moolenaar 854520d440SBram Moolenaarfunc Test_window_quit() 864520d440SBram Moolenaar e Xa 874520d440SBram Moolenaar split Xb 88f92e58caSBram Moolenaar call assert_equal(2, '$'->winnr()) 894520d440SBram Moolenaar call assert_equal('Xb', bufname(winbufnr(1))) 904520d440SBram Moolenaar call assert_equal('Xa', bufname(winbufnr(2))) 914520d440SBram Moolenaar 924520d440SBram Moolenaar wincmd q 934520d440SBram Moolenaar call assert_equal(1, winnr('$')) 944520d440SBram Moolenaar call assert_equal('Xa', bufname(winbufnr(1))) 954520d440SBram Moolenaar 964520d440SBram Moolenaar bw Xa Xb 974520d440SBram Moolenaarendfunc 984520d440SBram Moolenaar 994520d440SBram Moolenaarfunc Test_window_horizontal_split() 1004520d440SBram Moolenaar call assert_equal(1, winnr('$')) 1014520d440SBram Moolenaar 3wincmd s 1024520d440SBram Moolenaar call assert_equal(2, winnr('$')) 1034520d440SBram Moolenaar call assert_equal(3, winheight(0)) 104f92e58caSBram Moolenaar call assert_equal(winwidth(1), 2->winwidth()) 1054520d440SBram Moolenaar 1064520d440SBram Moolenaar call assert_fails('botright topleft wincmd s', 'E442:') 1074520d440SBram Moolenaar bw 1084520d440SBram Moolenaarendfunc 1094520d440SBram Moolenaar 1104520d440SBram Moolenaarfunc Test_window_vertical_split() 1114520d440SBram Moolenaar call assert_equal(1, winnr('$')) 1124520d440SBram Moolenaar 3wincmd v 1134520d440SBram Moolenaar call assert_equal(2, winnr('$')) 1144520d440SBram Moolenaar call assert_equal(3, winwidth(0)) 1154520d440SBram Moolenaar call assert_equal(winheight(1), winheight(2)) 1164520d440SBram Moolenaar 1174520d440SBram Moolenaar call assert_fails('botright topleft wincmd v', 'E442:') 1184520d440SBram Moolenaar bw 1194520d440SBram Moolenaarendfunc 1204520d440SBram Moolenaar 1211bbb6194SBram Moolenaar" Test the ":wincmd ^" and "<C-W>^" commands. 1224520d440SBram Moolenaarfunc Test_window_split_edit_alternate() 1234520d440SBram Moolenaar 1241bbb6194SBram Moolenaar " Test for failure when the alternate buffer/file no longer exists. 1251bbb6194SBram Moolenaar edit Xfoo | %bw 126e2e4075fSBram Moolenaar call assert_fails(':wincmd ^', 'E23:') 1271bbb6194SBram Moolenaar 1281bbb6194SBram Moolenaar " Test for the expected behavior when we have two named buffers. 1291bbb6194SBram Moolenaar edit Xfoo | edit Xbar 1304520d440SBram Moolenaar wincmd ^ 1311bbb6194SBram Moolenaar call assert_equal('Xfoo', bufname(winbufnr(1))) 1321bbb6194SBram Moolenaar call assert_equal('Xbar', bufname(winbufnr(2))) 1331bbb6194SBram Moolenaar only 1344520d440SBram Moolenaar 1351bbb6194SBram Moolenaar " Test for the expected behavior when the alternate buffer is not named. 1361bbb6194SBram Moolenaar enew | let l:nr1 = bufnr('%') 1371bbb6194SBram Moolenaar edit Xfoo | let l:nr2 = bufnr('%') 1381bbb6194SBram Moolenaar wincmd ^ 1391bbb6194SBram Moolenaar call assert_equal(l:nr1, winbufnr(1)) 1401bbb6194SBram Moolenaar call assert_equal(l:nr2, winbufnr(2)) 1411bbb6194SBram Moolenaar only 1421bbb6194SBram Moolenaar 143d42333d8SBram Moolenaar " FIXME: this currently fails on AppVeyor, but passes locally 144d42333d8SBram Moolenaar if !has('win32') 1451bbb6194SBram Moolenaar " Test the Normal mode command. 1461bbb6194SBram Moolenaar call feedkeys("\<C-W>\<C-^>", 'tx') 1471bbb6194SBram Moolenaar call assert_equal(l:nr2, winbufnr(1)) 1481bbb6194SBram Moolenaar call assert_equal(l:nr1, winbufnr(2)) 149d42333d8SBram Moolenaar endif 1501bbb6194SBram Moolenaar 1511bbb6194SBram Moolenaar %bw! 1521bbb6194SBram Moolenaarendfunc 1531bbb6194SBram Moolenaar 1541bbb6194SBram Moolenaar" Test the ":[count]wincmd ^" and "[count]<C-W>^" commands. 1551bbb6194SBram Moolenaarfunc Test_window_split_edit_bufnr() 1561bbb6194SBram Moolenaar 1571bbb6194SBram Moolenaar %bwipeout 1581bbb6194SBram Moolenaar let l:nr = bufnr('%') + 1 159e2e4075fSBram Moolenaar call assert_fails(':execute "normal! ' . l:nr . '\<C-W>\<C-^>"', 'E92:') 160e2e4075fSBram Moolenaar call assert_fails(':' . l:nr . 'wincmd ^', 'E16:') 161e2e4075fSBram Moolenaar call assert_fails(':0wincmd ^', 'E16:') 1621bbb6194SBram Moolenaar 1631bbb6194SBram Moolenaar edit Xfoo | edit Xbar | edit Xbaz 1641bbb6194SBram Moolenaar let l:foo_nr = bufnr('Xfoo') 1651bbb6194SBram Moolenaar let l:bar_nr = bufnr('Xbar') 1661bbb6194SBram Moolenaar let l:baz_nr = bufnr('Xbaz') 1671bbb6194SBram Moolenaar 1688617b401SBram Moolenaar " FIXME: this currently fails on AppVeyor, but passes locally 1698617b401SBram Moolenaar if !has('win32') 1701bbb6194SBram Moolenaar call feedkeys(l:foo_nr . "\<C-W>\<C-^>", 'tx') 1711bbb6194SBram Moolenaar call assert_equal('Xfoo', bufname(winbufnr(1))) 1721bbb6194SBram Moolenaar call assert_equal('Xbaz', bufname(winbufnr(2))) 1731bbb6194SBram Moolenaar only 1741bbb6194SBram Moolenaar 1751bbb6194SBram Moolenaar call feedkeys(l:bar_nr . "\<C-W>\<C-^>", 'tx') 1761bbb6194SBram Moolenaar call assert_equal('Xbar', bufname(winbufnr(1))) 1771bbb6194SBram Moolenaar call assert_equal('Xfoo', bufname(winbufnr(2))) 1781bbb6194SBram Moolenaar only 1791bbb6194SBram Moolenaar 1801bbb6194SBram Moolenaar execute l:baz_nr . 'wincmd ^' 1811bbb6194SBram Moolenaar call assert_equal('Xbaz', bufname(winbufnr(1))) 1821bbb6194SBram Moolenaar call assert_equal('Xbar', bufname(winbufnr(2))) 1838617b401SBram Moolenaar endif 1841bbb6194SBram Moolenaar 1851bbb6194SBram Moolenaar %bw! 1864520d440SBram Moolenaarendfunc 1874520d440SBram Moolenaar 1889b9be007SBram Moolenaarfunc Test_window_split_no_room() 1899b9be007SBram Moolenaar " N horizontal windows need >= 2*N + 1 lines: 1909b9be007SBram Moolenaar " - 1 line + 1 status line in each window 1919b9be007SBram Moolenaar " - 1 Ex command line 1929b9be007SBram Moolenaar " 1939b9be007SBram Moolenaar " 2*N + 1 <= &lines 1949b9be007SBram Moolenaar " N <= (lines - 1)/2 1959b9be007SBram Moolenaar " 1969b9be007SBram Moolenaar " Beyond that number of windows, E36: Not enough room is expected. 1979b9be007SBram Moolenaar let hor_win_count = (&lines - 1)/2 1989b9be007SBram Moolenaar let hor_split_count = hor_win_count - 1 1999b9be007SBram Moolenaar for s in range(1, hor_split_count) | split | endfor 2009b9be007SBram Moolenaar call assert_fails('split', 'E36:') 2019b9be007SBram Moolenaar 2029b9be007SBram Moolenaar " N vertical windows need >= 2*(N - 1) + 1 columns: 2039b9be007SBram Moolenaar " - 1 column + 1 separator for each window (except last window) 2049b9be007SBram Moolenaar " - 1 column for the last window which does not have separator 2059b9be007SBram Moolenaar " 2069b9be007SBram Moolenaar " 2*(N - 1) + 1 <= &columns 2079b9be007SBram Moolenaar " 2*N - 1 <= &columns 2089b9be007SBram Moolenaar " N <= (&columns + 1)/2 2099b9be007SBram Moolenaar let ver_win_count = (&columns + 1)/2 2109b9be007SBram Moolenaar let ver_split_count = ver_win_count - 1 2119b9be007SBram Moolenaar for s in range(1, ver_split_count) | vsplit | endfor 2129b9be007SBram Moolenaar call assert_fails('vsplit', 'E36:') 2139b9be007SBram Moolenaar 2149b9be007SBram Moolenaar %bw! 2159b9be007SBram Moolenaarendfunc 2169b9be007SBram Moolenaar 2174520d440SBram Moolenaarfunc Test_window_exchange() 2184520d440SBram Moolenaar e Xa 2194520d440SBram Moolenaar 2204520d440SBram Moolenaar " Nothing happens with window exchange when there is 1 window 2214520d440SBram Moolenaar wincmd x 2224520d440SBram Moolenaar call assert_equal(1, winnr('$')) 2234520d440SBram Moolenaar 2244520d440SBram Moolenaar split Xb 2254520d440SBram Moolenaar split Xc 2264520d440SBram Moolenaar 2274520d440SBram Moolenaar call assert_equal('Xc', bufname(winbufnr(1))) 2284520d440SBram Moolenaar call assert_equal('Xb', bufname(winbufnr(2))) 2294520d440SBram Moolenaar call assert_equal('Xa', bufname(winbufnr(3))) 2304520d440SBram Moolenaar 2314520d440SBram Moolenaar " Exchange current window 1 with window 3 2324520d440SBram Moolenaar 3wincmd x 2334520d440SBram Moolenaar call assert_equal('Xa', bufname(winbufnr(1))) 2344520d440SBram Moolenaar call assert_equal('Xb', bufname(winbufnr(2))) 2354520d440SBram Moolenaar call assert_equal('Xc', bufname(winbufnr(3))) 2364520d440SBram Moolenaar 2374520d440SBram Moolenaar " Exchange window with next when at the top window 2384520d440SBram Moolenaar wincmd x 2394520d440SBram Moolenaar call assert_equal('Xb', bufname(winbufnr(1))) 2404520d440SBram Moolenaar call assert_equal('Xa', bufname(winbufnr(2))) 2414520d440SBram Moolenaar call assert_equal('Xc', bufname(winbufnr(3))) 2424520d440SBram Moolenaar 2434520d440SBram Moolenaar " Exchange window with next when at the middle window 2444520d440SBram Moolenaar wincmd j 2454520d440SBram Moolenaar wincmd x 2464520d440SBram Moolenaar call assert_equal('Xb', bufname(winbufnr(1))) 2474520d440SBram Moolenaar call assert_equal('Xc', bufname(winbufnr(2))) 2484520d440SBram Moolenaar call assert_equal('Xa', bufname(winbufnr(3))) 2494520d440SBram Moolenaar 2504520d440SBram Moolenaar " Exchange window with next when at the bottom window. 2514520d440SBram Moolenaar " When there is no next window, it exchanges with the previous window. 2524520d440SBram Moolenaar wincmd j 2534520d440SBram Moolenaar wincmd x 2544520d440SBram Moolenaar call assert_equal('Xb', bufname(winbufnr(1))) 2554520d440SBram Moolenaar call assert_equal('Xa', bufname(winbufnr(2))) 2564520d440SBram Moolenaar call assert_equal('Xc', bufname(winbufnr(3))) 2574520d440SBram Moolenaar 2584520d440SBram Moolenaar bw Xa Xb Xc 2594520d440SBram Moolenaarendfunc 2604520d440SBram Moolenaar 2614520d440SBram Moolenaarfunc Test_window_rotate() 2624520d440SBram Moolenaar e Xa 2634520d440SBram Moolenaar split Xb 2644520d440SBram Moolenaar split Xc 2654520d440SBram Moolenaar call assert_equal('Xc', bufname(winbufnr(1))) 2664520d440SBram Moolenaar call assert_equal('Xb', bufname(winbufnr(2))) 2674520d440SBram Moolenaar call assert_equal('Xa', bufname(winbufnr(3))) 2684520d440SBram Moolenaar 2694520d440SBram Moolenaar " Rotate downwards 2704520d440SBram Moolenaar wincmd r 2714520d440SBram Moolenaar call assert_equal('Xa', bufname(winbufnr(1))) 2724520d440SBram Moolenaar call assert_equal('Xc', bufname(winbufnr(2))) 2734520d440SBram Moolenaar call assert_equal('Xb', bufname(winbufnr(3))) 2744520d440SBram Moolenaar 2754520d440SBram Moolenaar 2wincmd r 2764520d440SBram Moolenaar call assert_equal('Xc', bufname(winbufnr(1))) 2774520d440SBram Moolenaar call assert_equal('Xb', bufname(winbufnr(2))) 2784520d440SBram Moolenaar call assert_equal('Xa', bufname(winbufnr(3))) 2794520d440SBram Moolenaar 2804520d440SBram Moolenaar " Rotate upwards 2814520d440SBram Moolenaar wincmd R 2824520d440SBram Moolenaar call assert_equal('Xb', bufname(winbufnr(1))) 2834520d440SBram Moolenaar call assert_equal('Xa', bufname(winbufnr(2))) 2844520d440SBram Moolenaar call assert_equal('Xc', bufname(winbufnr(3))) 2854520d440SBram Moolenaar 2864520d440SBram Moolenaar 2wincmd R 2874520d440SBram Moolenaar call assert_equal('Xc', bufname(winbufnr(1))) 2884520d440SBram Moolenaar call assert_equal('Xb', bufname(winbufnr(2))) 2894520d440SBram Moolenaar call assert_equal('Xa', bufname(winbufnr(3))) 2904520d440SBram Moolenaar 2914520d440SBram Moolenaar bot vsplit 2924520d440SBram Moolenaar call assert_fails('wincmd R', 'E443:') 2934520d440SBram Moolenaar 2944520d440SBram Moolenaar bw Xa Xb Xc 2954520d440SBram Moolenaarendfunc 2964520d440SBram Moolenaar 2974520d440SBram Moolenaarfunc Test_window_height() 2984520d440SBram Moolenaar e Xa 2994520d440SBram Moolenaar split Xb 3004520d440SBram Moolenaar 3014520d440SBram Moolenaar let [wh1, wh2] = [winheight(1), winheight(2)] 3024520d440SBram Moolenaar " Active window (1) should have the same height or 1 more 3034520d440SBram Moolenaar " than the other window. 3044520d440SBram Moolenaar call assert_inrange(wh2, wh2 + 1, wh1) 3054520d440SBram Moolenaar 3064520d440SBram Moolenaar wincmd - 3074520d440SBram Moolenaar call assert_equal(wh1 - 1, winheight(1)) 3084520d440SBram Moolenaar call assert_equal(wh2 + 1, winheight(2)) 3094520d440SBram Moolenaar 3104520d440SBram Moolenaar wincmd + 3114520d440SBram Moolenaar call assert_equal(wh1, winheight(1)) 312f92e58caSBram Moolenaar call assert_equal(wh2, 2->winheight()) 3134520d440SBram Moolenaar 3144520d440SBram Moolenaar 2wincmd _ 3154520d440SBram Moolenaar call assert_equal(2, winheight(1)) 3164520d440SBram Moolenaar call assert_equal(wh1 + wh2 - 2, winheight(2)) 3174520d440SBram Moolenaar 3184520d440SBram Moolenaar wincmd = 3194520d440SBram Moolenaar call assert_equal(wh1, winheight(1)) 3204520d440SBram Moolenaar call assert_equal(wh2, winheight(2)) 3214520d440SBram Moolenaar 3224520d440SBram Moolenaar 2wincmd _ 3234520d440SBram Moolenaar set winfixheight 3244520d440SBram Moolenaar split Xc 3254520d440SBram Moolenaar let [wh1, wh2, wh3] = [winheight(1), winheight(2), winheight(3)] 3264520d440SBram Moolenaar call assert_equal(2, winheight(2)) 3274520d440SBram Moolenaar call assert_inrange(wh3, wh3 + 1, wh1) 3284520d440SBram Moolenaar 3wincmd + 3294520d440SBram Moolenaar call assert_equal(2, winheight(2)) 3304520d440SBram Moolenaar call assert_equal(wh1 + 3, winheight(1)) 3314520d440SBram Moolenaar call assert_equal(wh3 - 3, winheight(3)) 3324520d440SBram Moolenaar wincmd = 3334520d440SBram Moolenaar call assert_equal(2, winheight(2)) 3344520d440SBram Moolenaar call assert_equal(wh1, winheight(1)) 3354520d440SBram Moolenaar call assert_equal(wh3, winheight(3)) 3364520d440SBram Moolenaar 3374520d440SBram Moolenaar wincmd j 3384520d440SBram Moolenaar set winfixheight& 3394520d440SBram Moolenaar 3404520d440SBram Moolenaar wincmd = 3414520d440SBram Moolenaar let [wh1, wh2, wh3] = [winheight(1), winheight(2), winheight(3)] 3424520d440SBram Moolenaar " Current window (2) should have the same height or 1 more 3434520d440SBram Moolenaar " than the other windows. 3444520d440SBram Moolenaar call assert_inrange(wh1, wh1 + 1, wh2) 3454520d440SBram Moolenaar call assert_inrange(wh3, wh3 + 1, wh2) 3464520d440SBram Moolenaar 3474520d440SBram Moolenaar bw Xa Xb Xc 3484520d440SBram Moolenaarendfunc 3494520d440SBram Moolenaar 3504520d440SBram Moolenaarfunc Test_window_width() 3514520d440SBram Moolenaar e Xa 3524520d440SBram Moolenaar vsplit Xb 3534520d440SBram Moolenaar 3544520d440SBram Moolenaar let [ww1, ww2] = [winwidth(1), winwidth(2)] 3554520d440SBram Moolenaar " Active window (1) should have the same width or 1 more 3564520d440SBram Moolenaar " than the other window. 3574520d440SBram Moolenaar call assert_inrange(ww2, ww2 + 1, ww1) 3584520d440SBram Moolenaar 3594520d440SBram Moolenaar wincmd < 3604520d440SBram Moolenaar call assert_equal(ww1 - 1, winwidth(1)) 3614520d440SBram Moolenaar call assert_equal(ww2 + 1, winwidth(2)) 3624520d440SBram Moolenaar 3634520d440SBram Moolenaar wincmd > 3644520d440SBram Moolenaar call assert_equal(ww1, winwidth(1)) 3654520d440SBram Moolenaar call assert_equal(ww2, winwidth(2)) 3664520d440SBram Moolenaar 3674520d440SBram Moolenaar 2wincmd | 3684520d440SBram Moolenaar call assert_equal(2, winwidth(1)) 3694520d440SBram Moolenaar call assert_equal(ww1 + ww2 - 2, winwidth(2)) 3704520d440SBram Moolenaar 3714520d440SBram Moolenaar wincmd = 3724520d440SBram Moolenaar call assert_equal(ww1, winwidth(1)) 3734520d440SBram Moolenaar call assert_equal(ww2, winwidth(2)) 3744520d440SBram Moolenaar 3754520d440SBram Moolenaar 2wincmd | 3764520d440SBram Moolenaar set winfixwidth 3774520d440SBram Moolenaar vsplit Xc 3784520d440SBram Moolenaar let [ww1, ww2, ww3] = [winwidth(1), winwidth(2), winwidth(3)] 37938e34836SBram Moolenaar call assert_equal(2, winwidth(2)) 3804520d440SBram Moolenaar call assert_inrange(ww3, ww3 + 1, ww1) 3814520d440SBram Moolenaar 3wincmd > 38238e34836SBram Moolenaar call assert_equal(2, winwidth(2)) 3834520d440SBram Moolenaar call assert_equal(ww1 + 3, winwidth(1)) 3844520d440SBram Moolenaar call assert_equal(ww3 - 3, winwidth(3)) 3854520d440SBram Moolenaar wincmd = 38638e34836SBram Moolenaar call assert_equal(2, winwidth(2)) 3874520d440SBram Moolenaar call assert_equal(ww1, winwidth(1)) 3884520d440SBram Moolenaar call assert_equal(ww3, winwidth(3)) 3894520d440SBram Moolenaar 3904520d440SBram Moolenaar wincmd l 3914520d440SBram Moolenaar set winfixwidth& 3924520d440SBram Moolenaar 3934520d440SBram Moolenaar wincmd = 3944520d440SBram Moolenaar let [ww1, ww2, ww3] = [winwidth(1), winwidth(2), winwidth(3)] 3954520d440SBram Moolenaar " Current window (2) should have the same width or 1 more 3964520d440SBram Moolenaar " than the other windows. 3974520d440SBram Moolenaar call assert_inrange(ww1, ww1 + 1, ww2) 3984520d440SBram Moolenaar call assert_inrange(ww3, ww3 + 1, ww2) 3994520d440SBram Moolenaar 400*59585497SYegappan Lakshmanan " when the current window width is less than the new 'winwidth', the current 401*59585497SYegappan Lakshmanan " window width should be increased. 402*59585497SYegappan Lakshmanan enew | only 403*59585497SYegappan Lakshmanan split 404*59585497SYegappan Lakshmanan 10vnew 405*59585497SYegappan Lakshmanan set winwidth=15 406*59585497SYegappan Lakshmanan call assert_equal(15, winwidth(0)) 407*59585497SYegappan Lakshmanan 408*59585497SYegappan Lakshmanan %bw! 4094520d440SBram Moolenaarendfunc 4104520d440SBram Moolenaar 4118eeeba8cSBram Moolenaarfunc Test_equalalways_on_close() 4128eeeba8cSBram Moolenaar set equalalways 4138eeeba8cSBram Moolenaar vsplit 4148eeeba8cSBram Moolenaar windo split 4158eeeba8cSBram Moolenaar split 4168eeeba8cSBram Moolenaar wincmd J 4178eeeba8cSBram Moolenaar " now we have a frame top-left with two windows, a frame top-right with two 4188eeeba8cSBram Moolenaar " windows and a frame at the bottom, full-width. 4198eeeba8cSBram Moolenaar let height_1 = winheight(1) 4208eeeba8cSBram Moolenaar let height_2 = winheight(2) 4218eeeba8cSBram Moolenaar let height_3 = winheight(3) 4228eeeba8cSBram Moolenaar let height_4 = winheight(4) 4238eeeba8cSBram Moolenaar " closing the bottom window causes all windows to be resized. 4248eeeba8cSBram Moolenaar close 4258eeeba8cSBram Moolenaar call assert_notequal(height_1, winheight(1)) 4268eeeba8cSBram Moolenaar call assert_notequal(height_2, winheight(2)) 4278eeeba8cSBram Moolenaar call assert_notequal(height_3, winheight(3)) 4288eeeba8cSBram Moolenaar call assert_notequal(height_4, winheight(4)) 4298eeeba8cSBram Moolenaar call assert_equal(winheight(1), winheight(3)) 4308eeeba8cSBram Moolenaar call assert_equal(winheight(2), winheight(4)) 4318eeeba8cSBram Moolenaar 4328eeeba8cSBram Moolenaar 1wincmd w 4338eeeba8cSBram Moolenaar split 4348eeeba8cSBram Moolenaar 4wincmd w 4358eeeba8cSBram Moolenaar resize + 5 4368eeeba8cSBram Moolenaar " left column has three windows, equalized heights. 4378eeeba8cSBram Moolenaar " right column has two windows, top one a bit higher 4388eeeba8cSBram Moolenaar let height_1 = winheight(1) 4398eeeba8cSBram Moolenaar let height_2 = winheight(2) 4408eeeba8cSBram Moolenaar let height_4 = winheight(4) 4418eeeba8cSBram Moolenaar let height_5 = winheight(5) 4428eeeba8cSBram Moolenaar 3wincmd w 4438eeeba8cSBram Moolenaar " closing window in left column equalizes heights in left column but not in 4448eeeba8cSBram Moolenaar " the right column 4458eeeba8cSBram Moolenaar close 4468eeeba8cSBram Moolenaar call assert_notequal(height_1, winheight(1)) 4478eeeba8cSBram Moolenaar call assert_notequal(height_2, winheight(2)) 4488eeeba8cSBram Moolenaar call assert_equal(height_4, winheight(3)) 4498eeeba8cSBram Moolenaar call assert_equal(height_5, winheight(4)) 4508eeeba8cSBram Moolenaar 4518eeeba8cSBram Moolenaar only 4528eeeba8cSBram Moolenaar set equalalways& 4538eeeba8cSBram Moolenaarendfunc 4548eeeba8cSBram Moolenaar 45522044dc3SBram Moolenaarfunc Test_win_screenpos() 4565a4c3082SBram Moolenaar CheckFeature quickfix 4575a4c3082SBram Moolenaar 45822044dc3SBram Moolenaar call assert_equal(1, winnr('$')) 45922044dc3SBram Moolenaar split 46022044dc3SBram Moolenaar vsplit 46122044dc3SBram Moolenaar 10wincmd _ 46222044dc3SBram Moolenaar 30wincmd | 46322044dc3SBram Moolenaar call assert_equal([1, 1], win_screenpos(1)) 46422044dc3SBram Moolenaar call assert_equal([1, 32], win_screenpos(2)) 46522044dc3SBram Moolenaar call assert_equal([12, 1], win_screenpos(3)) 46622044dc3SBram Moolenaar call assert_equal([0, 0], win_screenpos(4)) 46799fa7219SBram Moolenaar call assert_fails('let l = win_screenpos([])', 'E745:') 46822044dc3SBram Moolenaar only 46922044dc3SBram Moolenaarendfunc 47022044dc3SBram Moolenaar 4714520d440SBram Moolenaarfunc Test_window_jump_tag() 4725a4c3082SBram Moolenaar CheckFeature quickfix 4735a4c3082SBram Moolenaar 4744520d440SBram Moolenaar help 4754520d440SBram Moolenaar /iccf 4764520d440SBram Moolenaar call assert_match('^|iccf|', getline('.')) 4774520d440SBram Moolenaar call assert_equal(2, winnr('$')) 4784520d440SBram Moolenaar 2wincmd } 4794520d440SBram Moolenaar call assert_equal(3, winnr('$')) 4804520d440SBram Moolenaar call assert_match('^|iccf|', getline('.')) 4814520d440SBram Moolenaar wincmd k 4824520d440SBram Moolenaar call assert_match('\*iccf\*', getline('.')) 4834520d440SBram Moolenaar call assert_equal(2, winheight(0)) 4844520d440SBram Moolenaar 4854520d440SBram Moolenaar wincmd z 4864520d440SBram Moolenaar set previewheight=4 4874520d440SBram Moolenaar help 4884520d440SBram Moolenaar /bugs 4894520d440SBram Moolenaar wincmd } 4904520d440SBram Moolenaar wincmd k 4914520d440SBram Moolenaar call assert_match('\*bugs\*', getline('.')) 4924520d440SBram Moolenaar call assert_equal(4, winheight(0)) 4934520d440SBram Moolenaar set previewheight& 4944520d440SBram Moolenaar 4954520d440SBram Moolenaar %bw! 4964520d440SBram Moolenaarendfunc 4974520d440SBram Moolenaar 4984520d440SBram Moolenaarfunc Test_window_newtab() 4994520d440SBram Moolenaar e Xa 5004520d440SBram Moolenaar 5014520d440SBram Moolenaar call assert_equal(1, tabpagenr('$')) 5024520d440SBram Moolenaar call assert_equal("\nAlready only one window", execute('wincmd T')) 5034520d440SBram Moolenaar 5044520d440SBram Moolenaar split Xb 5054520d440SBram Moolenaar split Xc 5064520d440SBram Moolenaar 5074520d440SBram Moolenaar wincmd T 5084520d440SBram Moolenaar call assert_equal(2, tabpagenr('$')) 5094520d440SBram Moolenaar call assert_equal(['Xb', 'Xa'], map(tabpagebuflist(1), 'bufname(v:val)')) 510ce90e36fSBram Moolenaar call assert_equal(['Xc' ], map(2->tabpagebuflist(), 'bufname(v:val)')) 5110e05de46SBram Moolenaar call assert_equal(['Xc' ], map(tabpagebuflist(), 'bufname(v:val)')) 5124520d440SBram Moolenaar 5134520d440SBram Moolenaar %bw! 5144520d440SBram Moolenaarendfunc 5154520d440SBram Moolenaar 516f79225edSBram Moolenaarfunc Test_next_split_all() 517f79225edSBram Moolenaar " This was causing an illegal memory access. 518f79225edSBram Moolenaar n x 519f79225edSBram Moolenaar norm axxx 520f79225edSBram Moolenaar split 521f79225edSBram Moolenaar split 522f79225edSBram Moolenaar s/x 523f79225edSBram Moolenaar s/x 524f79225edSBram Moolenaar all 525f79225edSBram Moolenaar bwipe! 526f79225edSBram Moolenaarendfunc 527f79225edSBram Moolenaar 52875373f38SBram Moolenaar" Tests for adjusting window and contents 52975373f38SBram Moolenaarfunc GetScreenStr(row) 53075373f38SBram Moolenaar let str = "" 53175373f38SBram Moolenaar for c in range(1,3) 53275373f38SBram Moolenaar let str .= nr2char(screenchar(a:row, c)) 53375373f38SBram Moolenaar endfor 53475373f38SBram Moolenaar return str 53575373f38SBram Moolenaarendfunc 53675373f38SBram Moolenaar 53775373f38SBram Moolenaarfunc Test_window_contents() 53875373f38SBram Moolenaar enew! | only | new 53975373f38SBram Moolenaar call setline(1, range(1,256)) 54075373f38SBram Moolenaar 54175373f38SBram Moolenaar exe "norm! \<C-W>t\<C-W>=1Gzt\<C-W>w\<C-W>+" 54275373f38SBram Moolenaar redraw 54375373f38SBram Moolenaar let s3 = GetScreenStr(1) 54475373f38SBram Moolenaar wincmd p 54575373f38SBram Moolenaar call assert_equal(1, line("w0")) 54675373f38SBram Moolenaar call assert_equal('1 ', s3) 54775373f38SBram Moolenaar 54875373f38SBram Moolenaar exe "norm! \<C-W>t\<C-W>=50Gzt\<C-W>w\<C-W>+" 54975373f38SBram Moolenaar redraw 55075373f38SBram Moolenaar let s3 = GetScreenStr(1) 55175373f38SBram Moolenaar wincmd p 55275373f38SBram Moolenaar call assert_equal(50, line("w0")) 55375373f38SBram Moolenaar call assert_equal('50 ', s3) 55475373f38SBram Moolenaar 55575373f38SBram Moolenaar exe "norm! \<C-W>t\<C-W>=59Gzt\<C-W>w\<C-W>+" 55675373f38SBram Moolenaar redraw 55775373f38SBram Moolenaar let s3 = GetScreenStr(1) 55875373f38SBram Moolenaar wincmd p 55975373f38SBram Moolenaar call assert_equal(59, line("w0")) 56075373f38SBram Moolenaar call assert_equal('59 ', s3) 56175373f38SBram Moolenaar 5628b633135SBram Moolenaar %d 5638b633135SBram Moolenaar call setline(1, ['one', 'two', 'three']) 5648b633135SBram Moolenaar call assert_equal(1, line('w0')) 5658b633135SBram Moolenaar call assert_equal(3, line('w$')) 5668b633135SBram Moolenaar 56775373f38SBram Moolenaar bwipeout! 56875373f38SBram Moolenaar call test_garbagecollect_now() 56975373f38SBram Moolenaarendfunc 57075373f38SBram Moolenaar 5712efb323eSBram Moolenaarfunc Test_window_colon_command() 5722efb323eSBram Moolenaar " This was reading invalid memory. 5732efb323eSBram Moolenaar exe "norm! v\<C-W>:\<C-U>echo v:version" 5742efb323eSBram Moolenaarendfunc 5752efb323eSBram Moolenaar 5766f361c99SBram Moolenaarfunc Test_access_freed_mem() 5771417c766SBram Moolenaar call assert_equal(&columns, winwidth(0)) 5789a046fd0SBram Moolenaar " This was accessing freed memory (but with what events?) 5799a046fd0SBram Moolenaar au BufEnter,BufLeave,WinEnter,WinLeave 0 vs xxx 5806f361c99SBram Moolenaar arg 0 5816f361c99SBram Moolenaar argadd 5829b7bf9e9SBram Moolenaar call assert_fails("all", "E242:") 5836f361c99SBram Moolenaar au! 5846f361c99SBram Moolenaar bwipe xxx 5851417c766SBram Moolenaar call assert_equal(&columns, winwidth(0)) 5866f361c99SBram Moolenaarendfunc 5876f361c99SBram Moolenaar 588a27e1dcdSBram Moolenaarfunc Test_insert_cleared_on_switch_to_term() 589a27e1dcdSBram Moolenaar CheckFeature terminal 590a27e1dcdSBram Moolenaar 591a27e1dcdSBram Moolenaar set showmode 592a27e1dcdSBram Moolenaar terminal 593a27e1dcdSBram Moolenaar wincmd p 594a27e1dcdSBram Moolenaar 595a27e1dcdSBram Moolenaar call feedkeys("i\<C-O>", 'ntx') 596a27e1dcdSBram Moolenaar redraw 597a27e1dcdSBram Moolenaar 598a27e1dcdSBram Moolenaar " The "-- (insert) --" indicator should be visible. 599a27e1dcdSBram Moolenaar let chars = map(range(1, &columns), 'nr2char(screenchar(&lines, v:val))') 600a27e1dcdSBram Moolenaar let str = trim(join(chars, '')) 601a27e1dcdSBram Moolenaar call assert_equal('-- (insert) --', str) 602a27e1dcdSBram Moolenaar 603a27e1dcdSBram Moolenaar call feedkeys("\<C-W>p", 'ntx') 604a27e1dcdSBram Moolenaar redraw 605a27e1dcdSBram Moolenaar 606a27e1dcdSBram Moolenaar " The "-- (insert) --" indicator should have been cleared. 607a27e1dcdSBram Moolenaar let chars = map(range(1, &columns), 'nr2char(screenchar(&lines, v:val))') 608a27e1dcdSBram Moolenaar let str = trim(join(chars, '')) 609a27e1dcdSBram Moolenaar call assert_equal('', str) 610a27e1dcdSBram Moolenaar 611a27e1dcdSBram Moolenaar set showmode& 612a27e1dcdSBram Moolenaar %bw! 613a27e1dcdSBram Moolenaarendfunc 614a27e1dcdSBram Moolenaar 6155bab555cSBram Moolenaarfunc Test_visual_cleared_after_window_split() 6165bab555cSBram Moolenaar new | only! 6175bab555cSBram Moolenaar let smd_save = &showmode 6185bab555cSBram Moolenaar set showmode 6195bab555cSBram Moolenaar let ls_save = &laststatus 6205bab555cSBram Moolenaar set laststatus=1 6215bab555cSBram Moolenaar call setline(1, ['a', 'b', 'c', 'd', '']) 6225bab555cSBram Moolenaar norm! G 6235bab555cSBram Moolenaar exe "norm! kkvk" 6245bab555cSBram Moolenaar redraw 6255bab555cSBram Moolenaar exe "norm! \<C-W>v" 6265bab555cSBram Moolenaar redraw 6275bab555cSBram Moolenaar " check if '-- VISUAL --' disappeared from command line 6285bab555cSBram Moolenaar let columns = range(1, &columns) 6295bab555cSBram Moolenaar let cmdlinechars = map(columns, 'nr2char(screenchar(&lines, v:val))') 6305bab555cSBram Moolenaar let cmdline = join(cmdlinechars, '') 6315bab555cSBram Moolenaar let cmdline_ltrim = substitute(cmdline, '^\s*', "", "") 6325bab555cSBram Moolenaar let mode_shown = substitute(cmdline_ltrim, '\s*$', "", "") 6335bab555cSBram Moolenaar call assert_equal('', mode_shown) 6345bab555cSBram Moolenaar let &showmode = smd_save 6355bab555cSBram Moolenaar let &laststatus = ls_save 6365bab555cSBram Moolenaar bwipe! 63772cf47a2SBram Moolenaarendfunc 63872cf47a2SBram Moolenaar 63972cf47a2SBram Moolenaarfunc Test_winrestcmd() 64072cf47a2SBram Moolenaar 2split 64172cf47a2SBram Moolenaar 3vsplit 642a0c8aea4SBram Moolenaar let restcmd = winrestcmd() 64372cf47a2SBram Moolenaar call assert_equal(2, winheight(0)) 64472cf47a2SBram Moolenaar call assert_equal(3, winwidth(0)) 64572cf47a2SBram Moolenaar wincmd = 64672cf47a2SBram Moolenaar call assert_notequal(2, winheight(0)) 64772cf47a2SBram Moolenaar call assert_notequal(3, winwidth(0)) 648a0c8aea4SBram Moolenaar exe restcmd 64972cf47a2SBram Moolenaar call assert_equal(2, winheight(0)) 65072cf47a2SBram Moolenaar call assert_equal(3, winwidth(0)) 65172cf47a2SBram Moolenaar only 652a0c8aea4SBram Moolenaar 653a0c8aea4SBram Moolenaar wincmd v 654a0c8aea4SBram Moolenaar wincmd s 655a0c8aea4SBram Moolenaar wincmd v 656a0c8aea4SBram Moolenaar redraw 657a0c8aea4SBram Moolenaar let restcmd = winrestcmd() 658a0c8aea4SBram Moolenaar wincmd _ 659a0c8aea4SBram Moolenaar wincmd | 660a0c8aea4SBram Moolenaar exe restcmd 661a0c8aea4SBram Moolenaar redraw 662a0c8aea4SBram Moolenaar call assert_equal(restcmd, winrestcmd()) 663a0c8aea4SBram Moolenaar 664a0c8aea4SBram Moolenaar only 6655bab555cSBram Moolenaarendfunc 6665bab555cSBram Moolenaar 6671e115360SBram Moolenaarfunc Fun_RenewFile() 668026587b3SBram Moolenaar " Need to wait a bit for the timestamp to be older. 669ce90e36fSBram Moolenaar let old_ftime = getftime("tmp.txt") 670ce90e36fSBram Moolenaar while getftime("tmp.txt") == old_ftime 671ce90e36fSBram Moolenaar sleep 100m 672a42df593SBram Moolenaar silent execute '!echo "1" > tmp.txt' 673ce90e36fSBram Moolenaar endwhile 674a42df593SBram Moolenaar sp 675a42df593SBram Moolenaar wincmd p 676a42df593SBram Moolenaar edit! tmp.txt 6771e115360SBram Moolenaarendfunc 678a42df593SBram Moolenaar 679a42df593SBram Moolenaarfunc Test_window_prevwin() 680a42df593SBram Moolenaar " Can we make this work on MS-Windows? 6816d91bcb4SBram Moolenaar CheckUnix 682a42df593SBram Moolenaar 683a42df593SBram Moolenaar set hidden autoread 684a42df593SBram Moolenaar call writefile(['2'], 'tmp.txt') 685a42df593SBram Moolenaar new tmp.txt 686a42df593SBram Moolenaar q 687a42df593SBram Moolenaar call Fun_RenewFile() 688a42df593SBram Moolenaar call assert_equal(2, winnr()) 689a42df593SBram Moolenaar wincmd p 690a42df593SBram Moolenaar call assert_equal(1, winnr()) 691a42df593SBram Moolenaar wincmd p 692a42df593SBram Moolenaar q 693a42df593SBram Moolenaar call Fun_RenewFile() 694a42df593SBram Moolenaar call assert_equal(2, winnr()) 695a42df593SBram Moolenaar wincmd p 696a42df593SBram Moolenaar call assert_equal(1, winnr()) 697a42df593SBram Moolenaar wincmd p 698a42df593SBram Moolenaar " reset 699a42df593SBram Moolenaar q 700a42df593SBram Moolenaar call delete('tmp.txt') 701a42df593SBram Moolenaar set hidden&vim autoread&vim 702a42df593SBram Moolenaar delfunc Fun_RenewFile 703a42df593SBram Moolenaarendfunc 704a42df593SBram Moolenaar 7058fcb60f9SBram Moolenaarfunc Test_relative_cursor_position_in_one_line_window() 7068fcb60f9SBram Moolenaar new 7078fcb60f9SBram Moolenaar only 7088fcb60f9SBram Moolenaar call setline(1, range(1, 10000)) 7098fcb60f9SBram Moolenaar normal 50% 7108fcb60f9SBram Moolenaar let lnum = getcurpos()[1] 7118fcb60f9SBram Moolenaar split 7128fcb60f9SBram Moolenaar split 7138fcb60f9SBram Moolenaar " make third window take as many lines as possible, other windows will 7148fcb60f9SBram Moolenaar " become one line 7158fcb60f9SBram Moolenaar 3wincmd w 7168fcb60f9SBram Moolenaar for i in range(1, &lines - 6) 7178fcb60f9SBram Moolenaar wincmd + 7188fcb60f9SBram Moolenaar redraw! 7198fcb60f9SBram Moolenaar endfor 7208fcb60f9SBram Moolenaar 7218fcb60f9SBram Moolenaar " first and second window should show cursor line 7228fcb60f9SBram Moolenaar let wininfo = getwininfo() 7238fcb60f9SBram Moolenaar call assert_equal(lnum, wininfo[0].topline) 7248fcb60f9SBram Moolenaar call assert_equal(lnum, wininfo[1].topline) 7258fcb60f9SBram Moolenaar 7268fcb60f9SBram Moolenaar only! 7278fcb60f9SBram Moolenaar bwipe! 72899fa7219SBram Moolenaar call assert_fails('call winrestview(test_null_dict())', 'E474:') 7298fcb60f9SBram Moolenaarendfunc 7308fcb60f9SBram Moolenaar 7318fcb60f9SBram Moolenaarfunc Test_relative_cursor_position_after_move_and_resize() 7328fcb60f9SBram Moolenaar let so_save = &so 7338fcb60f9SBram Moolenaar set so=0 7348fcb60f9SBram Moolenaar enew 7358fcb60f9SBram Moolenaar call setline(1, range(1, 10000)) 7368fcb60f9SBram Moolenaar normal 50% 7378fcb60f9SBram Moolenaar split 7388fcb60f9SBram Moolenaar 1wincmd w 7398fcb60f9SBram Moolenaar " Move cursor to first line in window 7408fcb60f9SBram Moolenaar normal H 7418fcb60f9SBram Moolenaar redraw! 7428fcb60f9SBram Moolenaar " Reduce window height to two lines 7438fcb60f9SBram Moolenaar let height = winheight(0) 7448fcb60f9SBram Moolenaar while winheight(0) > 2 7458fcb60f9SBram Moolenaar wincmd - 7468fcb60f9SBram Moolenaar redraw! 7478fcb60f9SBram Moolenaar endwhile 7488fcb60f9SBram Moolenaar " move cursor to second/last line in window 7498fcb60f9SBram Moolenaar normal j 7508fcb60f9SBram Moolenaar " restore previous height 7518fcb60f9SBram Moolenaar while winheight(0) < height 7528fcb60f9SBram Moolenaar wincmd + 7538fcb60f9SBram Moolenaar redraw! 7548fcb60f9SBram Moolenaar endwhile 7558fcb60f9SBram Moolenaar " make window two lines again 7568fcb60f9SBram Moolenaar while winheight(0) > 2 7578fcb60f9SBram Moolenaar wincmd - 7588fcb60f9SBram Moolenaar redraw! 7598fcb60f9SBram Moolenaar endwhile 7608fcb60f9SBram Moolenaar 7618fcb60f9SBram Moolenaar " cursor should be at bottom line 7628fcb60f9SBram Moolenaar let info = getwininfo(win_getid())[0] 7638fcb60f9SBram Moolenaar call assert_equal(info.topline + 1, getcurpos()[1]) 7648fcb60f9SBram Moolenaar 7658fcb60f9SBram Moolenaar only! 7668fcb60f9SBram Moolenaar bwipe! 7678fcb60f9SBram Moolenaar let &so = so_save 7688fcb60f9SBram Moolenaarendfunc 7698fcb60f9SBram Moolenaar 7708fcb60f9SBram Moolenaarfunc Test_relative_cursor_position_after_resize() 7718fcb60f9SBram Moolenaar let so_save = &so 7728fcb60f9SBram Moolenaar set so=0 7738fcb60f9SBram Moolenaar enew 7748fcb60f9SBram Moolenaar call setline(1, range(1, 10000)) 7758fcb60f9SBram Moolenaar normal 50% 7768fcb60f9SBram Moolenaar split 7778fcb60f9SBram Moolenaar 1wincmd w 7788fcb60f9SBram Moolenaar let winid1 = win_getid() 7798fcb60f9SBram Moolenaar let info = getwininfo(winid1)[0] 7808fcb60f9SBram Moolenaar " Move cursor to second line in window 7818fcb60f9SBram Moolenaar exe "normal " . (info.topline + 1) . "G" 7828fcb60f9SBram Moolenaar redraw! 7838fcb60f9SBram Moolenaar let lnum = getcurpos()[1] 7848fcb60f9SBram Moolenaar 7858fcb60f9SBram Moolenaar " Make the window only two lines high, cursor should end up in top line 7868fcb60f9SBram Moolenaar 2wincmd w 7878fcb60f9SBram Moolenaar exe (info.height - 2) . "wincmd +" 7888fcb60f9SBram Moolenaar redraw! 7898fcb60f9SBram Moolenaar let info = getwininfo(winid1)[0] 7908fcb60f9SBram Moolenaar call assert_equal(lnum, info.topline) 7918fcb60f9SBram Moolenaar 7928fcb60f9SBram Moolenaar only! 7938fcb60f9SBram Moolenaar bwipe! 7948fcb60f9SBram Moolenaar let &so = so_save 7958fcb60f9SBram Moolenaarendfunc 7968fcb60f9SBram Moolenaar 7978fcb60f9SBram Moolenaarfunc Test_relative_cursor_second_line_after_resize() 7988fcb60f9SBram Moolenaar let so_save = &so 7998fcb60f9SBram Moolenaar set so=0 8008fcb60f9SBram Moolenaar enew 8018fcb60f9SBram Moolenaar call setline(1, range(1, 10000)) 8028fcb60f9SBram Moolenaar normal 50% 8038fcb60f9SBram Moolenaar split 8048fcb60f9SBram Moolenaar 1wincmd w 8058fcb60f9SBram Moolenaar let winid1 = win_getid() 8068fcb60f9SBram Moolenaar let info = getwininfo(winid1)[0] 8078fcb60f9SBram Moolenaar 8088fcb60f9SBram Moolenaar " Make the window only two lines high 8098fcb60f9SBram Moolenaar 2wincmd _ 8108fcb60f9SBram Moolenaar 8118fcb60f9SBram Moolenaar " Move cursor to second line in window 8128fcb60f9SBram Moolenaar normal H 8138fcb60f9SBram Moolenaar normal j 8148fcb60f9SBram Moolenaar 8158fcb60f9SBram Moolenaar " Make window size bigger, then back to 2 lines 8168fcb60f9SBram Moolenaar for i in range(1, 10) 8178fcb60f9SBram Moolenaar wincmd + 8188fcb60f9SBram Moolenaar redraw! 8198fcb60f9SBram Moolenaar endfor 8208fcb60f9SBram Moolenaar for i in range(1, 10) 8218fcb60f9SBram Moolenaar wincmd - 8228fcb60f9SBram Moolenaar redraw! 8238fcb60f9SBram Moolenaar endfor 8248fcb60f9SBram Moolenaar 8258fcb60f9SBram Moolenaar " cursor should end up in bottom line 8268fcb60f9SBram Moolenaar let info = getwininfo(winid1)[0] 8278fcb60f9SBram Moolenaar call assert_equal(info.topline + 1, getcurpos()[1]) 8288fcb60f9SBram Moolenaar 8298fcb60f9SBram Moolenaar only! 8308fcb60f9SBram Moolenaar bwipe! 8318fcb60f9SBram Moolenaar let &so = so_save 8328fcb60f9SBram Moolenaarendfunc 8338fcb60f9SBram Moolenaar 834a9b2535fSBram Moolenaarfunc Test_split_noscroll() 835a9b2535fSBram Moolenaar let so_save = &so 836bd2d68c2SBram Moolenaar enew 837a9b2535fSBram Moolenaar call setline(1, range(1, 8)) 838a9b2535fSBram Moolenaar normal 100% 839a9b2535fSBram Moolenaar split 840a9b2535fSBram Moolenaar 841a9b2535fSBram Moolenaar 1wincmd w 842a9b2535fSBram Moolenaar let winid1 = win_getid() 843a9b2535fSBram Moolenaar let info1 = getwininfo(winid1)[0] 844a9b2535fSBram Moolenaar 845a9b2535fSBram Moolenaar 2wincmd w 846a9b2535fSBram Moolenaar let winid2 = win_getid() 847a9b2535fSBram Moolenaar let info2 = getwininfo(winid2)[0] 848a9b2535fSBram Moolenaar 849a9b2535fSBram Moolenaar call assert_equal(1, info1.topline) 850a9b2535fSBram Moolenaar call assert_equal(1, info2.topline) 851a9b2535fSBram Moolenaar 852bd2d68c2SBram Moolenaar " window that fits all lines by itself, but not when split: closing other 853bd2d68c2SBram Moolenaar " window should restore fraction. 854a9b2535fSBram Moolenaar only! 855bd2d68c2SBram Moolenaar call setline(1, range(1, &lines - 10)) 856bd2d68c2SBram Moolenaar exe &lines / 4 857bd2d68c2SBram Moolenaar let winid1 = win_getid() 858bd2d68c2SBram Moolenaar let info1 = getwininfo(winid1)[0] 859bd2d68c2SBram Moolenaar call assert_equal(1, info1.topline) 860bd2d68c2SBram Moolenaar new 861bd2d68c2SBram Moolenaar redraw 862bd2d68c2SBram Moolenaar close 863bd2d68c2SBram Moolenaar let info1 = getwininfo(winid1)[0] 864bd2d68c2SBram Moolenaar call assert_equal(1, info1.topline) 865bd2d68c2SBram Moolenaar 866a9b2535fSBram Moolenaar bwipe! 867a9b2535fSBram Moolenaar let &so = so_save 868a9b2535fSBram Moolenaarendfunc 869a9b2535fSBram Moolenaar 87046ad288bSBram Moolenaar" Tests for the winnr() function 87146ad288bSBram Moolenaarfunc Test_winnr() 87246ad288bSBram Moolenaar only | tabonly 87346ad288bSBram Moolenaar call assert_equal(1, winnr('j')) 87446ad288bSBram Moolenaar call assert_equal(1, winnr('k')) 87546ad288bSBram Moolenaar call assert_equal(1, winnr('h')) 87646ad288bSBram Moolenaar call assert_equal(1, winnr('l')) 87746ad288bSBram Moolenaar 87846ad288bSBram Moolenaar " create a set of horizontally and vertically split windows 87946ad288bSBram Moolenaar leftabove new | wincmd p 88046ad288bSBram Moolenaar leftabove new | wincmd p 88146ad288bSBram Moolenaar rightbelow new | wincmd p 88246ad288bSBram Moolenaar rightbelow new | wincmd p 88346ad288bSBram Moolenaar leftabove vnew | wincmd p 88446ad288bSBram Moolenaar leftabove vnew | wincmd p 88546ad288bSBram Moolenaar rightbelow vnew | wincmd p 88646ad288bSBram Moolenaar rightbelow vnew | wincmd p 88746ad288bSBram Moolenaar 88846ad288bSBram Moolenaar call assert_equal(8, winnr('j')) 88946ad288bSBram Moolenaar call assert_equal(2, winnr('k')) 89046ad288bSBram Moolenaar call assert_equal(4, winnr('h')) 89146ad288bSBram Moolenaar call assert_equal(6, winnr('l')) 89246ad288bSBram Moolenaar call assert_equal(9, winnr('2j')) 89346ad288bSBram Moolenaar call assert_equal(1, winnr('2k')) 89446ad288bSBram Moolenaar call assert_equal(3, winnr('2h')) 89546ad288bSBram Moolenaar call assert_equal(7, winnr('2l')) 89646ad288bSBram Moolenaar 89746ad288bSBram Moolenaar " Error cases 89846ad288bSBram Moolenaar call assert_fails("echo winnr('0.2k')", 'E15:') 89946ad288bSBram Moolenaar call assert_equal(2, winnr('-2k')) 90046ad288bSBram Moolenaar call assert_fails("echo winnr('-2xj')", 'E15:') 90146ad288bSBram Moolenaar call assert_fails("echo winnr('j2j')", 'E15:') 90246ad288bSBram Moolenaar call assert_fails("echo winnr('ll')", 'E15:') 90346ad288bSBram Moolenaar call assert_fails("echo winnr('5')", 'E15:') 90446ad288bSBram Moolenaar call assert_equal(4, winnr('0h')) 90599fa7219SBram Moolenaar call assert_fails("let w = winnr([])", 'E730:') 90699fa7219SBram Moolenaar call assert_equal('unknown', win_gettype(-1)) 90799fa7219SBram Moolenaar call assert_equal(-1, winheight(-1)) 90899fa7219SBram Moolenaar call assert_equal(-1, winwidth(-1)) 90946ad288bSBram Moolenaar 91046ad288bSBram Moolenaar tabnew 91146ad288bSBram Moolenaar call assert_equal(8, tabpagewinnr(1, 'j')) 912ce90e36fSBram Moolenaar call assert_equal(2, 1->tabpagewinnr('k')) 91346ad288bSBram Moolenaar call assert_equal(4, tabpagewinnr(1, 'h')) 91446ad288bSBram Moolenaar call assert_equal(6, tabpagewinnr(1, 'l')) 91546ad288bSBram Moolenaar 91646ad288bSBram Moolenaar only | tabonly 91746ad288bSBram Moolenaarendfunc 91846ad288bSBram Moolenaar 919f92e58caSBram Moolenaarfunc Test_winrestview() 920f92e58caSBram Moolenaar split runtest.vim 921f92e58caSBram Moolenaar normal 50% 922f92e58caSBram Moolenaar let view = winsaveview() 923f92e58caSBram Moolenaar close 924f92e58caSBram Moolenaar split runtest.vim 925f92e58caSBram Moolenaar eval view->winrestview() 926f92e58caSBram Moolenaar call assert_equal(view, winsaveview()) 927f92e58caSBram Moolenaar 928f92e58caSBram Moolenaar bwipe! 92999fa7219SBram Moolenaar call assert_fails('call winrestview(test_null_dict())', 'E474:') 930f92e58caSBram Moolenaarendfunc 931f92e58caSBram Moolenaar 932d20dcb3dSBram Moolenaarfunc Test_win_splitmove() 9335a4c3082SBram Moolenaar CheckFeature quickfix 9345a4c3082SBram Moolenaar 935d20dcb3dSBram Moolenaar edit a 936d20dcb3dSBram Moolenaar leftabove split b 937d20dcb3dSBram Moolenaar leftabove vsplit c 938d20dcb3dSBram Moolenaar leftabove split d 939d20dcb3dSBram Moolenaar call assert_equal(0, win_splitmove(winnr(), winnr('l'))) 940d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(1)), 'c') 941d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(2)), 'd') 942d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(3)), 'b') 943d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(4)), 'a') 944d20dcb3dSBram Moolenaar call assert_equal(0, win_splitmove(winnr(), winnr('j'), {'vertical': 1})) 945d20dcb3dSBram Moolenaar call assert_equal(0, win_splitmove(winnr(), winnr('j'), {'vertical': 1})) 946d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(1)), 'c') 947d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(2)), 'b') 948d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(3)), 'd') 949d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(4)), 'a') 950d20dcb3dSBram Moolenaar call assert_equal(0, win_splitmove(winnr(), winnr('k'), {'vertical': 1})) 951d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(1)), 'd') 952d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(2)), 'c') 953d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(3)), 'b') 954d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(4)), 'a') 955d20dcb3dSBram Moolenaar call assert_equal(0, win_splitmove(winnr(), winnr('j'), {'rightbelow': v:true})) 956d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(1)), 'c') 957d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(2)), 'b') 958d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(3)), 'a') 959d20dcb3dSBram Moolenaar call assert_equal(bufname(winbufnr(4)), 'd') 96099fa7219SBram Moolenaar call assert_fails('call win_splitmove(winnr(), winnr("k"), test_null_dict())', 'E474:') 961d20dcb3dSBram Moolenaar only | bd 962d20dcb3dSBram Moolenaar 963d20dcb3dSBram Moolenaar call assert_fails('call win_splitmove(winnr(), 123)', 'E957:') 964d20dcb3dSBram Moolenaar call assert_fails('call win_splitmove(123, winnr())', 'E957:') 965d20dcb3dSBram Moolenaar call assert_fails('call win_splitmove(winnr(), winnr())', 'E957:') 9667b94e771SBram Moolenaar 9677b94e771SBram Moolenaar tabnew 9687b94e771SBram Moolenaar call assert_fails('call win_splitmove(1, win_getid(1, 1))', 'E957:') 9697b94e771SBram Moolenaar tabclose 970d20dcb3dSBram Moolenaarendfunc 971d20dcb3dSBram Moolenaar 972e20b9eceSBram Moolenaar" Test for the :only command 973e20b9eceSBram Moolenaarfunc Test_window_only() 974e20b9eceSBram Moolenaar new 975e20b9eceSBram Moolenaar set modified 976e20b9eceSBram Moolenaar new 977e20b9eceSBram Moolenaar call assert_fails('only', 'E445:') 978e20b9eceSBram Moolenaar only! 979bc2b71d4SBram Moolenaar " Test for :only with a count 980bc2b71d4SBram Moolenaar let wid = win_getid() 981bc2b71d4SBram Moolenaar new 982bc2b71d4SBram Moolenaar new 983bc2b71d4SBram Moolenaar 3only 984bc2b71d4SBram Moolenaar call assert_equal(1, winnr('$')) 985bc2b71d4SBram Moolenaar call assert_equal(wid, win_getid()) 986bc2b71d4SBram Moolenaar call assert_fails('close', 'E444:') 987bc2b71d4SBram Moolenaar call assert_fails('%close', 'E16:') 988e20b9eceSBram Moolenaarendfunc 989e20b9eceSBram Moolenaar 9909f6277bdSBram Moolenaar" Test for errors with :wincmd 9919f6277bdSBram Moolenaarfunc Test_wincmd_errors() 9929f6277bdSBram Moolenaar call assert_fails('wincmd g', 'E474:') 9939f6277bdSBram Moolenaar call assert_fails('wincmd ab', 'E474:') 9949f6277bdSBram Moolenaarendfunc 9959f6277bdSBram Moolenaar 9969f6277bdSBram Moolenaar" Test for errors with :winpos 9979f6277bdSBram Moolenaarfunc Test_winpos_errors() 9989f6277bdSBram Moolenaar if !has("gui_running") && !has('win32') 9999f6277bdSBram Moolenaar call assert_fails('winpos', 'E188:') 10009f6277bdSBram Moolenaar endif 10019f6277bdSBram Moolenaar call assert_fails('winpos 10', 'E466:') 10029f6277bdSBram Moolenaarendfunc 10039f6277bdSBram Moolenaar 1004406cd90fSBram Moolenaar" Test for +cmd in a :split command 1005406cd90fSBram Moolenaarfunc Test_split_cmd() 1006406cd90fSBram Moolenaar split +set\ readonly 1007406cd90fSBram Moolenaar call assert_equal(1, &readonly) 1008406cd90fSBram Moolenaar call assert_equal(2, winnr('$')) 1009406cd90fSBram Moolenaar close 1010406cd90fSBram Moolenaarendfunc 1011406cd90fSBram Moolenaar 10125080b0a0SBram Moolenaar" Create maximum number of horizontally or vertically split windows and then 10135080b0a0SBram Moolenaar" run commands that create a new horizontally/vertically split window 10145080b0a0SBram Moolenaarfunc Run_noroom_for_newwindow_test(dir_arg) 10155080b0a0SBram Moolenaar let dir = (a:dir_arg == 'v') ? 'vert ' : '' 10165080b0a0SBram Moolenaar 10175080b0a0SBram Moolenaar " Open as many windows as possible 1018ab505b1aSBram Moolenaar while v:true 10195080b0a0SBram Moolenaar try 10205080b0a0SBram Moolenaar exe dir . 'new' 10215080b0a0SBram Moolenaar catch /E36:/ 10225080b0a0SBram Moolenaar break 10235080b0a0SBram Moolenaar endtry 1024ab505b1aSBram Moolenaar endwhile 10255080b0a0SBram Moolenaar 10265080b0a0SBram Moolenaar call writefile(['first', 'second', 'third'], 'Xfile1') 10275080b0a0SBram Moolenaar call writefile([], 'Xfile2') 10285080b0a0SBram Moolenaar call writefile([], 'Xfile3') 10295080b0a0SBram Moolenaar 10305080b0a0SBram Moolenaar " Argument list related commands 10315080b0a0SBram Moolenaar args Xfile1 Xfile2 Xfile3 10325080b0a0SBram Moolenaar next 10335080b0a0SBram Moolenaar for cmd in ['sargument 2', 'snext', 'sprevious', 'sNext', 'srewind', 10345080b0a0SBram Moolenaar \ 'sfirst', 'slast'] 10355080b0a0SBram Moolenaar call assert_fails(dir .. cmd, 'E36:') 10365080b0a0SBram Moolenaar endfor 10375080b0a0SBram Moolenaar %argdelete 10385080b0a0SBram Moolenaar 10395080b0a0SBram Moolenaar " Buffer related commands 10405080b0a0SBram Moolenaar set modified 10415080b0a0SBram Moolenaar hide enew 10425080b0a0SBram Moolenaar for cmd in ['sbuffer Xfile1', 'sbnext', 'sbprevious', 'sbNext', 'sbrewind', 10435080b0a0SBram Moolenaar \ 'sbfirst', 'sblast', 'sball', 'sbmodified', 'sunhide'] 10445080b0a0SBram Moolenaar call assert_fails(dir .. cmd, 'E36:') 10455080b0a0SBram Moolenaar endfor 10465080b0a0SBram Moolenaar 10475080b0a0SBram Moolenaar " Window related commands 10485080b0a0SBram Moolenaar for cmd in ['split', 'split Xfile2', 'new', 'new Xfile3', 'sview Xfile1', 10495080b0a0SBram Moolenaar \ 'sfind runtest.vim'] 10505080b0a0SBram Moolenaar call assert_fails(dir .. cmd, 'E36:') 10515080b0a0SBram Moolenaar endfor 10525080b0a0SBram Moolenaar 10535080b0a0SBram Moolenaar " Help 10545080b0a0SBram Moolenaar call assert_fails(dir .. 'help', 'E36:') 10555080b0a0SBram Moolenaar call assert_fails(dir .. 'helpgrep window', 'E36:') 10565080b0a0SBram Moolenaar 10575080b0a0SBram Moolenaar " Command-line window 10585080b0a0SBram Moolenaar if a:dir_arg == 'h' 10595080b0a0SBram Moolenaar " Cmd-line window is always a horizontally split window 10605080b0a0SBram Moolenaar call assert_beeps('call feedkeys("q:\<CR>", "xt")') 10615080b0a0SBram Moolenaar endif 10625080b0a0SBram Moolenaar 10635080b0a0SBram Moolenaar " Quickfix and location list window 10645080b0a0SBram Moolenaar if has('quickfix') 10655080b0a0SBram Moolenaar cexpr '' 10665080b0a0SBram Moolenaar call assert_fails(dir .. 'copen', 'E36:') 10675080b0a0SBram Moolenaar lexpr '' 10685080b0a0SBram Moolenaar call assert_fails(dir .. 'lopen', 'E36:') 10695080b0a0SBram Moolenaar 10705080b0a0SBram Moolenaar " Preview window 10715080b0a0SBram Moolenaar call assert_fails(dir .. 'pedit Xfile2', 'E36:') 10725080b0a0SBram Moolenaar call setline(1, 'abc') 10735080b0a0SBram Moolenaar call assert_fails(dir .. 'psearch abc', 'E36:') 10745080b0a0SBram Moolenaar endif 10755080b0a0SBram Moolenaar 10765080b0a0SBram Moolenaar " Window commands (CTRL-W ^ and CTRL-W f) 10775080b0a0SBram Moolenaar if a:dir_arg == 'h' 10785080b0a0SBram Moolenaar call assert_fails('call feedkeys("\<C-W>^", "xt")', 'E36:') 10795080b0a0SBram Moolenaar call setline(1, 'Xfile1') 10805080b0a0SBram Moolenaar call assert_fails('call feedkeys("gg\<C-W>f", "xt")', 'E36:') 10815080b0a0SBram Moolenaar endif 10825080b0a0SBram Moolenaar enew! 10835080b0a0SBram Moolenaar 10845080b0a0SBram Moolenaar " Tag commands (:stag, :stselect and :stjump) 10855080b0a0SBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 10865080b0a0SBram Moolenaar \ "second\tXfile1\t2", 10875080b0a0SBram Moolenaar \ "third\tXfile1\t3",], 10885080b0a0SBram Moolenaar \ 'Xtags') 10895080b0a0SBram Moolenaar set tags=Xtags 10905080b0a0SBram Moolenaar call assert_fails(dir .. 'stag second', 'E36:') 10915080b0a0SBram Moolenaar call assert_fails('call feedkeys(":" .. dir .. "stselect second\n1\n", "xt")', 'E36:') 10925080b0a0SBram Moolenaar call assert_fails(dir .. 'stjump second', 'E36:') 10935080b0a0SBram Moolenaar call assert_fails(dir .. 'ptag second', 'E36:') 10945080b0a0SBram Moolenaar set tags& 10955080b0a0SBram Moolenaar call delete('Xtags') 10965080b0a0SBram Moolenaar 10975080b0a0SBram Moolenaar " :isplit and :dsplit 10985080b0a0SBram Moolenaar call setline(1, ['#define FOO 1', 'FOO']) 10995080b0a0SBram Moolenaar normal 2G 11005080b0a0SBram Moolenaar call assert_fails(dir .. 'isplit FOO', 'E36:') 11015080b0a0SBram Moolenaar call assert_fails(dir .. 'dsplit FOO', 'E36:') 11025080b0a0SBram Moolenaar 11035080b0a0SBram Moolenaar " terminal 11045080b0a0SBram Moolenaar if has('terminal') 11055080b0a0SBram Moolenaar call assert_fails(dir .. 'terminal', 'E36:') 11065080b0a0SBram Moolenaar endif 11075080b0a0SBram Moolenaar 11085080b0a0SBram Moolenaar %bwipe! 11095080b0a0SBram Moolenaar call delete('Xfile1') 11105080b0a0SBram Moolenaar call delete('Xfile2') 11115080b0a0SBram Moolenaar call delete('Xfile3') 11125080b0a0SBram Moolenaar only 11135080b0a0SBram Moolenaarendfunc 11145080b0a0SBram Moolenaar 11155080b0a0SBram Moolenaarfunc Test_split_cmds_with_no_room() 11165080b0a0SBram Moolenaar call Run_noroom_for_newwindow_test('h') 11175080b0a0SBram Moolenaar call Run_noroom_for_newwindow_test('v') 11185080b0a0SBram Moolenaarendfunc 11195080b0a0SBram Moolenaar 1120ad48e6c1SBram Moolenaar" Test for various wincmd failures 1121ad48e6c1SBram Moolenaarfunc Test_wincmd_fails() 1122ad48e6c1SBram Moolenaar only! 1123ad48e6c1SBram Moolenaar call assert_beeps("normal \<C-W>w") 1124ad48e6c1SBram Moolenaar call assert_beeps("normal \<C-W>p") 1125ad48e6c1SBram Moolenaar call assert_beeps("normal \<C-W>gk") 1126ad48e6c1SBram Moolenaar call assert_beeps("normal \<C-W>r") 1127ad48e6c1SBram Moolenaar call assert_beeps("normal \<C-W>K") 1128ad48e6c1SBram Moolenaar call assert_beeps("normal \<C-W>H") 1129ad48e6c1SBram Moolenaar call assert_beeps("normal \<C-W>2gt") 1130ad48e6c1SBram Moolenaarendfunc 1131ad48e6c1SBram Moolenaar 1132fe6dce87SBram Moolenaarfunc Test_window_resize() 1133fe6dce87SBram Moolenaar " Vertical :resize (absolute, relative, min and max size). 1134fe6dce87SBram Moolenaar vsplit 1135fe6dce87SBram Moolenaar vert resize 8 1136fe6dce87SBram Moolenaar call assert_equal(8, winwidth(0)) 1137fe6dce87SBram Moolenaar vert resize +2 1138fe6dce87SBram Moolenaar call assert_equal(10, winwidth(0)) 1139fe6dce87SBram Moolenaar vert resize -2 1140fe6dce87SBram Moolenaar call assert_equal(8, winwidth(0)) 1141fe6dce87SBram Moolenaar vert resize 1142fe6dce87SBram Moolenaar call assert_equal(&columns - 2, winwidth(0)) 1143fe6dce87SBram Moolenaar vert resize 0 1144fe6dce87SBram Moolenaar call assert_equal(1, winwidth(0)) 1145fe6dce87SBram Moolenaar vert resize 99999 1146fe6dce87SBram Moolenaar call assert_equal(&columns - 2, winwidth(0)) 1147fe6dce87SBram Moolenaar 1148fe6dce87SBram Moolenaar %bwipe! 1149fe6dce87SBram Moolenaar 1150fe6dce87SBram Moolenaar " Horizontal :resize (with absolute, relative size, min and max size). 1151fe6dce87SBram Moolenaar split 1152fe6dce87SBram Moolenaar resize 8 1153fe6dce87SBram Moolenaar call assert_equal(8, winheight(0)) 1154fe6dce87SBram Moolenaar resize +2 1155fe6dce87SBram Moolenaar call assert_equal(10, winheight(0)) 1156fe6dce87SBram Moolenaar resize -2 1157fe6dce87SBram Moolenaar call assert_equal(8, winheight(0)) 1158fe6dce87SBram Moolenaar resize 1159fe6dce87SBram Moolenaar call assert_equal(&lines - 4, winheight(0)) 1160fe6dce87SBram Moolenaar resize 0 1161fe6dce87SBram Moolenaar call assert_equal(1, winheight(0)) 1162fe6dce87SBram Moolenaar resize 99999 1163fe6dce87SBram Moolenaar call assert_equal(&lines - 4, winheight(0)) 1164fe6dce87SBram Moolenaar 1165fe6dce87SBram Moolenaar " :resize with explicit window number. 1166fe6dce87SBram Moolenaar let other_winnr = winnr('j') 1167fe6dce87SBram Moolenaar exe other_winnr .. 'resize 10' 1168fe6dce87SBram Moolenaar call assert_equal(10, winheight(other_winnr)) 1169fe6dce87SBram Moolenaar call assert_equal(&lines - 10 - 3, winheight(0)) 11709668cc57SBram Moolenaar exe other_winnr .. 'resize +1' 11719668cc57SBram Moolenaar exe other_winnr .. 'resize +1' 11729668cc57SBram Moolenaar call assert_equal(12, winheight(other_winnr)) 11739668cc57SBram Moolenaar call assert_equal(&lines - 10 - 3 -2, winheight(0)) 117489015a67SBram Moolenaar close 117589015a67SBram Moolenaar 117689015a67SBram Moolenaar vsplit 117789015a67SBram Moolenaar wincmd l 117889015a67SBram Moolenaar let other_winnr = winnr('h') 117989015a67SBram Moolenaar call assert_notequal(winnr(), other_winnr) 11805efe0e5dSBram Moolenaar exe 'vert ' .. other_winnr .. 'resize -' .. &columns 118189015a67SBram Moolenaar call assert_equal(0, winwidth(other_winnr)) 1182fe6dce87SBram Moolenaar 1183fe6dce87SBram Moolenaar %bwipe! 1184fe6dce87SBram Moolenaarendfunc 1185fe6dce87SBram Moolenaar 11865d3c9f8cSBram Moolenaar" Test for adjusting the window width when a window is closed with some 11875d3c9f8cSBram Moolenaar" windows using 'winfixwidth' 11885d3c9f8cSBram Moolenaarfunc Test_window_width_adjust() 11895d3c9f8cSBram Moolenaar only 11905d3c9f8cSBram Moolenaar " Three vertical windows. Windows 1 and 2 have 'winfixwidth' set and close 11915d3c9f8cSBram Moolenaar " window 2. 11925d3c9f8cSBram Moolenaar wincmd v 11935d3c9f8cSBram Moolenaar vert resize 10 11945d3c9f8cSBram Moolenaar set winfixwidth 11955d3c9f8cSBram Moolenaar wincmd v 11965d3c9f8cSBram Moolenaar set winfixwidth 11975d3c9f8cSBram Moolenaar wincmd c 11985d3c9f8cSBram Moolenaar call assert_inrange(10, 12, winwidth(1)) 11995d3c9f8cSBram Moolenaar " Three vertical windows. Windows 2 and 3 have 'winfixwidth' set and close 12005d3c9f8cSBram Moolenaar " window 3. 12015d3c9f8cSBram Moolenaar only 12025d3c9f8cSBram Moolenaar set winfixwidth 12035d3c9f8cSBram Moolenaar wincmd v 12045d3c9f8cSBram Moolenaar vert resize 10 12055d3c9f8cSBram Moolenaar set winfixwidth 12065d3c9f8cSBram Moolenaar wincmd v 12075d3c9f8cSBram Moolenaar set nowinfixwidth 12085d3c9f8cSBram Moolenaar wincmd b 12095d3c9f8cSBram Moolenaar wincmd c 12105d3c9f8cSBram Moolenaar call assert_inrange(10, 12, winwidth(2)) 12115d3c9f8cSBram Moolenaar 12125d3c9f8cSBram Moolenaar new | only 12135d3c9f8cSBram Moolenaarendfunc 12145d3c9f8cSBram Moolenaar 12155d3c9f8cSBram Moolenaar" Test for jumping to a vertical/horizontal neighbor window based on the 12165d3c9f8cSBram Moolenaar" current cursor position 12175d3c9f8cSBram Moolenaarfunc Test_window_goto_neightbor() 12185d3c9f8cSBram Moolenaar %bw! 12195d3c9f8cSBram Moolenaar 12205d3c9f8cSBram Moolenaar " Vertical window movement 12215d3c9f8cSBram Moolenaar 12225d3c9f8cSBram Moolenaar " create the following window layout: 12235d3c9f8cSBram Moolenaar " +--+--+ 12245d3c9f8cSBram Moolenaar " |w1|w3| 12255d3c9f8cSBram Moolenaar " +--+ | 12265d3c9f8cSBram Moolenaar " |w2| | 12275d3c9f8cSBram Moolenaar " +--+--+ 12285d3c9f8cSBram Moolenaar " |w4 | 12295d3c9f8cSBram Moolenaar " +-----+ 12305d3c9f8cSBram Moolenaar new 12315d3c9f8cSBram Moolenaar vsplit 12325d3c9f8cSBram Moolenaar split 12335d3c9f8cSBram Moolenaar " vertically jump from w4 12345d3c9f8cSBram Moolenaar wincmd b 12355d3c9f8cSBram Moolenaar call setline(1, repeat(' ', &columns)) 12365d3c9f8cSBram Moolenaar call cursor(1, 1) 12375d3c9f8cSBram Moolenaar wincmd k 12385d3c9f8cSBram Moolenaar call assert_equal(2, winnr()) 12395d3c9f8cSBram Moolenaar wincmd b 12405d3c9f8cSBram Moolenaar call cursor(1, &columns) 12415d3c9f8cSBram Moolenaar redraw! 12425d3c9f8cSBram Moolenaar wincmd k 12435d3c9f8cSBram Moolenaar call assert_equal(3, winnr()) 12445d3c9f8cSBram Moolenaar %bw! 12455d3c9f8cSBram Moolenaar 12465d3c9f8cSBram Moolenaar " create the following window layout: 12475d3c9f8cSBram Moolenaar " +--+--+--+ 12485d3c9f8cSBram Moolenaar " |w1|w2|w3| 12495d3c9f8cSBram Moolenaar " +--+--+--+ 12505d3c9f8cSBram Moolenaar " |w4 | 12515d3c9f8cSBram Moolenaar " +--------+ 12525d3c9f8cSBram Moolenaar new 12535d3c9f8cSBram Moolenaar vsplit 12545d3c9f8cSBram Moolenaar vsplit 12555d3c9f8cSBram Moolenaar wincmd b 12565d3c9f8cSBram Moolenaar call setline(1, repeat(' ', &columns)) 12575d3c9f8cSBram Moolenaar call cursor(1, 1) 12585d3c9f8cSBram Moolenaar wincmd k 12595d3c9f8cSBram Moolenaar call assert_equal(1, winnr()) 12605d3c9f8cSBram Moolenaar wincmd b 12615d3c9f8cSBram Moolenaar call cursor(1, &columns / 2) 12625d3c9f8cSBram Moolenaar redraw! 12635d3c9f8cSBram Moolenaar wincmd k 12645d3c9f8cSBram Moolenaar call assert_equal(2, winnr()) 12655d3c9f8cSBram Moolenaar wincmd b 12665d3c9f8cSBram Moolenaar call cursor(1, &columns) 12675d3c9f8cSBram Moolenaar redraw! 12685d3c9f8cSBram Moolenaar wincmd k 12695d3c9f8cSBram Moolenaar call assert_equal(3, winnr()) 12705d3c9f8cSBram Moolenaar %bw! 12715d3c9f8cSBram Moolenaar 12725d3c9f8cSBram Moolenaar " Horizontal window movement 12735d3c9f8cSBram Moolenaar 12745d3c9f8cSBram Moolenaar " create the following window layout: 12755d3c9f8cSBram Moolenaar " +--+--+--+ 12765d3c9f8cSBram Moolenaar " |w1|w2|w4| 12775d3c9f8cSBram Moolenaar " +--+--+ | 12785d3c9f8cSBram Moolenaar " |w3 | | 12795d3c9f8cSBram Moolenaar " +-----+--+ 12805d3c9f8cSBram Moolenaar vsplit 12815d3c9f8cSBram Moolenaar split 12825d3c9f8cSBram Moolenaar vsplit 12835d3c9f8cSBram Moolenaar 4wincmd l 12845d3c9f8cSBram Moolenaar call setline(1, repeat([' '], &lines)) 12855d3c9f8cSBram Moolenaar call cursor(1, 1) 12865d3c9f8cSBram Moolenaar redraw! 12875d3c9f8cSBram Moolenaar wincmd h 12885d3c9f8cSBram Moolenaar call assert_equal(2, winnr()) 12895d3c9f8cSBram Moolenaar 4wincmd l 12905d3c9f8cSBram Moolenaar call cursor(&lines, 1) 12915d3c9f8cSBram Moolenaar redraw! 12925d3c9f8cSBram Moolenaar wincmd h 12935d3c9f8cSBram Moolenaar call assert_equal(3, winnr()) 12945d3c9f8cSBram Moolenaar %bw! 12955d3c9f8cSBram Moolenaar 12965d3c9f8cSBram Moolenaar " create the following window layout: 12975d3c9f8cSBram Moolenaar " +--+--+ 12985d3c9f8cSBram Moolenaar " |w1|w4| 12995d3c9f8cSBram Moolenaar " +--+ + 13005d3c9f8cSBram Moolenaar " |w2| | 13015d3c9f8cSBram Moolenaar " +--+ + 13025d3c9f8cSBram Moolenaar " |w3| | 13035d3c9f8cSBram Moolenaar " +--+--+ 13045d3c9f8cSBram Moolenaar vsplit 13055d3c9f8cSBram Moolenaar split 13065d3c9f8cSBram Moolenaar split 13075d3c9f8cSBram Moolenaar wincmd l 13085d3c9f8cSBram Moolenaar call setline(1, repeat([' '], &lines)) 13095d3c9f8cSBram Moolenaar call cursor(1, 1) 13105d3c9f8cSBram Moolenaar redraw! 13115d3c9f8cSBram Moolenaar wincmd h 13125d3c9f8cSBram Moolenaar call assert_equal(1, winnr()) 13135d3c9f8cSBram Moolenaar wincmd l 13145d3c9f8cSBram Moolenaar call cursor(&lines / 2, 1) 13155d3c9f8cSBram Moolenaar redraw! 13165d3c9f8cSBram Moolenaar wincmd h 13175d3c9f8cSBram Moolenaar call assert_equal(2, winnr()) 13185d3c9f8cSBram Moolenaar wincmd l 13195d3c9f8cSBram Moolenaar call cursor(&lines, 1) 13205d3c9f8cSBram Moolenaar redraw! 13215d3c9f8cSBram Moolenaar wincmd h 13225d3c9f8cSBram Moolenaar call assert_equal(3, winnr()) 13235d3c9f8cSBram Moolenaar %bw! 13245d3c9f8cSBram Moolenaarendfunc 13255d3c9f8cSBram Moolenaar 13265d3c9f8cSBram Moolenaar" Test for an autocmd closing the destination window when jumping from one 13275d3c9f8cSBram Moolenaar" window to another. 13285d3c9f8cSBram Moolenaarfunc Test_close_dest_window() 13295d3c9f8cSBram Moolenaar split 13305d3c9f8cSBram Moolenaar edit Xfile 13315d3c9f8cSBram Moolenaar 13325d3c9f8cSBram Moolenaar " Test for BufLeave 13335d3c9f8cSBram Moolenaar augroup T1 13345d3c9f8cSBram Moolenaar au! 13355d3c9f8cSBram Moolenaar au BufLeave Xfile $wincmd c 13365d3c9f8cSBram Moolenaar augroup END 13375d3c9f8cSBram Moolenaar wincmd b 13385d3c9f8cSBram Moolenaar call assert_equal(1, winnr('$')) 13395d3c9f8cSBram Moolenaar call assert_equal('Xfile', @%) 13405d3c9f8cSBram Moolenaar augroup T1 13415d3c9f8cSBram Moolenaar au! 13425d3c9f8cSBram Moolenaar augroup END 13435d3c9f8cSBram Moolenaar 13445d3c9f8cSBram Moolenaar " Test for WinLeave 13455d3c9f8cSBram Moolenaar new 13465d3c9f8cSBram Moolenaar wincmd p 13475d3c9f8cSBram Moolenaar augroup T1 13485d3c9f8cSBram Moolenaar au! 13495d3c9f8cSBram Moolenaar au WinLeave * 1wincmd c 13505d3c9f8cSBram Moolenaar augroup END 13515d3c9f8cSBram Moolenaar wincmd t 13525d3c9f8cSBram Moolenaar call assert_equal(1, winnr('$')) 13535d3c9f8cSBram Moolenaar call assert_equal('Xfile', @%) 13545d3c9f8cSBram Moolenaar augroup T1 13555d3c9f8cSBram Moolenaar au! 13565d3c9f8cSBram Moolenaar augroup END 13575d3c9f8cSBram Moolenaar augroup! T1 13585d3c9f8cSBram Moolenaar %bw! 13595d3c9f8cSBram Moolenaarendfunc 13605d3c9f8cSBram Moolenaar 13619e4d8215SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 1362