test_number.vim (9104B)
1 " Test for 'number' and 'relativenumber' 2 3 source check.vim 4 source view_util.vim 5 6 source screendump.vim 7 8 func s:screen_lines(start, end) abort 9 return ScreenLines([a:start, a:end], 8) 10 endfunc 11 12 func s:compare_lines(expect, actual) 13 call assert_equal(a:expect, a:actual) 14 endfunc 15 16 func s:test_windows(h, w) abort 17 call NewWindow(a:h, a:w) 18 endfunc 19 20 func s:close_windows() abort 21 call CloseWindow() 22 endfunc 23 24 func s:validate_cursor() abort 25 " update skipcol. 26 " wincol(): 27 " f_wincol 28 " -> validate_cursor 29 " -> curs_columns 30 call wincol() 31 endfunc 32 33 func Test_set_options() 34 set nu rnu 35 call assert_equal(1, &nu) 36 call assert_equal(1, &rnu) 37 38 call s:test_windows(10, 20) 39 call assert_equal(1, &nu) 40 call assert_equal(1, &rnu) 41 call s:close_windows() 42 43 set nu& rnu& 44 endfunc 45 46 func Test_set_global_and_local() 47 " setlocal must NOT reset the other global value 48 set nonu nornu 49 setglobal nu 50 setlocal rnu 51 call assert_equal(1, &g:nu) 52 53 set nonu nornu 54 setglobal rnu 55 setlocal nu 56 call assert_equal(1, &g:rnu) 57 58 " setglobal MUST reset the other global value 59 set nonu nornu 60 setglobal nu 61 setglobal rnu 62 call assert_equal(1, &g:nu) 63 64 set nonu nornu 65 setglobal rnu 66 setglobal nu 67 call assert_equal(1, &g:rnu) 68 69 " set MUST reset the other global value 70 set nonu nornu 71 set nu 72 set rnu 73 call assert_equal(1, &g:nu) 74 75 set nonu nornu 76 set rnu 77 set nu 78 call assert_equal(1, &g:rnu) 79 80 set nu& rnu& 81 endfunc 82 83 func Test_number() 84 call s:test_windows(10, 20) 85 call setline(1, ["abcdefghij", "klmnopqrst", "uvwxyzABCD", "EFGHIJKLMN", "OPQRSTUVWX", "YZ"]) 86 setl number 87 let lines = s:screen_lines(1, 4) 88 let expect = [ 89 \ " 1 abcd", 90 \ " 2 klmn", 91 \ " 3 uvwx", 92 \ " 4 EFGH", 93 \ ] 94 call s:compare_lines(expect, lines) 95 call s:close_windows() 96 endfunc 97 98 func Test_relativenumber() 99 call s:test_windows(10, 20) 100 call setline(1, ["abcdefghij", "klmnopqrst", "uvwxyzABCD", "EFGHIJKLMN", "OPQRSTUVWX", "YZ"]) 101 3 102 setl relativenumber 103 let lines = s:screen_lines(1, 6) 104 let expect = [ 105 \ " 2 abcd", 106 \ " 1 klmn", 107 \ " 0 uvwx", 108 \ " 1 EFGH", 109 \ " 2 OPQR", 110 \ " 3 YZ ", 111 \ ] 112 call s:compare_lines(expect, lines) 113 call s:close_windows() 114 endfunc 115 116 func Test_number_with_relativenumber() 117 call s:test_windows(10, 20) 118 call setline(1, ["abcdefghij", "klmnopqrst", "uvwxyzABCD", "EFGHIJKLMN", "OPQRSTUVWX", "YZ"]) 119 4 120 setl number relativenumber 121 let lines = s:screen_lines(1, 6) 122 let expect = [ 123 \ " 3 abcd", 124 \ " 2 klmn", 125 \ " 1 uvwx", 126 \ "4 EFGH", 127 \ " 1 OPQR", 128 \ " 2 YZ ", 129 \ ] 130 call s:compare_lines(expect, lines) 131 call s:close_windows() 132 endfunc 133 134 func Test_number_with_linewrap1() 135 call s:test_windows(3, 20) 136 normal! 61ia 137 setl number wrap 138 call s:validate_cursor() 139 let lines = s:screen_lines(1, 3) 140 let expect = [ 141 \ "<<< aaaa", 142 \ " aaaa", 143 \ " aaaa", 144 \ ] 145 call s:compare_lines(expect, lines) 146 call s:close_windows() 147 endfunc 148 149 func Test_number_with_linewrap2() 150 call s:test_windows(3, 20) 151 normal! 61ia 152 setl number wrap 153 call s:validate_cursor() 154 0 155 call s:validate_cursor() 156 let lines = s:screen_lines(1, 3) 157 let expect = [ 158 \ " 1 aaaa", 159 \ " aaaa", 160 \ " aaaa", 161 \ ] 162 call s:compare_lines(expect, lines) 163 call s:close_windows() 164 endfunc 165 166 func Test_number_with_linewrap3() 167 call s:test_windows(4, 20) 168 normal! 81ia 169 setl number wrap 170 call s:validate_cursor() 171 setl nonumber 172 call s:validate_cursor() 173 let lines = s:screen_lines(1, 4) 174 let expect = [ 175 \ "<<<aaaaa", 176 \ "aaaaaaaa", 177 \ "aaaaaaaa", 178 \ "a ", 179 \ ] 180 call s:compare_lines(expect, lines) 181 call s:close_windows() 182 endfunc 183 184 func Test_numberwidth() 185 call s:test_windows(10, 20) 186 call setline(1, repeat(['aaaa'], 10)) 187 setl number numberwidth=6 188 let lines = s:screen_lines(1, 3) 189 let expect = [ 190 \ " 1 aa", 191 \ " 2 aa", 192 \ " 3 aa", 193 \ ] 194 call s:compare_lines(expect, lines) 195 196 set relativenumber 197 let lines = s:screen_lines(1, 3) 198 let expect = [ 199 \ "1 aa", 200 \ " 1 aa", 201 \ " 2 aa", 202 \ ] 203 call s:compare_lines(expect, lines) 204 205 set nonumber 206 let lines = s:screen_lines(1, 3) 207 let expect = [ 208 \ " 0 aa", 209 \ " 1 aa", 210 \ " 2 aa", 211 \ ] 212 call s:compare_lines(expect, lines) 213 call s:close_windows() 214 endfunc 215 216 func Test_numberwidth_adjusted() 217 call s:test_windows(10, 20) 218 call setline(1, repeat(['aaaa'], 10000)) 219 setl number numberwidth=4 220 let lines = s:screen_lines(1, 3) 221 let expect = [ 222 \ " 1 aa", 223 \ " 2 aa", 224 \ " 3 aa", 225 \ ] 226 call s:compare_lines(expect, lines) 227 228 $ 229 let lines = s:screen_lines(8, 10) 230 let expect = [ 231 \ " 9998 aa", 232 \ " 9999 aa", 233 \ "10000 aa", 234 \ ] 235 call s:compare_lines(expect, lines) 236 237 setl relativenumber 238 let lines = s:screen_lines(8, 10) 239 let expect = [ 240 \ " 2 aa", 241 \ " 1 aa", 242 \ "10000 aa", 243 \ ] 244 call s:compare_lines(expect, lines) 245 246 setl nonumber 247 let lines = s:screen_lines(8, 10) 248 let expect = [ 249 \ " 2 aaaa", 250 \ " 1 aaaa", 251 \ " 0 aaaa", 252 \ ] 253 call s:compare_lines(expect, lines) 254 call s:close_windows() 255 endfunc 256 257 " This was causing a memcheck error 258 func Test_relativenumber_uninitialised() 259 new 260 set rnu 261 call setline(1, ["a", "b"]) 262 redraw 263 call feedkeys("j", 'xt') 264 redraw 265 bwipe! 266 endfunc 267 268 func Test_relativenumber_colors() 269 CheckScreendump 270 271 let lines =<< trim [CODE] 272 call setline(1, range(200)) 273 111 274 set number relativenumber 275 hi LineNr ctermfg=red 276 [CODE] 277 call writefile(lines, 'XTest_relnr', 'D') 278 279 let buf = RunVimInTerminal('-S XTest_relnr', {'rows': 10, 'cols': 50}) 280 " Default colors 281 call VerifyScreenDump(buf, 'Test_relnr_colors_1', {}) 282 283 call term_sendkeys(buf, ":hi LineNrAbove ctermfg=blue\<CR>:\<CR>") 284 call VerifyScreenDump(buf, 'Test_relnr_colors_2', {}) 285 286 call term_sendkeys(buf, ":hi LineNrBelow ctermfg=green\<CR>:\<CR>") 287 call VerifyScreenDump(buf, 'Test_relnr_colors_3', {}) 288 289 call term_sendkeys(buf, ":hi clear LineNrAbove\<CR>") 290 call VerifyScreenDump(buf, 'Test_relnr_colors_4', {}) 291 292 " clean up 293 call StopVimInTerminal(buf) 294 endfunc 295 296 func Test_relativenumber_colors_wrapped() 297 CheckScreendump 298 299 let lines =<< trim [CODE] 300 set display=lastline scrolloff=0 301 call setline(1, range(200)->map('v:val->string()->repeat(40)')) 302 111 303 set number relativenumber 304 hi LineNr ctermbg=red ctermfg=black 305 hi LineNrAbove ctermbg=blue ctermfg=black 306 hi LineNrBelow ctermbg=green ctermfg=black 307 [CODE] 308 call writefile(lines, 'XTest_relnr_wrap', 'D') 309 310 let buf = RunVimInTerminal('-S XTest_relnr_wrap', {'rows': 20, 'cols': 50}) 311 312 call VerifyScreenDump(buf, 'Test_relnr_colors_wrapped_1', {}) 313 call term_sendkeys(buf, "k") 314 call VerifyScreenDump(buf, 'Test_relnr_colors_wrapped_2', {}) 315 call term_sendkeys(buf, "2j") 316 call VerifyScreenDump(buf, 'Test_relnr_colors_wrapped_3', {}) 317 call term_sendkeys(buf, "2j") 318 call VerifyScreenDump(buf, 'Test_relnr_colors_wrapped_4', {}) 319 call term_sendkeys(buf, "k") 320 call VerifyScreenDump(buf, 'Test_relnr_colors_wrapped_5', {}) 321 322 " clean up 323 call StopVimInTerminal(buf) 324 endfunc 325 326 func Test_relativenumber_callback() 327 CheckScreendump 328 CheckFeature timers 329 330 let lines =<< trim END 331 call setline(1, ['aaaaa', 'bbbbb', 'ccccc', 'ddddd']) 332 set relativenumber 333 call cursor(4, 1) 334 335 func Func(timer) 336 call cursor(1, 1) 337 endfunc 338 339 call timer_start(300, 'Func') 340 END 341 call writefile(lines, 'Xrnu_timer', 'D') 342 343 let buf = RunVimInTerminal('-S Xrnu_timer', #{rows: 8}) 344 call TermWait(buf, 310) 345 call VerifyScreenDump(buf, 'Test_relativenumber_callback_1', {}) 346 347 call StopVimInTerminal(buf) 348 endfunc 349 350 " Test that line numbers below inserted/deleted lines are updated. 351 func Test_number_insert_delete_lines() 352 CheckScreendump 353 354 let lines =<< trim END 355 call setline(1, range(1, 7)) 356 set number 357 call cursor(2, 1) 358 END 359 call writefile(lines, 'Xnumber_insert_delete_lines', 'D') 360 361 let buf = RunVimInTerminal('-S Xnumber_insert_delete_lines', #{rows: 8}) 362 call VerifyScreenDump(buf, 'Test_number_insert_delete_lines_1', {}) 363 call term_sendkeys(buf, "dd") 364 call VerifyScreenDump(buf, 'Test_number_insert_delete_lines_2', {}) 365 call term_sendkeys(buf, "P") 366 call VerifyScreenDump(buf, 'Test_number_insert_delete_lines_1', {}) 367 call term_sendkeys(buf, "2dd") 368 call VerifyScreenDump(buf, 'Test_number_insert_delete_lines_3', {}) 369 call term_sendkeys(buf, "P") 370 call VerifyScreenDump(buf, 'Test_number_insert_delete_lines_1', {}) 371 372 call StopVimInTerminal(buf) 373 endfunc 374 375 " Test for displaying line numbers with 'rightleft' 376 func Test_number_rightleft() 377 CheckFeature rightleft 378 new 379 setlocal number 380 setlocal rightleft 381 call setline(1, range(1, 1000)) 382 normal! 9Gzt 383 redraw! 384 call assert_match('^\s\+9 9$', Screenline(1)) 385 normal! 10Gzt 386 redraw! 387 call assert_match('^\s\+01 10$', Screenline(1)) 388 normal! 100Gzt 389 redraw! 390 call assert_match('^\s\+001 100$', Screenline(1)) 391 normal! 1000Gzt 392 redraw! 393 call assert_match('^\s\+0001 1000$', Screenline(1)) 394 bw! 395 endfunc 396 397 " This used to cause a divide by zero 398 func Test_number_no_text_virtual_edit() 399 vnew 400 call setline(1, ['line one', 'line two']) 401 set number virtualedit=all 402 normal w 403 4wincmd | 404 normal j 405 bwipe! 406 endfunc 407 408 " vim: shiftwidth=2 sts=2 expandtab