xref: /vim-8.2.3635/src/testdir/test_number.vim (revision 02f8694a)
1dc9a0817SBram Moolenaar" Test for 'number' and 'relativenumber'
2dc9a0817SBram Moolenaar
3efae76abSBram Moolenaarsource check.vim
4dc9a0817SBram Moolenaarsource view_util.vim
5dc9a0817SBram Moolenaar
6efae76abSBram Moolenaarsource screendump.vim
7efae76abSBram Moolenaar
81e115360SBram Moolenaarfunc s:screen_lines(start, end) abort
9dc9a0817SBram Moolenaar  return ScreenLines([a:start, a:end], 8)
10dc9a0817SBram Moolenaarendfunc
11dc9a0817SBram Moolenaar
121e115360SBram Moolenaarfunc s:compare_lines(expect, actual)
13dc9a0817SBram Moolenaar  call assert_equal(a:expect, a:actual)
14dc9a0817SBram Moolenaarendfunc
15dc9a0817SBram Moolenaar
161e115360SBram Moolenaarfunc s:test_windows(h, w) abort
17dc9a0817SBram Moolenaar  call NewWindow(a:h, a:w)
18dc9a0817SBram Moolenaarendfunc
19dc9a0817SBram Moolenaar
201e115360SBram Moolenaarfunc s:close_windows() abort
21dc9a0817SBram Moolenaar  call CloseWindow()
22dc9a0817SBram Moolenaarendfunc
23dc9a0817SBram Moolenaar
241e115360SBram Moolenaarfunc s:validate_cursor() abort
25dc9a0817SBram Moolenaar  " update skipcol.
26dc9a0817SBram Moolenaar  " wincol():
27dc9a0817SBram Moolenaar  "   f_wincol
28dc9a0817SBram Moolenaar  "     -> validate_cursor
29dc9a0817SBram Moolenaar  "          -> curs_columns
30dc9a0817SBram Moolenaar  call wincol()
31dc9a0817SBram Moolenaarendfunc
32dc9a0817SBram Moolenaar
33dc9a0817SBram Moolenaarfunc Test_set_options()
34dc9a0817SBram Moolenaar  set nu rnu
35dc9a0817SBram Moolenaar  call assert_equal(1, &nu)
36dc9a0817SBram Moolenaar  call assert_equal(1, &rnu)
37dc9a0817SBram Moolenaar
38dc9a0817SBram Moolenaar  call s:test_windows(10, 20)
39dc9a0817SBram Moolenaar  call assert_equal(1, &nu)
40dc9a0817SBram Moolenaar  call assert_equal(1, &rnu)
41dc9a0817SBram Moolenaar  call s:close_windows()
42dc9a0817SBram Moolenaar
43dc9a0817SBram Moolenaar  set nu& rnu&
44dc9a0817SBram Moolenaarendfunc
45dc9a0817SBram Moolenaar
46dc9a0817SBram Moolenaarfunc Test_set_global_and_local()
47dc9a0817SBram Moolenaar  " setlocal must NOT reset the other global value
48dc9a0817SBram Moolenaar  set nonu nornu
49dc9a0817SBram Moolenaar  setglobal nu
50dc9a0817SBram Moolenaar  setlocal rnu
51dc9a0817SBram Moolenaar  call assert_equal(1, &g:nu)
52dc9a0817SBram Moolenaar
53dc9a0817SBram Moolenaar  set nonu nornu
54dc9a0817SBram Moolenaar  setglobal rnu
55dc9a0817SBram Moolenaar  setlocal nu
56dc9a0817SBram Moolenaar  call assert_equal(1, &g:rnu)
57dc9a0817SBram Moolenaar
58dc9a0817SBram Moolenaar  " setglobal MUST reset the other global value
59dc9a0817SBram Moolenaar  set nonu nornu
60dc9a0817SBram Moolenaar  setglobal nu
61dc9a0817SBram Moolenaar  setglobal rnu
62dc9a0817SBram Moolenaar  call assert_equal(1, &g:nu)
63dc9a0817SBram Moolenaar
64dc9a0817SBram Moolenaar  set nonu nornu
65dc9a0817SBram Moolenaar  setglobal rnu
66dc9a0817SBram Moolenaar  setglobal nu
67dc9a0817SBram Moolenaar  call assert_equal(1, &g:rnu)
68dc9a0817SBram Moolenaar
69dc9a0817SBram Moolenaar  " set MUST reset the other global value
70dc9a0817SBram Moolenaar  set nonu nornu
71dc9a0817SBram Moolenaar  set nu
72dc9a0817SBram Moolenaar  set rnu
73dc9a0817SBram Moolenaar  call assert_equal(1, &g:nu)
74dc9a0817SBram Moolenaar
75dc9a0817SBram Moolenaar  set nonu nornu
76dc9a0817SBram Moolenaar  set rnu
77dc9a0817SBram Moolenaar  set nu
78dc9a0817SBram Moolenaar  call assert_equal(1, &g:rnu)
79dc9a0817SBram Moolenaar
80dc9a0817SBram Moolenaar  set nu& rnu&
81dc9a0817SBram Moolenaarendfunc
82dc9a0817SBram Moolenaar
83dc9a0817SBram Moolenaarfunc Test_number()
84dc9a0817SBram Moolenaar  call s:test_windows(10, 20)
85dc9a0817SBram Moolenaar  call setline(1, ["abcdefghij", "klmnopqrst", "uvwxyzABCD", "EFGHIJKLMN", "OPQRSTUVWX", "YZ"])
86dc9a0817SBram Moolenaar  setl number
87dc9a0817SBram Moolenaar  let lines = s:screen_lines(1, 4)
88dc9a0817SBram Moolenaar  let expect = [
89dc9a0817SBram Moolenaar\ "  1 abcd",
90dc9a0817SBram Moolenaar\ "  2 klmn",
91dc9a0817SBram Moolenaar\ "  3 uvwx",
92dc9a0817SBram Moolenaar\ "  4 EFGH",
93dc9a0817SBram Moolenaar\ ]
94dc9a0817SBram Moolenaar  call s:compare_lines(expect, lines)
95dc9a0817SBram Moolenaar  call s:close_windows()
96dc9a0817SBram Moolenaarendfunc
97dc9a0817SBram Moolenaar
98dc9a0817SBram Moolenaarfunc Test_relativenumber()
99dc9a0817SBram Moolenaar  call s:test_windows(10, 20)
100dc9a0817SBram Moolenaar  call setline(1, ["abcdefghij", "klmnopqrst", "uvwxyzABCD", "EFGHIJKLMN", "OPQRSTUVWX", "YZ"])
101dc9a0817SBram Moolenaar  3
102dc9a0817SBram Moolenaar  setl relativenumber
103dc9a0817SBram Moolenaar  let lines = s:screen_lines(1, 6)
104dc9a0817SBram Moolenaar  let expect = [
105dc9a0817SBram Moolenaar\ "  2 abcd",
106dc9a0817SBram Moolenaar\ "  1 klmn",
107dc9a0817SBram Moolenaar\ "  0 uvwx",
108dc9a0817SBram Moolenaar\ "  1 EFGH",
109dc9a0817SBram Moolenaar\ "  2 OPQR",
110dc9a0817SBram Moolenaar\ "  3 YZ  ",
111dc9a0817SBram Moolenaar\ ]
112dc9a0817SBram Moolenaar  call s:compare_lines(expect, lines)
113dc9a0817SBram Moolenaar  call s:close_windows()
114dc9a0817SBram Moolenaarendfunc
115dc9a0817SBram Moolenaar
116dc9a0817SBram Moolenaarfunc Test_number_with_relativenumber()
117dc9a0817SBram Moolenaar  call s:test_windows(10, 20)
118dc9a0817SBram Moolenaar  call setline(1, ["abcdefghij", "klmnopqrst", "uvwxyzABCD", "EFGHIJKLMN", "OPQRSTUVWX", "YZ"])
119dc9a0817SBram Moolenaar  4
120dc9a0817SBram Moolenaar  setl number relativenumber
121dc9a0817SBram Moolenaar  let lines = s:screen_lines(1, 6)
122dc9a0817SBram Moolenaar  let expect = [
123dc9a0817SBram Moolenaar\ "  3 abcd",
124dc9a0817SBram Moolenaar\ "  2 klmn",
125dc9a0817SBram Moolenaar\ "  1 uvwx",
126dc9a0817SBram Moolenaar\ "4   EFGH",
127dc9a0817SBram Moolenaar\ "  1 OPQR",
128dc9a0817SBram Moolenaar\ "  2 YZ  ",
129dc9a0817SBram Moolenaar\ ]
130dc9a0817SBram Moolenaar  call s:compare_lines(expect, lines)
131dc9a0817SBram Moolenaar  call s:close_windows()
132dc9a0817SBram Moolenaarendfunc
133dc9a0817SBram Moolenaar
134dc9a0817SBram Moolenaarfunc Test_number_with_linewrap1()
135dc9a0817SBram Moolenaar  call s:test_windows(3, 20)
136dc9a0817SBram Moolenaar  normal! 61ia
137dc9a0817SBram Moolenaar  setl number wrap
138dc9a0817SBram Moolenaar  call s:validate_cursor()
139dc9a0817SBram Moolenaar  let lines = s:screen_lines(1, 3)
140dc9a0817SBram Moolenaar  let expect = [
141dc9a0817SBram Moolenaar\ "--1 aaaa",
142dc9a0817SBram Moolenaar\ "    aaaa",
143dc9a0817SBram Moolenaar\ "    aaaa",
144dc9a0817SBram Moolenaar\ ]
145dc9a0817SBram Moolenaar  call s:compare_lines(expect, lines)
146dc9a0817SBram Moolenaar  call s:close_windows()
147dc9a0817SBram Moolenaarendfunc
148dc9a0817SBram Moolenaar
149dc9a0817SBram Moolenaar" Pending: https://groups.google.com/forum/#!topic/vim_dev/tzNKP7EDWYI
150dc9a0817SBram Moolenaarfunc XTest_number_with_linewrap2()
151dc9a0817SBram Moolenaar  call s:test_windows(3, 20)
152dc9a0817SBram Moolenaar  normal! 61ia
153dc9a0817SBram Moolenaar  setl number wrap
154dc9a0817SBram Moolenaar  call s:validate_cursor()
155dc9a0817SBram Moolenaar  0
156dc9a0817SBram Moolenaar  call s:validate_cursor()
157dc9a0817SBram Moolenaar  let lines = s:screen_lines(1, 3)
158dc9a0817SBram Moolenaar  let expect = [
159dc9a0817SBram Moolenaar\ "  1 aaaa",
160dc9a0817SBram Moolenaar\ "    aaaa",
161dc9a0817SBram Moolenaar\ "    aaaa",
162dc9a0817SBram Moolenaar\ ]
163dc9a0817SBram Moolenaar  call s:compare_lines(expect, lines)
164dc9a0817SBram Moolenaar  call s:close_windows()
165dc9a0817SBram Moolenaarendfunc
166dc9a0817SBram Moolenaar
167dc9a0817SBram Moolenaar" Pending: https://groups.google.com/forum/#!topic/vim_dev/tzNKP7EDWYI
168dc9a0817SBram Moolenaarfunc XTest_number_with_linewrap3()
169dc9a0817SBram Moolenaar  call s:test_windows(4, 20)
170dc9a0817SBram Moolenaar  normal! 81ia
171dc9a0817SBram Moolenaar  setl number wrap
172dc9a0817SBram Moolenaar  call s:validate_cursor()
173dc9a0817SBram Moolenaar  setl nonumber
174dc9a0817SBram Moolenaar  call s:validate_cursor()
175dc9a0817SBram Moolenaar  let lines = s:screen_lines(1, 4)
176dc9a0817SBram Moolenaar  let expect = [
177dc9a0817SBram Moolenaar\ "aaaaaaaa",
178dc9a0817SBram Moolenaar\ "aaaaaaaa",
179dc9a0817SBram Moolenaar\ "aaaaaaaa",
180dc9a0817SBram Moolenaar\ "a       ",
181dc9a0817SBram Moolenaar\ ]
182dc9a0817SBram Moolenaar  call s:compare_lines(expect, lines)
183dc9a0817SBram Moolenaar  call s:close_windows()
184dc9a0817SBram Moolenaarendfunc
185dc9a0817SBram Moolenaar
186dc9a0817SBram Moolenaarfunc Test_numberwidth()
187dc9a0817SBram Moolenaar  call s:test_windows(10, 20)
188dc9a0817SBram Moolenaar  call setline(1, repeat(['aaaa'], 10))
189dc9a0817SBram Moolenaar  setl number numberwidth=6
190dc9a0817SBram Moolenaar  let lines = s:screen_lines(1, 3)
191dc9a0817SBram Moolenaar  let expect = [
192dc9a0817SBram Moolenaar\ "    1 aa",
193dc9a0817SBram Moolenaar\ "    2 aa",
194dc9a0817SBram Moolenaar\ "    3 aa",
195dc9a0817SBram Moolenaar\ ]
196dc9a0817SBram Moolenaar  call s:compare_lines(expect, lines)
197dc9a0817SBram Moolenaar
198dc9a0817SBram Moolenaar  set relativenumber
199dc9a0817SBram Moolenaar  let lines = s:screen_lines(1, 3)
200dc9a0817SBram Moolenaar  let expect = [
201dc9a0817SBram Moolenaar\ "1     aa",
202dc9a0817SBram Moolenaar\ "    1 aa",
203dc9a0817SBram Moolenaar\ "    2 aa",
204dc9a0817SBram Moolenaar\ ]
205dc9a0817SBram Moolenaar  call s:compare_lines(expect, lines)
206dc9a0817SBram Moolenaar
207dc9a0817SBram Moolenaar  set nonumber
208dc9a0817SBram Moolenaar  let lines = s:screen_lines(1, 3)
209dc9a0817SBram Moolenaar  let expect = [
210dc9a0817SBram Moolenaar\ "    0 aa",
211dc9a0817SBram Moolenaar\ "    1 aa",
212dc9a0817SBram Moolenaar\ "    2 aa",
213dc9a0817SBram Moolenaar\ ]
214dc9a0817SBram Moolenaar  call s:compare_lines(expect, lines)
215dc9a0817SBram Moolenaar  call s:close_windows()
216dc9a0817SBram Moolenaarendfunc
217dc9a0817SBram Moolenaar
218dc9a0817SBram Moolenaarfunc Test_numberwidth_adjusted()
219dc9a0817SBram Moolenaar  call s:test_windows(10, 20)
220dc9a0817SBram Moolenaar  call setline(1, repeat(['aaaa'], 10000))
221dc9a0817SBram Moolenaar  setl number numberwidth=4
222dc9a0817SBram Moolenaar  let lines = s:screen_lines(1, 3)
223dc9a0817SBram Moolenaar  let expect = [
224dc9a0817SBram Moolenaar\ "    1 aa",
225dc9a0817SBram Moolenaar\ "    2 aa",
226dc9a0817SBram Moolenaar\ "    3 aa",
227dc9a0817SBram Moolenaar\ ]
228dc9a0817SBram Moolenaar  call s:compare_lines(expect, lines)
229dc9a0817SBram Moolenaar
230dc9a0817SBram Moolenaar  $
231dc9a0817SBram Moolenaar  let lines = s:screen_lines(8, 10)
232dc9a0817SBram Moolenaar  let expect = [
233dc9a0817SBram Moolenaar\ " 9998 aa",
234dc9a0817SBram Moolenaar\ " 9999 aa",
235dc9a0817SBram Moolenaar\ "10000 aa",
236dc9a0817SBram Moolenaar\ ]
237dc9a0817SBram Moolenaar  call s:compare_lines(expect, lines)
238dc9a0817SBram Moolenaar
239dc9a0817SBram Moolenaar  setl relativenumber
240dc9a0817SBram Moolenaar  let lines = s:screen_lines(8, 10)
241dc9a0817SBram Moolenaar  let expect = [
242dc9a0817SBram Moolenaar\ "    2 aa",
243dc9a0817SBram Moolenaar\ "    1 aa",
244dc9a0817SBram Moolenaar\ "10000 aa",
245dc9a0817SBram Moolenaar\ ]
246dc9a0817SBram Moolenaar  call s:compare_lines(expect, lines)
247dc9a0817SBram Moolenaar
248dc9a0817SBram Moolenaar  setl nonumber
249dc9a0817SBram Moolenaar  let lines = s:screen_lines(8, 10)
250dc9a0817SBram Moolenaar  let expect = [
251dc9a0817SBram Moolenaar\ "  2 aaaa",
252dc9a0817SBram Moolenaar\ "  1 aaaa",
253dc9a0817SBram Moolenaar\ "  0 aaaa",
254dc9a0817SBram Moolenaar\ ]
255dc9a0817SBram Moolenaar  call s:compare_lines(expect, lines)
256dc9a0817SBram Moolenaar  call s:close_windows()
257dc9a0817SBram Moolenaarendfunc
258ec572ad6SBram Moolenaar
259ec572ad6SBram Moolenaar" This was causing a memcheck error
260ec572ad6SBram Moolenaarfunc Test_relativenumber_uninitialised()
261ec572ad6SBram Moolenaar  new
262ec572ad6SBram Moolenaar  set rnu
263ec572ad6SBram Moolenaar  call setline(1, ["a", "b"])
264ec572ad6SBram Moolenaar  redraw
265ec572ad6SBram Moolenaar  call feedkeys("j", 'xt')
266ec572ad6SBram Moolenaar  redraw
267ec572ad6SBram Moolenaar  bwipe!
268ec572ad6SBram Moolenaarendfunc
269efae76abSBram Moolenaar
270efae76abSBram Moolenaarfunc Test_relativenumber_colors()
271efae76abSBram Moolenaar  CheckScreendump
272efae76abSBram Moolenaar
273efae76abSBram Moolenaar  let lines =<< trim [CODE]
274efae76abSBram Moolenaar    call setline(1, range(200))
275efae76abSBram Moolenaar    111
276efae76abSBram Moolenaar    set number relativenumber
277efae76abSBram Moolenaar    hi LineNr ctermfg=red
278efae76abSBram Moolenaar  [CODE]
279efae76abSBram Moolenaar  call writefile(lines, 'XTest_relnr')
280efae76abSBram Moolenaar
281efae76abSBram Moolenaar  " Check that the balloon shows up after a mouse move
282efae76abSBram Moolenaar  let buf = RunVimInTerminal('-S XTest_relnr', {'rows': 10, 'cols': 50})
2836a2c5a7dSBram Moolenaar  call TermWait(buf, 50)
284efae76abSBram Moolenaar  " Default colors
285efae76abSBram Moolenaar  call VerifyScreenDump(buf, 'Test_relnr_colors_1', {})
286efae76abSBram Moolenaar
2878040a714SBram Moolenaar  call term_sendkeys(buf, ":hi LineNrAbove ctermfg=blue\<CR>:\<CR>")
288efae76abSBram Moolenaar  call VerifyScreenDump(buf, 'Test_relnr_colors_2', {})
289efae76abSBram Moolenaar
2908040a714SBram Moolenaar  call term_sendkeys(buf, ":hi LineNrBelow ctermfg=green\<CR>:\<CR>")
291efae76abSBram Moolenaar  call VerifyScreenDump(buf, 'Test_relnr_colors_3', {})
292efae76abSBram Moolenaar
293efae76abSBram Moolenaar  call term_sendkeys(buf, ":hi clear LineNrAbove\<CR>")
294efae76abSBram Moolenaar  call VerifyScreenDump(buf, 'Test_relnr_colors_4', {})
295efae76abSBram Moolenaar
296efae76abSBram Moolenaar  " clean up
297efae76abSBram Moolenaar  call StopVimInTerminal(buf)
298efae76abSBram Moolenaar  call delete('XTest_relnr')
299efae76abSBram Moolenaarendfunc
3006d91bcb4SBram Moolenaar
30129f0dc36SChristian Brabandt" Test for displaying line numbers with 'rightleft'
30229f0dc36SChristian Brabandtfunc Test_number_rightleft()
30329f0dc36SChristian Brabandt  CheckFeature rightleft
30429f0dc36SChristian Brabandt  new
30529f0dc36SChristian Brabandt  setlocal number
30629f0dc36SChristian Brabandt  setlocal rightleft
30729f0dc36SChristian Brabandt  call setline(1, range(1, 1000))
30829f0dc36SChristian Brabandt  normal! 9Gzt
30929f0dc36SChristian Brabandt  redraw!
31029f0dc36SChristian Brabandt  call assert_match('^\s\+9 9$', Screenline(1))
31129f0dc36SChristian Brabandt  normal! 10Gzt
31229f0dc36SChristian Brabandt  redraw!
31329f0dc36SChristian Brabandt  call assert_match('^\s\+01 10$', Screenline(1))
31429f0dc36SChristian Brabandt  normal! 100Gzt
31529f0dc36SChristian Brabandt  redraw!
31629f0dc36SChristian Brabandt  call assert_match('^\s\+001 100$', Screenline(1))
31729f0dc36SChristian Brabandt  normal! 1000Gzt
31829f0dc36SChristian Brabandt  redraw!
31929f0dc36SChristian Brabandt  call assert_match('^\s\+0001 1000$', Screenline(1))
32029f0dc36SChristian Brabandt  bw!
32129f0dc36SChristian Brabandtendfunc
32229f0dc36SChristian Brabandt
323*02f8694aSBram Moolenaar" This used to cause a divide by zero
324*02f8694aSBram Moolenaarfunc Test_number_no_text_virtual_edit()
325*02f8694aSBram Moolenaar  vnew
326*02f8694aSBram Moolenaar  call setline(1, ['line one', 'line two'])
327*02f8694aSBram Moolenaar  set number virtualedit=all
328*02f8694aSBram Moolenaar  normal w
329*02f8694aSBram Moolenaar  4wincmd |
330*02f8694aSBram Moolenaar  normal j
331*02f8694aSBram Moolenaar  bwipe!
332*02f8694aSBram Moolenaarendfunc
333*02f8694aSBram Moolenaar
3346d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
335