xref: /vim-8.2.3635/src/testdir/test_ex_z.vim (revision 7f2dd1e9)
1fa0ad0bbSBram Moolenaar" Test :z
2fa0ad0bbSBram Moolenaar
3fa0ad0bbSBram Moolenaarfunc Test_z()
4fa0ad0bbSBram Moolenaar  call setline(1, range(1, 100))
5fa0ad0bbSBram Moolenaar
6fa0ad0bbSBram Moolenaar  let a = execute('20z3')
7fa0ad0bbSBram Moolenaar  call assert_equal("\n20\n21\n22", a)
8fa0ad0bbSBram Moolenaar  call assert_equal(22, line('.'))
9fa0ad0bbSBram Moolenaar  " 'window' should be set to the {count} value.
10fa0ad0bbSBram Moolenaar  call assert_equal(3, &window)
11fa0ad0bbSBram Moolenaar
12fa0ad0bbSBram Moolenaar  " If there is only one window, then twice the amount of 'scroll' is used.
13fa0ad0bbSBram Moolenaar  set scroll=2
14fa0ad0bbSBram Moolenaar  let a = execute('20z')
15fa0ad0bbSBram Moolenaar  call assert_equal("\n20\n21\n22\n23", a)
16fa0ad0bbSBram Moolenaar  call assert_equal(23, line('.'))
17fa0ad0bbSBram Moolenaar
18fa0ad0bbSBram Moolenaar  let a = execute('20z+3')
19*7f2dd1e9SDominique Pelle  " FIXME: I would expect the same result as '20z3' since 'help z'
20*7f2dd1e9SDominique Pelle  " says: Specifying no mark at all is the same as "+".
21*7f2dd1e9SDominique Pelle  " However it " gives "\n21\n22\n23" instead. Bug in Vim or in ":help :z"?
22fa0ad0bbSBram Moolenaar  "call assert_equal("\n20\n21\n22", a)
23fa0ad0bbSBram Moolenaar  "call assert_equal(22, line('.'))
24fa0ad0bbSBram Moolenaar
25fa0ad0bbSBram Moolenaar  let a = execute('20z-3')
26fa0ad0bbSBram Moolenaar  call assert_equal("\n18\n19\n20", a)
27fa0ad0bbSBram Moolenaar  call assert_equal(20, line('.'))
28fa0ad0bbSBram Moolenaar
29fa0ad0bbSBram Moolenaar  let a = execute('20z=3')
30fa0ad0bbSBram Moolenaar  call assert_match("^\n18\n19\n-\\+\n20\n-\\+\n21\n22$", a)
31fa0ad0bbSBram Moolenaar  call assert_equal(20, line('.'))
32fa0ad0bbSBram Moolenaar
33fa0ad0bbSBram Moolenaar  let a = execute('20z^3')
34fa0ad0bbSBram Moolenaar  call assert_equal("\n14\n15\n16\n17", a)
35fa0ad0bbSBram Moolenaar  call assert_equal(17, line('.'))
36fa0ad0bbSBram Moolenaar
37fa0ad0bbSBram Moolenaar  let a = execute('20z.3')
38fa0ad0bbSBram Moolenaar  call assert_equal("\n19\n20\n21", a)
39fa0ad0bbSBram Moolenaar  call assert_equal(21, line('.'))
40fa0ad0bbSBram Moolenaar
41fa0ad0bbSBram Moolenaar  let a = execute('20z#3')
42fa0ad0bbSBram Moolenaar  call assert_equal("\n 20 20\n 21 21\n 22 22", a)
43fa0ad0bbSBram Moolenaar  call assert_equal(22, line('.'))
44fa0ad0bbSBram Moolenaar
45fa0ad0bbSBram Moolenaar  let a = execute('20z#-3')
46fa0ad0bbSBram Moolenaar  call assert_equal("\n 18 18\n 19 19\n 20 20", a)
47fa0ad0bbSBram Moolenaar  call assert_equal(20, line('.'))
48fa0ad0bbSBram Moolenaar
49fa0ad0bbSBram Moolenaar  let a = execute('20z#=3')
50fa0ad0bbSBram Moolenaar  call assert_match("^\n 18 18\n 19 19\n-\\+\n 20 20\n-\\+\n 21 21\n 22 22$", a)
51fa0ad0bbSBram Moolenaar  call assert_equal(20, line('.'))
52fa0ad0bbSBram Moolenaar
53fa0ad0bbSBram Moolenaar  " Test with {count} bigger than the number of lines in buffer.
54fa0ad0bbSBram Moolenaar  let a = execute('20z1000')
55fa0ad0bbSBram Moolenaar  call assert_match("^\n20\n21\n.*\n99\n100$", a)
56fa0ad0bbSBram Moolenaar  call assert_equal(100, line('.'))
57fa0ad0bbSBram Moolenaar
58fa0ad0bbSBram Moolenaar  let a = execute('20z-1000')
59fa0ad0bbSBram Moolenaar  call assert_equal(20, line('.'))
60fa0ad0bbSBram Moolenaar
61fa0ad0bbSBram Moolenaar  let a = execute('20z=1000')
62fa0ad0bbSBram Moolenaar  call assert_match("^\n1\n.*\n-\\+\n20\n-\\\+\n.*\n100$", a)
63fa0ad0bbSBram Moolenaar  call assert_equal(20, line('.'))
64fa0ad0bbSBram Moolenaar
65*7f2dd1e9SDominique Pelle  " Tests with multiple windows.
66*7f2dd1e9SDominique Pelle  5split
67*7f2dd1e9SDominique Pelle  call setline(1, range(1, 100))
68*7f2dd1e9SDominique Pelle  " Without a count, the number line is window height - 3.
69*7f2dd1e9SDominique Pelle  let a = execute('20z')
70*7f2dd1e9SDominique Pelle  call assert_equal("\n20\n21", a)
71*7f2dd1e9SDominique Pelle  call assert_equal(21, line('.'))
72*7f2dd1e9SDominique Pelle  " If window height - 3 is less than 1, it should be clamped to 1.
73*7f2dd1e9SDominique Pelle  resize 2
74*7f2dd1e9SDominique Pelle  let a = execute('20z')
75*7f2dd1e9SDominique Pelle  call assert_equal("\n20", a)
76*7f2dd1e9SDominique Pelle  call assert_equal(20, line('.'))
77*7f2dd1e9SDominique Pelle
78fa0ad0bbSBram Moolenaar  call assert_fails('20z=a', 'E144:')
79fa0ad0bbSBram Moolenaar
80fa0ad0bbSBram Moolenaar  set window& scroll&
81fa0ad0bbSBram Moolenaar  bw!
82fa0ad0bbSBram Moolenaarendfunc
83fa0ad0bbSBram Moolenaar
84*7f2dd1e9SDominique Pelle" :z! is the same as :z but count uses the Vim window height when not specified.
85*7f2dd1e9SDominique Pellefunc Test_z_bang()
86*7f2dd1e9SDominique Pelle  4split
87*7f2dd1e9SDominique Pelle  call setline(1, range(1, 20))
88*7f2dd1e9SDominique Pelle
89*7f2dd1e9SDominique Pelle  let a = execute('10z!')
90*7f2dd1e9SDominique Pelle  call assert_equal("\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20", a)
91*7f2dd1e9SDominique Pelle
92*7f2dd1e9SDominique Pelle  let a = execute('10z!#')
93*7f2dd1e9SDominique Pelle  call assert_equal("\n 10 10\n 11 11\n 12 12\n 13 13\n 14 14\n 15 15\n 16 16\n 17 17\n 18 18\n 19 19\n 20 20", a)
94*7f2dd1e9SDominique Pelle
95*7f2dd1e9SDominique Pelle  let a = execute('10z!3')
96*7f2dd1e9SDominique Pelle  call assert_equal("\n10\n11\n12", a)
97*7f2dd1e9SDominique Pelle
98*7f2dd1e9SDominique Pelle  %bwipe!
99*7f2dd1e9SDominique Pelleendfunc
100*7f2dd1e9SDominique Pelle
101a364cdb6SBram Moolenaarfunc Test_z_overflow()
102fa0ad0bbSBram Moolenaar  " This used to access invalid memory as a result of an integer overflow
103fa0ad0bbSBram Moolenaar  " and freeze vim.
104fa0ad0bbSBram Moolenaar  normal ox
105fa0ad0bbSBram Moolenaar  normal Heat
106fa0ad0bbSBram Moolenaar  z777777776666666
107fa0ad0bbSBram Moolenaar  ')
108fa0ad0bbSBram Moolenaarendfunc
109a364cdb6SBram Moolenaar
110a364cdb6SBram Moolenaarfunc Test_z_negative_lnum()
111a364cdb6SBram Moolenaar  new
112a364cdb6SBram Moolenaar  z^
113a364cdb6SBram Moolenaar  call assert_equal(1, line('.'))
114a364cdb6SBram Moolenaar  bwipe!
115a364cdb6SBram Moolenaarendfunc
1166d91bcb4SBram Moolenaar
1176d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
118