xref: /vim-8.2.3635/src/testdir/test_getvar.vim (revision 577fadfc)
1" Tests for getwinvar(), gettabvar() and gettabwinvar().
2func Test_var()
3  " Use strings to test for memory leaks.  First, check that in an empty
4  " window, gettabvar() returns the correct value
5  let t:testvar='abcd'
6  call assert_equal('abcd', gettabvar(1, 'testvar'))
7  call assert_equal('abcd', gettabvar(1, 'testvar'))
8
9  " test for getwinvar()
10  let w:var_str = "Dance"
11  let def_str = "Chance"
12  call assert_equal('Dance', getwinvar(1, 'var_str'))
13  call assert_equal('Dance', getwinvar(1, 'var_str', def_str))
14  call assert_equal({'var_str': 'Dance'}, getwinvar(1, ''))
15  call assert_equal({'var_str': 'Dance'}, getwinvar(1, '', def_str))
16  unlet w:var_str
17  call assert_equal('Chance', getwinvar(1, 'var_str', def_str))
18  call assert_equal({}, getwinvar(1, ''))
19  call assert_equal({}, getwinvar(1, '', def_str))
20  call assert_equal('', getwinvar(9, ''))
21  call assert_equal('Chance', getwinvar(9, '', def_str))
22  call assert_equal(0, getwinvar(1, '&nu'))
23  call assert_equal(0, getwinvar(1, '&nu', 1))
24  unlet def_str
25
26  " test for gettabvar()
27  tabnew
28  tabnew
29  let t:var_list = [1, 2, 3]
30  let t:other = 777
31  let def_list = [4, 5, 6, 7]
32  tabrewind
33  call assert_equal([1, 2, 3], gettabvar(3, 'var_list'))
34  call assert_equal([1, 2, 3], gettabvar(3, 'var_list', def_list))
35  call assert_equal({'var_list': [1, 2, 3], 'other': 777}, gettabvar(3, ''))
36  call assert_equal({'var_list': [1, 2, 3], 'other': 777},
37					\ gettabvar(3, '', def_list))
38
39  tablast
40  unlet t:var_list
41  tabrewind
42  call assert_equal([4, 5, 6, 7], gettabvar(3, 'var_list', def_list))
43  call assert_equal('', gettabvar(9, ''))
44  call assert_equal([4, 5, 6, 7], gettabvar(9, '', def_list))
45  call assert_equal('', gettabvar(3, '&nu'))
46  call assert_equal([4, 5, 6, 7], gettabvar(3, '&nu', def_list))
47  unlet def_list
48  tabonly
49
50  " test for gettabwinvar()
51  tabnew
52  tabnew
53  tabprev
54  split
55  split
56  wincmd w
57  vert split
58  wincmd w
59  let w:var_dict = {'dict': 'tabwin'}
60  let def_dict = {'dict2': 'newval'}
61  wincmd b
62  tabrewind
63  call assert_equal({'dict': 'tabwin'}, gettabwinvar(2, 3, 'var_dict'))
64  call assert_equal({'dict': 'tabwin'},
65				\ gettabwinvar(2, 3, 'var_dict', def_dict))
66  call assert_equal({'var_dict': {'dict': 'tabwin'}}, gettabwinvar(2, 3, ''))
67  call assert_equal({'var_dict': {'dict': 'tabwin'}},
68				\ gettabwinvar(2, 3, '', def_dict))
69
70  tabnext
71  3wincmd w
72  unlet w:var_dict
73  tabrewind
74  call assert_equal({'dict2': 'newval'},
75				\ gettabwinvar(2, 3, 'var_dict', def_dict))
76  call assert_equal({}, gettabwinvar(2, 3, ''))
77  call assert_equal({}, gettabwinvar(2, 3, '', def_dict))
78  call assert_equal("", gettabwinvar(2, 9, ''))
79  call assert_equal({'dict2': 'newval'}, gettabwinvar(2, 9, '', def_dict))
80  call assert_equal('', gettabwinvar(9, 3, ''))
81  call assert_equal({'dict2': 'newval'}, gettabwinvar(9, 3, '', def_dict))
82
83  unlet def_dict
84
85  call assert_equal('', gettabwinvar(2, 3, '&nux'))
86  call assert_equal(1, gettabwinvar(2, 3, '&nux', 1))
87  tabonly
88endfunc
89
90" It was discovered that "gettabvar()" would fail if called from within the
91" tabline when the user closed a window.  This test confirms the fix.
92func Test_gettabvar_in_tabline()
93  let t:var_str = 'value'
94
95  set tabline=%{assert_equal('value',gettabvar(1,'var_str'))}
96  set showtabline=2
97
98  " Simulate the user opening a split (which becomes window #1) and then
99  " closing the split, which triggers the redrawing of the tabline.
100  leftabove split
101  redrawstatus!
102  close
103  redrawstatus!
104endfunc
105