xref: /vim-8.2.3635/src/testdir/test_tabline.vim (revision 6d91bcb4)
1*6d91bcb4SBram Moolenaar" Test for tabline
2e12bab31SBram Moolenaar
3e12bab31SBram Moolenaarsource shared.vim
4e12bab31SBram Moolenaar
5e12bab31SBram Moolenaarfunc TablineWithCaughtError()
6f73d3bc2SBram Moolenaar  let s:func_in_tabline_called = 1
7f73d3bc2SBram Moolenaar  try
8f73d3bc2SBram Moolenaar    call eval('unknown expression')
9f73d3bc2SBram Moolenaar  catch
10f73d3bc2SBram Moolenaar  endtry
11f73d3bc2SBram Moolenaar  return ''
12e12bab31SBram Moolenaarendfunc
13f73d3bc2SBram Moolenaar
14e12bab31SBram Moolenaarfunc TablineWithError()
15f73d3bc2SBram Moolenaar  let s:func_in_tabline_called = 1
16f73d3bc2SBram Moolenaar  call eval('unknown expression')
17f73d3bc2SBram Moolenaar  return ''
18e12bab31SBram Moolenaarendfunc
19f73d3bc2SBram Moolenaar
20e12bab31SBram Moolenaarfunc Test_caught_error_in_tabline()
2173cd8fb3SBram Moolenaar  if has('gui')
2273cd8fb3SBram Moolenaar    set guioptions-=e
2373cd8fb3SBram Moolenaar  endif
24f73d3bc2SBram Moolenaar  let showtabline_save = &showtabline
25f73d3bc2SBram Moolenaar  set showtabline=2
26f73d3bc2SBram Moolenaar  let s:func_in_tabline_called = 0
27f73d3bc2SBram Moolenaar  let tabline = '%{TablineWithCaughtError()}'
28f73d3bc2SBram Moolenaar  let &tabline = tabline
29f73d3bc2SBram Moolenaar  redraw!
30f73d3bc2SBram Moolenaar  call assert_true(s:func_in_tabline_called)
31f73d3bc2SBram Moolenaar  call assert_equal(tabline, &tabline)
32f73d3bc2SBram Moolenaar  set tabline=
33f73d3bc2SBram Moolenaar  let &showtabline = showtabline_save
34e12bab31SBram Moolenaarendfunc
35f73d3bc2SBram Moolenaar
36e12bab31SBram Moolenaarfunc Test_tabline_will_be_disabled_with_error()
3773cd8fb3SBram Moolenaar  if has('gui')
3873cd8fb3SBram Moolenaar    set guioptions-=e
3973cd8fb3SBram Moolenaar  endif
40f73d3bc2SBram Moolenaar  let showtabline_save = &showtabline
41f73d3bc2SBram Moolenaar  set showtabline=2
42f73d3bc2SBram Moolenaar  let s:func_in_tabline_called = 0
43f73d3bc2SBram Moolenaar  let tabline = '%{TablineWithError()}'
44f73d3bc2SBram Moolenaar  try
45f73d3bc2SBram Moolenaar    let &tabline = tabline
46f73d3bc2SBram Moolenaar    redraw!
47f73d3bc2SBram Moolenaar  catch
48f73d3bc2SBram Moolenaar  endtry
49f73d3bc2SBram Moolenaar  call assert_true(s:func_in_tabline_called)
50f73d3bc2SBram Moolenaar  call assert_equal('', &tabline)
51f73d3bc2SBram Moolenaar  set tabline=
52f73d3bc2SBram Moolenaar  let &showtabline = showtabline_save
53e12bab31SBram Moolenaarendfunc
54e12bab31SBram Moolenaar
55e12bab31SBram Moolenaarfunc Test_redrawtabline()
56e12bab31SBram Moolenaar  if has('gui')
57e12bab31SBram Moolenaar    set guioptions-=e
58e12bab31SBram Moolenaar  endif
59e12bab31SBram Moolenaar  let showtabline_save = &showtabline
60e12bab31SBram Moolenaar  set showtabline=2
61e12bab31SBram Moolenaar  set tabline=%{bufnr('$')}
62e12bab31SBram Moolenaar  edit Xtabline1
63e12bab31SBram Moolenaar  edit Xtabline2
64e12bab31SBram Moolenaar  redraw
65e12bab31SBram Moolenaar  call assert_match(bufnr('$') . '', Screenline(1))
66e12bab31SBram Moolenaar  au BufAdd * redrawtabline
67e12bab31SBram Moolenaar  badd Xtabline3
68e12bab31SBram Moolenaar  call assert_match(bufnr('$') . '', Screenline(1))
69e12bab31SBram Moolenaar
70e12bab31SBram Moolenaar  set tabline=
71e12bab31SBram Moolenaar  let &showtabline = showtabline_save
72e12bab31SBram Moolenaar  au! Bufadd
73e12bab31SBram Moolenaarendfunc
74832adf9bSBram Moolenaar
75832adf9bSBram Moolenaar" Test for the "%T" and "%X" flags in the 'tabline' option
76832adf9bSBram Moolenaarfunc MyTabLine()
77832adf9bSBram Moolenaar  let s = ''
78832adf9bSBram Moolenaar  for i in range(tabpagenr('$'))
79832adf9bSBram Moolenaar    " set the tab page number (for mouse clicks)
80832adf9bSBram Moolenaar    let s .= '%' . (i + 1) . 'T'
81832adf9bSBram Moolenaar
82832adf9bSBram Moolenaar    " the label is made by MyTabLabel()
83832adf9bSBram Moolenaar    let s .= ' %{MyTabLabel(' . (i + 1) . ')} '
84832adf9bSBram Moolenaar  endfor
85832adf9bSBram Moolenaar
86832adf9bSBram Moolenaar  " after the last tab fill with TabLineFill and reset tab page nr
87832adf9bSBram Moolenaar  let s .= '%T'
88832adf9bSBram Moolenaar
89832adf9bSBram Moolenaar  " right-align the label to close the current tab page
90832adf9bSBram Moolenaar  if tabpagenr('$') > 1
91832adf9bSBram Moolenaar    let s .= '%=%Xclose'
92832adf9bSBram Moolenaar  endif
93832adf9bSBram Moolenaar
94832adf9bSBram Moolenaar  return s
95832adf9bSBram Moolenaarendfunc
96832adf9bSBram Moolenaar
97832adf9bSBram Moolenaarfunc MyTabLabel(n)
98832adf9bSBram Moolenaar  let buflist = tabpagebuflist(a:n)
99832adf9bSBram Moolenaar  let winnr = tabpagewinnr(a:n)
100832adf9bSBram Moolenaar  return bufname(buflist[winnr - 1])
101832adf9bSBram Moolenaarendfunc
102832adf9bSBram Moolenaar
103832adf9bSBram Moolenaarfunc Test_tabline_flags()
104832adf9bSBram Moolenaar  if has('gui')
105832adf9bSBram Moolenaar    set guioptions-=e
106832adf9bSBram Moolenaar  endif
107832adf9bSBram Moolenaar  set tabline=%!MyTabLine()
108832adf9bSBram Moolenaar  edit Xtabline1
109832adf9bSBram Moolenaar  tabnew Xtabline2
110832adf9bSBram Moolenaar  redrawtabline
111832adf9bSBram Moolenaar  call assert_match('^ Xtabline1  Xtabline2\s\+close$', Screenline(1))
112832adf9bSBram Moolenaar  set tabline=
113832adf9bSBram Moolenaar  %bw!
114832adf9bSBram Moolenaarendfunc
115832adf9bSBram Moolenaar
116f56c95fdSBram Moolenaarfunction EmptyTabname()
117f56c95fdSBram Moolenaar  return ""
118f56c95fdSBram Moolenaarendfunction
119f56c95fdSBram Moolenaar
120f56c95fdSBram Moolenaarfunction MakeTabLine() abort
121f56c95fdSBram Moolenaar  let titles = map(range(1, tabpagenr('$')), '"%( %" . v:val . "T%{EmptyTabname()}%T %)"')
122f56c95fdSBram Moolenaar  let sep = 'あ'
123f56c95fdSBram Moolenaar  let tabpages = join(titles, sep)
124f56c95fdSBram Moolenaar  return tabpages .. sep .. '%=%999X X'
125f56c95fdSBram Moolenaarendfunction
126f56c95fdSBram Moolenaar
127f56c95fdSBram Moolenaarfunc Test_tabline_empty_group()
128f56c95fdSBram Moolenaar  " this was reading invalid memory
129f56c95fdSBram Moolenaar  set tabline=%!MakeTabLine()
130f56c95fdSBram Moolenaar  tabnew
131f56c95fdSBram Moolenaar  redraw!
132f56c95fdSBram Moolenaar
133f56c95fdSBram Moolenaar  tabclose
134f56c95fdSBram Moolenaar  set tabline=
135f56c95fdSBram Moolenaarendfunc
136f56c95fdSBram Moolenaar
137f56c95fdSBram Moolenaar
138f56c95fdSBram Moolenaar
139832adf9bSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
140