xref: /vim-8.2.3635/src/testdir/test_normal.vim (revision df0db16c)
187bc3f74SBram Moolenaar" Test for various Normal mode commands
287bc3f74SBram Moolenaar
387bc3f74SBram Moolenaarfunc! Setup_NewWindow()
487bc3f74SBram Moolenaar  10new
587bc3f74SBram Moolenaar  call setline(1, range(1,100))
687bc3f74SBram Moolenaarendfunc
787bc3f74SBram Moolenaar
887bc3f74SBram Moolenaarfunc! MyFormatExpr()
987bc3f74SBram Moolenaar  " Adds '->$' at lines having numbers followed by trailing whitespace
1087bc3f74SBram Moolenaar  for ln in range(v:lnum, v:lnum+v:count-1)
1187bc3f74SBram Moolenaar    let line = getline(ln)
1287bc3f74SBram Moolenaar    if getline(ln) =~# '\d\s\+$'
1387bc3f74SBram Moolenaar      call setline(ln, substitute(line, '\s\+$', '', '') . '->$')
1487bc3f74SBram Moolenaar    endif
1587bc3f74SBram Moolenaar  endfor
1687bc3f74SBram Moolenaarendfu
1787bc3f74SBram Moolenaar
1887bc3f74SBram Moolenaarfunction! CountSpaces(type, ...)
1987bc3f74SBram Moolenaar  " for testing operatorfunc
2087bc3f74SBram Moolenaar  " will count the number of spaces
2187bc3f74SBram Moolenaar  " and return the result in g:a
2287bc3f74SBram Moolenaar  let sel_save = &selection
2387bc3f74SBram Moolenaar  let &selection = "inclusive"
2487bc3f74SBram Moolenaar  let reg_save = @@
2587bc3f74SBram Moolenaar
2687bc3f74SBram Moolenaar  if a:0  " Invoked from Visual mode, use gv command.
2787bc3f74SBram Moolenaar    silent exe "normal! gvy"
2887bc3f74SBram Moolenaar  elseif a:type == 'line'
2987bc3f74SBram Moolenaar    silent exe "normal! '[V']y"
3087bc3f74SBram Moolenaar  else
3187bc3f74SBram Moolenaar    silent exe "normal! `[v`]y"
3287bc3f74SBram Moolenaar  endif
3387bc3f74SBram Moolenaar  let g:a=strlen(substitute(@@, '[^ ]', '', 'g'))
3487bc3f74SBram Moolenaar  let &selection = sel_save
3587bc3f74SBram Moolenaar  let @@ = reg_save
3687bc3f74SBram Moolenaarendfunction
3787bc3f74SBram Moolenaar
3887bc3f74SBram Moolenaarfun! Test_normal00_optrans()
3987bc3f74SBram Moolenaar  new
4087bc3f74SBram Moolenaar  call append(0, ['1 This is a simple test: abcd', '2 This is the second line', '3 this is the third line'])
4187bc3f74SBram Moolenaar  1
4287bc3f74SBram Moolenaar  exe "norm! Sfoobar\<esc>"
4387bc3f74SBram Moolenaar  call assert_equal(['foobar', '2 This is the second line', '3 this is the third line', ''], getline(1,'$'))
4487bc3f74SBram Moolenaar  2
4587bc3f74SBram Moolenaar  exe "norm! $vbsone"
4687bc3f74SBram Moolenaar  call assert_equal(['foobar', '2 This is the second one', '3 this is the third line', ''], getline(1,'$'))
4787bc3f74SBram Moolenaar  norm! VS Second line here
4887bc3f74SBram Moolenaar  call assert_equal(['foobar', ' Second line here', '3 this is the third line', ''], getline(1, '$'))
4987bc3f74SBram Moolenaar  %d
5087bc3f74SBram Moolenaar  call append(0, ['4 This is a simple test: abcd', '5 This is the second line', '6 this is the third line'])
5187bc3f74SBram Moolenaar  call append(0, ['1 This is a simple test: abcd', '2 This is the second line', '3 this is the third line'])
5287bc3f74SBram Moolenaar
5387bc3f74SBram Moolenaar  1
5487bc3f74SBram Moolenaar  norm! 2D
5587bc3f74SBram Moolenaar  call assert_equal(['3 this is the third line', '4 This is a simple test: abcd', '5 This is the second line', '6 this is the third line', ''], getline(1,'$'))
5687bc3f74SBram Moolenaar  set cpo+=#
5787bc3f74SBram Moolenaar  norm! 4D
5887bc3f74SBram Moolenaar  call assert_equal(['', '4 This is a simple test: abcd', '5 This is the second line', '6 this is the third line', ''], getline(1,'$'))
5987bc3f74SBram Moolenaar
6087bc3f74SBram Moolenaar  " clean up
6187bc3f74SBram Moolenaar  set cpo-=#
6287bc3f74SBram Moolenaar  bw!
6387bc3f74SBram Moolenaarendfu
6487bc3f74SBram Moolenaar
6587bc3f74SBram Moolenaarfunc! Test_normal01_keymodel()
6687bc3f74SBram Moolenaar  call Setup_NewWindow()
6787bc3f74SBram Moolenaar  " Test 1: depending on 'keymodel' <s-down> does something different
6887bc3f74SBram Moolenaar  :50
6987bc3f74SBram Moolenaar  call feedkeys("V\<S-Up>y", 'tx')
7087bc3f74SBram Moolenaar  call assert_equal(['47', '48', '49', '50'], getline("'<", "'>"))
7187bc3f74SBram Moolenaar  :set keymodel=startsel
7287bc3f74SBram Moolenaar  :50
7387bc3f74SBram Moolenaar  call feedkeys("V\<S-Up>y", 'tx')
7487bc3f74SBram Moolenaar  call assert_equal(['49', '50'], getline("'<", "'>"))
7587bc3f74SBram Moolenaar  " Start visual mode when keymodel = startsel
7687bc3f74SBram Moolenaar  :50
7787bc3f74SBram Moolenaar  call feedkeys("\<S-Up>y", 'tx')
7887bc3f74SBram Moolenaar  call assert_equal(['49', '5'], getreg(0, 0, 1))
7987bc3f74SBram Moolenaar  " Do not start visual mode when keymodel=
8087bc3f74SBram Moolenaar  :set keymodel=
8187bc3f74SBram Moolenaar  :50
8287bc3f74SBram Moolenaar  call feedkeys("\<S-Up>y$", 'tx')
8387bc3f74SBram Moolenaar  call assert_equal(['42'], getreg(0, 0, 1))
8487bc3f74SBram Moolenaar
8587bc3f74SBram Moolenaar  " clean up
8687bc3f74SBram Moolenaar  bw!
8787bc3f74SBram Moolenaarendfunc
8887bc3f74SBram Moolenaar
8987bc3f74SBram Moolenaarfunc! Test_normal02_selectmode()
9087bc3f74SBram Moolenaar  " some basic select mode tests
9187bc3f74SBram Moolenaar  call Setup_NewWindow()
9287bc3f74SBram Moolenaar  50
9387bc3f74SBram Moolenaar  norm! gHy
9487bc3f74SBram Moolenaar  call assert_equal('y51', getline('.'))
9587bc3f74SBram Moolenaar  call setline(1, range(1,100))
9687bc3f74SBram Moolenaar  50
9787bc3f74SBram Moolenaar  exe ":norm! V9jo\<c-g>y"
9887bc3f74SBram Moolenaar  call assert_equal('y60', getline('.'))
9987bc3f74SBram Moolenaar  " clean up
10087bc3f74SBram Moolenaar  bw!
10187bc3f74SBram Moolenaarendfu
10287bc3f74SBram Moolenaar
10387bc3f74SBram Moolenaarfunc! Test_normal03_join()
10487bc3f74SBram Moolenaar  " basic join test
10587bc3f74SBram Moolenaar  call Setup_NewWindow()
10687bc3f74SBram Moolenaar  50
10787bc3f74SBram Moolenaar  norm! VJ
10887bc3f74SBram Moolenaar  call assert_equal('50 51', getline('.'))
10987bc3f74SBram Moolenaar  $
11087bc3f74SBram Moolenaar  norm! J
11187bc3f74SBram Moolenaar  call assert_equal('100', getline('.'))
11287bc3f74SBram Moolenaar  $
11387bc3f74SBram Moolenaar  norm! V9-gJ
11487bc3f74SBram Moolenaar  call assert_equal('919293949596979899100', getline('.'))
11587bc3f74SBram Moolenaar  call setline(1, range(1,100))
11687bc3f74SBram Moolenaar  $
11787bc3f74SBram Moolenaar  :j 10
11887bc3f74SBram Moolenaar  call assert_equal('100', getline('.'))
11987bc3f74SBram Moolenaar  " clean up
12087bc3f74SBram Moolenaar  bw!
12187bc3f74SBram Moolenaarendfu
12287bc3f74SBram Moolenaar
12387bc3f74SBram Moolenaarfunc! Test_normal04_filter()
12487bc3f74SBram Moolenaar  " basic filter test
12587bc3f74SBram Moolenaar  " only test on non windows platform
12687bc3f74SBram Moolenaar  if has("win32") || has("win64") || has("win95")
12787bc3f74SBram Moolenaar    return
12887bc3f74SBram Moolenaar  endif
12987bc3f74SBram Moolenaar  call Setup_NewWindow()
13087bc3f74SBram Moolenaar  1
13187bc3f74SBram Moolenaar  call feedkeys("!!sed -e 's/^/|    /'\n", 'tx')
13287bc3f74SBram Moolenaar  call assert_equal('|    1', getline('.'))
13387bc3f74SBram Moolenaar  90
13487bc3f74SBram Moolenaar  :sil :!echo one
13587bc3f74SBram Moolenaar  call feedkeys('.', 'tx')
13687bc3f74SBram Moolenaar  call assert_equal('|    90', getline('.'))
13787bc3f74SBram Moolenaar  95
13887bc3f74SBram Moolenaar  set cpo+=!
13987bc3f74SBram Moolenaar  " 2 <CR>, 1: for executing the command,
14087bc3f74SBram Moolenaar  "         2: clear hit-enter-prompt
14187bc3f74SBram Moolenaar  call feedkeys("!!\n", 'tx')
14287bc3f74SBram Moolenaar  call feedkeys(":!echo one\n\n", 'tx')
14387bc3f74SBram Moolenaar  call feedkeys(".", 'tx')
14487bc3f74SBram Moolenaar  call assert_equal('one', getline('.'))
14587bc3f74SBram Moolenaar  set cpo-=!
14687bc3f74SBram Moolenaar  bw!
14787bc3f74SBram Moolenaarendfu
14887bc3f74SBram Moolenaar
14987bc3f74SBram Moolenaarfunc! Test_normal05_formatexpr()
15087bc3f74SBram Moolenaar  " basic formatexpr test
15187bc3f74SBram Moolenaar  call Setup_NewWindow()
15287bc3f74SBram Moolenaar  %d_
15387bc3f74SBram Moolenaar  call setline(1, ['here: 1   ', '2', 'here: 3   ', '4', 'not here:   '])
15487bc3f74SBram Moolenaar  1
15587bc3f74SBram Moolenaar  set formatexpr=MyFormatExpr()
15687bc3f74SBram Moolenaar  norm! gqG
15787bc3f74SBram Moolenaar  call assert_equal(['here: 1->$', '2', 'here: 3->$', '4', 'not here:   '], getline(1,'$'))
15887bc3f74SBram Moolenaar  set formatexpr=
15987bc3f74SBram Moolenaar  bw!
16087bc3f74SBram Moolenaarendfu
16187bc3f74SBram Moolenaar
162d77f9d59SBram Moolenaarfunc Test_normal05_formatexpr_newbuf()
163d77f9d59SBram Moolenaar  " Edit another buffer in the 'formatexpr' function
164d77f9d59SBram Moolenaar  new
165d77f9d59SBram Moolenaar  func! Format()
166d77f9d59SBram Moolenaar    edit another
167d77f9d59SBram Moolenaar  endfunc
168d77f9d59SBram Moolenaar  set formatexpr=Format()
169d77f9d59SBram Moolenaar  norm gqG
170d77f9d59SBram Moolenaar  bw!
171d77f9d59SBram Moolenaar  set formatexpr=
172d77f9d59SBram Moolenaarendfunc
173d77f9d59SBram Moolenaar
174d77f9d59SBram Moolenaarfunc Test_normal05_formatexpr_setopt()
175d77f9d59SBram Moolenaar  " Change the 'formatexpr' value in the function
176d77f9d59SBram Moolenaar  new
177d77f9d59SBram Moolenaar  func! Format()
178d77f9d59SBram Moolenaar    set formatexpr=
179d77f9d59SBram Moolenaar  endfunc
180d77f9d59SBram Moolenaar  set formatexpr=Format()
181d77f9d59SBram Moolenaar  norm gqG
182d77f9d59SBram Moolenaar  bw!
183d77f9d59SBram Moolenaar  set formatexpr=
184d77f9d59SBram Moolenaarendfunc
185d77f9d59SBram Moolenaar
18687bc3f74SBram Moolenaarfunc! Test_normal06_formatprg()
18787bc3f74SBram Moolenaar  " basic test for formatprg
18887bc3f74SBram Moolenaar  " only test on non windows platform
18987bc3f74SBram Moolenaar  if has("win32") || has("win64") || has("win95")
19087bc3f74SBram Moolenaar    return
19187bc3f74SBram Moolenaar  else
19287bc3f74SBram Moolenaar    " uses sed to number non-empty lines
19387bc3f74SBram Moolenaar    call writefile(['#!/bin/sh', 'sed ''/./=''|sed ''/./{', 'N', 's/\n/    /', '}'''], 'Xsed_format.sh')
19487bc3f74SBram Moolenaar    call system('chmod +x ./Xsed_format.sh')
19587bc3f74SBram Moolenaar  endif
19687bc3f74SBram Moolenaar  call Setup_NewWindow()
19787bc3f74SBram Moolenaar  %d
19887bc3f74SBram Moolenaar  call setline(1, ['a', '', 'c', '', ' ', 'd', 'e'])
19987bc3f74SBram Moolenaar  set formatprg=./Xsed_format.sh
20087bc3f74SBram Moolenaar  norm! gggqG
20187bc3f74SBram Moolenaar  call assert_equal(['1    a', '', '3    c', '', '5     ', '6    d', '7    e'], getline(1, '$'))
20287bc3f74SBram Moolenaar  " clean up
20387bc3f74SBram Moolenaar  set formatprg=
20487bc3f74SBram Moolenaar  call delete('Xsed_format.sh')
20587bc3f74SBram Moolenaar  bw!
20687bc3f74SBram Moolenaarendfu
20787bc3f74SBram Moolenaar
20887bc3f74SBram Moolenaarfunc! Test_normal07_internalfmt()
20987bc3f74SBram Moolenaar  " basic test for internal formmatter to textwidth of 12
21087bc3f74SBram Moolenaar  let list=range(1,11)
21187bc3f74SBram Moolenaar  call map(list, 'v:val."    "')
21287bc3f74SBram Moolenaar  10new
21387bc3f74SBram Moolenaar  call setline(1, list)
21487bc3f74SBram Moolenaar  set tw=12
21587bc3f74SBram Moolenaar  norm! gggqG
21687bc3f74SBram Moolenaar  call assert_equal(['1    2    3', '4    5    6', '7    8    9', '10    11    '], getline(1, '$'))
21787bc3f74SBram Moolenaar  " clean up
21831845093SBram Moolenaar  set formatprg= tw=0
21987bc3f74SBram Moolenaar  bw!
22087bc3f74SBram Moolenaarendfu
22187bc3f74SBram Moolenaar
22287bc3f74SBram Moolenaarfunc! Test_normal08_fold()
22387bc3f74SBram Moolenaar  " basic tests for foldopen/folddelete
22487bc3f74SBram Moolenaar  if !has("folding")
22587bc3f74SBram Moolenaar    return
22687bc3f74SBram Moolenaar  endif
22787bc3f74SBram Moolenaar  call Setup_NewWindow()
22887bc3f74SBram Moolenaar  50
22987bc3f74SBram Moolenaar  setl foldenable fdm=marker
23087bc3f74SBram Moolenaar  " First fold
23187bc3f74SBram Moolenaar  norm! V4jzf
23287bc3f74SBram Moolenaar  " check that folds have been created
23387bc3f74SBram Moolenaar  call assert_equal(['50/*{{{*/', '51', '52', '53', '54/*}}}*/'], getline(50,54))
23487bc3f74SBram Moolenaar  " Second fold
23587bc3f74SBram Moolenaar  46
23687bc3f74SBram Moolenaar  norm! V10jzf
23787bc3f74SBram Moolenaar  " check that folds have been created
23887bc3f74SBram Moolenaar  call assert_equal('46/*{{{*/', getline(46))
23987bc3f74SBram Moolenaar  call assert_equal('60/*}}}*/', getline(60))
24087bc3f74SBram Moolenaar  norm! k
24187bc3f74SBram Moolenaar  call assert_equal('45', getline('.'))
24287bc3f74SBram Moolenaar  norm! j
24387bc3f74SBram Moolenaar  call assert_equal('46/*{{{*/', getline('.'))
24487bc3f74SBram Moolenaar  norm! j
24587bc3f74SBram Moolenaar  call assert_equal('61', getline('.'))
24687bc3f74SBram Moolenaar  norm! k
24787bc3f74SBram Moolenaar  " open a fold
24887bc3f74SBram Moolenaar  norm! Vzo
24987bc3f74SBram Moolenaar  norm! k
25087bc3f74SBram Moolenaar  call assert_equal('45', getline('.'))
25187bc3f74SBram Moolenaar  norm! j
25287bc3f74SBram Moolenaar  call assert_equal('46/*{{{*/', getline('.'))
25387bc3f74SBram Moolenaar  norm! j
25487bc3f74SBram Moolenaar  call assert_equal('47', getline('.'))
25587bc3f74SBram Moolenaar  norm! k
25687bc3f74SBram Moolenaar  norm! zcVzO
25787bc3f74SBram Moolenaar  call assert_equal('46/*{{{*/', getline('.'))
25887bc3f74SBram Moolenaar  norm! j
25987bc3f74SBram Moolenaar  call assert_equal('47', getline('.'))
26087bc3f74SBram Moolenaar  norm! j
26187bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
26287bc3f74SBram Moolenaar  norm! j
26387bc3f74SBram Moolenaar  call assert_equal('49', getline('.'))
26487bc3f74SBram Moolenaar  norm! j
26587bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
26687bc3f74SBram Moolenaar  norm! j
26787bc3f74SBram Moolenaar  call assert_equal('51', getline('.'))
26887bc3f74SBram Moolenaar  " delete folds
26987bc3f74SBram Moolenaar  :46
27087bc3f74SBram Moolenaar  " collapse fold
27187bc3f74SBram Moolenaar  norm! V14jzC
27287bc3f74SBram Moolenaar  " delete all folds recursively
27387bc3f74SBram Moolenaar  norm! VzD
27487bc3f74SBram Moolenaar  call assert_equal(['46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60'], getline(46,60))
27587bc3f74SBram Moolenaar
27687bc3f74SBram Moolenaar  " clean up
27787bc3f74SBram Moolenaar  setl nofoldenable fdm=marker
27887bc3f74SBram Moolenaar  bw!
27987bc3f74SBram Moolenaarendfu
28087bc3f74SBram Moolenaar
28187bc3f74SBram Moolenaarfunc! Test_normal09_operatorfunc()
28287bc3f74SBram Moolenaar  " Test operatorfunc
28387bc3f74SBram Moolenaar  call Setup_NewWindow()
28487bc3f74SBram Moolenaar  " Add some spaces for counting
28587bc3f74SBram Moolenaar  50,60s/$/  /
28687bc3f74SBram Moolenaar  unlet! g:a
28787bc3f74SBram Moolenaar  let g:a=0
28887bc3f74SBram Moolenaar  nmap <buffer><silent> ,, :set opfunc=CountSpaces<CR>g@
28987bc3f74SBram Moolenaar  vmap <buffer><silent> ,, :<C-U>call CountSpaces(visualmode(), 1)<CR>
29087bc3f74SBram Moolenaar  50
29187bc3f74SBram Moolenaar  norm V2j,,
29287bc3f74SBram Moolenaar  call assert_equal(6, g:a)
29387bc3f74SBram Moolenaar  norm V,,
29487bc3f74SBram Moolenaar  call assert_equal(2, g:a)
29587bc3f74SBram Moolenaar  norm ,,l
29687bc3f74SBram Moolenaar  call assert_equal(0, g:a)
29787bc3f74SBram Moolenaar  50
29887bc3f74SBram Moolenaar  exe "norm 0\<c-v>10j2l,,"
29987bc3f74SBram Moolenaar  call assert_equal(11, g:a)
30087bc3f74SBram Moolenaar  50
30187bc3f74SBram Moolenaar  norm V10j,,
30287bc3f74SBram Moolenaar  call assert_equal(22, g:a)
30387bc3f74SBram Moolenaar
30487bc3f74SBram Moolenaar  " clean up
30587bc3f74SBram Moolenaar  unmap <buffer> ,,
30687bc3f74SBram Moolenaar  set opfunc=
30787bc3f74SBram Moolenaar  bw!
30887bc3f74SBram Moolenaarendfu
30987bc3f74SBram Moolenaar
31087bc3f74SBram Moolenaarfunc! Test_normal10_expand()
31187bc3f74SBram Moolenaar  " Test for expand()
31287bc3f74SBram Moolenaar  10new
31387bc3f74SBram Moolenaar  call setline(1, ['1', 'ifooar,,cbar'])
31487bc3f74SBram Moolenaar  2
31587bc3f74SBram Moolenaar  norm! $
31687bc3f74SBram Moolenaar  let a=expand('<cword>')
31787bc3f74SBram Moolenaar  let b=expand('<cWORD>')
31887bc3f74SBram Moolenaar  call assert_equal('cbar', a)
31987bc3f74SBram Moolenaar  call assert_equal('ifooar,,cbar', b)
32087bc3f74SBram Moolenaar  " clean up
32187bc3f74SBram Moolenaar  bw!
32287bc3f74SBram Moolenaarendfu
32387bc3f74SBram Moolenaar
32487bc3f74SBram Moolenaarfunc! Test_normal11_showcmd()
32587bc3f74SBram Moolenaar  " test for 'showcmd'
32687bc3f74SBram Moolenaar  10new
32787bc3f74SBram Moolenaar  exe "norm! ofoobar\<esc>"
32887bc3f74SBram Moolenaar  call assert_equal(2, line('$'))
32987bc3f74SBram Moolenaar  set showcmd
33087bc3f74SBram Moolenaar  exe "norm! ofoobar2\<esc>"
33187bc3f74SBram Moolenaar  call assert_equal(3, line('$'))
33287bc3f74SBram Moolenaar  exe "norm! VAfoobar3\<esc>"
33387bc3f74SBram Moolenaar  call assert_equal(3, line('$'))
33487bc3f74SBram Moolenaar  exe "norm! 0d3\<del>2l"
33587bc3f74SBram Moolenaar  call assert_equal('obar2foobar3', getline('.'))
33687bc3f74SBram Moolenaar  bw!
33787bc3f74SBram Moolenaarendfu
33887bc3f74SBram Moolenaar
33987bc3f74SBram Moolenaarfunc! Test_normal12_nv_error()
34087bc3f74SBram Moolenaar  " Test for nv_error
34187bc3f74SBram Moolenaar  10new
34287bc3f74SBram Moolenaar  call setline(1, range(1,5))
34387bc3f74SBram Moolenaar  " should not do anything, just beep
34487bc3f74SBram Moolenaar  exe "norm! <c-k>"
34587bc3f74SBram Moolenaar  call assert_equal(map(range(1,5), 'string(v:val)'), getline(1,'$'))
34687bc3f74SBram Moolenaar  bw!
34787bc3f74SBram Moolenaarendfu
34887bc3f74SBram Moolenaar
34987bc3f74SBram Moolenaarfunc! Test_normal13_help()
35087bc3f74SBram Moolenaar  " Test for F1
35187bc3f74SBram Moolenaar  call assert_equal(1, winnr())
35287bc3f74SBram Moolenaar  call feedkeys("\<f1>", 'txi')
35387bc3f74SBram Moolenaar  call assert_match('help\.txt', bufname('%'))
35487bc3f74SBram Moolenaar  call assert_equal(2, winnr('$'))
35587bc3f74SBram Moolenaar  bw!
35687bc3f74SBram Moolenaarendfu
35787bc3f74SBram Moolenaar
35887bc3f74SBram Moolenaarfunc! Test_normal14_page()
35987bc3f74SBram Moolenaar  " basic test for Ctrl-F and Ctrl-B
36087bc3f74SBram Moolenaar  call Setup_NewWindow()
36187bc3f74SBram Moolenaar  exe "norm! \<c-f>"
36287bc3f74SBram Moolenaar  call assert_equal('9', getline('.'))
36387bc3f74SBram Moolenaar  exe "norm! 2\<c-f>"
36487bc3f74SBram Moolenaar  call assert_equal('25', getline('.'))
36587bc3f74SBram Moolenaar  exe "norm! 2\<c-b>"
36687bc3f74SBram Moolenaar  call assert_equal('18', getline('.'))
36787bc3f74SBram Moolenaar  1
36887bc3f74SBram Moolenaar  set scrolloff=5
36987bc3f74SBram Moolenaar  exe "norm! 2\<c-f>"
37087bc3f74SBram Moolenaar  call assert_equal('21', getline('.'))
37187bc3f74SBram Moolenaar  exe "norm! \<c-b>"
37287bc3f74SBram Moolenaar  call assert_equal('13', getline('.'))
37387bc3f74SBram Moolenaar  1
37487bc3f74SBram Moolenaar  set scrolloff=99
37587bc3f74SBram Moolenaar  exe "norm! \<c-f>"
37687bc3f74SBram Moolenaar  call assert_equal('13', getline('.'))
37787bc3f74SBram Moolenaar  set scrolloff=0
37887bc3f74SBram Moolenaar  100
37987bc3f74SBram Moolenaar  exe "norm! $\<c-b>"
38087bc3f74SBram Moolenaar  call assert_equal('92', getline('.'))
38187bc3f74SBram Moolenaar  call assert_equal([0, 92, 1, 0, 1], getcurpos())
38287bc3f74SBram Moolenaar  100
38387bc3f74SBram Moolenaar  set nostartofline
38487bc3f74SBram Moolenaar  exe "norm! $\<c-b>"
38587bc3f74SBram Moolenaar  call assert_equal('92', getline('.'))
38687bc3f74SBram Moolenaar  call assert_equal([0, 92, 2, 0, 2147483647], getcurpos())
38787bc3f74SBram Moolenaar  " cleanup
38887bc3f74SBram Moolenaar  set startofline
38987bc3f74SBram Moolenaar  bw!
39087bc3f74SBram Moolenaarendfu
39187bc3f74SBram Moolenaar
392bc54f3f3SBram Moolenaarfunc! Test_normal14_page_eol()
393bc54f3f3SBram Moolenaar  10new
394bc54f3f3SBram Moolenaar  norm oxxxxxxx
395bc54f3f3SBram Moolenaar  exe "norm 2\<c-f>"
396bc54f3f3SBram Moolenaar  " check with valgrind that cursor is put back in column 1
397bc54f3f3SBram Moolenaar  exe "norm 2\<c-b>"
398bc54f3f3SBram Moolenaar  bw!
399bc54f3f3SBram Moolenaarendfunc
400bc54f3f3SBram Moolenaar
40187bc3f74SBram Moolenaarfunc! Test_normal15_z_scroll_vert()
40287bc3f74SBram Moolenaar  " basic test for z commands that scroll the window
40387bc3f74SBram Moolenaar  call Setup_NewWindow()
40487bc3f74SBram Moolenaar  100
40587bc3f74SBram Moolenaar  norm! >>
40687bc3f74SBram Moolenaar  " Test for z<cr>
40787bc3f74SBram Moolenaar  exe "norm! z\<cr>"
40887bc3f74SBram Moolenaar  call assert_equal('	100', getline('.'))
40987bc3f74SBram Moolenaar  call assert_equal(100, winsaveview()['topline'])
41087bc3f74SBram Moolenaar  call assert_equal([0, 100, 2, 0, 9], getcurpos())
41187bc3f74SBram Moolenaar
41287bc3f74SBram Moolenaar  " Test for zt
41387bc3f74SBram Moolenaar  21
41487bc3f74SBram Moolenaar  norm! >>0zt
41587bc3f74SBram Moolenaar  call assert_equal('	21', getline('.'))
41687bc3f74SBram Moolenaar  call assert_equal(21, winsaveview()['topline'])
41787bc3f74SBram Moolenaar  call assert_equal([0, 21, 1, 0, 8], getcurpos())
41887bc3f74SBram Moolenaar
41987bc3f74SBram Moolenaar  " Test for zb
42087bc3f74SBram Moolenaar  30
42187bc3f74SBram Moolenaar  norm! >>$ztzb
42287bc3f74SBram Moolenaar  call assert_equal('	30', getline('.'))
42387bc3f74SBram Moolenaar  call assert_equal(30, winsaveview()['topline']+winheight(0)-1)
42487bc3f74SBram Moolenaar  call assert_equal([0, 30, 3, 0, 2147483647], getcurpos())
42587bc3f74SBram Moolenaar
42687bc3f74SBram Moolenaar  " Test for z-
42787bc3f74SBram Moolenaar  1
42887bc3f74SBram Moolenaar  30
42987bc3f74SBram Moolenaar  norm! 0z-
43087bc3f74SBram Moolenaar  call assert_equal('	30', getline('.'))
43187bc3f74SBram Moolenaar  call assert_equal(30, winsaveview()['topline']+winheight(0)-1)
43287bc3f74SBram Moolenaar  call assert_equal([0, 30, 2, 0, 9], getcurpos())
43387bc3f74SBram Moolenaar
43487bc3f74SBram Moolenaar  " Test for z{height}<cr>
43587bc3f74SBram Moolenaar  call assert_equal(10, winheight(0))
43687bc3f74SBram Moolenaar  exe "norm! z12\<cr>"
43787bc3f74SBram Moolenaar  call assert_equal(12, winheight(0))
43887bc3f74SBram Moolenaar  exe "norm! z10\<cr>"
43987bc3f74SBram Moolenaar  call assert_equal(10, winheight(0))
44087bc3f74SBram Moolenaar
44187bc3f74SBram Moolenaar  " Test for z.
44287bc3f74SBram Moolenaar  1
44387bc3f74SBram Moolenaar  21
44487bc3f74SBram Moolenaar  norm! 0z.
44587bc3f74SBram Moolenaar  call assert_equal('	21', getline('.'))
44687bc3f74SBram Moolenaar  call assert_equal(17, winsaveview()['topline'])
44787bc3f74SBram Moolenaar  call assert_equal([0, 21, 2, 0, 9], getcurpos())
44887bc3f74SBram Moolenaar
44987bc3f74SBram Moolenaar  " Test for zz
45087bc3f74SBram Moolenaar  1
45187bc3f74SBram Moolenaar  21
45287bc3f74SBram Moolenaar  norm! 0zz
45387bc3f74SBram Moolenaar  call assert_equal('	21', getline('.'))
45487bc3f74SBram Moolenaar  call assert_equal(17, winsaveview()['topline'])
45587bc3f74SBram Moolenaar  call assert_equal([0, 21, 1, 0, 8], getcurpos())
45687bc3f74SBram Moolenaar
45787bc3f74SBram Moolenaar  " Test for z+
45887bc3f74SBram Moolenaar  11
45987bc3f74SBram Moolenaar  norm! zt
46087bc3f74SBram Moolenaar  norm! z+
46187bc3f74SBram Moolenaar  call assert_equal('	21', getline('.'))
46287bc3f74SBram Moolenaar  call assert_equal(21, winsaveview()['topline'])
46387bc3f74SBram Moolenaar  call assert_equal([0, 21, 2, 0, 9], getcurpos())
46487bc3f74SBram Moolenaar
46587bc3f74SBram Moolenaar  " Test for [count]z+
46687bc3f74SBram Moolenaar  1
46787bc3f74SBram Moolenaar  norm! 21z+
46887bc3f74SBram Moolenaar  call assert_equal('	21', getline('.'))
46987bc3f74SBram Moolenaar  call assert_equal(21, winsaveview()['topline'])
47087bc3f74SBram Moolenaar  call assert_equal([0, 21, 2, 0, 9], getcurpos())
47187bc3f74SBram Moolenaar
47287bc3f74SBram Moolenaar  " Test for z^
47387bc3f74SBram Moolenaar  norm! 22z+0
47487bc3f74SBram Moolenaar  norm! z^
47587bc3f74SBram Moolenaar  call assert_equal('	21', getline('.'))
47687bc3f74SBram Moolenaar  call assert_equal(12, winsaveview()['topline'])
47787bc3f74SBram Moolenaar  call assert_equal([0, 21, 2, 0, 9], getcurpos())
47887bc3f74SBram Moolenaar
47987bc3f74SBram Moolenaar  " Test for [count]z^
48087bc3f74SBram Moolenaar  1
48187bc3f74SBram Moolenaar  norm! 30z^
48287bc3f74SBram Moolenaar  call assert_equal('	21', getline('.'))
48387bc3f74SBram Moolenaar  call assert_equal(12, winsaveview()['topline'])
48487bc3f74SBram Moolenaar  call assert_equal([0, 21, 2, 0, 9], getcurpos())
48587bc3f74SBram Moolenaar
48687bc3f74SBram Moolenaar  " cleanup
48787bc3f74SBram Moolenaar  bw!
48887bc3f74SBram Moolenaarendfu
48987bc3f74SBram Moolenaar
49087bc3f74SBram Moolenaarfunc! Test_normal16_z_scroll_hor()
49187bc3f74SBram Moolenaar  " basic test for z commands that scroll the window
49287bc3f74SBram Moolenaar  10new
49387bc3f74SBram Moolenaar  15vsp
49487bc3f74SBram Moolenaar  set nowrap listchars=
49587bc3f74SBram Moolenaar  let lineA='abcdefghijklmnopqrstuvwxyz'
49687bc3f74SBram Moolenaar  let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
49787bc3f74SBram Moolenaar  $put =lineA
49887bc3f74SBram Moolenaar  $put =lineB
49987bc3f74SBram Moolenaar  1d
50087bc3f74SBram Moolenaar
50187bc3f74SBram Moolenaar  " Test for zl
50287bc3f74SBram Moolenaar  1
50387bc3f74SBram Moolenaar  norm! 5zl
50487bc3f74SBram Moolenaar  call assert_equal(lineA, getline('.'))
50587bc3f74SBram Moolenaar  call assert_equal(6, col('.'))
50687bc3f74SBram Moolenaar  call assert_equal(5, winsaveview()['leftcol'])
50787bc3f74SBram Moolenaar  norm! yl
50887bc3f74SBram Moolenaar  call assert_equal('f', @0)
50987bc3f74SBram Moolenaar
51087bc3f74SBram Moolenaar  " Test for zh
51187bc3f74SBram Moolenaar  norm! 2zh
51287bc3f74SBram Moolenaar  call assert_equal(lineA, getline('.'))
51387bc3f74SBram Moolenaar  call assert_equal(6, col('.'))
51487bc3f74SBram Moolenaar  norm! yl
51587bc3f74SBram Moolenaar  call assert_equal('f', @0)
51687bc3f74SBram Moolenaar  call assert_equal(3, winsaveview()['leftcol'])
51787bc3f74SBram Moolenaar
51887bc3f74SBram Moolenaar  " Test for zL
51987bc3f74SBram Moolenaar  norm! zL
52087bc3f74SBram Moolenaar  call assert_equal(11, col('.'))
52187bc3f74SBram Moolenaar  norm! yl
52287bc3f74SBram Moolenaar  call assert_equal('k', @0)
52387bc3f74SBram Moolenaar  call assert_equal(10, winsaveview()['leftcol'])
52487bc3f74SBram Moolenaar  norm! 2zL
52587bc3f74SBram Moolenaar  call assert_equal(25, col('.'))
52687bc3f74SBram Moolenaar  norm! yl
52787bc3f74SBram Moolenaar  call assert_equal('y', @0)
52887bc3f74SBram Moolenaar  call assert_equal(24, winsaveview()['leftcol'])
52987bc3f74SBram Moolenaar
53087bc3f74SBram Moolenaar  " Test for zH
53187bc3f74SBram Moolenaar  norm! 2zH
53287bc3f74SBram Moolenaar  call assert_equal(25, col('.'))
53387bc3f74SBram Moolenaar  call assert_equal(10, winsaveview()['leftcol'])
53487bc3f74SBram Moolenaar  norm! yl
53587bc3f74SBram Moolenaar  call assert_equal('y', @0)
53687bc3f74SBram Moolenaar
53787bc3f74SBram Moolenaar  " Test for zs
53887bc3f74SBram Moolenaar  norm! $zs
53987bc3f74SBram Moolenaar  call assert_equal(26, col('.'))
54087bc3f74SBram Moolenaar  call assert_equal(25, winsaveview()['leftcol'])
54187bc3f74SBram Moolenaar  norm! yl
54287bc3f74SBram Moolenaar  call assert_equal('z', @0)
54387bc3f74SBram Moolenaar
54487bc3f74SBram Moolenaar  " Test for ze
54587bc3f74SBram Moolenaar  norm! ze
54687bc3f74SBram Moolenaar  call assert_equal(26, col('.'))
54787bc3f74SBram Moolenaar  call assert_equal(11, winsaveview()['leftcol'])
54887bc3f74SBram Moolenaar  norm! yl
54987bc3f74SBram Moolenaar  call assert_equal('z', @0)
55087bc3f74SBram Moolenaar
55187bc3f74SBram Moolenaar  " cleanup
55287bc3f74SBram Moolenaar  set wrap listchars=eol:$
55387bc3f74SBram Moolenaar  bw!
55487bc3f74SBram Moolenaarendfu
55587bc3f74SBram Moolenaar
55687bc3f74SBram Moolenaarfunc! Test_normal17_z_scroll_hor2()
55787bc3f74SBram Moolenaar  " basic test for z commands that scroll the window
55887bc3f74SBram Moolenaar  " using 'sidescrolloff' setting
55987bc3f74SBram Moolenaar  10new
56087bc3f74SBram Moolenaar  20vsp
56187bc3f74SBram Moolenaar  set nowrap listchars= sidescrolloff=5
56287bc3f74SBram Moolenaar  let lineA='abcdefghijklmnopqrstuvwxyz'
56387bc3f74SBram Moolenaar  let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
56487bc3f74SBram Moolenaar  $put =lineA
56587bc3f74SBram Moolenaar  $put =lineB
56687bc3f74SBram Moolenaar  1d
56787bc3f74SBram Moolenaar
56887bc3f74SBram Moolenaar  " Test for zl
56987bc3f74SBram Moolenaar  1
57087bc3f74SBram Moolenaar  norm! 5zl
57187bc3f74SBram Moolenaar  call assert_equal(lineA, getline('.'))
57287bc3f74SBram Moolenaar  call assert_equal(11, col('.'))
57387bc3f74SBram Moolenaar  call assert_equal(5, winsaveview()['leftcol'])
57487bc3f74SBram Moolenaar  norm! yl
57587bc3f74SBram Moolenaar  call assert_equal('k', @0)
57687bc3f74SBram Moolenaar
57787bc3f74SBram Moolenaar  " Test for zh
57887bc3f74SBram Moolenaar  norm! 2zh
57987bc3f74SBram Moolenaar  call assert_equal(lineA, getline('.'))
58087bc3f74SBram Moolenaar  call assert_equal(11, col('.'))
58187bc3f74SBram Moolenaar  norm! yl
58287bc3f74SBram Moolenaar  call assert_equal('k', @0)
58387bc3f74SBram Moolenaar  call assert_equal(3, winsaveview()['leftcol'])
58487bc3f74SBram Moolenaar
58587bc3f74SBram Moolenaar  " Test for zL
58687bc3f74SBram Moolenaar  norm! 0zL
58787bc3f74SBram Moolenaar  call assert_equal(16, col('.'))
58887bc3f74SBram Moolenaar  norm! yl
58987bc3f74SBram Moolenaar  call assert_equal('p', @0)
59087bc3f74SBram Moolenaar  call assert_equal(10, winsaveview()['leftcol'])
59187bc3f74SBram Moolenaar  norm! 2zL
59287bc3f74SBram Moolenaar  call assert_equal(26, col('.'))
59387bc3f74SBram Moolenaar  norm! yl
59487bc3f74SBram Moolenaar  call assert_equal('z', @0)
59587bc3f74SBram Moolenaar  call assert_equal(15, winsaveview()['leftcol'])
59687bc3f74SBram Moolenaar
59787bc3f74SBram Moolenaar  " Test for zH
59887bc3f74SBram Moolenaar  norm! 2zH
59987bc3f74SBram Moolenaar  call assert_equal(15, col('.'))
60087bc3f74SBram Moolenaar  call assert_equal(0, winsaveview()['leftcol'])
60187bc3f74SBram Moolenaar  norm! yl
60287bc3f74SBram Moolenaar  call assert_equal('o', @0)
60387bc3f74SBram Moolenaar
60487bc3f74SBram Moolenaar  " Test for zs
60587bc3f74SBram Moolenaar  norm! $zs
60687bc3f74SBram Moolenaar  call assert_equal(26, col('.'))
60787bc3f74SBram Moolenaar  call assert_equal(20, winsaveview()['leftcol'])
60887bc3f74SBram Moolenaar  norm! yl
60987bc3f74SBram Moolenaar  call assert_equal('z', @0)
61087bc3f74SBram Moolenaar
61187bc3f74SBram Moolenaar  " Test for ze
61287bc3f74SBram Moolenaar  norm! ze
61387bc3f74SBram Moolenaar  call assert_equal(26, col('.'))
61487bc3f74SBram Moolenaar  call assert_equal(11, winsaveview()['leftcol'])
61587bc3f74SBram Moolenaar  norm! yl
61687bc3f74SBram Moolenaar  call assert_equal('z', @0)
61787bc3f74SBram Moolenaar
61887bc3f74SBram Moolenaar  " cleanup
61987bc3f74SBram Moolenaar  set wrap listchars=eol:$ sidescrolloff=0
62087bc3f74SBram Moolenaar  bw!
62187bc3f74SBram Moolenaarendfu
62287bc3f74SBram Moolenaar
62387bc3f74SBram Moolenaarfunc! Test_normal18_z_fold()
62487bc3f74SBram Moolenaar  " basic tests for foldopen/folddelete
62587bc3f74SBram Moolenaar  if !has("folding")
62687bc3f74SBram Moolenaar    return
62787bc3f74SBram Moolenaar  endif
62887bc3f74SBram Moolenaar  call Setup_NewWindow()
62987bc3f74SBram Moolenaar  50
63087bc3f74SBram Moolenaar  setl foldenable fdm=marker foldlevel=5
63187bc3f74SBram Moolenaar
63287bc3f74SBram Moolenaar  " Test for zF
63387bc3f74SBram Moolenaar  " First fold
63487bc3f74SBram Moolenaar  norm! 4zF
63587bc3f74SBram Moolenaar  " check that folds have been created
63687bc3f74SBram Moolenaar  call assert_equal(['50/*{{{*/', '51', '52', '53/*}}}*/'], getline(50,53))
63787bc3f74SBram Moolenaar
63887bc3f74SBram Moolenaar  " Test for zd
63987bc3f74SBram Moolenaar  51
64087bc3f74SBram Moolenaar  norm! 2zF
64187bc3f74SBram Moolenaar  call assert_equal(2, foldlevel('.'))
64287bc3f74SBram Moolenaar  norm! kzd
64387bc3f74SBram Moolenaar  call assert_equal(['50', '51/*{{{*/', '52/*}}}*/', '53'], getline(50,53))
64487bc3f74SBram Moolenaar  norm! j
64587bc3f74SBram Moolenaar  call assert_equal(1, foldlevel('.'))
64687bc3f74SBram Moolenaar
64787bc3f74SBram Moolenaar  " Test for zD
64887bc3f74SBram Moolenaar  " also deletes partially selected folds recursively
64987bc3f74SBram Moolenaar  51
65087bc3f74SBram Moolenaar  norm! zF
65187bc3f74SBram Moolenaar  call assert_equal(2, foldlevel('.'))
65287bc3f74SBram Moolenaar  norm! kV2jzD
65387bc3f74SBram Moolenaar  call assert_equal(['50', '51', '52', '53'], getline(50,53))
65487bc3f74SBram Moolenaar
65587bc3f74SBram Moolenaar  " Test for zE
65687bc3f74SBram Moolenaar  85
65787bc3f74SBram Moolenaar  norm! 4zF
65887bc3f74SBram Moolenaar  86
65987bc3f74SBram Moolenaar  norm! 2zF
66087bc3f74SBram Moolenaar  90
66187bc3f74SBram Moolenaar  norm! 4zF
66287bc3f74SBram Moolenaar  call assert_equal(['85/*{{{*/', '86/*{{{*/', '87/*}}}*/', '88/*}}}*/', '89', '90/*{{{*/', '91', '92', '93/*}}}*/'], getline(85,93))
66387bc3f74SBram Moolenaar  norm! zE
66487bc3f74SBram Moolenaar  call assert_equal(['85', '86', '87', '88', '89', '90', '91', '92', '93'], getline(85,93))
66587bc3f74SBram Moolenaar
66687bc3f74SBram Moolenaar  " Test for zn
66787bc3f74SBram Moolenaar  50
66887bc3f74SBram Moolenaar  set foldlevel=0
66987bc3f74SBram Moolenaar  norm! 2zF
67087bc3f74SBram Moolenaar  norm! zn
67187bc3f74SBram Moolenaar  norm! k
67287bc3f74SBram Moolenaar  call assert_equal('49', getline('.'))
67387bc3f74SBram Moolenaar  norm! j
67487bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
67587bc3f74SBram Moolenaar  norm! j
67687bc3f74SBram Moolenaar  call assert_equal('51/*}}}*/', getline('.'))
67787bc3f74SBram Moolenaar  norm! j
67887bc3f74SBram Moolenaar  call assert_equal('52', getline('.'))
67987bc3f74SBram Moolenaar  call assert_equal(0, &foldenable)
68087bc3f74SBram Moolenaar
68187bc3f74SBram Moolenaar  " Test for zN
68287bc3f74SBram Moolenaar  49
68387bc3f74SBram Moolenaar  norm! zN
68487bc3f74SBram Moolenaar  call assert_equal('49', getline('.'))
68587bc3f74SBram Moolenaar  norm! j
68687bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
68787bc3f74SBram Moolenaar  norm! j
68887bc3f74SBram Moolenaar  call assert_equal('52', getline('.'))
68987bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
69087bc3f74SBram Moolenaar
69187bc3f74SBram Moolenaar  " Test for zi
69287bc3f74SBram Moolenaar  norm! zi
69387bc3f74SBram Moolenaar  call assert_equal(0, &foldenable)
69487bc3f74SBram Moolenaar  norm! zi
69587bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
69687bc3f74SBram Moolenaar  norm! zi
69787bc3f74SBram Moolenaar  call assert_equal(0, &foldenable)
69887bc3f74SBram Moolenaar  norm! zi
69987bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
70087bc3f74SBram Moolenaar
70187bc3f74SBram Moolenaar  " Test for za
70287bc3f74SBram Moolenaar  50
70387bc3f74SBram Moolenaar  norm! za
70487bc3f74SBram Moolenaar  norm! k
70587bc3f74SBram Moolenaar  call assert_equal('49', getline('.'))
70687bc3f74SBram Moolenaar  norm! j
70787bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
70887bc3f74SBram Moolenaar  norm! j
70987bc3f74SBram Moolenaar  call assert_equal('51/*}}}*/', getline('.'))
71087bc3f74SBram Moolenaar  norm! j
71187bc3f74SBram Moolenaar  call assert_equal('52', getline('.'))
71287bc3f74SBram Moolenaar  50
71387bc3f74SBram Moolenaar  norm! za
71487bc3f74SBram Moolenaar  norm! k
71587bc3f74SBram Moolenaar  call assert_equal('49', getline('.'))
71687bc3f74SBram Moolenaar  norm! j
71787bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
71887bc3f74SBram Moolenaar  norm! j
71987bc3f74SBram Moolenaar  call assert_equal('52', getline('.'))
72087bc3f74SBram Moolenaar
72187bc3f74SBram Moolenaar  49
72287bc3f74SBram Moolenaar  norm! 5zF
72387bc3f74SBram Moolenaar  norm! k
72487bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
72587bc3f74SBram Moolenaar  norm! j
72687bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
72787bc3f74SBram Moolenaar  norm! j
72887bc3f74SBram Moolenaar  call assert_equal('55', getline('.'))
72987bc3f74SBram Moolenaar  49
73087bc3f74SBram Moolenaar  norm! za
73187bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
73287bc3f74SBram Moolenaar  norm! j
73387bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
73487bc3f74SBram Moolenaar  norm! j
73587bc3f74SBram Moolenaar  call assert_equal('52', getline('.'))
73687bc3f74SBram Moolenaar  set nofoldenable
73787bc3f74SBram Moolenaar  " close fold and set foldenable
73887bc3f74SBram Moolenaar  norm! za
73987bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
74087bc3f74SBram Moolenaar
74187bc3f74SBram Moolenaar  50
74287bc3f74SBram Moolenaar  " have to use {count}za to open all folds and make the cursor visible
74387bc3f74SBram Moolenaar  norm! 2za
74487bc3f74SBram Moolenaar  norm! 2k
74587bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
74687bc3f74SBram Moolenaar  norm! j
74787bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
74887bc3f74SBram Moolenaar  norm! j
74987bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
75087bc3f74SBram Moolenaar  norm! j
75187bc3f74SBram Moolenaar  call assert_equal('51/*}}}*/', getline('.'))
75287bc3f74SBram Moolenaar  norm! j
75387bc3f74SBram Moolenaar  call assert_equal('52', getline('.'))
75487bc3f74SBram Moolenaar
75587bc3f74SBram Moolenaar  " Test for zA
75687bc3f74SBram Moolenaar  49
75787bc3f74SBram Moolenaar  set foldlevel=0
75887bc3f74SBram Moolenaar  50
75987bc3f74SBram Moolenaar  norm! zA
76087bc3f74SBram Moolenaar  norm! 2k
76187bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
76287bc3f74SBram Moolenaar  norm! j
76387bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
76487bc3f74SBram Moolenaar  norm! j
76587bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
76687bc3f74SBram Moolenaar  norm! j
76787bc3f74SBram Moolenaar  call assert_equal('51/*}}}*/', getline('.'))
76887bc3f74SBram Moolenaar  norm! j
76987bc3f74SBram Moolenaar  call assert_equal('52', getline('.'))
77087bc3f74SBram Moolenaar
77187bc3f74SBram Moolenaar  " zA on a opened fold when foldenale is not set
77287bc3f74SBram Moolenaar  50
77387bc3f74SBram Moolenaar  set nofoldenable
77487bc3f74SBram Moolenaar  norm! zA
77587bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
77687bc3f74SBram Moolenaar  norm! k
77787bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
77887bc3f74SBram Moolenaar  norm! j
77987bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
78087bc3f74SBram Moolenaar  norm! j
78187bc3f74SBram Moolenaar  call assert_equal('55', getline('.'))
78287bc3f74SBram Moolenaar
78387bc3f74SBram Moolenaar  " Test for zc
78487bc3f74SBram Moolenaar  norm! zE
78587bc3f74SBram Moolenaar  50
78687bc3f74SBram Moolenaar  norm! 2zF
78787bc3f74SBram Moolenaar  49
78887bc3f74SBram Moolenaar  norm! 5zF
78987bc3f74SBram Moolenaar  set nofoldenable
79087bc3f74SBram Moolenaar  50
79187bc3f74SBram Moolenaar  " There most likely is a bug somewhere:
79287bc3f74SBram Moolenaar  " https://groups.google.com/d/msg/vim_dev/v2EkfJ_KQjI/u-Cvv94uCAAJ
79387bc3f74SBram Moolenaar  " TODO: Should this only close the inner most fold or both folds?
79487bc3f74SBram Moolenaar  norm! zc
79587bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
79687bc3f74SBram Moolenaar  norm! k
79787bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
79887bc3f74SBram Moolenaar  norm! j
79987bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
80087bc3f74SBram Moolenaar  norm! j
80187bc3f74SBram Moolenaar  call assert_equal('55', getline('.'))
80287bc3f74SBram Moolenaar  set nofoldenable
80387bc3f74SBram Moolenaar  50
80487bc3f74SBram Moolenaar  norm! Vjzc
80587bc3f74SBram Moolenaar  norm! k
80687bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
80787bc3f74SBram Moolenaar  norm! j
80887bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
80987bc3f74SBram Moolenaar  norm! j
81087bc3f74SBram Moolenaar  call assert_equal('55', getline('.'))
81187bc3f74SBram Moolenaar
81287bc3f74SBram Moolenaar  " Test for zC
81387bc3f74SBram Moolenaar  set nofoldenable
81487bc3f74SBram Moolenaar  50
81587bc3f74SBram Moolenaar  norm! zCk
81687bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
81787bc3f74SBram Moolenaar  norm! j
81887bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
81987bc3f74SBram Moolenaar  norm! j
82087bc3f74SBram Moolenaar  call assert_equal('55', getline('.'))
82187bc3f74SBram Moolenaar
82287bc3f74SBram Moolenaar  " Test for zx
82387bc3f74SBram Moolenaar  " 1) close folds at line 49-54
82487bc3f74SBram Moolenaar  set nofoldenable
82587bc3f74SBram Moolenaar  48
82687bc3f74SBram Moolenaar  norm! zx
82787bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
82887bc3f74SBram Moolenaar  norm! j
82987bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
83087bc3f74SBram Moolenaar  norm! j
83187bc3f74SBram Moolenaar  call assert_equal('55', getline('.'))
83287bc3f74SBram Moolenaar
83387bc3f74SBram Moolenaar  " 2) do not close fold under curser
83487bc3f74SBram Moolenaar  51
83587bc3f74SBram Moolenaar  set nofoldenable
83687bc3f74SBram Moolenaar  norm! zx
83787bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
83887bc3f74SBram Moolenaar  norm! 3k
83987bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
84087bc3f74SBram Moolenaar  norm! j
84187bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
84287bc3f74SBram Moolenaar  norm! j
84387bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
84487bc3f74SBram Moolenaar  norm! j
84587bc3f74SBram Moolenaar  call assert_equal('51/*}}}*/', getline('.'))
84687bc3f74SBram Moolenaar  norm! j
84787bc3f74SBram Moolenaar  call assert_equal('52', getline('.'))
84887bc3f74SBram Moolenaar  norm! j
84987bc3f74SBram Moolenaar  call assert_equal('53', getline('.'))
85087bc3f74SBram Moolenaar  norm! j
85187bc3f74SBram Moolenaar  call assert_equal('54/*}}}*/', getline('.'))
85287bc3f74SBram Moolenaar  norm! j
85387bc3f74SBram Moolenaar  call assert_equal('55', getline('.'))
85487bc3f74SBram Moolenaar
85587bc3f74SBram Moolenaar  " 3) close one level of folds
85687bc3f74SBram Moolenaar  48
85787bc3f74SBram Moolenaar  set nofoldenable
85887bc3f74SBram Moolenaar  set foldlevel=1
85987bc3f74SBram Moolenaar  norm! zx
86087bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
86187bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
86287bc3f74SBram Moolenaar  norm! j
86387bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
86487bc3f74SBram Moolenaar  norm! j
86587bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
86687bc3f74SBram Moolenaar  norm! j
86787bc3f74SBram Moolenaar  call assert_equal('52', getline('.'))
86887bc3f74SBram Moolenaar  norm! j
86987bc3f74SBram Moolenaar  call assert_equal('53', getline('.'))
87087bc3f74SBram Moolenaar  norm! j
87187bc3f74SBram Moolenaar  call assert_equal('54/*}}}*/', getline('.'))
87287bc3f74SBram Moolenaar  norm! j
87387bc3f74SBram Moolenaar  call assert_equal('55', getline('.'))
87487bc3f74SBram Moolenaar
87587bc3f74SBram Moolenaar  " Test for zX
87687bc3f74SBram Moolenaar  " Close all folds
87787bc3f74SBram Moolenaar  set foldlevel=0 nofoldenable
87887bc3f74SBram Moolenaar  50
87987bc3f74SBram Moolenaar  norm! zX
88087bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
88187bc3f74SBram Moolenaar  norm! k
88287bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
88387bc3f74SBram Moolenaar  norm! j
88487bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
88587bc3f74SBram Moolenaar  norm! j
88687bc3f74SBram Moolenaar  call assert_equal('55', getline('.'))
88787bc3f74SBram Moolenaar
88887bc3f74SBram Moolenaar  " Test for zm
88987bc3f74SBram Moolenaar  50
89087bc3f74SBram Moolenaar  set nofoldenable foldlevel=2
89187bc3f74SBram Moolenaar  norm! zm
89287bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
89387bc3f74SBram Moolenaar  call assert_equal(1, &foldlevel)
89487bc3f74SBram Moolenaar  norm! zm
89587bc3f74SBram Moolenaar  call assert_equal(0, &foldlevel)
89687bc3f74SBram Moolenaar  norm! zm
89787bc3f74SBram Moolenaar  call assert_equal(0, &foldlevel)
89887bc3f74SBram Moolenaar  norm! k
89987bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
90087bc3f74SBram Moolenaar  norm! j
90187bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
90287bc3f74SBram Moolenaar  norm! j
90387bc3f74SBram Moolenaar  call assert_equal('55', getline('.'))
90487bc3f74SBram Moolenaar
90587bc3f74SBram Moolenaar  " Test for zM
90687bc3f74SBram Moolenaar  48
90787bc3f74SBram Moolenaar  set nofoldenable foldlevel=99
90887bc3f74SBram Moolenaar  norm! zM
90987bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
91087bc3f74SBram Moolenaar  call assert_equal(0, &foldlevel)
91187bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
91287bc3f74SBram Moolenaar  norm! j
91387bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
91487bc3f74SBram Moolenaar  norm! j
91587bc3f74SBram Moolenaar  call assert_equal('55', getline('.'))
91687bc3f74SBram Moolenaar
91787bc3f74SBram Moolenaar  " Test for zr
91887bc3f74SBram Moolenaar  48
91987bc3f74SBram Moolenaar  set nofoldenable foldlevel=0
92087bc3f74SBram Moolenaar  norm! zr
92187bc3f74SBram Moolenaar  call assert_equal(0, &foldenable)
92287bc3f74SBram Moolenaar  call assert_equal(1, &foldlevel)
92387bc3f74SBram Moolenaar  set foldlevel=0 foldenable
92487bc3f74SBram Moolenaar  norm! zr
92587bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
92687bc3f74SBram Moolenaar  call assert_equal(1, &foldlevel)
92787bc3f74SBram Moolenaar  norm! zr
92887bc3f74SBram Moolenaar  call assert_equal(2, &foldlevel)
92987bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
93087bc3f74SBram Moolenaar  norm! j
93187bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
93287bc3f74SBram Moolenaar  norm! j
93387bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
93487bc3f74SBram Moolenaar  norm! j
93587bc3f74SBram Moolenaar  call assert_equal('51/*}}}*/', getline('.'))
93687bc3f74SBram Moolenaar  norm! j
93787bc3f74SBram Moolenaar  call assert_equal('52', getline('.'))
93887bc3f74SBram Moolenaar
93987bc3f74SBram Moolenaar  " Test for zR
94087bc3f74SBram Moolenaar  48
94187bc3f74SBram Moolenaar  set nofoldenable foldlevel=0
94287bc3f74SBram Moolenaar  norm! zR
94387bc3f74SBram Moolenaar  call assert_equal(0, &foldenable)
94487bc3f74SBram Moolenaar  call assert_equal(2, &foldlevel)
94587bc3f74SBram Moolenaar  set foldenable foldlevel=0
94687bc3f74SBram Moolenaar  norm! zR
94787bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
94887bc3f74SBram Moolenaar  call assert_equal(2, &foldlevel)
94987bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
95087bc3f74SBram Moolenaar  norm! j
95187bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
95287bc3f74SBram Moolenaar  norm! j
95387bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
95487bc3f74SBram Moolenaar  norm! j
95587bc3f74SBram Moolenaar  call assert_equal('51/*}}}*/', getline('.'))
95687bc3f74SBram Moolenaar  norm! j
95787bc3f74SBram Moolenaar  call assert_equal('52', getline('.'))
95887bc3f74SBram Moolenaar  call append(50, ['a /*{{{*/', 'b /*}}}*/'])
95987bc3f74SBram Moolenaar  48
96087bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
96187bc3f74SBram Moolenaar  norm! j
96287bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
96387bc3f74SBram Moolenaar  norm! j
96487bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
96587bc3f74SBram Moolenaar  norm! j
96687bc3f74SBram Moolenaar  call assert_equal('a /*{{{*/', getline('.'))
96787bc3f74SBram Moolenaar  norm! j
96887bc3f74SBram Moolenaar  call assert_equal('51/*}}}*/', getline('.'))
96987bc3f74SBram Moolenaar  norm! j
97087bc3f74SBram Moolenaar  call assert_equal('52', getline('.'))
97187bc3f74SBram Moolenaar  48
97287bc3f74SBram Moolenaar  norm! zR
97387bc3f74SBram Moolenaar  call assert_equal(1, &foldenable)
97487bc3f74SBram Moolenaar  call assert_equal(3, &foldlevel)
97587bc3f74SBram Moolenaar  call assert_equal('48', getline('.'))
97687bc3f74SBram Moolenaar  norm! j
97787bc3f74SBram Moolenaar  call assert_equal('49/*{{{*/', getline('.'))
97887bc3f74SBram Moolenaar  norm! j
97987bc3f74SBram Moolenaar  call assert_equal('50/*{{{*/', getline('.'))
98087bc3f74SBram Moolenaar  norm! j
98187bc3f74SBram Moolenaar  call assert_equal('a /*{{{*/', getline('.'))
98287bc3f74SBram Moolenaar  norm! j
98387bc3f74SBram Moolenaar  call assert_equal('b /*}}}*/', getline('.'))
98487bc3f74SBram Moolenaar  norm! j
98587bc3f74SBram Moolenaar  call assert_equal('51/*}}}*/', getline('.'))
98687bc3f74SBram Moolenaar  norm! j
98787bc3f74SBram Moolenaar  call assert_equal('52', getline('.'))
98887bc3f74SBram Moolenaar
98987bc3f74SBram Moolenaar  " clean up
99087bc3f74SBram Moolenaar  setl nofoldenable fdm=marker foldlevel=0
99187bc3f74SBram Moolenaar  bw!
99287bc3f74SBram Moolenaarendfu
99387bc3f74SBram Moolenaar
99487bc3f74SBram Moolenaarfunc! Test_normal19_z_spell()
99587bc3f74SBram Moolenaar  if !has("spell") || !has('syntax')
99687bc3f74SBram Moolenaar    return
99787bc3f74SBram Moolenaar  endif
99887bc3f74SBram Moolenaar  new
99987bc3f74SBram Moolenaar  call append(0, ['1 good', '2 goood', '3 goood'])
100087bc3f74SBram Moolenaar  set spell spellfile=./Xspellfile.add spelllang=en
100187bc3f74SBram Moolenaar  let oldlang=v:lang
100287bc3f74SBram Moolenaar  lang C
100387bc3f74SBram Moolenaar
100487bc3f74SBram Moolenaar  " Test for zg
100587bc3f74SBram Moolenaar  1
100687bc3f74SBram Moolenaar  norm! ]s
100787bc3f74SBram Moolenaar  call assert_equal('2 goood', getline('.'))
100887bc3f74SBram Moolenaar  norm! zg
100987bc3f74SBram Moolenaar  1
101087bc3f74SBram Moolenaar  let a=execute('unsilent :norm! ]s')
101187bc3f74SBram Moolenaar  call assert_equal('1 good', getline('.'))
101287bc3f74SBram Moolenaar  call assert_equal('search hit BOTTOM, continuing at TOP', a[1:])
101387bc3f74SBram Moolenaar  let cnt=readfile('./Xspellfile.add')
101487bc3f74SBram Moolenaar  call assert_equal('goood', cnt[0])
101587bc3f74SBram Moolenaar
101687bc3f74SBram Moolenaar  " Test for zw
101787bc3f74SBram Moolenaar  2
101887bc3f74SBram Moolenaar  norm! $zw
101987bc3f74SBram Moolenaar  1
102087bc3f74SBram Moolenaar  norm! ]s
102187bc3f74SBram Moolenaar  call assert_equal('2 goood', getline('.'))
102287bc3f74SBram Moolenaar  let cnt=readfile('./Xspellfile.add')
102387bc3f74SBram Moolenaar  call assert_equal('#oood', cnt[0])
102487bc3f74SBram Moolenaar  call assert_equal('goood/!', cnt[1])
102587bc3f74SBram Moolenaar
102687bc3f74SBram Moolenaar  " Test for zg in visual mode
102787bc3f74SBram Moolenaar  let a=execute('unsilent :norm! V$zg')
102887bc3f74SBram Moolenaar  call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:])
102987bc3f74SBram Moolenaar  1
103087bc3f74SBram Moolenaar  norm! ]s
103187bc3f74SBram Moolenaar  call assert_equal('3 goood', getline('.'))
103287bc3f74SBram Moolenaar  let cnt=readfile('./Xspellfile.add')
103387bc3f74SBram Moolenaar  call assert_equal('2 goood', cnt[2])
103487bc3f74SBram Moolenaar  " Remove "2 good" from spellfile
103587bc3f74SBram Moolenaar  2
103687bc3f74SBram Moolenaar  let a=execute('unsilent norm! V$zw')
103787bc3f74SBram Moolenaar  call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:])
103887bc3f74SBram Moolenaar  let cnt=readfile('./Xspellfile.add')
103987bc3f74SBram Moolenaar  call assert_equal('2 goood/!', cnt[3])
104087bc3f74SBram Moolenaar
104187bc3f74SBram Moolenaar  " Test for zG
104287bc3f74SBram Moolenaar  let a=execute('unsilent norm! V$zG')
104387bc3f74SBram Moolenaar  call assert_match("Word '2 goood' added to .*", a)
104487bc3f74SBram Moolenaar  let fname=matchstr(a, 'to\s\+\zs\f\+$')
104587bc3f74SBram Moolenaar  let cnt=readfile(fname)
104687bc3f74SBram Moolenaar  call assert_equal('2 goood', cnt[0])
104787bc3f74SBram Moolenaar
104887bc3f74SBram Moolenaar  " Test for zW
104987bc3f74SBram Moolenaar  let a=execute('unsilent norm! V$zW')
105087bc3f74SBram Moolenaar  call assert_match("Word '2 goood' added to .*", a)
105187bc3f74SBram Moolenaar  let cnt=readfile(fname)
105287bc3f74SBram Moolenaar  call assert_equal('# goood', cnt[0])
105387bc3f74SBram Moolenaar  call assert_equal('2 goood/!', cnt[1])
105487bc3f74SBram Moolenaar
105587bc3f74SBram Moolenaar  " Test for zuW
105687bc3f74SBram Moolenaar  let a=execute('unsilent norm! V$zuW')
105787bc3f74SBram Moolenaar  call assert_match("Word '2 goood' removed from .*", a)
105887bc3f74SBram Moolenaar  let cnt=readfile(fname)
105987bc3f74SBram Moolenaar  call assert_equal('# goood', cnt[0])
106087bc3f74SBram Moolenaar  call assert_equal('# goood/!', cnt[1])
106187bc3f74SBram Moolenaar
106287bc3f74SBram Moolenaar  " Test for zuG
106387bc3f74SBram Moolenaar  let a=execute('unsilent norm! $zG')
106487bc3f74SBram Moolenaar  call assert_match("Word 'goood' added to .*", a)
106587bc3f74SBram Moolenaar  let cnt=readfile(fname)
106687bc3f74SBram Moolenaar  call assert_equal('# goood', cnt[0])
106787bc3f74SBram Moolenaar  call assert_equal('# goood/!', cnt[1])
106887bc3f74SBram Moolenaar  call assert_equal('goood', cnt[2])
106987bc3f74SBram Moolenaar  let a=execute('unsilent norm! $zuG')
107087bc3f74SBram Moolenaar  let cnt=readfile(fname)
107187bc3f74SBram Moolenaar  call assert_match("Word 'goood' removed from .*", a)
107287bc3f74SBram Moolenaar  call assert_equal('# goood', cnt[0])
107387bc3f74SBram Moolenaar  call assert_equal('# goood/!', cnt[1])
107487bc3f74SBram Moolenaar  call assert_equal('#oood', cnt[2])
107587bc3f74SBram Moolenaar  " word not found in wordlist
107687bc3f74SBram Moolenaar  let a=execute('unsilent norm! V$zuG')
107787bc3f74SBram Moolenaar  let cnt=readfile(fname)
107887bc3f74SBram Moolenaar  call assert_match("", a)
107987bc3f74SBram Moolenaar  call assert_equal('# goood', cnt[0])
108087bc3f74SBram Moolenaar  call assert_equal('# goood/!', cnt[1])
108187bc3f74SBram Moolenaar  call assert_equal('#oood', cnt[2])
108287bc3f74SBram Moolenaar
108387bc3f74SBram Moolenaar  " Test for zug
108487bc3f74SBram Moolenaar  call delete('./Xspellfile.add')
108587bc3f74SBram Moolenaar  2
108687bc3f74SBram Moolenaar  let a=execute('unsilent norm! $zg')
108787bc3f74SBram Moolenaar  let cnt=readfile('./Xspellfile.add')
108887bc3f74SBram Moolenaar  call assert_equal('goood', cnt[0])
108987bc3f74SBram Moolenaar  let a=execute('unsilent norm! $zug')
109087bc3f74SBram Moolenaar  call assert_match("Word 'goood' removed from \./Xspellfile.add", a)
109187bc3f74SBram Moolenaar  let cnt=readfile('./Xspellfile.add')
109287bc3f74SBram Moolenaar  call assert_equal('#oood', cnt[0])
109387bc3f74SBram Moolenaar  " word not in wordlist
109487bc3f74SBram Moolenaar  let a=execute('unsilent norm! V$zug')
109587bc3f74SBram Moolenaar  call assert_match('', a)
109687bc3f74SBram Moolenaar  let cnt=readfile('./Xspellfile.add')
109787bc3f74SBram Moolenaar  call assert_equal('#oood', cnt[0])
109887bc3f74SBram Moolenaar
109987bc3f74SBram Moolenaar  " Test for zuw
110087bc3f74SBram Moolenaar  call delete('./Xspellfile.add')
110187bc3f74SBram Moolenaar  2
110287bc3f74SBram Moolenaar  let a=execute('unsilent norm! Vzw')
110387bc3f74SBram Moolenaar  let cnt=readfile('./Xspellfile.add')
110487bc3f74SBram Moolenaar  call assert_equal('2 goood/!', cnt[0])
110587bc3f74SBram Moolenaar  let a=execute('unsilent norm! Vzuw')
110687bc3f74SBram Moolenaar  call assert_match("Word '2 goood' removed from \./Xspellfile.add", a)
110787bc3f74SBram Moolenaar  let cnt=readfile('./Xspellfile.add')
110887bc3f74SBram Moolenaar  call assert_equal('# goood/!', cnt[0])
110987bc3f74SBram Moolenaar  " word not in wordlist
111087bc3f74SBram Moolenaar  let a=execute('unsilent norm! $zug')
111187bc3f74SBram Moolenaar  call assert_match('', a)
111287bc3f74SBram Moolenaar  let cnt=readfile('./Xspellfile.add')
111387bc3f74SBram Moolenaar  call assert_equal('# goood/!', cnt[0])
111487bc3f74SBram Moolenaar
111587bc3f74SBram Moolenaar  " add second entry to spellfile setting
111687bc3f74SBram Moolenaar  set spellfile=./Xspellfile.add,./Xspellfile2.add
111787bc3f74SBram Moolenaar  call delete('./Xspellfile.add')
111887bc3f74SBram Moolenaar  2
111987bc3f74SBram Moolenaar  let a=execute('unsilent norm! $2zg')
112087bc3f74SBram Moolenaar  let cnt=readfile('./Xspellfile2.add')
112187bc3f74SBram Moolenaar  call assert_match("Word 'goood' added to ./Xspellfile2.add", a)
112287bc3f74SBram Moolenaar  call assert_equal('goood', cnt[0])
112387bc3f74SBram Moolenaar
112487bc3f74SBram Moolenaar  " clean up
112587bc3f74SBram Moolenaar  exe "lang" oldlang
112687bc3f74SBram Moolenaar  call delete("./Xspellfile.add")
112787bc3f74SBram Moolenaar  call delete("./Xspellfile2.add")
1128*df0db16cSBram Moolenaar  call delete("./Xspellfile.add.spl")
1129*df0db16cSBram Moolenaar  call delete("./Xspellfile2.add.spl")
113087bc3f74SBram Moolenaar
113187bc3f74SBram Moolenaar  " zux -> no-op
113287bc3f74SBram Moolenaar  2
113387bc3f74SBram Moolenaar  norm! $zux
113487bc3f74SBram Moolenaar  call assert_equal([], glob('Xspellfile.add',0,1))
113587bc3f74SBram Moolenaar  call assert_equal([], glob('Xspellfile2.add',0,1))
113687bc3f74SBram Moolenaar
113787bc3f74SBram Moolenaar  set spellfile=
113887bc3f74SBram Moolenaar  bw!
113987bc3f74SBram Moolenaarendfu
114087bc3f74SBram Moolenaar
114187bc3f74SBram Moolenaarfunc! Test_normal20_exmode()
11420913a108SBram Moolenaar  if !has("unix")
11430913a108SBram Moolenaar    " Reading from redirected file doesn't work on MS-Windows
114487bc3f74SBram Moolenaar    return
114587bc3f74SBram Moolenaar  endif
114687bc3f74SBram Moolenaar  call writefile(['1a', 'foo', 'bar', '.', 'w! Xfile2', 'q!'], 'Xscript')
114787bc3f74SBram Moolenaar  call writefile(['1', '2'], 'Xfile')
114887bc3f74SBram Moolenaar  call system(v:progpath .' -e -s < Xscript Xfile')
114987bc3f74SBram Moolenaar  let a=readfile('Xfile2')
115087bc3f74SBram Moolenaar  call assert_equal(['1', 'foo', 'bar', '2'], a)
115187bc3f74SBram Moolenaar
115287bc3f74SBram Moolenaar  " clean up
115387bc3f74SBram Moolenaar  for file in ['Xfile', 'Xfile2', 'Xscript']
115487bc3f74SBram Moolenaar    call delete(file)
115587bc3f74SBram Moolenaar  endfor
115687bc3f74SBram Moolenaar  bw!
115787bc3f74SBram Moolenaarendfu
115887bc3f74SBram Moolenaar
115987bc3f74SBram Moolenaarfunc! Test_normal21_nv_hat()
116087bc3f74SBram Moolenaar  set hidden
116187bc3f74SBram Moolenaar  e Xfoobar
116287bc3f74SBram Moolenaar  e Xfile2
116387bc3f74SBram Moolenaar  call feedkeys("\<c-^>", 't')
116487bc3f74SBram Moolenaar  call assert_equal("Xfile2", fnamemodify(bufname('%'), ':t'))
116587bc3f74SBram Moolenaar  call feedkeys("f\<c-^>", 't')
116687bc3f74SBram Moolenaar  call assert_equal("Xfile2", fnamemodify(bufname('%'), ':t'))
116787bc3f74SBram Moolenaar  " clean up
116887bc3f74SBram Moolenaar  set nohidden
116987bc3f74SBram Moolenaar  bw!
117087bc3f74SBram Moolenaarendfu
117187bc3f74SBram Moolenaar
117287bc3f74SBram Moolenaarfunc! Test_normal22_zet()
117387bc3f74SBram Moolenaar  " Test for ZZ
11740913a108SBram Moolenaar  " let shell = &shell
11750913a108SBram Moolenaar  " let &shell = 'sh'
117687bc3f74SBram Moolenaar  call writefile(['1', '2'], 'Xfile')
117787bc3f74SBram Moolenaar  let args = ' -u NONE -N -U NONE -i NONE --noplugins -X --not-a-term'
117887bc3f74SBram Moolenaar  call system(v:progpath . args . ' -c "%d" -c ":norm! ZZ" Xfile')
117987bc3f74SBram Moolenaar  let a = readfile('Xfile')
118087bc3f74SBram Moolenaar  call assert_equal([], a)
118187bc3f74SBram Moolenaar  " Test for ZQ
118287bc3f74SBram Moolenaar  call writefile(['1', '2'], 'Xfile')
118387bc3f74SBram Moolenaar  call system(v:progpath . args . ' -c "%d" -c ":norm! ZQ" Xfile')
118487bc3f74SBram Moolenaar  let a = readfile('Xfile')
118587bc3f74SBram Moolenaar  call assert_equal(['1', '2'], a)
118687bc3f74SBram Moolenaar
118787bc3f74SBram Moolenaar  " clean up
118887bc3f74SBram Moolenaar  for file in ['Xfile']
118987bc3f74SBram Moolenaar    call delete(file)
119087bc3f74SBram Moolenaar  endfor
11910913a108SBram Moolenaar  " let &shell = shell
119287bc3f74SBram Moolenaarendfu
119387bc3f74SBram Moolenaar
119487bc3f74SBram Moolenaarfunc! Test_normal23_K()
119587bc3f74SBram Moolenaar  " Test for K command
119687bc3f74SBram Moolenaar  new
119787bc3f74SBram Moolenaar  call append(0, ['version8.txt', 'man'])
119887bc3f74SBram Moolenaar  let k = &keywordprg
119987bc3f74SBram Moolenaar  set keywordprg=:help
120087bc3f74SBram Moolenaar  1
120187bc3f74SBram Moolenaar  norm! VK
120287bc3f74SBram Moolenaar  call assert_equal('version8.txt', fnamemodify(bufname('%'), ':t'))
120387bc3f74SBram Moolenaar  call assert_equal('help', &ft)
120487bc3f74SBram Moolenaar  call assert_match('\*version8.txt\*', getline('.'))
120587bc3f74SBram Moolenaar  helpclose
120687bc3f74SBram Moolenaar  norm! 0K
120787bc3f74SBram Moolenaar  call assert_equal('version8.txt', fnamemodify(bufname('%'), ':t'))
120887bc3f74SBram Moolenaar  call assert_equal('help', &ft)
120987bc3f74SBram Moolenaar  call assert_match('\*version8\.0\*', getline('.'))
121087bc3f74SBram Moolenaar  helpclose
121187bc3f74SBram Moolenaar
12120913a108SBram Moolenaar  " Only expect "man" to work on Unix
12130913a108SBram Moolenaar  if !has("unix")
121487bc3f74SBram Moolenaar    let &keywordprg = k
121587bc3f74SBram Moolenaar    bw!
121687bc3f74SBram Moolenaar    return
121787bc3f74SBram Moolenaar  endif
121887bc3f74SBram Moolenaar  set keywordprg=man\ --pager=cat
121987bc3f74SBram Moolenaar  " Test for using man
122087bc3f74SBram Moolenaar  2
122187bc3f74SBram Moolenaar  let a = execute('unsilent norm! K')
122287bc3f74SBram Moolenaar  call assert_match("man --pager=cat 'man'", a)
122387bc3f74SBram Moolenaar
122487bc3f74SBram Moolenaar  " clean up
122587bc3f74SBram Moolenaar  let &keywordprg = k
122687bc3f74SBram Moolenaar  bw!
122787bc3f74SBram Moolenaarendfu
122887bc3f74SBram Moolenaar
122987bc3f74SBram Moolenaarfunc! Test_normal24_rot13()
123087bc3f74SBram Moolenaar  " This test uses multi byte characters
123187bc3f74SBram Moolenaar  if !has("multi_byte")
123287bc3f74SBram Moolenaar    return
123387bc3f74SBram Moolenaar  endif
123487bc3f74SBram Moolenaar  " Testing for g?? g?g?
123587bc3f74SBram Moolenaar  new
123687bc3f74SBram Moolenaar  call append(0, 'abcdefghijklmnopqrstuvwxyzäüö')
123787bc3f74SBram Moolenaar  1
123887bc3f74SBram Moolenaar  norm! g??
123987bc3f74SBram Moolenaar  call assert_equal('nopqrstuvwxyzabcdefghijklmäüö', getline('.'))
124087bc3f74SBram Moolenaar  norm! g?g?
124187bc3f74SBram Moolenaar  call assert_equal('abcdefghijklmnopqrstuvwxyzäüö', getline('.'))
124287bc3f74SBram Moolenaar
124387bc3f74SBram Moolenaar  " clean up
124487bc3f74SBram Moolenaar  bw!
124587bc3f74SBram Moolenaarendfu
124687bc3f74SBram Moolenaar
124787bc3f74SBram Moolenaarfunc! Test_normal25_tag()
124887bc3f74SBram Moolenaar  " Testing for CTRL-] g CTRL-] g]
124987bc3f74SBram Moolenaar  " CTRL-W g] CTRL-W CTRL-] CTRL-W g CTRL-]
125087bc3f74SBram Moolenaar  h
125187bc3f74SBram Moolenaar  " Test for CTRL-]
125287bc3f74SBram Moolenaar  call search('\<x\>$')
125387bc3f74SBram Moolenaar  exe "norm! \<c-]>"
125487bc3f74SBram Moolenaar  call assert_equal("change.txt", fnamemodify(bufname('%'), ':t'))
125587bc3f74SBram Moolenaar  norm! yiW
125687bc3f74SBram Moolenaar  call assert_equal("*x*", @0)
125787bc3f74SBram Moolenaar  exe ":norm \<c-o>"
125887bc3f74SBram Moolenaar
125987bc3f74SBram Moolenaar  " Test for g_CTRL-]
126087bc3f74SBram Moolenaar  call search('\<v_u\>$')
126187bc3f74SBram Moolenaar  exe "norm! g\<c-]>"
126287bc3f74SBram Moolenaar  call assert_equal("change.txt", fnamemodify(bufname('%'), ':t'))
126387bc3f74SBram Moolenaar  norm! yiW
126487bc3f74SBram Moolenaar  call assert_equal("*v_u*", @0)
126587bc3f74SBram Moolenaar  exe ":norm \<c-o>"
126687bc3f74SBram Moolenaar
126787bc3f74SBram Moolenaar  " Test for g]
126887bc3f74SBram Moolenaar  call search('\<i_<Esc>$')
126987bc3f74SBram Moolenaar  let a = execute(":norm! g]")
127087bc3f74SBram Moolenaar  call assert_match('i_<Esc>.*insert.txt', a)
127187bc3f74SBram Moolenaar
127287bc3f74SBram Moolenaar  if !empty(exepath('cscope')) && has('cscope')
127387bc3f74SBram Moolenaar    " setting cscopetag changes how g] works
127487bc3f74SBram Moolenaar    set cst
127587bc3f74SBram Moolenaar    exe "norm! g]"
127687bc3f74SBram Moolenaar    call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t'))
127787bc3f74SBram Moolenaar    norm! yiW
127887bc3f74SBram Moolenaar    call assert_equal("*i_<Esc>*", @0)
127987bc3f74SBram Moolenaar    exe ":norm \<c-o>"
128087bc3f74SBram Moolenaar    " Test for CTRL-W g]
128187bc3f74SBram Moolenaar    exe "norm! \<C-W>g]"
128287bc3f74SBram Moolenaar    call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t'))
128387bc3f74SBram Moolenaar    norm! yiW
128487bc3f74SBram Moolenaar    call assert_equal("*i_<Esc>*", @0)
128587bc3f74SBram Moolenaar    call assert_equal(3, winnr('$'))
128687bc3f74SBram Moolenaar    helpclose
128787bc3f74SBram Moolenaar    set nocst
128887bc3f74SBram Moolenaar  endif
128987bc3f74SBram Moolenaar
129087bc3f74SBram Moolenaar  " Test for CTRL-W g]
129187bc3f74SBram Moolenaar  let a = execute("norm! \<C-W>g]")
129287bc3f74SBram Moolenaar  call assert_match('i_<Esc>.*insert.txt', a)
129387bc3f74SBram Moolenaar
129487bc3f74SBram Moolenaar  " Test for CTRL-W CTRL-]
129587bc3f74SBram Moolenaar  exe "norm! \<C-W>\<C-]>"
129687bc3f74SBram Moolenaar  call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t'))
129787bc3f74SBram Moolenaar  norm! yiW
129887bc3f74SBram Moolenaar  call assert_equal("*i_<Esc>*", @0)
129987bc3f74SBram Moolenaar  call assert_equal(3, winnr('$'))
130087bc3f74SBram Moolenaar  helpclose
130187bc3f74SBram Moolenaar
130287bc3f74SBram Moolenaar  " Test for CTRL-W g CTRL-]
130387bc3f74SBram Moolenaar  exe "norm! \<C-W>g\<C-]>"
130487bc3f74SBram Moolenaar  call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t'))
130587bc3f74SBram Moolenaar  norm! yiW
130687bc3f74SBram Moolenaar  call assert_equal("*i_<Esc>*", @0)
130787bc3f74SBram Moolenaar  call assert_equal(3, winnr('$'))
130887bc3f74SBram Moolenaar  helpclose
130987bc3f74SBram Moolenaar
131087bc3f74SBram Moolenaar  " clean up
131187bc3f74SBram Moolenaar  helpclose
131287bc3f74SBram Moolenaarendfu
131387bc3f74SBram Moolenaar
131487bc3f74SBram Moolenaarfunc! Test_normal26_put()
131587bc3f74SBram Moolenaar  " Test for ]p ]P [p and [P
131687bc3f74SBram Moolenaar  new
131787bc3f74SBram Moolenaar  call append(0, ['while read LINE', 'do', '  ((count++))', '  if [ $? -ne 0 ]; then', "    echo 'Error writing file'", '  fi', 'done'])
131887bc3f74SBram Moolenaar  1
131987bc3f74SBram Moolenaar  /Error/y a
132087bc3f74SBram Moolenaar  2
132187bc3f74SBram Moolenaar  norm! "a]pj"a[p
132287bc3f74SBram Moolenaar  call assert_equal(['do', "echo 'Error writing file'", "  echo 'Error writing file'", '  ((count++))'], getline(2,5))
132387bc3f74SBram Moolenaar  1
132487bc3f74SBram Moolenaar  /^\s\{4}/
132587bc3f74SBram Moolenaar  exe "norm!  \"a]P3Eldt'"
132687bc3f74SBram Moolenaar  exe "norm! j\"a[P2Eldt'"
132787bc3f74SBram Moolenaar  call assert_equal(['  if [ $? -ne 0 ]; then', "    echo 'Error writing'", "    echo 'Error'", "    echo 'Error writing file'", '  fi'], getline(6,10))
132887bc3f74SBram Moolenaar
132987bc3f74SBram Moolenaar  " clean up
133087bc3f74SBram Moolenaar  bw!
133187bc3f74SBram Moolenaarendfu
133287bc3f74SBram Moolenaar
133387bc3f74SBram Moolenaarfunc! Test_normal27_bracket()
133487bc3f74SBram Moolenaar  " Test for [' [` ]' ]`
133587bc3f74SBram Moolenaar  call Setup_NewWindow()
133687bc3f74SBram Moolenaar  1,21s/.\+/  &   b/
133787bc3f74SBram Moolenaar  1
133887bc3f74SBram Moolenaar  norm! $ma
133987bc3f74SBram Moolenaar  5
134087bc3f74SBram Moolenaar  norm! $mb
134187bc3f74SBram Moolenaar  10
134287bc3f74SBram Moolenaar  norm! $mc
134387bc3f74SBram Moolenaar  15
134487bc3f74SBram Moolenaar  norm! $md
134587bc3f74SBram Moolenaar  20
134687bc3f74SBram Moolenaar  norm! $me
134787bc3f74SBram Moolenaar
134887bc3f74SBram Moolenaar  " Test for ['
134987bc3f74SBram Moolenaar  9
135087bc3f74SBram Moolenaar  norm! 2['
135187bc3f74SBram Moolenaar  call assert_equal('  1   b', getline('.'))
135287bc3f74SBram Moolenaar  call assert_equal(1, line('.'))
135387bc3f74SBram Moolenaar  call assert_equal(3, col('.'))
135487bc3f74SBram Moolenaar
135587bc3f74SBram Moolenaar  " Test for ]'
135687bc3f74SBram Moolenaar  norm! ]'
135787bc3f74SBram Moolenaar  call assert_equal('  5   b', getline('.'))
135887bc3f74SBram Moolenaar  call assert_equal(5, line('.'))
135987bc3f74SBram Moolenaar  call assert_equal(3, col('.'))
136087bc3f74SBram Moolenaar
136187bc3f74SBram Moolenaar  " No mark after line 21, cursor moves to first non blank on current line
136287bc3f74SBram Moolenaar  21
136387bc3f74SBram Moolenaar  norm! $]'
136487bc3f74SBram Moolenaar  call assert_equal('  21   b', getline('.'))
136587bc3f74SBram Moolenaar  call assert_equal(21, line('.'))
136687bc3f74SBram Moolenaar  call assert_equal(3, col('.'))
136787bc3f74SBram Moolenaar
136887bc3f74SBram Moolenaar  " Test for [`
136987bc3f74SBram Moolenaar  norm! 2[`
137087bc3f74SBram Moolenaar  call assert_equal('  15   b', getline('.'))
137187bc3f74SBram Moolenaar  call assert_equal(15, line('.'))
137287bc3f74SBram Moolenaar  call assert_equal(8, col('.'))
137387bc3f74SBram Moolenaar
137487bc3f74SBram Moolenaar  " Test for ]`
137587bc3f74SBram Moolenaar  norm! ]`
137687bc3f74SBram Moolenaar  call assert_equal('  20   b', getline('.'))
137787bc3f74SBram Moolenaar  call assert_equal(20, line('.'))
137887bc3f74SBram Moolenaar  call assert_equal(8, col('.'))
137987bc3f74SBram Moolenaar
138087bc3f74SBram Moolenaar  " clean up
138187bc3f74SBram Moolenaar  bw!
138287bc3f74SBram Moolenaarendfu
138387bc3f74SBram Moolenaar
138487bc3f74SBram Moolenaarfunc! Test_normal28_parenthesis()
138587bc3f74SBram Moolenaar  " basic testing for ( and )
138687bc3f74SBram Moolenaar  new
138787bc3f74SBram Moolenaar  call append(0, ['This is a test. With some sentences!', '', 'Even with a question? And one more. And no sentence here'])
138887bc3f74SBram Moolenaar
138987bc3f74SBram Moolenaar  $
139087bc3f74SBram Moolenaar  norm! d(
139187bc3f74SBram Moolenaar  call assert_equal(['This is a test. With some sentences!', '', 'Even with a question? And one more. ', ''], getline(1, '$'))
139287bc3f74SBram Moolenaar  norm! 2d(
139387bc3f74SBram Moolenaar  call assert_equal(['This is a test. With some sentences!', '', ' ', ''], getline(1, '$'))
139487bc3f74SBram Moolenaar  1
139587bc3f74SBram Moolenaar  norm! 0d)
139687bc3f74SBram Moolenaar  call assert_equal(['With some sentences!', '', ' ', ''], getline(1, '$'))
139787bc3f74SBram Moolenaar
139887bc3f74SBram Moolenaar  call append('$', ['This is a long sentence', '', 'spanning', 'over several lines. '])
139987bc3f74SBram Moolenaar  $
140087bc3f74SBram Moolenaar  norm! $d(
140187bc3f74SBram Moolenaar  call assert_equal(['With some sentences!', '', ' ', '', 'This is a long sentence', ''], getline(1, '$'))
140287bc3f74SBram Moolenaar
140387bc3f74SBram Moolenaar  " clean up
140487bc3f74SBram Moolenaar  bw!
140587bc3f74SBram Moolenaarendfu
140687bc3f74SBram Moolenaar
140787bc3f74SBram Moolenaarfun! Test_normal29_brace()
140887bc3f74SBram Moolenaar  " basic test for { and } movements
140987bc3f74SBram Moolenaar  let text= ['A paragraph begins after each empty line, and also at each of a set of',
141087bc3f74SBram Moolenaar  \ 'paragraph macros, specified by the pairs of characters in the ''paragraphs''',
141187bc3f74SBram Moolenaar  \ 'option.  The default is "IPLPPPQPP TPHPLIPpLpItpplpipbp", which corresponds to',
141287bc3f74SBram Moolenaar  \ 'the macros ".IP", ".LP", etc.  (These are nroff macros, so the dot must be in',
141387bc3f74SBram Moolenaar  \ 'the first column).  A section boundary is also a paragraph boundary.',
141487bc3f74SBram Moolenaar  \ 'Note that a blank line (only containing white space) is NOT a paragraph',
141587bc3f74SBram Moolenaar  \ 'boundary.',
141687bc3f74SBram Moolenaar  \ '',
141787bc3f74SBram Moolenaar  \ '',
141887bc3f74SBram Moolenaar  \ 'Also note that this does not include a ''{'' or ''}'' in the first column.  When',
141987bc3f74SBram Moolenaar  \ 'the ''{'' flag is in ''cpoptions'' then ''{'' in the first column is used as a',
142087bc3f74SBram Moolenaar  \ 'paragraph boundary |posix|.',
142187bc3f74SBram Moolenaar  \ '{',
142287bc3f74SBram Moolenaar  \ 'This is no paragaraph',
142387bc3f74SBram Moolenaar  \ 'unless the ''{'' is set',
142487bc3f74SBram Moolenaar  \ 'in ''cpoptions''',
142587bc3f74SBram Moolenaar  \ '}',
142687bc3f74SBram Moolenaar  \ '.IP',
142787bc3f74SBram Moolenaar  \ 'The nroff macros IP seperates a paragraph',
142887bc3f74SBram Moolenaar  \ 'That means, it must be a ''.''',
142987bc3f74SBram Moolenaar  \ 'followed by IP',
143087bc3f74SBram Moolenaar  \ '.LPIt does not matter, if afterwards some',
143187bc3f74SBram Moolenaar  \ 'more characters follow.',
143287bc3f74SBram Moolenaar  \ '.SHAlso section boundaries from the nroff',
143387bc3f74SBram Moolenaar  \ 'macros terminate a paragraph. That means',
143487bc3f74SBram Moolenaar  \ 'a character like this:',
143587bc3f74SBram Moolenaar  \ '.NH',
143687bc3f74SBram Moolenaar  \ 'End of text here']
143787bc3f74SBram Moolenaar  new
143887bc3f74SBram Moolenaar  call append(0, text)
143987bc3f74SBram Moolenaar  1
144087bc3f74SBram Moolenaar  norm! 0d2}
144187bc3f74SBram Moolenaar  call assert_equal(['.IP',
144287bc3f74SBram Moolenaar    \  'The nroff macros IP seperates a paragraph', 'That means, it must be a ''.''', 'followed by IP',
144387bc3f74SBram Moolenaar    \ '.LPIt does not matter, if afterwards some', 'more characters follow.', '.SHAlso section boundaries from the nroff',
144487bc3f74SBram Moolenaar    \  'macros terminate a paragraph. That means', 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$'))
144587bc3f74SBram Moolenaar  norm! 0d}
144687bc3f74SBram Moolenaar  call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.',
144787bc3f74SBram Moolenaar    \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means',
144887bc3f74SBram Moolenaar    \ 'a character like this:', '.NH', 'End of text here', ''], getline(1, '$'))
144987bc3f74SBram Moolenaar  $
145087bc3f74SBram Moolenaar  norm! d{
145187bc3f74SBram Moolenaar  call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.',
145287bc3f74SBram Moolenaar	\ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 'a character like this:', ''], getline(1, '$'))
145387bc3f74SBram Moolenaar  norm! d{
145487bc3f74SBram Moolenaar  call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.', ''], getline(1,'$'))
145587bc3f74SBram Moolenaar  " Test with { in cpooptions
145687bc3f74SBram Moolenaar  %d
145787bc3f74SBram Moolenaar  call append(0, text)
145887bc3f74SBram Moolenaar  set cpo+={
145987bc3f74SBram Moolenaar  1
146087bc3f74SBram Moolenaar  norm! 0d2}
146187bc3f74SBram Moolenaar  call assert_equal(['{', 'This is no paragaraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}',
146287bc3f74SBram Moolenaar    \ '.IP', 'The nroff macros IP seperates a paragraph', 'That means, it must be a ''.''',
146387bc3f74SBram Moolenaar    \ 'followed by IP', '.LPIt does not matter, if afterwards some', 'more characters follow.',
146487bc3f74SBram Moolenaar    \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means',
146587bc3f74SBram Moolenaar    \ 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$'))
146687bc3f74SBram Moolenaar  $
146787bc3f74SBram Moolenaar  norm! d}
146887bc3f74SBram Moolenaar  call assert_equal(['{', 'This is no paragaraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}',
146987bc3f74SBram Moolenaar    \ '.IP', 'The nroff macros IP seperates a paragraph', 'That means, it must be a ''.''',
147087bc3f74SBram Moolenaar    \ 'followed by IP', '.LPIt does not matter, if afterwards some', 'more characters follow.',
147187bc3f74SBram Moolenaar    \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means',
147287bc3f74SBram Moolenaar    \ 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$'))
147387bc3f74SBram Moolenaar  norm! gg}
147487bc3f74SBram Moolenaar  norm! d5}
147587bc3f74SBram Moolenaar  call assert_equal(['{', 'This is no paragaraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}', ''], getline(1,'$'))
147687bc3f74SBram Moolenaar
147787bc3f74SBram Moolenaar  " clean up
147887bc3f74SBram Moolenaar  set cpo-={
147987bc3f74SBram Moolenaar  bw!
148087bc3f74SBram Moolenaarendfu
148187bc3f74SBram Moolenaar
148287bc3f74SBram Moolenaarfun! Test_normal30_changecase()
148387bc3f74SBram Moolenaar  " This test uses multi byte characters
148487bc3f74SBram Moolenaar  if !has("multi_byte")
148587bc3f74SBram Moolenaar    return
148687bc3f74SBram Moolenaar  endif
148787bc3f74SBram Moolenaar  new
148887bc3f74SBram Moolenaar  call append(0, 'This is a simple test: äüöß')
148987bc3f74SBram Moolenaar  norm! 1ggVu
149087bc3f74SBram Moolenaar  call assert_equal('this is a simple test: äüöß', getline('.'))
149187bc3f74SBram Moolenaar  norm! VU
149287bc3f74SBram Moolenaar  call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.'))
149387bc3f74SBram Moolenaar  norm! guu
149487bc3f74SBram Moolenaar  call assert_equal('this is a simple test: äüöss', getline('.'))
149587bc3f74SBram Moolenaar  norm! gUgU
149687bc3f74SBram Moolenaar  call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.'))
149787bc3f74SBram Moolenaar  norm! gugu
149887bc3f74SBram Moolenaar  call assert_equal('this is a simple test: äüöss', getline('.'))
149987bc3f74SBram Moolenaar  norm! gUU
150087bc3f74SBram Moolenaar  call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.'))
150187bc3f74SBram Moolenaar  norm! 010~
150287bc3f74SBram Moolenaar  call assert_equal('this is a SIMPLE TEST: ÄÜÖSS', getline('.'))
150387bc3f74SBram Moolenaar  norm! V~
150487bc3f74SBram Moolenaar  call assert_equal('THIS IS A simple test: äüöss', getline('.'))
150587bc3f74SBram Moolenaar
150687bc3f74SBram Moolenaar  " clean up
150787bc3f74SBram Moolenaar  bw!
150887bc3f74SBram Moolenaarendfu
150987bc3f74SBram Moolenaar
151087bc3f74SBram Moolenaarfun! Test_normal31_r_cmd()
151187bc3f74SBram Moolenaar  " Test for r command
151287bc3f74SBram Moolenaar  new
151387bc3f74SBram Moolenaar  call append(0, 'This is a simple test: abcd')
151487bc3f74SBram Moolenaar  exe "norm! 1gg$r\<cr>"
151587bc3f74SBram Moolenaar  call assert_equal(['This is a simple test: abc', '', ''], getline(1,'$'))
151687bc3f74SBram Moolenaar  exe "norm! 1gg2wlr\<cr>"
151787bc3f74SBram Moolenaar  call assert_equal(['This is a', 'simple test: abc', '', ''], getline(1,'$'))
151887bc3f74SBram Moolenaar  exe "norm! 2gg0W5r\<cr>"
151987bc3f74SBram Moolenaar  call assert_equal(['This is a', 'simple ', ' abc', '', ''], getline('1', '$'))
152087bc3f74SBram Moolenaar  set autoindent
152187bc3f74SBram Moolenaar  call setline(2, ['simple test: abc', ''])
152287bc3f74SBram Moolenaar  exe "norm! 2gg0W5r\<cr>"
152387bc3f74SBram Moolenaar  call assert_equal(['This is a', 'simple ', 'abc', '', '', ''], getline('1', '$'))
152487bc3f74SBram Moolenaar  exe "norm! 1ggVr\<cr>"
152587bc3f74SBram Moolenaar  call assert_equal('^M^M^M^M^M^M^M^M^M', strtrans(getline(1)))
152687bc3f74SBram Moolenaar  call setline(1, 'This is a')
152787bc3f74SBram Moolenaar  exe "norm! 1gg05rf"
152887bc3f74SBram Moolenaar  call assert_equal('fffffis a', getline(1))
152987bc3f74SBram Moolenaar
153087bc3f74SBram Moolenaar  " clean up
153187bc3f74SBram Moolenaar  set noautoindent
153287bc3f74SBram Moolenaar  bw!
153387bc3f74SBram Moolenaarendfu
153487bc3f74SBram Moolenaar
153587bc3f74SBram Moolenaarfunc! Test_normal32_g_cmd1()
153687bc3f74SBram Moolenaar  " Test for g*, g#
153787bc3f74SBram Moolenaar  new
153887bc3f74SBram Moolenaar  call append(0, ['abc.x_foo', 'x_foobar.abc'])
153987bc3f74SBram Moolenaar  1
154087bc3f74SBram Moolenaar  norm! $g*
154187bc3f74SBram Moolenaar  call assert_equal('x_foo', @/)
154287bc3f74SBram Moolenaar  call assert_equal('x_foobar.abc', getline('.'))
154387bc3f74SBram Moolenaar  norm! $g#
154487bc3f74SBram Moolenaar  call assert_equal('abc', @/)
154587bc3f74SBram Moolenaar  call assert_equal('abc.x_foo', getline('.'))
154687bc3f74SBram Moolenaar
154787bc3f74SBram Moolenaar  " clean up
154887bc3f74SBram Moolenaar  bw!
154987bc3f74SBram Moolenaarendfu
155087bc3f74SBram Moolenaar
155187bc3f74SBram Moolenaarfun! Test_normal33_g_cmd2()
155287bc3f74SBram Moolenaar  if !has("jumplist")
155387bc3f74SBram Moolenaar    return
155487bc3f74SBram Moolenaar  endif
155587bc3f74SBram Moolenaar  " Tests for g cmds
155687bc3f74SBram Moolenaar  call Setup_NewWindow()
155787bc3f74SBram Moolenaar  " Test for g`
155887bc3f74SBram Moolenaar  clearjumps
155987bc3f74SBram Moolenaar  norm! ma10j
156087bc3f74SBram Moolenaar  let a=execute(':jumps')
156187bc3f74SBram Moolenaar  " empty jumplist
156287bc3f74SBram Moolenaar  call assert_equal('>', a[-1:])
156387bc3f74SBram Moolenaar  norm! g`a
156487bc3f74SBram Moolenaar  call assert_equal('>', a[-1:])
156587bc3f74SBram Moolenaar  call assert_equal(1, line('.'))
156687bc3f74SBram Moolenaar  call assert_equal('1', getline('.'))
156787bc3f74SBram Moolenaar
156887bc3f74SBram Moolenaar  " Test for g; and g,
156987bc3f74SBram Moolenaar  norm! g;
157087bc3f74SBram Moolenaar  " there is only one change in the changelist
157187bc3f74SBram Moolenaar  " currently, when we setup the window
157287bc3f74SBram Moolenaar  call assert_equal(2, line('.'))
157387bc3f74SBram Moolenaar  call assert_fails(':norm! g;', 'E662')
157487bc3f74SBram Moolenaar  call assert_fails(':norm! g,', 'E663')
157587bc3f74SBram Moolenaar  let &ul=&ul
157687bc3f74SBram Moolenaar  call append('$', ['a', 'b', 'c', 'd'])
157787bc3f74SBram Moolenaar  let &ul=&ul
157887bc3f74SBram Moolenaar  call append('$', ['Z', 'Y', 'X', 'W'])
157987bc3f74SBram Moolenaar  let a = execute(':changes')
158087bc3f74SBram Moolenaar  call assert_match('2\s\+0\s\+2', a)
158187bc3f74SBram Moolenaar  call assert_match('101\s\+0\s\+a', a)
158287bc3f74SBram Moolenaar  call assert_match('105\s\+0\s\+Z', a)
158387bc3f74SBram Moolenaar  norm! 3g;
158487bc3f74SBram Moolenaar  call assert_equal(2, line('.'))
158587bc3f74SBram Moolenaar  norm! 2g,
158687bc3f74SBram Moolenaar  call assert_equal(105, line('.'))
158787bc3f74SBram Moolenaar
158887bc3f74SBram Moolenaar  " Test for g& - global substitute
158987bc3f74SBram Moolenaar  %d
159087bc3f74SBram Moolenaar  call setline(1, range(1,10))
159187bc3f74SBram Moolenaar  call append('$', ['a', 'b', 'c', 'd'])
159287bc3f74SBram Moolenaar  $s/\w/&&/g
159387bc3f74SBram Moolenaar  exe "norm! /[1-8]\<cr>"
159487bc3f74SBram Moolenaar  norm! g&
159587bc3f74SBram Moolenaar  call assert_equal(['11', '22', '33', '44', '55', '66', '77', '88', '9', '110', 'a', 'b', 'c', 'dd'], getline(1, '$'))
159687bc3f74SBram Moolenaar
159787bc3f74SBram Moolenaar  " Test for gv
159887bc3f74SBram Moolenaar  %d
159987bc3f74SBram Moolenaar  call append('$', repeat(['abcdefgh'], 8))
160087bc3f74SBram Moolenaar  exe "norm! 2gg02l\<c-v>2j2ly"
160187bc3f74SBram Moolenaar  call assert_equal(['cde', 'cde', 'cde'], getreg(0, 1, 1))
160287bc3f74SBram Moolenaar  " in visual mode, gv swaps current and last selected region
160387bc3f74SBram Moolenaar  exe "norm! G0\<c-v>4k4lgvd"
160487bc3f74SBram Moolenaar  call assert_equal(['', 'abfgh', 'abfgh', 'abfgh', 'abcdefgh', 'abcdefgh', 'abcdefgh', 'abcdefgh', 'abcdefgh'], getline(1,'$'))
160587bc3f74SBram Moolenaar  exe "norm! G0\<c-v>4k4ly"
160687bc3f74SBram Moolenaar  exe "norm! gvood"
160787bc3f74SBram Moolenaar  call assert_equal(['', 'abfgh', 'abfgh', 'abfgh', 'fgh', 'fgh', 'fgh', 'fgh', 'fgh'], getline(1,'$'))
160887bc3f74SBram Moolenaar
160987bc3f74SBram Moolenaar  " Test for gk/gj
161087bc3f74SBram Moolenaar  %d
161187bc3f74SBram Moolenaar  15vsp
161287bc3f74SBram Moolenaar  set wrap listchars= sbr=
161387bc3f74SBram Moolenaar  let lineA='abcdefghijklmnopqrstuvwxyz'
161487bc3f74SBram Moolenaar  let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
161587bc3f74SBram Moolenaar  $put =lineA
161687bc3f74SBram Moolenaar  $put =lineB
161787bc3f74SBram Moolenaar
161887bc3f74SBram Moolenaar  norm! 3gg0dgk
161987bc3f74SBram Moolenaar  call assert_equal(['', 'abcdefghijklmno', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'], getline(1, '$'))
162087bc3f74SBram Moolenaar  set nu
162187bc3f74SBram Moolenaar  norm! 3gg0gjdgj
162287bc3f74SBram Moolenaar  call assert_equal(['', 'abcdefghijklmno', '0123456789AMNOPQRSTUVWXYZ'], getline(1,'$'))
162387bc3f74SBram Moolenaar
162487bc3f74SBram Moolenaar  " Test for gJ
162587bc3f74SBram Moolenaar  norm! 2gggJ
162687bc3f74SBram Moolenaar  call assert_equal(['', 'abcdefghijklmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$'))
162787bc3f74SBram Moolenaar  call assert_equal(16, col('.'))
162887bc3f74SBram Moolenaar  " shouldn't do anything
162987bc3f74SBram Moolenaar  norm! 10gJ
163087bc3f74SBram Moolenaar  call assert_equal(1, col('.'))
163187bc3f74SBram Moolenaar
163287bc3f74SBram Moolenaar  " Test for g0 g^ gm g$
163387bc3f74SBram Moolenaar  exe "norm! 2gg0gji   "
163487bc3f74SBram Moolenaar  call assert_equal(['', 'abcdefghijk   lmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$'))
163587bc3f74SBram Moolenaar  norm! g0yl
163687bc3f74SBram Moolenaar  call assert_equal(12, col('.'))
163787bc3f74SBram Moolenaar  call assert_equal(' ', getreg(0))
163887bc3f74SBram Moolenaar  norm! g$yl
163987bc3f74SBram Moolenaar  call assert_equal(22, col('.'))
164087bc3f74SBram Moolenaar  call assert_equal('3', getreg(0))
164187bc3f74SBram Moolenaar  norm! gmyl
164287bc3f74SBram Moolenaar  call assert_equal(17, col('.'))
164387bc3f74SBram Moolenaar  call assert_equal('n', getreg(0))
164487bc3f74SBram Moolenaar  norm! g^yl
164587bc3f74SBram Moolenaar  call assert_equal(15, col('.'))
164687bc3f74SBram Moolenaar  call assert_equal('l', getreg(0))
164787bc3f74SBram Moolenaar
164887bc3f74SBram Moolenaar  " Test for g Ctrl-G
16490913a108SBram Moolenaar  set ff=unix
165087bc3f74SBram Moolenaar  let a=execute(":norm! g\<c-g>")
165187bc3f74SBram Moolenaar  call assert_match('Col 15 of 43; Line 2 of 2; Word 2 of 2; Byte 16 of 45', a)
165287bc3f74SBram Moolenaar
165387bc3f74SBram Moolenaar  " Test for gI
165487bc3f74SBram Moolenaar  norm! gIfoo
165587bc3f74SBram Moolenaar  call assert_equal(['', 'fooabcdefghijk   lmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$'))
165687bc3f74SBram Moolenaar
165787bc3f74SBram Moolenaar  " Test for gi
165887bc3f74SBram Moolenaar  wincmd c
165987bc3f74SBram Moolenaar  %d
166087bc3f74SBram Moolenaar  set tw=0
166187bc3f74SBram Moolenaar  call setline(1, ['foobar', 'new line'])
166287bc3f74SBram Moolenaar  norm! A next word
166387bc3f74SBram Moolenaar  $put ='third line'
166487bc3f74SBram Moolenaar  norm! gi another word
166587bc3f74SBram Moolenaar  call assert_equal(['foobar next word another word', 'new line', 'third line'], getline(1,'$'))
166687bc3f74SBram Moolenaar
166787bc3f74SBram Moolenaar  " clean up
166887bc3f74SBram Moolenaar  bw!
166987bc3f74SBram Moolenaarendfu
167087bc3f74SBram Moolenaar
167187bc3f74SBram Moolenaarfun! Test_normal34_g_cmd3()
167287bc3f74SBram Moolenaar  if !has("multi_byte")
167387bc3f74SBram Moolenaar    return
167487bc3f74SBram Moolenaar  endif
167587bc3f74SBram Moolenaar  " Test for g8
167687bc3f74SBram Moolenaar  new
167787bc3f74SBram Moolenaar  call append(0, 'abcdefghijklmnopqrstuvwxyzäüö')
167887bc3f74SBram Moolenaar  let a=execute(':norm! 1gg$g8')
167987bc3f74SBram Moolenaar  call assert_equal('c3 b6 ', a[1:])
168087bc3f74SBram Moolenaar
168187bc3f74SBram Moolenaar  " Test for gp gP
168287bc3f74SBram Moolenaar  call append(1, range(1,10))
168387bc3f74SBram Moolenaar  " clean up
168487bc3f74SBram Moolenaar  bw!
168587bc3f74SBram Moolenaarendfu
168687bc3f74SBram Moolenaar
168787bc3f74SBram Moolenaarfun! Test_normal35_g_cmd4()
168887bc3f74SBram Moolenaar  " Test for g<
168987bc3f74SBram Moolenaar  " Cannot capture its output,
169087bc3f74SBram Moolenaar  " probably a bug, therefore, test disabled:
169131845093SBram Moolenaar  throw "Skipped: output of g< can't be tested currently"
169287bc3f74SBram Moolenaar  echo "a\nb\nc\nd"
169387bc3f74SBram Moolenaar  let b=execute(':norm! g<')
169487bc3f74SBram Moolenaar  call assert_true(!empty(b), 'failed `execute(g<)`')
169587bc3f74SBram Moolenaarendfu
169687bc3f74SBram Moolenaar
169787bc3f74SBram Moolenaarfun! Test_normal36_g_cmd5()
169887bc3f74SBram Moolenaar  new
169987bc3f74SBram Moolenaar  call append(0, 'abcdefghijklmnopqrstuvwxyz')
17000913a108SBram Moolenaar  set ff=unix
170187bc3f74SBram Moolenaar  " Test for gp gP
170287bc3f74SBram Moolenaar  call append(1, range(1,10))
170387bc3f74SBram Moolenaar  1
170487bc3f74SBram Moolenaar  norm! 1yy
170587bc3f74SBram Moolenaar  3
170687bc3f74SBram Moolenaar  norm! gp
170787bc3f74SBram Moolenaar  call assert_equal([0, 5, 1, 0, 1], getcurpos())
170887bc3f74SBram Moolenaar  $
170987bc3f74SBram Moolenaar  norm! gP
171087bc3f74SBram Moolenaar  call assert_equal([0, 14, 1, 0, 1], getcurpos())
171187bc3f74SBram Moolenaar
171287bc3f74SBram Moolenaar  " Test for go
171387bc3f74SBram Moolenaar  norm! 26go
171487bc3f74SBram Moolenaar  call assert_equal([0, 1, 26, 0, 26], getcurpos())
171587bc3f74SBram Moolenaar  norm! 27go
171687bc3f74SBram Moolenaar  call assert_equal([0, 1, 26, 0, 26], getcurpos())
171787bc3f74SBram Moolenaar  norm! 28go
171887bc3f74SBram Moolenaar  call assert_equal([0, 2, 1, 0, 1], getcurpos())
171987bc3f74SBram Moolenaar  set ff=dos
172087bc3f74SBram Moolenaar  norm! 29go
172187bc3f74SBram Moolenaar  call assert_equal([0, 2, 1, 0, 1], getcurpos())
172287bc3f74SBram Moolenaar  set ff=unix
172387bc3f74SBram Moolenaar  norm! gg0
172487bc3f74SBram Moolenaar  norm! 101go
172587bc3f74SBram Moolenaar  call assert_equal([0, 13, 26, 0, 26], getcurpos())
172687bc3f74SBram Moolenaar  norm! 103go
172787bc3f74SBram Moolenaar  call assert_equal([0, 14, 1, 0, 1], getcurpos())
172887bc3f74SBram Moolenaar  " count > buffer content
172987bc3f74SBram Moolenaar  norm! 120go
173087bc3f74SBram Moolenaar  call assert_equal([0, 14, 1, 0, 2147483647], getcurpos())
173187bc3f74SBram Moolenaar  " clean up
173287bc3f74SBram Moolenaar  bw!
173387bc3f74SBram Moolenaarendfu
173487bc3f74SBram Moolenaar
173587bc3f74SBram Moolenaarfun! Test_normal37_g_cmd6()
173687bc3f74SBram Moolenaar  " basic test for gt and gT
173787bc3f74SBram Moolenaar  tabnew 1.txt
173887bc3f74SBram Moolenaar  tabnew 2.txt
173987bc3f74SBram Moolenaar  tabnew 3.txt
174087bc3f74SBram Moolenaar  norm! 1gt
174187bc3f74SBram Moolenaar  call assert_equal(1, tabpagenr())
174287bc3f74SBram Moolenaar  norm! 3gt
174387bc3f74SBram Moolenaar  call assert_equal(3, tabpagenr())
174487bc3f74SBram Moolenaar  norm! 1gT
174587bc3f74SBram Moolenaar  " count gT goes not to the absolute tabpagenumber
174687bc3f74SBram Moolenaar  " but, but goes to the count previous tabpagenumber
174787bc3f74SBram Moolenaar  call assert_equal(2, tabpagenr())
174887bc3f74SBram Moolenaar  " wrap around
174987bc3f74SBram Moolenaar  norm! 3gT
175087bc3f74SBram Moolenaar  call assert_equal(3, tabpagenr())
175187bc3f74SBram Moolenaar  " gt does not wrap around
175287bc3f74SBram Moolenaar  norm! 5gt
175387bc3f74SBram Moolenaar  call assert_equal(3, tabpagenr())
175487bc3f74SBram Moolenaar
175587bc3f74SBram Moolenaar  for i in range(3)
175687bc3f74SBram Moolenaar    tabclose
175787bc3f74SBram Moolenaar  endfor
175887bc3f74SBram Moolenaar  " clean up
175987bc3f74SBram Moolenaar  call assert_fails(':tabclose', 'E784')
176087bc3f74SBram Moolenaarendfu
176187bc3f74SBram Moolenaar
176287bc3f74SBram Moolenaarfun! Test_normal38_nvhome()
176387bc3f74SBram Moolenaar  " Test for <Home> and <C-Home> key
176487bc3f74SBram Moolenaar  new
176587bc3f74SBram Moolenaar  call setline(1, range(10))
176687bc3f74SBram Moolenaar  $
176787bc3f74SBram Moolenaar  setl et sw=2
176887bc3f74SBram Moolenaar  norm! V10>$
176987bc3f74SBram Moolenaar  " count is ignored
177087bc3f74SBram Moolenaar  exe "norm! 10\<home>"
177187bc3f74SBram Moolenaar  call assert_equal(1, col('.'))
177287bc3f74SBram Moolenaar  exe "norm! \<home>"
177387bc3f74SBram Moolenaar  call assert_equal([0, 10, 1, 0, 1], getcurpos())
177487bc3f74SBram Moolenaar  exe "norm! 5\<c-home>"
177587bc3f74SBram Moolenaar  call assert_equal([0, 5, 1, 0, 1], getcurpos())
177687bc3f74SBram Moolenaar  exe "norm! \<c-home>"
177787bc3f74SBram Moolenaar  call assert_equal([0, 1, 1, 0, 1], getcurpos())
177887bc3f74SBram Moolenaar
177987bc3f74SBram Moolenaar  " clean up
178087bc3f74SBram Moolenaar  bw!
178187bc3f74SBram Moolenaarendfu
178287bc3f74SBram Moolenaar
178387bc3f74SBram Moolenaarfun! Test_normal39_cw()
178487bc3f74SBram Moolenaar  " Test for cw and cW on whitespace
178587bc3f74SBram Moolenaar  " and cpo+=w setting
178687bc3f74SBram Moolenaar  new
178787bc3f74SBram Moolenaar  set tw=0
178887bc3f74SBram Moolenaar  call append(0, 'here      are   some words')
178987bc3f74SBram Moolenaar  norm! 1gg0elcwZZZ
179087bc3f74SBram Moolenaar  call assert_equal('hereZZZare   some words', getline('.'))
179187bc3f74SBram Moolenaar  norm! 1gg0elcWYYY
179287bc3f74SBram Moolenaar  call assert_equal('hereZZZareYYYsome words', getline('.'))
179387bc3f74SBram Moolenaar  set cpo+=w
179487bc3f74SBram Moolenaar  call setline(1, 'here      are   some words')
179587bc3f74SBram Moolenaar  norm! 1gg0elcwZZZ
179687bc3f74SBram Moolenaar  call assert_equal('hereZZZ     are   some words', getline('.'))
179787bc3f74SBram Moolenaar  norm! 1gg2elcWYYY
179887bc3f74SBram Moolenaar  call assert_equal('hereZZZ     areYYY  some words', getline('.'))
179987bc3f74SBram Moolenaar  set cpo-=w
180087bc3f74SBram Moolenaar  norm! 2gg0cwfoo
180187bc3f74SBram Moolenaar  call assert_equal('foo', getline('.'))
180287bc3f74SBram Moolenaar
180387bc3f74SBram Moolenaar  " clean up
180487bc3f74SBram Moolenaar  bw!
180587bc3f74SBram Moolenaarendfu
180687bc3f74SBram Moolenaar
180787bc3f74SBram Moolenaarfun! Test_normal40_ctrl_bsl()
180887bc3f74SBram Moolenaar  " Basic test for CTRL-\ commands
180987bc3f74SBram Moolenaar  new
181087bc3f74SBram Moolenaar  call append(0, 'here      are   some words')
181187bc3f74SBram Moolenaar  exe "norm! 1gg0a\<C-\>\<C-N>"
181287bc3f74SBram Moolenaar  call assert_equal('n', mode())
181387bc3f74SBram Moolenaar  call assert_equal(1, col('.'))
181487bc3f74SBram Moolenaar  call assert_equal('', visualmode())
181587bc3f74SBram Moolenaar  exe "norm! 1gg0viw\<C-\>\<C-N>"
181687bc3f74SBram Moolenaar  call assert_equal('n', mode())
181787bc3f74SBram Moolenaar  call assert_equal(4, col('.'))
181887bc3f74SBram Moolenaar  exe "norm! 1gg0a\<C-\>\<C-G>"
181987bc3f74SBram Moolenaar  call assert_equal('n', mode())
182087bc3f74SBram Moolenaar  call assert_equal(1, col('.'))
182187bc3f74SBram Moolenaar  "imap <buffer> , <c-\><c-n>
182287bc3f74SBram Moolenaar  set im
182387bc3f74SBram Moolenaar  exe ":norm! \<c-\>\<c-n>dw"
182487bc3f74SBram Moolenaar  set noim
182587bc3f74SBram Moolenaar  call assert_equal('are   some words', getline(1))
182687bc3f74SBram Moolenaar  call assert_false(&insertmode)
182787bc3f74SBram Moolenaar
182887bc3f74SBram Moolenaar  " clean up
182987bc3f74SBram Moolenaar  bw!
183087bc3f74SBram Moolenaarendfu
183187bc3f74SBram Moolenaar
183287bc3f74SBram Moolenaarfun! Test_normal41_insert_reg()
183387bc3f74SBram Moolenaar  " Test for <c-r>=, <c-r><c-r>= and <c-r><c-o>=
183487bc3f74SBram Moolenaar  " in insert mode
183587bc3f74SBram Moolenaar  new
183687bc3f74SBram Moolenaar  set sts=2 sw=2 ts=8 tw=0
183787bc3f74SBram Moolenaar  call append(0, ["aaa\tbbb\tccc", '', '', ''])
183887bc3f74SBram Moolenaar  let a=getline(1)
183987bc3f74SBram Moolenaar  norm! 2gg0
184087bc3f74SBram Moolenaar  exe "norm! a\<c-r>=a\<cr>"
184187bc3f74SBram Moolenaar  norm! 3gg0
184287bc3f74SBram Moolenaar  exe "norm! a\<c-r>\<c-r>=a\<cr>"
184387bc3f74SBram Moolenaar  norm! 4gg0
184487bc3f74SBram Moolenaar  exe "norm! a\<c-r>\<c-o>=a\<cr>"
184587bc3f74SBram Moolenaar  call assert_equal(['aaa	bbb	ccc', 'aaa bbb	ccc', 'aaa bbb	ccc', 'aaa	bbb	ccc', ''], getline(1, '$'))
184687bc3f74SBram Moolenaar
184787bc3f74SBram Moolenaar  " clean up
184887bc3f74SBram Moolenaar  set sts=0 sw=8 ts=8
184931845093SBram Moolenaar  bw!
185087bc3f74SBram Moolenaarendfu
185187bc3f74SBram Moolenaar
185287bc3f74SBram Moolenaarfunc! Test_normal42_halfpage()
185387bc3f74SBram Moolenaar  " basic test for Ctrl-D and Ctrl-U
185487bc3f74SBram Moolenaar  call Setup_NewWindow()
185587bc3f74SBram Moolenaar  call assert_equal(5, &scroll)
185687bc3f74SBram Moolenaar  exe "norm! \<c-d>"
185787bc3f74SBram Moolenaar  call assert_equal('6', getline('.'))
185887bc3f74SBram Moolenaar  exe "norm! 2\<c-d>"
185987bc3f74SBram Moolenaar  call assert_equal('8', getline('.'))
186087bc3f74SBram Moolenaar  call assert_equal(2, &scroll)
186187bc3f74SBram Moolenaar  set scroll=5
186287bc3f74SBram Moolenaar  exe "norm! \<c-u>"
186387bc3f74SBram Moolenaar  call assert_equal('3', getline('.'))
186487bc3f74SBram Moolenaar  1
186587bc3f74SBram Moolenaar  set scrolloff=5
186687bc3f74SBram Moolenaar  exe "norm! \<c-d>"
186787bc3f74SBram Moolenaar  call assert_equal('10', getline('.'))
186887bc3f74SBram Moolenaar  exe "norm! \<c-u>"
186987bc3f74SBram Moolenaar  call assert_equal('5', getline('.'))
187087bc3f74SBram Moolenaar  1
187187bc3f74SBram Moolenaar  set scrolloff=99
187287bc3f74SBram Moolenaar  exe "norm! \<c-d>"
187387bc3f74SBram Moolenaar  call assert_equal('10', getline('.'))
187487bc3f74SBram Moolenaar  set scrolloff=0
187587bc3f74SBram Moolenaar  100
187687bc3f74SBram Moolenaar  exe "norm! $\<c-u>"
187787bc3f74SBram Moolenaar  call assert_equal('95', getline('.'))
187887bc3f74SBram Moolenaar  call assert_equal([0, 95, 1, 0, 1], getcurpos())
187987bc3f74SBram Moolenaar  100
188087bc3f74SBram Moolenaar  set nostartofline
188187bc3f74SBram Moolenaar  exe "norm! $\<c-u>"
188287bc3f74SBram Moolenaar  call assert_equal('95', getline('.'))
188387bc3f74SBram Moolenaar  call assert_equal([0, 95, 2, 0, 2147483647], getcurpos())
188487bc3f74SBram Moolenaar  " cleanup
188587bc3f74SBram Moolenaar  set startofline
188687bc3f74SBram Moolenaar  bw!
188787bc3f74SBram Moolenaarendfu
188887bc3f74SBram Moolenaar
188987bc3f74SBram Moolenaarfun! Test_normal43_textobject1()
189087bc3f74SBram Moolenaar  " basic tests for text object aw
189187bc3f74SBram Moolenaar  new
189287bc3f74SBram Moolenaar  call append(0, ['foobar,eins,foobar', 'foo,zwei,foo    '])
189387bc3f74SBram Moolenaar  " diw
189487bc3f74SBram Moolenaar  norm! 1gg0diw
189587bc3f74SBram Moolenaar  call assert_equal([',eins,foobar', 'foo,zwei,foo    ', ''], getline(1,'$'))
189687bc3f74SBram Moolenaar  " daw
189787bc3f74SBram Moolenaar  norm! 2ggEdaw
189887bc3f74SBram Moolenaar  call assert_equal([',eins,foobar', 'foo,zwei,', ''], getline(1, '$'))
189987bc3f74SBram Moolenaar  %d
190087bc3f74SBram Moolenaar  call append(0, ["foo\teins\tfoobar", "foo\tzwei\tfoo   "])
190187bc3f74SBram Moolenaar  " diW
190287bc3f74SBram Moolenaar  norm! 2ggwd2iW
190387bc3f74SBram Moolenaar  call assert_equal(['foo	eins	foobar', 'foo	foo   ', ''], getline(1,'$'))
190487bc3f74SBram Moolenaar  " daW
190587bc3f74SBram Moolenaar  norm! 1ggd2aW
190687bc3f74SBram Moolenaar  call assert_equal(['foobar', 'foo	foo   ', ''], getline(1,'$'))
190787bc3f74SBram Moolenaar
190887bc3f74SBram Moolenaar  %d
190987bc3f74SBram Moolenaar  call append(0, ["foo\teins\tfoobar", "foo\tzwei\tfoo   "])
191087bc3f74SBram Moolenaar  " aw in visual line mode switches to characterwise mode
191187bc3f74SBram Moolenaar  norm! 2gg$Vawd
191287bc3f74SBram Moolenaar  call assert_equal(['foo	eins	foobar', 'foo	zwei	foo'], getline(1,'$'))
191387bc3f74SBram Moolenaar  norm! 1gg$Viwd
191487bc3f74SBram Moolenaar  call assert_equal(['foo	eins	', 'foo	zwei	foo'], getline(1,'$'))
191587bc3f74SBram Moolenaar
191687bc3f74SBram Moolenaar  " clean up
191787bc3f74SBram Moolenaar  bw!
191887bc3f74SBram Moolenaarendfu
191987bc3f74SBram Moolenaar
192087bc3f74SBram Moolenaarfunc! Test_normal44_textobjects2()
192187bc3f74SBram Moolenaar  " basic testing for is and as text objects
192287bc3f74SBram Moolenaar  new
192387bc3f74SBram Moolenaar  call append(0, ['This is a test. With some sentences!', '', 'Even with a question? And one more. And no sentence here'])
192487bc3f74SBram Moolenaar  " Test for dis - does not remove trailing whitespace
192587bc3f74SBram Moolenaar  norm! 1gg0dis
192687bc3f74SBram Moolenaar  call assert_equal([' With some sentences!', '', 'Even with a question? And one more. And no sentence here', ''], getline(1,'$'))
192787bc3f74SBram Moolenaar  " Test for das - removes leading whitespace
192887bc3f74SBram Moolenaar  norm! 3ggf?ldas
192987bc3f74SBram Moolenaar  call assert_equal([' With some sentences!', '', 'Even with a question? And no sentence here', ''], getline(1,'$'))
193087bc3f74SBram Moolenaar  " when used in visual mode, is made characterwise
193187bc3f74SBram Moolenaar  norm! 3gg$Visy
193287bc3f74SBram Moolenaar  call assert_equal('v', visualmode())
193387bc3f74SBram Moolenaar  " reset visualmode()
193487bc3f74SBram Moolenaar  norm! 3ggVy
193587bc3f74SBram Moolenaar  norm! 3gg$Vasy
193687bc3f74SBram Moolenaar  call assert_equal('v', visualmode())
193787bc3f74SBram Moolenaar  " basic testing for textobjects a< and at
193887bc3f74SBram Moolenaar  %d
193987bc3f74SBram Moolenaar  call setline(1, ['<div> ','<a href="foobar" class="foo">xyz</a>','    </div>', ' '])
194087bc3f74SBram Moolenaar  " a<
194187bc3f74SBram Moolenaar  norm! 1gg0da<
194287bc3f74SBram Moolenaar  call assert_equal([' ', '<a href="foobar" class="foo">xyz</a>', '    </div>', ' '], getline(1,'$'))
194387bc3f74SBram Moolenaar  norm! 1pj
194487bc3f74SBram Moolenaar  call assert_equal([' <div>', '<a href="foobar" class="foo">xyz</a>', '    </div>', ' '], getline(1,'$'))
194587bc3f74SBram Moolenaar  " at
194687bc3f74SBram Moolenaar  norm! d2at
194787bc3f74SBram Moolenaar  call assert_equal([' '], getline(1,'$'))
194887bc3f74SBram Moolenaar  %d
194987bc3f74SBram Moolenaar  call setline(1, ['<div> ','<a href="foobar" class="foo">xyz</a>','    </div>', ' '])
195087bc3f74SBram Moolenaar  " i<
195187bc3f74SBram Moolenaar  norm! 1gg0di<
195287bc3f74SBram Moolenaar  call assert_equal(['<> ', '<a href="foobar" class="foo">xyz</a>', '    </div>', ' '], getline(1,'$'))
195387bc3f74SBram Moolenaar  norm! 1Pj
195487bc3f74SBram Moolenaar  call assert_equal(['<div> ', '<a href="foobar" class="foo">xyz</a>', '    </div>', ' '], getline(1,'$'))
195587bc3f74SBram Moolenaar  norm! d2it
195687bc3f74SBram Moolenaar  call assert_equal(['<div></div>',' '], getline(1,'$'))
195787bc3f74SBram Moolenaar  " basic testing for a[ and i[ text object
195887bc3f74SBram Moolenaar  %d
195987bc3f74SBram Moolenaar  call setline(1, [' ', '[', 'one [two]', 'thre', ']'])
196087bc3f74SBram Moolenaar  norm! 3gg0di[
196187bc3f74SBram Moolenaar  call assert_equal([' ', '[', ']'], getline(1,'$'))
196287bc3f74SBram Moolenaar  call setline(1, [' ', '[', 'one [two]', 'thre', ']'])
196387bc3f74SBram Moolenaar  norm! 3gg0ftd2a[
196487bc3f74SBram Moolenaar  call assert_equal([' '], getline(1,'$'))
196587bc3f74SBram Moolenaar  %d
196687bc3f74SBram Moolenaar  " Test for i" when cursor is in front of a quoted object
196787bc3f74SBram Moolenaar  call append(0, 'foo "bar"')
196887bc3f74SBram Moolenaar  norm! 1gg0di"
196987bc3f74SBram Moolenaar  call assert_equal(['foo ""', ''], getline(1,'$'))
197087bc3f74SBram Moolenaar
197187bc3f74SBram Moolenaar  " clean up
197287bc3f74SBram Moolenaar  bw!
197387bc3f74SBram Moolenaarendfu
197487bc3f74SBram Moolenaar
197587bc3f74SBram Moolenaarfunc! Test_normal45_drop()
197687bc3f74SBram Moolenaar  if !has("dnd")
197787bc3f74SBram Moolenaar    return
197887bc3f74SBram Moolenaar  endif
197987bc3f74SBram Moolenaar  " basic test for :drop command
198087bc3f74SBram Moolenaar  " unfortunately, without a gui, we can't really test much here,
198187bc3f74SBram Moolenaar  " so simply test that ~p fails (which uses the drop register)
198287bc3f74SBram Moolenaar  new
198387bc3f74SBram Moolenaar  call assert_fails(':norm! "~p', 'E353')
198487bc3f74SBram Moolenaar  call assert_equal([],  getreg('~', 1, 1))
198587bc3f74SBram Moolenaar  " the ~ register is read only
198687bc3f74SBram Moolenaar  call assert_fails(':let @~="1"', 'E354')
198787bc3f74SBram Moolenaar  bw!
198887bc3f74SBram Moolenaarendfu
198987bc3f74SBram Moolenaar
199087bc3f74SBram Moolenaarfunc! Test_normal46_ignore()
199187bc3f74SBram Moolenaar  new
199287bc3f74SBram Moolenaar  " How to test this?
199387bc3f74SBram Moolenaar  " let's just for now test, that the buffer
199487bc3f74SBram Moolenaar  " does not change
199587bc3f74SBram Moolenaar  call feedkeys("\<c-s>", 't')
199687bc3f74SBram Moolenaar  call assert_equal([''], getline(1,'$'))
199787bc3f74SBram Moolenaar
199887bc3f74SBram Moolenaar  " clean up
199987bc3f74SBram Moolenaar  bw!
200087bc3f74SBram Moolenaarendfu
2001