Bram Moolenaar | 6d91bcb | 2020-08-12 18:50:36 +0200 | [diff] [blame] | 1 | " Test for tabline |
Bram Moolenaar | e12bab3 | 2019-01-08 22:02:56 +0100 | [diff] [blame] | 2 | |
| 3 | source shared.vim |
Luuk van Baal | ba936f6 | 2022-12-15 13:15:39 +0000 | [diff] [blame] | 4 | source view_util.vim |
| 5 | source check.vim |
| 6 | source screendump.vim |
Bram Moolenaar | e12bab3 | 2019-01-08 22:02:56 +0100 | [diff] [blame] | 7 | |
| 8 | func TablineWithCaughtError() |
Bram Moolenaar | f73d3bc | 2016-04-11 21:55:15 +0200 | [diff] [blame] | 9 | let s:func_in_tabline_called = 1 |
| 10 | try |
| 11 | call eval('unknown expression') |
| 12 | catch |
| 13 | endtry |
| 14 | return '' |
Bram Moolenaar | e12bab3 | 2019-01-08 22:02:56 +0100 | [diff] [blame] | 15 | endfunc |
Bram Moolenaar | f73d3bc | 2016-04-11 21:55:15 +0200 | [diff] [blame] | 16 | |
Bram Moolenaar | e12bab3 | 2019-01-08 22:02:56 +0100 | [diff] [blame] | 17 | func TablineWithError() |
Bram Moolenaar | f73d3bc | 2016-04-11 21:55:15 +0200 | [diff] [blame] | 18 | let s:func_in_tabline_called = 1 |
| 19 | call eval('unknown expression') |
| 20 | return '' |
Bram Moolenaar | e12bab3 | 2019-01-08 22:02:56 +0100 | [diff] [blame] | 21 | endfunc |
Bram Moolenaar | f73d3bc | 2016-04-11 21:55:15 +0200 | [diff] [blame] | 22 | |
Bram Moolenaar | e12bab3 | 2019-01-08 22:02:56 +0100 | [diff] [blame] | 23 | func Test_caught_error_in_tabline() |
Bram Moolenaar | 73cd8fb | 2016-04-11 22:49:03 +0200 | [diff] [blame] | 24 | if has('gui') |
| 25 | set guioptions-=e |
| 26 | endif |
Bram Moolenaar | f73d3bc | 2016-04-11 21:55:15 +0200 | [diff] [blame] | 27 | let showtabline_save = &showtabline |
| 28 | set showtabline=2 |
| 29 | let s:func_in_tabline_called = 0 |
| 30 | let tabline = '%{TablineWithCaughtError()}' |
| 31 | let &tabline = tabline |
| 32 | redraw! |
| 33 | call assert_true(s:func_in_tabline_called) |
| 34 | call assert_equal(tabline, &tabline) |
| 35 | set tabline= |
| 36 | let &showtabline = showtabline_save |
Bram Moolenaar | e12bab3 | 2019-01-08 22:02:56 +0100 | [diff] [blame] | 37 | endfunc |
Bram Moolenaar | f73d3bc | 2016-04-11 21:55:15 +0200 | [diff] [blame] | 38 | |
Bram Moolenaar | e12bab3 | 2019-01-08 22:02:56 +0100 | [diff] [blame] | 39 | func Test_tabline_will_be_disabled_with_error() |
Bram Moolenaar | 73cd8fb | 2016-04-11 22:49:03 +0200 | [diff] [blame] | 40 | if has('gui') |
| 41 | set guioptions-=e |
| 42 | endif |
Bram Moolenaar | f73d3bc | 2016-04-11 21:55:15 +0200 | [diff] [blame] | 43 | let showtabline_save = &showtabline |
| 44 | set showtabline=2 |
| 45 | let s:func_in_tabline_called = 0 |
| 46 | let tabline = '%{TablineWithError()}' |
| 47 | try |
| 48 | let &tabline = tabline |
| 49 | redraw! |
| 50 | catch |
| 51 | endtry |
| 52 | call assert_true(s:func_in_tabline_called) |
| 53 | call assert_equal('', &tabline) |
| 54 | set tabline= |
| 55 | let &showtabline = showtabline_save |
Bram Moolenaar | e12bab3 | 2019-01-08 22:02:56 +0100 | [diff] [blame] | 56 | endfunc |
| 57 | |
| 58 | func Test_redrawtabline() |
| 59 | if has('gui') |
| 60 | set guioptions-=e |
| 61 | endif |
| 62 | let showtabline_save = &showtabline |
| 63 | set showtabline=2 |
| 64 | set tabline=%{bufnr('$')} |
| 65 | edit Xtabline1 |
| 66 | edit Xtabline2 |
| 67 | redraw |
| 68 | call assert_match(bufnr('$') . '', Screenline(1)) |
| 69 | au BufAdd * redrawtabline |
| 70 | badd Xtabline3 |
| 71 | call assert_match(bufnr('$') . '', Screenline(1)) |
| 72 | |
| 73 | set tabline= |
| 74 | let &showtabline = showtabline_save |
| 75 | au! Bufadd |
| 76 | endfunc |
Bram Moolenaar | 832adf9 | 2020-06-25 19:01:36 +0200 | [diff] [blame] | 77 | |
| 78 | " Test for the "%T" and "%X" flags in the 'tabline' option |
| 79 | func MyTabLine() |
| 80 | let s = '' |
| 81 | for i in range(tabpagenr('$')) |
| 82 | " set the tab page number (for mouse clicks) |
| 83 | let s .= '%' . (i + 1) . 'T' |
| 84 | |
| 85 | " the label is made by MyTabLabel() |
| 86 | let s .= ' %{MyTabLabel(' . (i + 1) . ')} ' |
| 87 | endfor |
| 88 | |
| 89 | " after the last tab fill with TabLineFill and reset tab page nr |
| 90 | let s .= '%T' |
| 91 | |
| 92 | " right-align the label to close the current tab page |
| 93 | if tabpagenr('$') > 1 |
| 94 | let s .= '%=%Xclose' |
| 95 | endif |
| 96 | |
| 97 | return s |
| 98 | endfunc |
| 99 | |
| 100 | func MyTabLabel(n) |
| 101 | let buflist = tabpagebuflist(a:n) |
| 102 | let winnr = tabpagewinnr(a:n) |
| 103 | return bufname(buflist[winnr - 1]) |
| 104 | endfunc |
| 105 | |
| 106 | func Test_tabline_flags() |
| 107 | if has('gui') |
| 108 | set guioptions-=e |
| 109 | endif |
| 110 | set tabline=%!MyTabLine() |
| 111 | edit Xtabline1 |
| 112 | tabnew Xtabline2 |
| 113 | redrawtabline |
| 114 | call assert_match('^ Xtabline1 Xtabline2\s\+close$', Screenline(1)) |
| 115 | set tabline= |
| 116 | %bw! |
| 117 | endfunc |
| 118 | |
Bram Moolenaar | f56c95f | 2020-07-21 19:25:18 +0200 | [diff] [blame] | 119 | function EmptyTabname() |
| 120 | return "" |
| 121 | endfunction |
| 122 | |
| 123 | function MakeTabLine() abort |
| 124 | let titles = map(range(1, tabpagenr('$')), '"%( %" . v:val . "T%{EmptyTabname()}%T %)"') |
| 125 | let sep = 'あ' |
| 126 | let tabpages = join(titles, sep) |
| 127 | return tabpages .. sep .. '%=%999X X' |
| 128 | endfunction |
| 129 | |
| 130 | func Test_tabline_empty_group() |
| 131 | " this was reading invalid memory |
| 132 | set tabline=%!MakeTabLine() |
| 133 | tabnew |
| 134 | redraw! |
| 135 | |
| 136 | tabclose |
| 137 | set tabline= |
| 138 | endfunc |
| 139 | |
Brandon Richardson | a493b65 | 2022-02-19 11:45:03 +0000 | [diff] [blame] | 140 | " When there are exactly 20 tabline format items (the exact size of the |
| 141 | " initial tabline items array), test that we don't write beyond the size |
| 142 | " of the array. |
| 143 | func Test_tabline_20_format_items_no_overrun() |
| 144 | set showtabline=2 |
Bram Moolenaar | f56c95f | 2020-07-21 19:25:18 +0200 | [diff] [blame] | 145 | |
Brandon Richardson | a493b65 | 2022-02-19 11:45:03 +0000 | [diff] [blame] | 146 | let tabline = repeat('%#StatColorHi2#', 20) |
| 147 | let &tabline = tabline |
| 148 | redrawtabline |
| 149 | |
| 150 | set showtabline& tabline& |
| 151 | endfunc |
Bram Moolenaar | f56c95f | 2020-07-21 19:25:18 +0200 | [diff] [blame] | 152 | |
Bram Moolenaar | 8052575 | 2022-08-24 19:27:45 +0100 | [diff] [blame] | 153 | func Test_mouse_click_in_tab() |
| 154 | " This used to crash because TabPageIdxs[] was not initialized |
| 155 | let lines =<< trim END |
| 156 | tabnew |
| 157 | set mouse=a |
| 158 | exe "norm \<LeftMouse>" |
| 159 | END |
Bram Moolenaar | c4860bd | 2022-10-15 20:52:26 +0100 | [diff] [blame] | 160 | call writefile(lines, 'Xclickscript', 'D') |
Bram Moolenaar | 8052575 | 2022-08-24 19:27:45 +0100 | [diff] [blame] | 161 | call RunVim([], [], "-e -s -S Xclickscript -c qa") |
Bram Moolenaar | 8052575 | 2022-08-24 19:27:45 +0100 | [diff] [blame] | 162 | endfunc |
| 163 | |
Luuk van Baal | ba936f6 | 2022-12-15 13:15:39 +0000 | [diff] [blame] | 164 | func Test_tabline_showcmd() |
| 165 | CheckScreendump |
| 166 | |
| 167 | let lines =<< trim END |
| 168 | set showtabline=2 |
| 169 | set showcmdloc=tabline |
| 170 | call setline(1, ['a', 'b', 'c']) |
| 171 | END |
| 172 | call writefile(lines, 'XTest_tabline', 'D') |
| 173 | |
| 174 | let buf = RunVimInTerminal('-S XTest_tabline', {'rows': 6}) |
| 175 | |
| 176 | call feedkeys("\<C-V>Gl", "xt") |
| 177 | call VerifyScreenDump(buf, 'Test_tabline_showcmd_1', {}) |
| 178 | |
| 179 | call feedkeys("\<Esc>1234", "xt") |
| 180 | call VerifyScreenDump(buf, 'Test_tabline_showcmd_2', {}) |
| 181 | endfunc |
Bram Moolenaar | 8052575 | 2022-08-24 19:27:45 +0100 | [diff] [blame] | 182 | |
Bram Moolenaar | 832adf9 | 2020-06-25 19:01:36 +0200 | [diff] [blame] | 183 | " vim: shiftwidth=2 sts=2 expandtab |