test_retab.vim (7763B)
1 " Test :retab 2 3 source check.vim 4 5 func SetUp() 6 new 7 call setline(1, "\ta \t b c ") 8 endfunc 9 10 func TearDown() 11 bwipe! 12 endfunc 13 14 func Retab(bang, n, subopt='', test_line='') 15 let l:old_tabstop = &tabstop 16 let l:old_line = getline(1) 17 if a:test_line != '' 18 call setline(1, a:test_line) 19 endif 20 exe "retab" . a:bang . ' ' . a:subopt . ' ' . a:n 21 let l:line = getline(1) 22 call setline(1, l:old_line) 23 if a:n > 0 24 " :retab changes 'tabstop' to n with argument n > 0. 25 call assert_equal(a:n, &tabstop) 26 exe 'set tabstop=' . l:old_tabstop 27 else 28 " :retab does not change 'tabstop' with empty or n <= 0. 29 call assert_equal(l:old_tabstop, &tabstop) 30 endif 31 return l:line 32 endfunc 33 34 func Test_retab() 35 set tabstop=8 noexpandtab 36 call assert_equal("\ta\t b c ", Retab('', '')) 37 call assert_equal("\ta\t b c ", Retab('', 0)) 38 call assert_equal("\ta\t b c ", Retab('', 8)) 39 call assert_equal("\ta\t b\t c\t ", Retab('!', '')) 40 call assert_equal("\ta\t b\t c\t ", Retab('!', 0)) 41 call assert_equal("\ta\t b\t c\t ", Retab('!', 8)) 42 43 call assert_equal("\t\ta\t\t\tb c ", Retab('', 4)) 44 call assert_equal("\t\ta\t\t\tb\t\t c\t ", Retab('!', 4)) 45 46 call assert_equal(" a\t\tb c ", Retab('', 10)) 47 call assert_equal(" a\t\tb c ", Retab('!', 10)) 48 49 set tabstop=8 expandtab 50 call assert_equal(" a b c ", Retab('', '')) 51 call assert_equal(" a b c ", Retab('', 0)) 52 call assert_equal(" a b c ", Retab('', 8)) 53 call assert_equal(" a b c ", Retab('!', '')) 54 call assert_equal(" a b c ", Retab('!', 0)) 55 call assert_equal(" a b c ", Retab('!', 8)) 56 57 call assert_equal(" a b c ", Retab(' ', 4)) 58 call assert_equal(" a b c ", Retab('!', 4)) 59 60 call assert_equal(" a b c ", Retab(' ', 10)) 61 call assert_equal(" a b c ", Retab('!', 10)) 62 63 set tabstop=4 noexpandtab 64 call assert_equal("\ta\t\tb c ", Retab('', '')) 65 call assert_equal("\ta\t\tb\t\t c\t ", Retab('!', '')) 66 call assert_equal("\t a\t\t\tb c ", Retab('', 3)) 67 call assert_equal("\t a\t\t\tb\t\t\tc\t ", Retab('!', 3)) 68 call assert_equal(" a\t b c ", Retab('', 5)) 69 call assert_equal(" a\t b\t\t c\t ", Retab('!', 5)) 70 71 set tabstop=4 expandtab 72 call assert_equal(" a b c ", Retab('', '')) 73 call assert_equal(" a b c ", Retab('!', '')) 74 call assert_equal(" a b c ", Retab('', 3)) 75 call assert_equal(" a b c ", Retab('!', 3)) 76 call assert_equal(" a b c ", Retab('', 5)) 77 call assert_equal(" a b c ", Retab('!', 5)) 78 79 " Test with '-indentonly' 80 let so='-indentonly' 81 set tabstop=8 noexpandtab 82 call assert_equal("\ta \t b c ", Retab('', '', so)) 83 call assert_equal("\ta \t b c ", Retab('', 0, so)) 84 call assert_equal("\ta \t b c ", Retab('', 8, so)) 85 call assert_equal("\ta \t b c ", Retab('!', '', so)) 86 call assert_equal("\ta \t b c ", Retab('!', 0, so)) 87 call assert_equal("\ta \t b c ", Retab('!', 8, so)) 88 89 call assert_equal("\t\ta \t b c ", Retab('', 4, so)) 90 call assert_equal("\t\ta \t b c ", Retab('!', 4, so)) 91 92 call assert_equal(" a \t b c ", Retab('', 10, so)) 93 call assert_equal(" a \t b c ", Retab('!', 10, so)) 94 95 set tabstop=8 expandtab 96 call assert_equal(" a \t b c ", Retab('', '', so)) 97 call assert_equal(" a \t b c ", Retab('', 0, so)) 98 call assert_equal(" a \t b c ", Retab('', 8, so)) 99 call assert_equal(" a \t b c ", Retab('!', '', so)) 100 call assert_equal(" a \t b c ", Retab('!', 0, so)) 101 call assert_equal(" a \t b c ", Retab('!', 8, so)) 102 103 call assert_equal(" a \t b c ", Retab(' ', 4, so)) 104 call assert_equal(" a \t b c ", Retab('!', 4, so)) 105 106 call assert_equal(" a \t b c ", Retab(' ', 10, so)) 107 call assert_equal(" a \t b c ", Retab('!', 10, so)) 108 109 set tabstop=4 noexpandtab 110 call assert_equal("\ta \t b c ", Retab('', '', so)) 111 call assert_equal("\ta \t b c ", Retab('!', '', so)) 112 call assert_equal("\t a \t b c ", Retab('', 3, so)) 113 call assert_equal("\t a \t b c ", Retab('!', 3, so)) 114 call assert_equal(" a \t b c ", Retab('', 5, so)) 115 call assert_equal(" a \t b c ", Retab('!', 5, so)) 116 117 set tabstop=4 expandtab 118 call assert_equal(" a \t b c ", Retab('', '', so)) 119 call assert_equal(" a \t b c ", Retab('!', '', so)) 120 call assert_equal(" a \t b c ", Retab('', 3, so)) 121 call assert_equal(" a \t b c ", Retab('!', 3, so)) 122 call assert_equal(" a \t b c ", Retab('', 5, so)) 123 call assert_equal(" a \t b c ", Retab('!', 5, so)) 124 125 " Test for variations in leading whitespace 126 let so='-indentonly' 127 let test_line=" \t a\t " 128 set tabstop=8 noexpandtab 129 call assert_equal("\t a\t ", Retab('', '', so, test_line)) 130 call assert_equal("\t a\t ", Retab('!', '', so, test_line)) 131 set tabstop=8 expandtab 132 call assert_equal(" a\t ", Retab('', '', so, test_line)) 133 call assert_equal(" a\t ", Retab('!', '', so, test_line)) 134 135 let test_line=" a\t " 136 set tabstop=8 noexpandtab 137 call assert_equal(test_line, Retab('', '', so, test_line)) 138 call assert_equal("\t a\t ", Retab('!', '', so, test_line)) 139 set tabstop=8 expandtab 140 call assert_equal(test_line, Retab('', '', so, test_line)) 141 call assert_equal(test_line, Retab('!', '', so, test_line)) 142 143 set tabstop& expandtab& 144 endfunc 145 146 func Test_retab_error() 147 call assert_fails('retab -1', 'E487:') 148 call assert_fails('retab! -1', 'E487:') 149 call assert_fails('ret -1000', 'E487:') 150 call assert_fails('ret 10000', 'E475:') 151 call assert_fails('ret 80000000000000000000', 'E475:') 152 call assert_fails('retab! -in', 'E475:') 153 call assert_fails('retab! -indentonly2', 'E475:') 154 call assert_fails('retab! -indentonlyx 0', 'E475:') 155 endfunc 156 157 func RetabLoop() 158 while 1 159 set ts=4000 160 retab 4 161 endwhile 162 endfunc 163 164 func Test_retab_endless() 165 " inside try/catch we can catch the error message 166 call setline(1, "\t0\t") 167 let caught = 'no' 168 try 169 call RetabLoop() 170 catch /E1240:/ 171 let caught = v:exception 172 endtry 173 call assert_match('E1240:', caught) 174 175 set tabstop& 176 endfunc 177 178 func Test_nocatch_retab_endless() 179 " when not inside try/catch an interrupt is generated to get out of loops 180 call setline(1, "\t0\t") 181 call assert_fails('call RetabLoop()', ['E1240:', 'Interrupted']) 182 183 set tabstop& 184 endfunc 185 186 187 " vim: shiftwidth=2 sts=2 expandtab