" Test for 'number' and 'relativenumber' source check.vim source view_util.vim source screendump.vim func s:screen_lines(start, end) abort return ScreenLines([a:start, a:end], 8) endfunc func s:compare_lines(expect, actual) call assert_equal(a:expect, a:actual) endfunc func s:test_windows(h, w) abort call NewWindow(a:h, a:w) endfunc func s:close_windows() abort call CloseWindow() endfunc func s:validate_cursor() abort " update skipcol. " wincol(): " f_wincol " -> validate_cursor " -> curs_columns call wincol() endfunc func Test_set_options() set nu rnu call assert_equal(1, &nu) call assert_equal(1, &rnu) call s:test_windows(10, 20) call assert_equal(1, &nu) call assert_equal(1, &rnu) call s:close_windows() set nu& rnu& endfunc func Test_set_global_and_local() " setlocal must NOT reset the other global value set nonu nornu setglobal nu setlocal rnu call assert_equal(1, &g:nu) set nonu nornu setglobal rnu setlocal nu call assert_equal(1, &g:rnu) " setglobal MUST reset the other global value set nonu nornu setglobal nu setglobal rnu call assert_equal(1, &g:nu) set nonu nornu setglobal rnu setglobal nu call assert_equal(1, &g:rnu) " set MUST reset the other global value set nonu nornu set nu set rnu call assert_equal(1, &g:nu) set nonu nornu set rnu set nu call assert_equal(1, &g:rnu) set nu& rnu& endfunc func Test_number() call s:test_windows(10, 20) call setline(1, ["abcdefghij", "klmnopqrst", "uvwxyzABCD", "EFGHIJKLMN", "OPQRSTUVWX", "YZ"]) setl number let lines = s:screen_lines(1, 4) let expect = [ \ " 1 abcd", \ " 2 klmn", \ " 3 uvwx", \ " 4 EFGH", \ ] call s:compare_lines(expect, lines) call s:close_windows() endfunc func Test_relativenumber() call s:test_windows(10, 20) call setline(1, ["abcdefghij", "klmnopqrst", "uvwxyzABCD", "EFGHIJKLMN", "OPQRSTUVWX", "YZ"]) 3 setl relativenumber let lines = s:screen_lines(1, 6) let expect = [ \ " 2 abcd", \ " 1 klmn", \ " 0 uvwx", \ " 1 EFGH", \ " 2 OPQR", \ " 3 YZ ", \ ] call s:compare_lines(expect, lines) call s:close_windows() endfunc func Test_number_with_relativenumber() call s:test_windows(10, 20) call setline(1, ["abcdefghij", "klmnopqrst", "uvwxyzABCD", "EFGHIJKLMN", "OPQRSTUVWX", "YZ"]) 4 setl number relativenumber let lines = s:screen_lines(1, 6) let expect = [ \ " 3 abcd", \ " 2 klmn", \ " 1 uvwx", \ "4 EFGH", \ " 1 OPQR", \ " 2 YZ ", \ ] call s:compare_lines(expect, lines) call s:close_windows() endfunc func Test_number_with_linewrap1() call s:test_windows(3, 20) normal! 61ia setl number wrap call s:validate_cursor() let lines = s:screen_lines(1, 3) let expect = [ \ "<<< aaaa", \ " aaaa", \ " aaaa", \ ] call s:compare_lines(expect, lines) call s:close_windows() endfunc " Pending: https://groups.google.com/forum/#!topic/vim_dev/tzNKP7EDWYI func XTest_number_with_linewrap2() call s:test_windows(3, 20) normal! 61ia setl number wrap call s:validate_cursor() 0 call s:validate_cursor() let lines = s:screen_lines(1, 3) let expect = [ \ " 1 aaaa", \ " aaaa", \ " aaaa", \ ] call s:compare_lines(expect, lines) call s:close_windows() endfunc " Pending: https://groups.google.com/forum/#!topic/vim_dev/tzNKP7EDWYI func XTest_number_with_linewrap3() call s:test_windows(4, 20) normal! 81ia setl number wrap call s:validate_cursor() setl nonumber call s:validate_cursor() let lines = s:screen_lines(1, 4) let expect = [ \ "aaaaaaaa", \ "aaaaaaaa", \ "aaaaaaaa", \ "a ", \ ] call s:compare_lines(expect, lines) call s:close_windows() endfunc func Test_numberwidth() call s:test_windows(10, 20) call setline(1, repeat(['aaaa'], 10)) setl number numberwidth=6 let lines = s:screen_lines(1, 3) let expect = [ \ " 1 aa", \ " 2 aa", \ " 3 aa", \ ] call s:compare_lines(expect, lines) set relativenumber let lines = s:screen_lines(1, 3) let expect = [ \ "1 aa", \ " 1 aa", \ " 2 aa", \ ] call s:compare_lines(expect, lines) set nonumber let lines = s:screen_lines(1, 3) let expect = [ \ " 0 aa", \ " 1 aa", \ " 2 aa", \ ] call s:compare_lines(expect, lines) call s:close_windows() endfunc func Test_numberwidth_adjusted() call s:test_windows(10, 20) call setline(1, repeat(['aaaa'], 10000)) setl number numberwidth=4 let lines = s:screen_lines(1, 3) let expect = [ \ " 1 aa", \ " 2 aa", \ " 3 aa", \ ] call s:compare_lines(expect, lines) $ let lines = s:screen_lines(8, 10) let expect = [ \ " 9998 aa", \ " 9999 aa", \ "10000 aa", \ ] call s:compare_lines(expect, lines) setl relativenumber let lines = s:screen_lines(8, 10) let expect = [ \ " 2 aa", \ " 1 aa", \ "10000 aa", \ ] call s:compare_lines(expect, lines) setl nonumber let lines = s:screen_lines(8, 10) let expect = [ \ " 2 aaaa", \ " 1 aaaa", \ " 0 aaaa", \ ] call s:compare_lines(expect, lines) call s:close_windows() endfunc " This was causing a memcheck error func Test_relativenumber_uninitialised() new set rnu call setline(1, ["a", "b"]) redraw call feedkeys("j", 'xt') redraw bwipe! endfunc func Test_relativenumber_colors() CheckScreendump let lines =<< trim [CODE] call setline(1, range(200)) 111 set number relativenumber hi LineNr ctermfg=red [CODE] call writefile(lines, 'XTest_relnr') " Check that the balloon shows up after a mouse move let buf = RunVimInTerminal('-S XTest_relnr', {'rows': 10, 'cols': 50}) call term_wait(buf, 100) " Default colors call VerifyScreenDump(buf, 'Test_relnr_colors_1', {}) call term_sendkeys(buf, ":hi LineNrAbove ctermfg=blue\:\") call VerifyScreenDump(buf, 'Test_relnr_colors_2', {}) call term_sendkeys(buf, ":hi LineNrBelow ctermfg=green\:\") call VerifyScreenDump(buf, 'Test_relnr_colors_3', {}) call term_sendkeys(buf, ":hi clear LineNrAbove\") call VerifyScreenDump(buf, 'Test_relnr_colors_4', {}) " clean up call StopVimInTerminal(buf) call delete('XTest_relnr') endfunc func Test_relativenumber_callback() CheckScreendump CheckFeature timers let lines =<< trim END call setline(1, ['aaaaa', 'bbbbb', 'ccccc', 'ddddd']) set relativenumber call cursor(4, 1) func Func(timer) call cursor(1, 1) endfunc call timer_start(300, 'Func') END call writefile(lines, 'Xrnu_timer') let buf = RunVimInTerminal('-S Xrnu_timer', #{rows: 8}) call TermWait(buf, 310) call VerifyScreenDump(buf, 'Test_relativenumber_callback_1', {}) call StopVimInTerminal(buf) call delete('Xrnu_timer') endfunc " Test for displaying line numbers with 'rightleft' func Test_number_rightleft() CheckFeature rightleft new setlocal number setlocal rightleft call setline(1, range(1, 1000)) normal! 9Gzt redraw! call assert_match('^\s\+9 9$', Screenline(1)) normal! 10Gzt redraw! call assert_match('^\s\+01 10$', Screenline(1)) normal! 100Gzt redraw! call assert_match('^\s\+001 100$', Screenline(1)) normal! 1000Gzt redraw! call assert_match('^\s\+0001 1000$', Screenline(1)) bw! endfunc " This used to cause a divide by zero func Test_number_no_text_virtual_edit() vnew call setline(1, ['line one', 'line two']) set number virtualedit=all normal w 4wincmd | normal j bwipe! endfunc " vim: shiftwidth=2 sts=2 expandtab