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