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