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 162931f2a5SBram Moolenaarendfunc 1787bc3f74SBram Moolenaar 182931f2a5SBram Moolenaarfunc! 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 362931f2a5SBram Moolenaarendfunc 372931f2a5SBram Moolenaar 384a08b0dcSBram Moolenaarfunc! OpfuncDummy(type, ...) 394a08b0dcSBram Moolenaar " for testing operatorfunc 404a08b0dcSBram Moolenaar let g:opt=&linebreak 414a08b0dcSBram Moolenaar 424a08b0dcSBram Moolenaar if a:0 " Invoked from Visual mode, use gv command. 434a08b0dcSBram Moolenaar silent exe "normal! gvy" 444a08b0dcSBram Moolenaar elseif a:type == 'line' 454a08b0dcSBram Moolenaar silent exe "normal! '[V']y" 464a08b0dcSBram Moolenaar else 474a08b0dcSBram Moolenaar silent exe "normal! `[v`]y" 484a08b0dcSBram Moolenaar endif 494a08b0dcSBram Moolenaar " Create a new dummy window 504a08b0dcSBram Moolenaar new 514a08b0dcSBram Moolenaar let g:bufnr=bufnr('%') 522931f2a5SBram Moolenaarendfunc 5387bc3f74SBram Moolenaar 5487bc3f74SBram Moolenaarfun! Test_normal00_optrans() 5587bc3f74SBram Moolenaar new 5687bc3f74SBram Moolenaar call append(0, ['1 This is a simple test: abcd', '2 This is the second line', '3 this is the third line']) 5787bc3f74SBram Moolenaar 1 5887bc3f74SBram Moolenaar exe "norm! Sfoobar\<esc>" 5987bc3f74SBram Moolenaar call assert_equal(['foobar', '2 This is the second line', '3 this is the third line', ''], getline(1,'$')) 6087bc3f74SBram Moolenaar 2 6187bc3f74SBram Moolenaar exe "norm! $vbsone" 6287bc3f74SBram Moolenaar call assert_equal(['foobar', '2 This is the second one', '3 this is the third line', ''], getline(1,'$')) 6387bc3f74SBram Moolenaar norm! VS Second line here 6487bc3f74SBram Moolenaar call assert_equal(['foobar', ' Second line here', '3 this is the third line', ''], getline(1, '$')) 6587bc3f74SBram Moolenaar %d 6687bc3f74SBram Moolenaar call append(0, ['4 This is a simple test: abcd', '5 This is the second line', '6 this is the third line']) 6787bc3f74SBram Moolenaar call append(0, ['1 This is a simple test: abcd', '2 This is the second line', '3 this is the third line']) 6887bc3f74SBram Moolenaar 6987bc3f74SBram Moolenaar 1 7087bc3f74SBram Moolenaar norm! 2D 7187bc3f74SBram 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,'$')) 7287bc3f74SBram Moolenaar set cpo+=# 7387bc3f74SBram Moolenaar norm! 4D 7487bc3f74SBram 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,'$')) 7587bc3f74SBram Moolenaar 7687bc3f74SBram Moolenaar " clean up 7787bc3f74SBram Moolenaar set cpo-=# 7887bc3f74SBram Moolenaar bw! 792931f2a5SBram Moolenaarendfunc 8087bc3f74SBram Moolenaar 8187bc3f74SBram Moolenaarfunc! Test_normal01_keymodel() 8287bc3f74SBram Moolenaar call Setup_NewWindow() 8387bc3f74SBram Moolenaar " Test 1: depending on 'keymodel' <s-down> does something different 842931f2a5SBram Moolenaar 50 8587bc3f74SBram Moolenaar call feedkeys("V\<S-Up>y", 'tx') 8687bc3f74SBram Moolenaar call assert_equal(['47', '48', '49', '50'], getline("'<", "'>")) 872931f2a5SBram Moolenaar set keymodel=startsel 882931f2a5SBram Moolenaar 50 8987bc3f74SBram Moolenaar call feedkeys("V\<S-Up>y", 'tx') 9087bc3f74SBram Moolenaar call assert_equal(['49', '50'], getline("'<", "'>")) 9187bc3f74SBram Moolenaar " Start visual mode when keymodel = startsel 922931f2a5SBram Moolenaar 50 9387bc3f74SBram Moolenaar call feedkeys("\<S-Up>y", 'tx') 9487bc3f74SBram Moolenaar call assert_equal(['49', '5'], getreg(0, 0, 1)) 9587bc3f74SBram Moolenaar " Do not start visual mode when keymodel= 962931f2a5SBram Moolenaar set keymodel= 972931f2a5SBram Moolenaar 50 9887bc3f74SBram Moolenaar call feedkeys("\<S-Up>y$", 'tx') 9987bc3f74SBram Moolenaar call assert_equal(['42'], getreg(0, 0, 1)) 1002931f2a5SBram Moolenaar " Stop visual mode when keymodel=stopsel 1012931f2a5SBram Moolenaar set keymodel=stopsel 1022931f2a5SBram Moolenaar 50 1032931f2a5SBram Moolenaar call feedkeys("Vkk\<Up>yy", 'tx') 1042931f2a5SBram Moolenaar call assert_equal(['47'], getreg(0, 0, 1)) 1052931f2a5SBram Moolenaar 1062931f2a5SBram Moolenaar set keymodel= 1072931f2a5SBram Moolenaar 50 1082931f2a5SBram Moolenaar call feedkeys("Vkk\<Up>yy", 'tx') 1092931f2a5SBram Moolenaar call assert_equal(['47', '48', '49', '50'], getreg(0, 0, 1)) 11087bc3f74SBram Moolenaar 11187bc3f74SBram Moolenaar " clean up 11287bc3f74SBram Moolenaar bw! 11387bc3f74SBram Moolenaarendfunc 11487bc3f74SBram Moolenaar 11587bc3f74SBram Moolenaarfunc! Test_normal02_selectmode() 11687bc3f74SBram Moolenaar " some basic select mode tests 11787bc3f74SBram Moolenaar call Setup_NewWindow() 11887bc3f74SBram Moolenaar 50 11987bc3f74SBram Moolenaar norm! gHy 12087bc3f74SBram Moolenaar call assert_equal('y51', getline('.')) 12187bc3f74SBram Moolenaar call setline(1, range(1,100)) 12287bc3f74SBram Moolenaar 50 12387bc3f74SBram Moolenaar exe ":norm! V9jo\<c-g>y" 12487bc3f74SBram Moolenaar call assert_equal('y60', getline('.')) 12587bc3f74SBram Moolenaar " clean up 12687bc3f74SBram Moolenaar bw! 1272931f2a5SBram Moolenaarendfunc 1282931f2a5SBram Moolenaar 1292931f2a5SBram Moolenaarfunc! Test_normal02_selectmode2() 1302931f2a5SBram Moolenaar " some basic select mode tests 1312931f2a5SBram Moolenaar call Setup_NewWindow() 1322931f2a5SBram Moolenaar 50 1332931f2a5SBram Moolenaar call feedkeys(":set im\n\<c-o>gHc\<c-o>:set noim\n", 'tx') 1342931f2a5SBram Moolenaar call assert_equal('c51', getline('.')) 1352931f2a5SBram Moolenaar " clean up 1362931f2a5SBram Moolenaar bw! 1372931f2a5SBram Moolenaarendfunc 13887bc3f74SBram Moolenaar 13987bc3f74SBram Moolenaarfunc! Test_normal03_join() 14087bc3f74SBram Moolenaar " basic join test 14187bc3f74SBram Moolenaar call Setup_NewWindow() 14287bc3f74SBram Moolenaar 50 14387bc3f74SBram Moolenaar norm! VJ 14487bc3f74SBram Moolenaar call assert_equal('50 51', getline('.')) 14587bc3f74SBram Moolenaar $ 14687bc3f74SBram Moolenaar norm! J 14787bc3f74SBram Moolenaar call assert_equal('100', getline('.')) 14887bc3f74SBram Moolenaar $ 14987bc3f74SBram Moolenaar norm! V9-gJ 15087bc3f74SBram Moolenaar call assert_equal('919293949596979899100', getline('.')) 15187bc3f74SBram Moolenaar call setline(1, range(1,100)) 15287bc3f74SBram Moolenaar $ 15387bc3f74SBram Moolenaar :j 10 15487bc3f74SBram Moolenaar call assert_equal('100', getline('.')) 15587bc3f74SBram Moolenaar " clean up 15687bc3f74SBram Moolenaar bw! 1572931f2a5SBram Moolenaarendfunc 15887bc3f74SBram Moolenaar 15987bc3f74SBram Moolenaarfunc! Test_normal04_filter() 16087bc3f74SBram Moolenaar " basic filter test 16187bc3f74SBram Moolenaar " only test on non windows platform 1624a08b0dcSBram Moolenaar if has('win32') 16387bc3f74SBram Moolenaar return 16487bc3f74SBram Moolenaar endif 16587bc3f74SBram Moolenaar call Setup_NewWindow() 16687bc3f74SBram Moolenaar 1 16787bc3f74SBram Moolenaar call feedkeys("!!sed -e 's/^/| /'\n", 'tx') 16887bc3f74SBram Moolenaar call assert_equal('| 1', getline('.')) 16987bc3f74SBram Moolenaar 90 17087bc3f74SBram Moolenaar :sil :!echo one 17187bc3f74SBram Moolenaar call feedkeys('.', 'tx') 17287bc3f74SBram Moolenaar call assert_equal('| 90', getline('.')) 17387bc3f74SBram Moolenaar 95 17487bc3f74SBram Moolenaar set cpo+=! 17587bc3f74SBram Moolenaar " 2 <CR>, 1: for executing the command, 17687bc3f74SBram Moolenaar " 2: clear hit-enter-prompt 17787bc3f74SBram Moolenaar call feedkeys("!!\n", 'tx') 17887bc3f74SBram Moolenaar call feedkeys(":!echo one\n\n", 'tx') 17987bc3f74SBram Moolenaar call feedkeys(".", 'tx') 18087bc3f74SBram Moolenaar call assert_equal('one', getline('.')) 18187bc3f74SBram Moolenaar set cpo-=! 18287bc3f74SBram Moolenaar bw! 1832931f2a5SBram Moolenaarendfunc 18487bc3f74SBram Moolenaar 18587bc3f74SBram Moolenaarfunc! Test_normal05_formatexpr() 18687bc3f74SBram Moolenaar " basic formatexpr test 18787bc3f74SBram Moolenaar call Setup_NewWindow() 18887bc3f74SBram Moolenaar %d_ 18987bc3f74SBram Moolenaar call setline(1, ['here: 1 ', '2', 'here: 3 ', '4', 'not here: ']) 19087bc3f74SBram Moolenaar 1 19187bc3f74SBram Moolenaar set formatexpr=MyFormatExpr() 19287bc3f74SBram Moolenaar norm! gqG 19387bc3f74SBram Moolenaar call assert_equal(['here: 1->$', '2', 'here: 3->$', '4', 'not here: '], getline(1,'$')) 19487bc3f74SBram Moolenaar set formatexpr= 19587bc3f74SBram Moolenaar bw! 1962931f2a5SBram Moolenaarendfunc 19787bc3f74SBram Moolenaar 198d77f9d59SBram Moolenaarfunc Test_normal05_formatexpr_newbuf() 199d77f9d59SBram Moolenaar " Edit another buffer in the 'formatexpr' function 200d77f9d59SBram Moolenaar new 201d77f9d59SBram Moolenaar func! Format() 202d77f9d59SBram Moolenaar edit another 203d77f9d59SBram Moolenaar endfunc 204d77f9d59SBram Moolenaar set formatexpr=Format() 205d77f9d59SBram Moolenaar norm gqG 206d77f9d59SBram Moolenaar bw! 207d77f9d59SBram Moolenaar set formatexpr= 208d77f9d59SBram Moolenaarendfunc 209d77f9d59SBram Moolenaar 210d77f9d59SBram Moolenaarfunc Test_normal05_formatexpr_setopt() 211d77f9d59SBram Moolenaar " Change the 'formatexpr' value in the function 212d77f9d59SBram Moolenaar new 213d77f9d59SBram Moolenaar func! Format() 214d77f9d59SBram Moolenaar set formatexpr= 215d77f9d59SBram Moolenaar endfunc 216d77f9d59SBram Moolenaar set formatexpr=Format() 217d77f9d59SBram Moolenaar norm gqG 218d77f9d59SBram Moolenaar bw! 219d77f9d59SBram Moolenaar set formatexpr= 220d77f9d59SBram Moolenaarendfunc 221d77f9d59SBram Moolenaar 22287bc3f74SBram Moolenaarfunc! Test_normal06_formatprg() 22387bc3f74SBram Moolenaar " basic test for formatprg 22487bc3f74SBram Moolenaar " only test on non windows platform 2254a08b0dcSBram Moolenaar if has('win32') 22687bc3f74SBram Moolenaar return 2279be7c04eSBram Moolenaar endif 2289be7c04eSBram Moolenaar 22987bc3f74SBram Moolenaar " uses sed to number non-empty lines 23087bc3f74SBram Moolenaar call writefile(['#!/bin/sh', 'sed ''/./=''|sed ''/./{', 'N', 's/\n/ /', '}'''], 'Xsed_format.sh') 23187bc3f74SBram Moolenaar call system('chmod +x ./Xsed_format.sh') 2329be7c04eSBram Moolenaar let text = ['a', '', 'c', '', ' ', 'd', 'e'] 2339be7c04eSBram Moolenaar let expected = ['1 a', '', '3 c', '', '5 ', '6 d', '7 e'] 2349be7c04eSBram Moolenaar 2359be7c04eSBram Moolenaar 10new 2369be7c04eSBram Moolenaar call setline(1, text) 23787bc3f74SBram Moolenaar set formatprg=./Xsed_format.sh 23887bc3f74SBram Moolenaar norm! gggqG 2399be7c04eSBram Moolenaar call assert_equal(expected, getline(1, '$')) 2409be7c04eSBram Moolenaar bw! 2419be7c04eSBram Moolenaar 2429be7c04eSBram Moolenaar 10new 2439be7c04eSBram Moolenaar call setline(1, text) 2449be7c04eSBram Moolenaar set formatprg=donothing 2459be7c04eSBram Moolenaar setlocal formatprg=./Xsed_format.sh 2469be7c04eSBram Moolenaar norm! gggqG 2479be7c04eSBram Moolenaar call assert_equal(expected, getline(1, '$')) 2489be7c04eSBram Moolenaar bw! 2499be7c04eSBram Moolenaar 25087bc3f74SBram Moolenaar " clean up 25187bc3f74SBram Moolenaar set formatprg= 2529be7c04eSBram Moolenaar setlocal formatprg= 25387bc3f74SBram Moolenaar call delete('Xsed_format.sh') 2542931f2a5SBram Moolenaarendfunc 25587bc3f74SBram Moolenaar 25687bc3f74SBram Moolenaarfunc! Test_normal07_internalfmt() 25787bc3f74SBram Moolenaar " basic test for internal formmatter to textwidth of 12 25887bc3f74SBram Moolenaar let list=range(1,11) 25987bc3f74SBram Moolenaar call map(list, 'v:val." "') 26087bc3f74SBram Moolenaar 10new 26187bc3f74SBram Moolenaar call setline(1, list) 26287bc3f74SBram Moolenaar set tw=12 26387bc3f74SBram Moolenaar norm! gggqG 26487bc3f74SBram Moolenaar call assert_equal(['1 2 3', '4 5 6', '7 8 9', '10 11 '], getline(1, '$')) 26587bc3f74SBram Moolenaar " clean up 2669be7c04eSBram Moolenaar set tw=0 26787bc3f74SBram Moolenaar bw! 2682931f2a5SBram Moolenaarendfunc 26987bc3f74SBram Moolenaar 27087bc3f74SBram Moolenaarfunc! Test_normal08_fold() 27187bc3f74SBram Moolenaar " basic tests for foldopen/folddelete 27287bc3f74SBram Moolenaar if !has("folding") 27387bc3f74SBram Moolenaar return 27487bc3f74SBram Moolenaar endif 27587bc3f74SBram Moolenaar call Setup_NewWindow() 27687bc3f74SBram Moolenaar 50 27787bc3f74SBram Moolenaar setl foldenable fdm=marker 27887bc3f74SBram Moolenaar " First fold 27987bc3f74SBram Moolenaar norm! V4jzf 28087bc3f74SBram Moolenaar " check that folds have been created 28187bc3f74SBram Moolenaar call assert_equal(['50/*{{{*/', '51', '52', '53', '54/*}}}*/'], getline(50,54)) 28287bc3f74SBram Moolenaar " Second fold 28387bc3f74SBram Moolenaar 46 28487bc3f74SBram Moolenaar norm! V10jzf 28587bc3f74SBram Moolenaar " check that folds have been created 28687bc3f74SBram Moolenaar call assert_equal('46/*{{{*/', getline(46)) 28787bc3f74SBram Moolenaar call assert_equal('60/*}}}*/', getline(60)) 28887bc3f74SBram Moolenaar norm! k 28987bc3f74SBram Moolenaar call assert_equal('45', getline('.')) 29087bc3f74SBram Moolenaar norm! j 29187bc3f74SBram Moolenaar call assert_equal('46/*{{{*/', getline('.')) 29287bc3f74SBram Moolenaar norm! j 29387bc3f74SBram Moolenaar call assert_equal('61', getline('.')) 29487bc3f74SBram Moolenaar norm! k 29587bc3f74SBram Moolenaar " open a fold 29687bc3f74SBram Moolenaar norm! Vzo 29787bc3f74SBram Moolenaar norm! k 29887bc3f74SBram Moolenaar call assert_equal('45', getline('.')) 29987bc3f74SBram Moolenaar norm! j 30087bc3f74SBram Moolenaar call assert_equal('46/*{{{*/', getline('.')) 30187bc3f74SBram Moolenaar norm! j 30287bc3f74SBram Moolenaar call assert_equal('47', getline('.')) 30387bc3f74SBram Moolenaar norm! k 30487bc3f74SBram Moolenaar norm! zcVzO 30587bc3f74SBram Moolenaar call assert_equal('46/*{{{*/', getline('.')) 30687bc3f74SBram Moolenaar norm! j 30787bc3f74SBram Moolenaar call assert_equal('47', getline('.')) 30887bc3f74SBram Moolenaar norm! j 30987bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 31087bc3f74SBram Moolenaar norm! j 31187bc3f74SBram Moolenaar call assert_equal('49', getline('.')) 31287bc3f74SBram Moolenaar norm! j 31387bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 31487bc3f74SBram Moolenaar norm! j 31587bc3f74SBram Moolenaar call assert_equal('51', getline('.')) 31687bc3f74SBram Moolenaar " delete folds 31787bc3f74SBram Moolenaar :46 31887bc3f74SBram Moolenaar " collapse fold 31987bc3f74SBram Moolenaar norm! V14jzC 32087bc3f74SBram Moolenaar " delete all folds recursively 32187bc3f74SBram Moolenaar norm! VzD 32287bc3f74SBram Moolenaar call assert_equal(['46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60'], getline(46,60)) 32387bc3f74SBram Moolenaar 32487bc3f74SBram Moolenaar " clean up 32587bc3f74SBram Moolenaar setl nofoldenable fdm=marker 32687bc3f74SBram Moolenaar bw! 3272931f2a5SBram Moolenaarendfunc 32887bc3f74SBram Moolenaar 32987bc3f74SBram Moolenaarfunc! Test_normal09_operatorfunc() 33087bc3f74SBram Moolenaar " Test operatorfunc 33187bc3f74SBram Moolenaar call Setup_NewWindow() 33287bc3f74SBram Moolenaar " Add some spaces for counting 33387bc3f74SBram Moolenaar 50,60s/$/ / 33487bc3f74SBram Moolenaar unlet! g:a 33587bc3f74SBram Moolenaar let g:a=0 33687bc3f74SBram Moolenaar nmap <buffer><silent> ,, :set opfunc=CountSpaces<CR>g@ 33787bc3f74SBram Moolenaar vmap <buffer><silent> ,, :<C-U>call CountSpaces(visualmode(), 1)<CR> 33887bc3f74SBram Moolenaar 50 33987bc3f74SBram Moolenaar norm V2j,, 34087bc3f74SBram Moolenaar call assert_equal(6, g:a) 34187bc3f74SBram Moolenaar norm V,, 34287bc3f74SBram Moolenaar call assert_equal(2, g:a) 34387bc3f74SBram Moolenaar norm ,,l 34487bc3f74SBram Moolenaar call assert_equal(0, g:a) 34587bc3f74SBram Moolenaar 50 34687bc3f74SBram Moolenaar exe "norm 0\<c-v>10j2l,," 34787bc3f74SBram Moolenaar call assert_equal(11, g:a) 34887bc3f74SBram Moolenaar 50 34987bc3f74SBram Moolenaar norm V10j,, 35087bc3f74SBram Moolenaar call assert_equal(22, g:a) 35187bc3f74SBram Moolenaar 35287bc3f74SBram Moolenaar " clean up 35387bc3f74SBram Moolenaar unmap <buffer> ,, 35487bc3f74SBram Moolenaar set opfunc= 3554a08b0dcSBram Moolenaar unlet! g:a 35687bc3f74SBram Moolenaar bw! 3572931f2a5SBram Moolenaarendfunc 35887bc3f74SBram Moolenaar 3594a08b0dcSBram Moolenaarfunc! Test_normal09a_operatorfunc() 3604a08b0dcSBram Moolenaar " Test operatorfunc 3614a08b0dcSBram Moolenaar call Setup_NewWindow() 3624a08b0dcSBram Moolenaar " Add some spaces for counting 3634a08b0dcSBram Moolenaar 50,60s/$/ / 3644a08b0dcSBram Moolenaar unlet! g:opt 3654a08b0dcSBram Moolenaar set linebreak 3664a08b0dcSBram Moolenaar nmap <buffer><silent> ,, :set opfunc=OpfuncDummy<CR>g@ 3674a08b0dcSBram Moolenaar 50 3684a08b0dcSBram Moolenaar norm ,,j 3694a08b0dcSBram Moolenaar exe "bd!" g:bufnr 3704a08b0dcSBram Moolenaar call assert_true(&linebreak) 3714a08b0dcSBram Moolenaar call assert_equal(g:opt, &linebreak) 3724a08b0dcSBram Moolenaar set nolinebreak 3734a08b0dcSBram Moolenaar norm ,,j 3744a08b0dcSBram Moolenaar exe "bd!" g:bufnr 3754a08b0dcSBram Moolenaar call assert_false(&linebreak) 3764a08b0dcSBram Moolenaar call assert_equal(g:opt, &linebreak) 3774a08b0dcSBram Moolenaar 3784a08b0dcSBram Moolenaar " clean up 3794a08b0dcSBram Moolenaar unmap <buffer> ,, 3804a08b0dcSBram Moolenaar set opfunc= 3814a08b0dcSBram Moolenaar bw! 3824a08b0dcSBram Moolenaar unlet! g:opt 3834a08b0dcSBram Moolenaarendfunc 3844a08b0dcSBram Moolenaar 38587bc3f74SBram Moolenaarfunc! Test_normal10_expand() 38687bc3f74SBram Moolenaar " Test for expand() 38787bc3f74SBram Moolenaar 10new 38887bc3f74SBram Moolenaar call setline(1, ['1', 'ifooar,,cbar']) 38987bc3f74SBram Moolenaar 2 39087bc3f74SBram Moolenaar norm! $ 39165f08474SBram Moolenaar call assert_equal('cbar', expand('<cword>')) 39265f08474SBram Moolenaar call assert_equal('ifooar,,cbar', expand('<cWORD>')) 39365f08474SBram Moolenaar 39465f08474SBram Moolenaar call setline(1, ['prx = list[idx];']) 39565f08474SBram Moolenaar 1 39665f08474SBram Moolenaar let expected = ['', 'prx', 'prx', 'prx', 39765f08474SBram Moolenaar \ 'list', 'list', 'list', 'list', 'list', 'list', 'list', 39865f08474SBram Moolenaar \ 'idx', 'idx', 'idx', 'idx', 39965f08474SBram Moolenaar \ 'list[idx]', 40065f08474SBram Moolenaar \ '];', 40165f08474SBram Moolenaar \ ] 40265f08474SBram Moolenaar for i in range(1, 16) 40365f08474SBram Moolenaar exe 'norm ' . i . '|' 40465f08474SBram Moolenaar call assert_equal(expected[i], expand('<cexpr>'), 'i == ' . i) 40565f08474SBram Moolenaar endfor 40665f08474SBram Moolenaar 40787bc3f74SBram Moolenaar " clean up 40887bc3f74SBram Moolenaar bw! 4092931f2a5SBram Moolenaarendfunc 41087bc3f74SBram Moolenaar 41187bc3f74SBram Moolenaarfunc! Test_normal11_showcmd() 41287bc3f74SBram Moolenaar " test for 'showcmd' 41387bc3f74SBram Moolenaar 10new 41487bc3f74SBram Moolenaar exe "norm! ofoobar\<esc>" 41587bc3f74SBram Moolenaar call assert_equal(2, line('$')) 41687bc3f74SBram Moolenaar set showcmd 41787bc3f74SBram Moolenaar exe "norm! ofoobar2\<esc>" 41887bc3f74SBram Moolenaar call assert_equal(3, line('$')) 41987bc3f74SBram Moolenaar exe "norm! VAfoobar3\<esc>" 42087bc3f74SBram Moolenaar call assert_equal(3, line('$')) 42187bc3f74SBram Moolenaar exe "norm! 0d3\<del>2l" 42287bc3f74SBram Moolenaar call assert_equal('obar2foobar3', getline('.')) 42387bc3f74SBram Moolenaar bw! 4242931f2a5SBram Moolenaarendfunc 42587bc3f74SBram Moolenaar 42687bc3f74SBram Moolenaarfunc! Test_normal12_nv_error() 42787bc3f74SBram Moolenaar " Test for nv_error 42887bc3f74SBram Moolenaar 10new 42987bc3f74SBram Moolenaar call setline(1, range(1,5)) 43087bc3f74SBram Moolenaar " should not do anything, just beep 43187bc3f74SBram Moolenaar exe "norm! <c-k>" 43287bc3f74SBram Moolenaar call assert_equal(map(range(1,5), 'string(v:val)'), getline(1,'$')) 43387bc3f74SBram Moolenaar bw! 4342931f2a5SBram Moolenaarendfunc 43587bc3f74SBram Moolenaar 43687bc3f74SBram Moolenaarfunc! Test_normal13_help() 43787bc3f74SBram Moolenaar " Test for F1 43887bc3f74SBram Moolenaar call assert_equal(1, winnr()) 43987bc3f74SBram Moolenaar call feedkeys("\<f1>", 'txi') 44087bc3f74SBram Moolenaar call assert_match('help\.txt', bufname('%')) 44187bc3f74SBram Moolenaar call assert_equal(2, winnr('$')) 44287bc3f74SBram Moolenaar bw! 4432931f2a5SBram Moolenaarendfunc 44487bc3f74SBram Moolenaar 44587bc3f74SBram Moolenaarfunc! Test_normal14_page() 44687bc3f74SBram Moolenaar " basic test for Ctrl-F and Ctrl-B 44787bc3f74SBram Moolenaar call Setup_NewWindow() 44887bc3f74SBram Moolenaar exe "norm! \<c-f>" 44987bc3f74SBram Moolenaar call assert_equal('9', getline('.')) 45087bc3f74SBram Moolenaar exe "norm! 2\<c-f>" 45187bc3f74SBram Moolenaar call assert_equal('25', getline('.')) 45287bc3f74SBram Moolenaar exe "norm! 2\<c-b>" 45387bc3f74SBram Moolenaar call assert_equal('18', getline('.')) 45487bc3f74SBram Moolenaar 1 45587bc3f74SBram Moolenaar set scrolloff=5 45687bc3f74SBram Moolenaar exe "norm! 2\<c-f>" 45787bc3f74SBram Moolenaar call assert_equal('21', getline('.')) 45887bc3f74SBram Moolenaar exe "norm! \<c-b>" 45987bc3f74SBram Moolenaar call assert_equal('13', getline('.')) 46087bc3f74SBram Moolenaar 1 46187bc3f74SBram Moolenaar set scrolloff=99 46287bc3f74SBram Moolenaar exe "norm! \<c-f>" 46387bc3f74SBram Moolenaar call assert_equal('13', getline('.')) 46487bc3f74SBram Moolenaar set scrolloff=0 46587bc3f74SBram Moolenaar 100 46687bc3f74SBram Moolenaar exe "norm! $\<c-b>" 46787bc3f74SBram Moolenaar call assert_equal('92', getline('.')) 46887bc3f74SBram Moolenaar call assert_equal([0, 92, 1, 0, 1], getcurpos()) 46987bc3f74SBram Moolenaar 100 47087bc3f74SBram Moolenaar set nostartofline 47187bc3f74SBram Moolenaar exe "norm! $\<c-b>" 47287bc3f74SBram Moolenaar call assert_equal('92', getline('.')) 47387bc3f74SBram Moolenaar call assert_equal([0, 92, 2, 0, 2147483647], getcurpos()) 47487bc3f74SBram Moolenaar " cleanup 47587bc3f74SBram Moolenaar set startofline 47687bc3f74SBram Moolenaar bw! 4772931f2a5SBram Moolenaarendfunc 47887bc3f74SBram Moolenaar 479bc54f3f3SBram Moolenaarfunc! Test_normal14_page_eol() 480bc54f3f3SBram Moolenaar 10new 481bc54f3f3SBram Moolenaar norm oxxxxxxx 482bc54f3f3SBram Moolenaar exe "norm 2\<c-f>" 483bc54f3f3SBram Moolenaar " check with valgrind that cursor is put back in column 1 484bc54f3f3SBram Moolenaar exe "norm 2\<c-b>" 485bc54f3f3SBram Moolenaar bw! 486bc54f3f3SBram Moolenaarendfunc 487bc54f3f3SBram Moolenaar 48887bc3f74SBram Moolenaarfunc! Test_normal15_z_scroll_vert() 48987bc3f74SBram Moolenaar " basic test for z commands that scroll the window 49087bc3f74SBram Moolenaar call Setup_NewWindow() 49187bc3f74SBram Moolenaar 100 49287bc3f74SBram Moolenaar norm! >> 49387bc3f74SBram Moolenaar " Test for z<cr> 49487bc3f74SBram Moolenaar exe "norm! z\<cr>" 49587bc3f74SBram Moolenaar call assert_equal(' 100', getline('.')) 49687bc3f74SBram Moolenaar call assert_equal(100, winsaveview()['topline']) 49787bc3f74SBram Moolenaar call assert_equal([0, 100, 2, 0, 9], getcurpos()) 49887bc3f74SBram Moolenaar 49987bc3f74SBram Moolenaar " Test for zt 50087bc3f74SBram Moolenaar 21 50187bc3f74SBram Moolenaar norm! >>0zt 50287bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 50387bc3f74SBram Moolenaar call assert_equal(21, winsaveview()['topline']) 50487bc3f74SBram Moolenaar call assert_equal([0, 21, 1, 0, 8], getcurpos()) 50587bc3f74SBram Moolenaar 50687bc3f74SBram Moolenaar " Test for zb 50787bc3f74SBram Moolenaar 30 50887bc3f74SBram Moolenaar norm! >>$ztzb 50987bc3f74SBram Moolenaar call assert_equal(' 30', getline('.')) 51087bc3f74SBram Moolenaar call assert_equal(30, winsaveview()['topline']+winheight(0)-1) 51187bc3f74SBram Moolenaar call assert_equal([0, 30, 3, 0, 2147483647], getcurpos()) 51287bc3f74SBram Moolenaar 51387bc3f74SBram Moolenaar " Test for z- 51487bc3f74SBram Moolenaar 1 51587bc3f74SBram Moolenaar 30 51687bc3f74SBram Moolenaar norm! 0z- 51787bc3f74SBram Moolenaar call assert_equal(' 30', getline('.')) 51887bc3f74SBram Moolenaar call assert_equal(30, winsaveview()['topline']+winheight(0)-1) 51987bc3f74SBram Moolenaar call assert_equal([0, 30, 2, 0, 9], getcurpos()) 52087bc3f74SBram Moolenaar 52187bc3f74SBram Moolenaar " Test for z{height}<cr> 52287bc3f74SBram Moolenaar call assert_equal(10, winheight(0)) 52387bc3f74SBram Moolenaar exe "norm! z12\<cr>" 52487bc3f74SBram Moolenaar call assert_equal(12, winheight(0)) 52587bc3f74SBram Moolenaar exe "norm! z10\<cr>" 52687bc3f74SBram Moolenaar call assert_equal(10, winheight(0)) 52787bc3f74SBram Moolenaar 52887bc3f74SBram Moolenaar " Test for z. 52987bc3f74SBram Moolenaar 1 53087bc3f74SBram Moolenaar 21 53187bc3f74SBram Moolenaar norm! 0z. 53287bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 53387bc3f74SBram Moolenaar call assert_equal(17, winsaveview()['topline']) 53487bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 53587bc3f74SBram Moolenaar 53687bc3f74SBram Moolenaar " Test for zz 53787bc3f74SBram Moolenaar 1 53887bc3f74SBram Moolenaar 21 53987bc3f74SBram Moolenaar norm! 0zz 54087bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 54187bc3f74SBram Moolenaar call assert_equal(17, winsaveview()['topline']) 54287bc3f74SBram Moolenaar call assert_equal([0, 21, 1, 0, 8], getcurpos()) 54387bc3f74SBram Moolenaar 54487bc3f74SBram Moolenaar " Test for z+ 54587bc3f74SBram Moolenaar 11 54687bc3f74SBram Moolenaar norm! zt 54787bc3f74SBram Moolenaar norm! z+ 54887bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 54987bc3f74SBram Moolenaar call assert_equal(21, winsaveview()['topline']) 55087bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 55187bc3f74SBram Moolenaar 55287bc3f74SBram Moolenaar " Test for [count]z+ 55387bc3f74SBram Moolenaar 1 55487bc3f74SBram Moolenaar norm! 21z+ 55587bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 55687bc3f74SBram Moolenaar call assert_equal(21, winsaveview()['topline']) 55787bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 55887bc3f74SBram Moolenaar 55987bc3f74SBram Moolenaar " Test for z^ 56087bc3f74SBram Moolenaar norm! 22z+0 56187bc3f74SBram Moolenaar norm! z^ 56287bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 56387bc3f74SBram Moolenaar call assert_equal(12, winsaveview()['topline']) 56487bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 56587bc3f74SBram Moolenaar 56687bc3f74SBram Moolenaar " Test for [count]z^ 56787bc3f74SBram Moolenaar 1 56887bc3f74SBram Moolenaar norm! 30z^ 56987bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 57087bc3f74SBram Moolenaar call assert_equal(12, winsaveview()['topline']) 57187bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 57287bc3f74SBram Moolenaar 57387bc3f74SBram Moolenaar " cleanup 57487bc3f74SBram Moolenaar bw! 5752931f2a5SBram Moolenaarendfunc 57687bc3f74SBram Moolenaar 57787bc3f74SBram Moolenaarfunc! Test_normal16_z_scroll_hor() 57887bc3f74SBram Moolenaar " basic test for z commands that scroll the window 57987bc3f74SBram Moolenaar 10new 58087bc3f74SBram Moolenaar 15vsp 58187bc3f74SBram Moolenaar set nowrap listchars= 58287bc3f74SBram Moolenaar let lineA='abcdefghijklmnopqrstuvwxyz' 58387bc3f74SBram Moolenaar let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' 58487bc3f74SBram Moolenaar $put =lineA 58587bc3f74SBram Moolenaar $put =lineB 58687bc3f74SBram Moolenaar 1d 58787bc3f74SBram Moolenaar 58887bc3f74SBram Moolenaar " Test for zl 58987bc3f74SBram Moolenaar 1 59087bc3f74SBram Moolenaar norm! 5zl 59187bc3f74SBram Moolenaar call assert_equal(lineA, getline('.')) 59287bc3f74SBram Moolenaar call assert_equal(6, col('.')) 59387bc3f74SBram Moolenaar call assert_equal(5, winsaveview()['leftcol']) 59487bc3f74SBram Moolenaar norm! yl 59587bc3f74SBram Moolenaar call assert_equal('f', @0) 59687bc3f74SBram Moolenaar 59787bc3f74SBram Moolenaar " Test for zh 59887bc3f74SBram Moolenaar norm! 2zh 59987bc3f74SBram Moolenaar call assert_equal(lineA, getline('.')) 60087bc3f74SBram Moolenaar call assert_equal(6, col('.')) 60187bc3f74SBram Moolenaar norm! yl 60287bc3f74SBram Moolenaar call assert_equal('f', @0) 60387bc3f74SBram Moolenaar call assert_equal(3, winsaveview()['leftcol']) 60487bc3f74SBram Moolenaar 60587bc3f74SBram Moolenaar " Test for zL 60687bc3f74SBram Moolenaar norm! zL 60787bc3f74SBram Moolenaar call assert_equal(11, col('.')) 60887bc3f74SBram Moolenaar norm! yl 60987bc3f74SBram Moolenaar call assert_equal('k', @0) 61087bc3f74SBram Moolenaar call assert_equal(10, winsaveview()['leftcol']) 61187bc3f74SBram Moolenaar norm! 2zL 61287bc3f74SBram Moolenaar call assert_equal(25, col('.')) 61387bc3f74SBram Moolenaar norm! yl 61487bc3f74SBram Moolenaar call assert_equal('y', @0) 61587bc3f74SBram Moolenaar call assert_equal(24, winsaveview()['leftcol']) 61687bc3f74SBram Moolenaar 61787bc3f74SBram Moolenaar " Test for zH 61887bc3f74SBram Moolenaar norm! 2zH 61987bc3f74SBram Moolenaar call assert_equal(25, col('.')) 62087bc3f74SBram Moolenaar call assert_equal(10, winsaveview()['leftcol']) 62187bc3f74SBram Moolenaar norm! yl 62287bc3f74SBram Moolenaar call assert_equal('y', @0) 62387bc3f74SBram Moolenaar 62487bc3f74SBram Moolenaar " Test for zs 62587bc3f74SBram Moolenaar norm! $zs 62687bc3f74SBram Moolenaar call assert_equal(26, col('.')) 62787bc3f74SBram Moolenaar call assert_equal(25, winsaveview()['leftcol']) 62887bc3f74SBram Moolenaar norm! yl 62987bc3f74SBram Moolenaar call assert_equal('z', @0) 63087bc3f74SBram Moolenaar 63187bc3f74SBram Moolenaar " Test for ze 63287bc3f74SBram Moolenaar norm! ze 63387bc3f74SBram Moolenaar call assert_equal(26, col('.')) 63487bc3f74SBram Moolenaar call assert_equal(11, winsaveview()['leftcol']) 63587bc3f74SBram Moolenaar norm! yl 63687bc3f74SBram Moolenaar call assert_equal('z', @0) 63787bc3f74SBram Moolenaar 63887bc3f74SBram Moolenaar " cleanup 63987bc3f74SBram Moolenaar set wrap listchars=eol:$ 64087bc3f74SBram Moolenaar bw! 6412931f2a5SBram Moolenaarendfunc 64287bc3f74SBram Moolenaar 64387bc3f74SBram Moolenaarfunc! Test_normal17_z_scroll_hor2() 64487bc3f74SBram Moolenaar " basic test for z commands that scroll the window 64587bc3f74SBram Moolenaar " using 'sidescrolloff' setting 64687bc3f74SBram Moolenaar 10new 64787bc3f74SBram Moolenaar 20vsp 64887bc3f74SBram Moolenaar set nowrap listchars= sidescrolloff=5 64987bc3f74SBram Moolenaar let lineA='abcdefghijklmnopqrstuvwxyz' 65087bc3f74SBram Moolenaar let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' 65187bc3f74SBram Moolenaar $put =lineA 65287bc3f74SBram Moolenaar $put =lineB 65387bc3f74SBram Moolenaar 1d 65487bc3f74SBram Moolenaar 65587bc3f74SBram Moolenaar " Test for zl 65687bc3f74SBram Moolenaar 1 65787bc3f74SBram Moolenaar norm! 5zl 65887bc3f74SBram Moolenaar call assert_equal(lineA, getline('.')) 65987bc3f74SBram Moolenaar call assert_equal(11, col('.')) 66087bc3f74SBram Moolenaar call assert_equal(5, winsaveview()['leftcol']) 66187bc3f74SBram Moolenaar norm! yl 66287bc3f74SBram Moolenaar call assert_equal('k', @0) 66387bc3f74SBram Moolenaar 66487bc3f74SBram Moolenaar " Test for zh 66587bc3f74SBram Moolenaar norm! 2zh 66687bc3f74SBram Moolenaar call assert_equal(lineA, getline('.')) 66787bc3f74SBram Moolenaar call assert_equal(11, col('.')) 66887bc3f74SBram Moolenaar norm! yl 66987bc3f74SBram Moolenaar call assert_equal('k', @0) 67087bc3f74SBram Moolenaar call assert_equal(3, winsaveview()['leftcol']) 67187bc3f74SBram Moolenaar 67287bc3f74SBram Moolenaar " Test for zL 67387bc3f74SBram Moolenaar norm! 0zL 67487bc3f74SBram Moolenaar call assert_equal(16, col('.')) 67587bc3f74SBram Moolenaar norm! yl 67687bc3f74SBram Moolenaar call assert_equal('p', @0) 67787bc3f74SBram Moolenaar call assert_equal(10, winsaveview()['leftcol']) 67887bc3f74SBram Moolenaar norm! 2zL 67987bc3f74SBram Moolenaar call assert_equal(26, col('.')) 68087bc3f74SBram Moolenaar norm! yl 68187bc3f74SBram Moolenaar call assert_equal('z', @0) 68287bc3f74SBram Moolenaar call assert_equal(15, winsaveview()['leftcol']) 68387bc3f74SBram Moolenaar 68487bc3f74SBram Moolenaar " Test for zH 68587bc3f74SBram Moolenaar norm! 2zH 68687bc3f74SBram Moolenaar call assert_equal(15, col('.')) 68787bc3f74SBram Moolenaar call assert_equal(0, winsaveview()['leftcol']) 68887bc3f74SBram Moolenaar norm! yl 68987bc3f74SBram Moolenaar call assert_equal('o', @0) 69087bc3f74SBram Moolenaar 69187bc3f74SBram Moolenaar " Test for zs 69287bc3f74SBram Moolenaar norm! $zs 69387bc3f74SBram Moolenaar call assert_equal(26, col('.')) 69487bc3f74SBram Moolenaar call assert_equal(20, winsaveview()['leftcol']) 69587bc3f74SBram Moolenaar norm! yl 69687bc3f74SBram Moolenaar call assert_equal('z', @0) 69787bc3f74SBram Moolenaar 69887bc3f74SBram Moolenaar " Test for ze 69987bc3f74SBram Moolenaar norm! ze 70087bc3f74SBram Moolenaar call assert_equal(26, col('.')) 70187bc3f74SBram Moolenaar call assert_equal(11, winsaveview()['leftcol']) 70287bc3f74SBram Moolenaar norm! yl 70387bc3f74SBram Moolenaar call assert_equal('z', @0) 70487bc3f74SBram Moolenaar 70587bc3f74SBram Moolenaar " cleanup 70687bc3f74SBram Moolenaar set wrap listchars=eol:$ sidescrolloff=0 70787bc3f74SBram Moolenaar bw! 7082931f2a5SBram Moolenaarendfunc 70987bc3f74SBram Moolenaar 71087bc3f74SBram Moolenaarfunc! Test_normal18_z_fold() 71187bc3f74SBram Moolenaar " basic tests for foldopen/folddelete 71287bc3f74SBram Moolenaar if !has("folding") 71387bc3f74SBram Moolenaar return 71487bc3f74SBram Moolenaar endif 71587bc3f74SBram Moolenaar call Setup_NewWindow() 71687bc3f74SBram Moolenaar 50 71787bc3f74SBram Moolenaar setl foldenable fdm=marker foldlevel=5 71887bc3f74SBram Moolenaar 71987bc3f74SBram Moolenaar " Test for zF 72087bc3f74SBram Moolenaar " First fold 72187bc3f74SBram Moolenaar norm! 4zF 72287bc3f74SBram Moolenaar " check that folds have been created 72387bc3f74SBram Moolenaar call assert_equal(['50/*{{{*/', '51', '52', '53/*}}}*/'], getline(50,53)) 72487bc3f74SBram Moolenaar 72587bc3f74SBram Moolenaar " Test for zd 72687bc3f74SBram Moolenaar 51 72787bc3f74SBram Moolenaar norm! 2zF 72887bc3f74SBram Moolenaar call assert_equal(2, foldlevel('.')) 72987bc3f74SBram Moolenaar norm! kzd 73087bc3f74SBram Moolenaar call assert_equal(['50', '51/*{{{*/', '52/*}}}*/', '53'], getline(50,53)) 73187bc3f74SBram Moolenaar norm! j 73287bc3f74SBram Moolenaar call assert_equal(1, foldlevel('.')) 73387bc3f74SBram Moolenaar 73487bc3f74SBram Moolenaar " Test for zD 73587bc3f74SBram Moolenaar " also deletes partially selected folds recursively 73687bc3f74SBram Moolenaar 51 73787bc3f74SBram Moolenaar norm! zF 73887bc3f74SBram Moolenaar call assert_equal(2, foldlevel('.')) 73987bc3f74SBram Moolenaar norm! kV2jzD 74087bc3f74SBram Moolenaar call assert_equal(['50', '51', '52', '53'], getline(50,53)) 74187bc3f74SBram Moolenaar 74287bc3f74SBram Moolenaar " Test for zE 74387bc3f74SBram Moolenaar 85 74487bc3f74SBram Moolenaar norm! 4zF 74587bc3f74SBram Moolenaar 86 74687bc3f74SBram Moolenaar norm! 2zF 74787bc3f74SBram Moolenaar 90 74887bc3f74SBram Moolenaar norm! 4zF 74987bc3f74SBram Moolenaar call assert_equal(['85/*{{{*/', '86/*{{{*/', '87/*}}}*/', '88/*}}}*/', '89', '90/*{{{*/', '91', '92', '93/*}}}*/'], getline(85,93)) 75087bc3f74SBram Moolenaar norm! zE 75187bc3f74SBram Moolenaar call assert_equal(['85', '86', '87', '88', '89', '90', '91', '92', '93'], getline(85,93)) 75287bc3f74SBram Moolenaar 75387bc3f74SBram Moolenaar " Test for zn 75487bc3f74SBram Moolenaar 50 75587bc3f74SBram Moolenaar set foldlevel=0 75687bc3f74SBram Moolenaar norm! 2zF 75787bc3f74SBram Moolenaar norm! zn 75887bc3f74SBram Moolenaar norm! k 75987bc3f74SBram Moolenaar call assert_equal('49', getline('.')) 76087bc3f74SBram Moolenaar norm! j 76187bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 76287bc3f74SBram Moolenaar norm! j 76387bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 76487bc3f74SBram Moolenaar norm! j 76587bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 76687bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 76787bc3f74SBram Moolenaar 76887bc3f74SBram Moolenaar " Test for zN 76987bc3f74SBram Moolenaar 49 77087bc3f74SBram Moolenaar norm! zN 77187bc3f74SBram Moolenaar call assert_equal('49', getline('.')) 77287bc3f74SBram Moolenaar norm! j 77387bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 77487bc3f74SBram Moolenaar norm! j 77587bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 77687bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 77787bc3f74SBram Moolenaar 77887bc3f74SBram Moolenaar " Test for zi 77987bc3f74SBram Moolenaar norm! zi 78087bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 78187bc3f74SBram Moolenaar norm! zi 78287bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 78387bc3f74SBram Moolenaar norm! zi 78487bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 78587bc3f74SBram Moolenaar norm! zi 78687bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 78787bc3f74SBram Moolenaar 78887bc3f74SBram Moolenaar " Test for za 78987bc3f74SBram Moolenaar 50 79087bc3f74SBram Moolenaar norm! za 79187bc3f74SBram Moolenaar norm! k 79287bc3f74SBram Moolenaar call assert_equal('49', getline('.')) 79387bc3f74SBram Moolenaar norm! j 79487bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 79587bc3f74SBram Moolenaar norm! j 79687bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 79787bc3f74SBram Moolenaar norm! j 79887bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 79987bc3f74SBram Moolenaar 50 80087bc3f74SBram Moolenaar norm! za 80187bc3f74SBram Moolenaar norm! k 80287bc3f74SBram Moolenaar call assert_equal('49', getline('.')) 80387bc3f74SBram Moolenaar norm! j 80487bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 80587bc3f74SBram Moolenaar norm! j 80687bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 80787bc3f74SBram Moolenaar 80887bc3f74SBram Moolenaar 49 80987bc3f74SBram Moolenaar norm! 5zF 81087bc3f74SBram Moolenaar norm! k 81187bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 81287bc3f74SBram Moolenaar norm! j 81387bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 81487bc3f74SBram Moolenaar norm! j 81587bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 81687bc3f74SBram Moolenaar 49 81787bc3f74SBram Moolenaar norm! za 81887bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 81987bc3f74SBram Moolenaar norm! j 82087bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 82187bc3f74SBram Moolenaar norm! j 82287bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 82387bc3f74SBram Moolenaar set nofoldenable 82487bc3f74SBram Moolenaar " close fold and set foldenable 82587bc3f74SBram Moolenaar norm! za 82687bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 82787bc3f74SBram Moolenaar 82887bc3f74SBram Moolenaar 50 82987bc3f74SBram Moolenaar " have to use {count}za to open all folds and make the cursor visible 83087bc3f74SBram Moolenaar norm! 2za 83187bc3f74SBram Moolenaar norm! 2k 83287bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 83387bc3f74SBram Moolenaar norm! j 83487bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 83587bc3f74SBram Moolenaar norm! j 83687bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 83787bc3f74SBram Moolenaar norm! j 83887bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 83987bc3f74SBram Moolenaar norm! j 84087bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 84187bc3f74SBram Moolenaar 84287bc3f74SBram Moolenaar " Test for zA 84387bc3f74SBram Moolenaar 49 84487bc3f74SBram Moolenaar set foldlevel=0 84587bc3f74SBram Moolenaar 50 84687bc3f74SBram Moolenaar norm! zA 84787bc3f74SBram Moolenaar norm! 2k 84887bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 84987bc3f74SBram Moolenaar norm! j 85087bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 85187bc3f74SBram Moolenaar norm! j 85287bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 85387bc3f74SBram Moolenaar norm! j 85487bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 85587bc3f74SBram Moolenaar norm! j 85687bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 85787bc3f74SBram Moolenaar 858395b6babSBram Moolenaar " zA on a opened fold when foldenable is not set 85987bc3f74SBram Moolenaar 50 86087bc3f74SBram Moolenaar set nofoldenable 86187bc3f74SBram Moolenaar norm! zA 86287bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 86387bc3f74SBram Moolenaar norm! k 86487bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 86587bc3f74SBram Moolenaar norm! j 86687bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 86787bc3f74SBram Moolenaar norm! j 86887bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 86987bc3f74SBram Moolenaar 87087bc3f74SBram Moolenaar " Test for zc 87187bc3f74SBram Moolenaar norm! zE 87287bc3f74SBram Moolenaar 50 87387bc3f74SBram Moolenaar norm! 2zF 87487bc3f74SBram Moolenaar 49 87587bc3f74SBram Moolenaar norm! 5zF 87687bc3f74SBram Moolenaar set nofoldenable 87787bc3f74SBram Moolenaar 50 87887bc3f74SBram Moolenaar " There most likely is a bug somewhere: 87987bc3f74SBram Moolenaar " https://groups.google.com/d/msg/vim_dev/v2EkfJ_KQjI/u-Cvv94uCAAJ 88087bc3f74SBram Moolenaar " TODO: Should this only close the inner most fold or both folds? 88187bc3f74SBram Moolenaar norm! zc 88287bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 88387bc3f74SBram Moolenaar norm! k 88487bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 88587bc3f74SBram Moolenaar norm! j 88687bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 88787bc3f74SBram Moolenaar norm! j 88887bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 88987bc3f74SBram Moolenaar set nofoldenable 89087bc3f74SBram Moolenaar 50 89187bc3f74SBram Moolenaar norm! Vjzc 89287bc3f74SBram Moolenaar norm! k 89387bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 89487bc3f74SBram Moolenaar norm! j 89587bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 89687bc3f74SBram Moolenaar norm! j 89787bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 89887bc3f74SBram Moolenaar 89987bc3f74SBram Moolenaar " Test for zC 90087bc3f74SBram Moolenaar set nofoldenable 90187bc3f74SBram Moolenaar 50 90287bc3f74SBram Moolenaar norm! zCk 90387bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 90487bc3f74SBram Moolenaar norm! j 90587bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 90687bc3f74SBram Moolenaar norm! j 90787bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 90887bc3f74SBram Moolenaar 90987bc3f74SBram Moolenaar " Test for zx 91087bc3f74SBram Moolenaar " 1) close folds at line 49-54 91187bc3f74SBram Moolenaar set nofoldenable 91287bc3f74SBram Moolenaar 48 91387bc3f74SBram Moolenaar norm! zx 91487bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 91587bc3f74SBram Moolenaar norm! j 91687bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 91787bc3f74SBram Moolenaar norm! j 91887bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 91987bc3f74SBram Moolenaar 920395b6babSBram Moolenaar " 2) do not close fold under cursor 92187bc3f74SBram Moolenaar 51 92287bc3f74SBram Moolenaar set nofoldenable 92387bc3f74SBram Moolenaar norm! zx 92487bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 92587bc3f74SBram Moolenaar norm! 3k 92687bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 92787bc3f74SBram Moolenaar norm! j 92887bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 92987bc3f74SBram Moolenaar norm! j 93087bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 93187bc3f74SBram Moolenaar norm! j 93287bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 93387bc3f74SBram Moolenaar norm! j 93487bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 93587bc3f74SBram Moolenaar norm! j 93687bc3f74SBram Moolenaar call assert_equal('53', getline('.')) 93787bc3f74SBram Moolenaar norm! j 93887bc3f74SBram Moolenaar call assert_equal('54/*}}}*/', getline('.')) 93987bc3f74SBram Moolenaar norm! j 94087bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 94187bc3f74SBram Moolenaar 94287bc3f74SBram Moolenaar " 3) close one level of folds 94387bc3f74SBram Moolenaar 48 94487bc3f74SBram Moolenaar set nofoldenable 94587bc3f74SBram Moolenaar set foldlevel=1 94687bc3f74SBram Moolenaar norm! zx 94787bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 94887bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 94987bc3f74SBram Moolenaar norm! j 95087bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 95187bc3f74SBram Moolenaar norm! j 95287bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 95387bc3f74SBram Moolenaar norm! j 95487bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 95587bc3f74SBram Moolenaar norm! j 95687bc3f74SBram Moolenaar call assert_equal('53', getline('.')) 95787bc3f74SBram Moolenaar norm! j 95887bc3f74SBram Moolenaar call assert_equal('54/*}}}*/', getline('.')) 95987bc3f74SBram Moolenaar norm! j 96087bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 96187bc3f74SBram Moolenaar 96287bc3f74SBram Moolenaar " Test for zX 96387bc3f74SBram Moolenaar " Close all folds 96487bc3f74SBram Moolenaar set foldlevel=0 nofoldenable 96587bc3f74SBram Moolenaar 50 96687bc3f74SBram Moolenaar norm! zX 96787bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 96887bc3f74SBram Moolenaar norm! k 96987bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 97087bc3f74SBram Moolenaar norm! j 97187bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 97287bc3f74SBram Moolenaar norm! j 97387bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 97487bc3f74SBram Moolenaar 97587bc3f74SBram Moolenaar " Test for zm 97687bc3f74SBram Moolenaar 50 97787bc3f74SBram Moolenaar set nofoldenable foldlevel=2 97887bc3f74SBram Moolenaar norm! zm 97987bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 98087bc3f74SBram Moolenaar call assert_equal(1, &foldlevel) 98187bc3f74SBram Moolenaar norm! zm 98287bc3f74SBram Moolenaar call assert_equal(0, &foldlevel) 98387bc3f74SBram Moolenaar norm! zm 98487bc3f74SBram Moolenaar call assert_equal(0, &foldlevel) 98587bc3f74SBram Moolenaar norm! k 98687bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 98787bc3f74SBram Moolenaar norm! j 98887bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 98987bc3f74SBram Moolenaar norm! j 99087bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 99187bc3f74SBram Moolenaar 99287bc3f74SBram Moolenaar " Test for zM 99387bc3f74SBram Moolenaar 48 99487bc3f74SBram Moolenaar set nofoldenable foldlevel=99 99587bc3f74SBram Moolenaar norm! zM 99687bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 99787bc3f74SBram Moolenaar call assert_equal(0, &foldlevel) 99887bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 99987bc3f74SBram Moolenaar norm! j 100087bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 100187bc3f74SBram Moolenaar norm! j 100287bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 100387bc3f74SBram Moolenaar 100487bc3f74SBram Moolenaar " Test for zr 100587bc3f74SBram Moolenaar 48 100687bc3f74SBram Moolenaar set nofoldenable foldlevel=0 100787bc3f74SBram Moolenaar norm! zr 100887bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 100987bc3f74SBram Moolenaar call assert_equal(1, &foldlevel) 101087bc3f74SBram Moolenaar set foldlevel=0 foldenable 101187bc3f74SBram Moolenaar norm! zr 101287bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 101387bc3f74SBram Moolenaar call assert_equal(1, &foldlevel) 101487bc3f74SBram Moolenaar norm! zr 101587bc3f74SBram Moolenaar call assert_equal(2, &foldlevel) 101687bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 101787bc3f74SBram Moolenaar norm! j 101887bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 101987bc3f74SBram Moolenaar norm! j 102087bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 102187bc3f74SBram Moolenaar norm! j 102287bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 102387bc3f74SBram Moolenaar norm! j 102487bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 102587bc3f74SBram Moolenaar 102687bc3f74SBram Moolenaar " Test for zR 102787bc3f74SBram Moolenaar 48 102887bc3f74SBram Moolenaar set nofoldenable foldlevel=0 102987bc3f74SBram Moolenaar norm! zR 103087bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 103187bc3f74SBram Moolenaar call assert_equal(2, &foldlevel) 103287bc3f74SBram Moolenaar set foldenable foldlevel=0 103387bc3f74SBram Moolenaar norm! zR 103487bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 103587bc3f74SBram Moolenaar call assert_equal(2, &foldlevel) 103687bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 103787bc3f74SBram Moolenaar norm! j 103887bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 103987bc3f74SBram Moolenaar norm! j 104087bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 104187bc3f74SBram Moolenaar norm! j 104287bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 104387bc3f74SBram Moolenaar norm! j 104487bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 104587bc3f74SBram Moolenaar call append(50, ['a /*{{{*/', 'b /*}}}*/']) 104687bc3f74SBram Moolenaar 48 104787bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 104887bc3f74SBram Moolenaar norm! j 104987bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 105087bc3f74SBram Moolenaar norm! j 105187bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 105287bc3f74SBram Moolenaar norm! j 105387bc3f74SBram Moolenaar call assert_equal('a /*{{{*/', getline('.')) 105487bc3f74SBram Moolenaar norm! j 105587bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 105687bc3f74SBram Moolenaar norm! j 105787bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 105887bc3f74SBram Moolenaar 48 105987bc3f74SBram Moolenaar norm! zR 106087bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 106187bc3f74SBram Moolenaar call assert_equal(3, &foldlevel) 106287bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 106387bc3f74SBram Moolenaar norm! j 106487bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 106587bc3f74SBram Moolenaar norm! j 106687bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 106787bc3f74SBram Moolenaar norm! j 106887bc3f74SBram Moolenaar call assert_equal('a /*{{{*/', getline('.')) 106987bc3f74SBram Moolenaar norm! j 107087bc3f74SBram Moolenaar call assert_equal('b /*}}}*/', getline('.')) 107187bc3f74SBram Moolenaar norm! j 107287bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 107387bc3f74SBram Moolenaar norm! j 107487bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 107587bc3f74SBram Moolenaar 107687bc3f74SBram Moolenaar " clean up 107787bc3f74SBram Moolenaar setl nofoldenable fdm=marker foldlevel=0 107887bc3f74SBram Moolenaar bw! 10792931f2a5SBram Moolenaarendfunc 108087bc3f74SBram Moolenaar 108187bc3f74SBram Moolenaarfunc! Test_normal19_z_spell() 108287bc3f74SBram Moolenaar if !has("spell") || !has('syntax') 108387bc3f74SBram Moolenaar return 108487bc3f74SBram Moolenaar endif 108587bc3f74SBram Moolenaar new 108687bc3f74SBram Moolenaar call append(0, ['1 good', '2 goood', '3 goood']) 108787bc3f74SBram Moolenaar set spell spellfile=./Xspellfile.add spelllang=en 108887bc3f74SBram Moolenaar let oldlang=v:lang 108987bc3f74SBram Moolenaar lang C 109087bc3f74SBram Moolenaar 109187bc3f74SBram Moolenaar " Test for zg 109287bc3f74SBram Moolenaar 1 109387bc3f74SBram Moolenaar norm! ]s 109487bc3f74SBram Moolenaar call assert_equal('2 goood', getline('.')) 109587bc3f74SBram Moolenaar norm! zg 109687bc3f74SBram Moolenaar 1 109787bc3f74SBram Moolenaar let a=execute('unsilent :norm! ]s') 109887bc3f74SBram Moolenaar call assert_equal('1 good', getline('.')) 109987bc3f74SBram Moolenaar call assert_equal('search hit BOTTOM, continuing at TOP', a[1:]) 110087bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 110187bc3f74SBram Moolenaar call assert_equal('goood', cnt[0]) 110287bc3f74SBram Moolenaar 110387bc3f74SBram Moolenaar " Test for zw 110487bc3f74SBram Moolenaar 2 110587bc3f74SBram Moolenaar norm! $zw 110687bc3f74SBram Moolenaar 1 110787bc3f74SBram Moolenaar norm! ]s 110887bc3f74SBram Moolenaar call assert_equal('2 goood', getline('.')) 110987bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 111087bc3f74SBram Moolenaar call assert_equal('#oood', cnt[0]) 111187bc3f74SBram Moolenaar call assert_equal('goood/!', cnt[1]) 111287bc3f74SBram Moolenaar 111387bc3f74SBram Moolenaar " Test for zg in visual mode 111487bc3f74SBram Moolenaar let a=execute('unsilent :norm! V$zg') 111587bc3f74SBram Moolenaar call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) 111687bc3f74SBram Moolenaar 1 111787bc3f74SBram Moolenaar norm! ]s 111887bc3f74SBram Moolenaar call assert_equal('3 goood', getline('.')) 111987bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 112087bc3f74SBram Moolenaar call assert_equal('2 goood', cnt[2]) 112187bc3f74SBram Moolenaar " Remove "2 good" from spellfile 112287bc3f74SBram Moolenaar 2 112387bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zw') 112487bc3f74SBram Moolenaar call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) 112587bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 112687bc3f74SBram Moolenaar call assert_equal('2 goood/!', cnt[3]) 112787bc3f74SBram Moolenaar 112887bc3f74SBram Moolenaar " Test for zG 112987bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zG') 113087bc3f74SBram Moolenaar call assert_match("Word '2 goood' added to .*", a) 113187bc3f74SBram Moolenaar let fname=matchstr(a, 'to\s\+\zs\f\+$') 113287bc3f74SBram Moolenaar let cnt=readfile(fname) 113387bc3f74SBram Moolenaar call assert_equal('2 goood', cnt[0]) 113487bc3f74SBram Moolenaar 113587bc3f74SBram Moolenaar " Test for zW 113687bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zW') 113787bc3f74SBram Moolenaar call assert_match("Word '2 goood' added to .*", a) 113887bc3f74SBram Moolenaar let cnt=readfile(fname) 113987bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 114087bc3f74SBram Moolenaar call assert_equal('2 goood/!', cnt[1]) 114187bc3f74SBram Moolenaar 114287bc3f74SBram Moolenaar " Test for zuW 114387bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zuW') 114487bc3f74SBram Moolenaar call assert_match("Word '2 goood' removed from .*", a) 114587bc3f74SBram Moolenaar let cnt=readfile(fname) 114687bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 114787bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[1]) 114887bc3f74SBram Moolenaar 114987bc3f74SBram Moolenaar " Test for zuG 115087bc3f74SBram Moolenaar let a=execute('unsilent norm! $zG') 115187bc3f74SBram Moolenaar call assert_match("Word 'goood' added to .*", a) 115287bc3f74SBram Moolenaar let cnt=readfile(fname) 115387bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 115487bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[1]) 115587bc3f74SBram Moolenaar call assert_equal('goood', cnt[2]) 115687bc3f74SBram Moolenaar let a=execute('unsilent norm! $zuG') 115787bc3f74SBram Moolenaar let cnt=readfile(fname) 115887bc3f74SBram Moolenaar call assert_match("Word 'goood' removed from .*", a) 115987bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 116087bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[1]) 116187bc3f74SBram Moolenaar call assert_equal('#oood', cnt[2]) 116287bc3f74SBram Moolenaar " word not found in wordlist 116387bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zuG') 116487bc3f74SBram Moolenaar let cnt=readfile(fname) 116587bc3f74SBram Moolenaar call assert_match("", a) 116687bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 116787bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[1]) 116887bc3f74SBram Moolenaar call assert_equal('#oood', cnt[2]) 116987bc3f74SBram Moolenaar 117087bc3f74SBram Moolenaar " Test for zug 117187bc3f74SBram Moolenaar call delete('./Xspellfile.add') 117287bc3f74SBram Moolenaar 2 117387bc3f74SBram Moolenaar let a=execute('unsilent norm! $zg') 117487bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 117587bc3f74SBram Moolenaar call assert_equal('goood', cnt[0]) 117687bc3f74SBram Moolenaar let a=execute('unsilent norm! $zug') 117787bc3f74SBram Moolenaar call assert_match("Word 'goood' removed from \./Xspellfile.add", a) 117887bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 117987bc3f74SBram Moolenaar call assert_equal('#oood', cnt[0]) 118087bc3f74SBram Moolenaar " word not in wordlist 118187bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zug') 118287bc3f74SBram Moolenaar call assert_match('', a) 118387bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 118487bc3f74SBram Moolenaar call assert_equal('#oood', cnt[0]) 118587bc3f74SBram Moolenaar 118687bc3f74SBram Moolenaar " Test for zuw 118787bc3f74SBram Moolenaar call delete('./Xspellfile.add') 118887bc3f74SBram Moolenaar 2 118987bc3f74SBram Moolenaar let a=execute('unsilent norm! Vzw') 119087bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 119187bc3f74SBram Moolenaar call assert_equal('2 goood/!', cnt[0]) 119287bc3f74SBram Moolenaar let a=execute('unsilent norm! Vzuw') 119387bc3f74SBram Moolenaar call assert_match("Word '2 goood' removed from \./Xspellfile.add", a) 119487bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 119587bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[0]) 119687bc3f74SBram Moolenaar " word not in wordlist 119787bc3f74SBram Moolenaar let a=execute('unsilent norm! $zug') 119887bc3f74SBram Moolenaar call assert_match('', a) 119987bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 120087bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[0]) 120187bc3f74SBram Moolenaar 120287bc3f74SBram Moolenaar " add second entry to spellfile setting 120387bc3f74SBram Moolenaar set spellfile=./Xspellfile.add,./Xspellfile2.add 120487bc3f74SBram Moolenaar call delete('./Xspellfile.add') 120587bc3f74SBram Moolenaar 2 120687bc3f74SBram Moolenaar let a=execute('unsilent norm! $2zg') 120787bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile2.add') 120887bc3f74SBram Moolenaar call assert_match("Word 'goood' added to ./Xspellfile2.add", a) 120987bc3f74SBram Moolenaar call assert_equal('goood', cnt[0]) 121087bc3f74SBram Moolenaar 1211f45938ccSBram Moolenaar " Test for :spellgood! 1212f45938ccSBram Moolenaar let temp = execute(':spe!0/0') 1213f45938ccSBram Moolenaar call assert_match('Invalid region', temp) 1214f45938ccSBram Moolenaar let spellfile = matchstr(temp, 'Invalid region nr in \zs.*\ze line \d: 0') 1215f45938ccSBram Moolenaar call assert_equal(['# goood', '# goood/!', '#oood', '0/0'], readfile(spellfile)) 1216f45938ccSBram Moolenaar call delete(spellfile) 1217f45938ccSBram Moolenaar 121887bc3f74SBram Moolenaar " clean up 121987bc3f74SBram Moolenaar exe "lang" oldlang 122087bc3f74SBram Moolenaar call delete("./Xspellfile.add") 122187bc3f74SBram Moolenaar call delete("./Xspellfile2.add") 1222df0db16cSBram Moolenaar call delete("./Xspellfile.add.spl") 1223df0db16cSBram Moolenaar call delete("./Xspellfile2.add.spl") 122487bc3f74SBram Moolenaar 122587bc3f74SBram Moolenaar " zux -> no-op 122687bc3f74SBram Moolenaar 2 122787bc3f74SBram Moolenaar norm! $zux 122887bc3f74SBram Moolenaar call assert_equal([], glob('Xspellfile.add',0,1)) 122987bc3f74SBram Moolenaar call assert_equal([], glob('Xspellfile2.add',0,1)) 123087bc3f74SBram Moolenaar 123187bc3f74SBram Moolenaar set spellfile= 123287bc3f74SBram Moolenaar bw! 12332931f2a5SBram Moolenaarendfunc 123487bc3f74SBram Moolenaar 123587bc3f74SBram Moolenaarfunc! Test_normal20_exmode() 12360913a108SBram Moolenaar if !has("unix") 12370913a108SBram Moolenaar " Reading from redirected file doesn't work on MS-Windows 123887bc3f74SBram Moolenaar return 123987bc3f74SBram Moolenaar endif 124087bc3f74SBram Moolenaar call writefile(['1a', 'foo', 'bar', '.', 'w! Xfile2', 'q!'], 'Xscript') 124187bc3f74SBram Moolenaar call writefile(['1', '2'], 'Xfile') 124287bc3f74SBram Moolenaar call system(v:progpath .' -e -s < Xscript Xfile') 124387bc3f74SBram Moolenaar let a=readfile('Xfile2') 124487bc3f74SBram Moolenaar call assert_equal(['1', 'foo', 'bar', '2'], a) 124587bc3f74SBram Moolenaar 124687bc3f74SBram Moolenaar " clean up 124787bc3f74SBram Moolenaar for file in ['Xfile', 'Xfile2', 'Xscript'] 124887bc3f74SBram Moolenaar call delete(file) 124987bc3f74SBram Moolenaar endfor 125087bc3f74SBram Moolenaar bw! 12512931f2a5SBram Moolenaarendfunc 125287bc3f74SBram Moolenaar 125387bc3f74SBram Moolenaarfunc! Test_normal21_nv_hat() 125487bc3f74SBram Moolenaar set hidden 12552931f2a5SBram Moolenaar new 12562931f2a5SBram Moolenaar " to many buffers opened already, will not work 12572931f2a5SBram Moolenaar "call assert_fails(":b#", 'E23') 12582931f2a5SBram Moolenaar "call assert_equal('', @#) 125987bc3f74SBram Moolenaar e Xfoobar 126087bc3f74SBram Moolenaar e Xfile2 126187bc3f74SBram Moolenaar call feedkeys("\<c-^>", 't') 126287bc3f74SBram Moolenaar call assert_equal("Xfile2", fnamemodify(bufname('%'), ':t')) 126387bc3f74SBram Moolenaar call feedkeys("f\<c-^>", 't') 126487bc3f74SBram Moolenaar call assert_equal("Xfile2", fnamemodify(bufname('%'), ':t')) 126587bc3f74SBram Moolenaar " clean up 126687bc3f74SBram Moolenaar set nohidden 126787bc3f74SBram Moolenaar bw! 12682931f2a5SBram Moolenaarendfunc 126987bc3f74SBram Moolenaar 127087bc3f74SBram Moolenaarfunc! Test_normal22_zet() 127187bc3f74SBram Moolenaar " Test for ZZ 12720913a108SBram Moolenaar " let shell = &shell 12730913a108SBram Moolenaar " let &shell = 'sh' 127487bc3f74SBram Moolenaar call writefile(['1', '2'], 'Xfile') 127587bc3f74SBram Moolenaar let args = ' -u NONE -N -U NONE -i NONE --noplugins -X --not-a-term' 127687bc3f74SBram Moolenaar call system(v:progpath . args . ' -c "%d" -c ":norm! ZZ" Xfile') 127787bc3f74SBram Moolenaar let a = readfile('Xfile') 127887bc3f74SBram Moolenaar call assert_equal([], a) 127987bc3f74SBram Moolenaar " Test for ZQ 128087bc3f74SBram Moolenaar call writefile(['1', '2'], 'Xfile') 128187bc3f74SBram Moolenaar call system(v:progpath . args . ' -c "%d" -c ":norm! ZQ" Xfile') 128287bc3f74SBram Moolenaar let a = readfile('Xfile') 128387bc3f74SBram Moolenaar call assert_equal(['1', '2'], a) 128487bc3f74SBram Moolenaar 128587bc3f74SBram Moolenaar " clean up 128687bc3f74SBram Moolenaar for file in ['Xfile'] 128787bc3f74SBram Moolenaar call delete(file) 128887bc3f74SBram Moolenaar endfor 12890913a108SBram Moolenaar " let &shell = shell 12902931f2a5SBram Moolenaarendfunc 129187bc3f74SBram Moolenaar 129287bc3f74SBram Moolenaarfunc! Test_normal23_K() 129387bc3f74SBram Moolenaar " Test for K command 129487bc3f74SBram Moolenaar new 1295426f3754SBram Moolenaar call append(0, ['version8.txt', 'man', 'aa%bb', 'cc|dd']) 129687bc3f74SBram Moolenaar let k = &keywordprg 129787bc3f74SBram Moolenaar set keywordprg=:help 129887bc3f74SBram Moolenaar 1 129987bc3f74SBram Moolenaar norm! VK 130087bc3f74SBram Moolenaar call assert_equal('version8.txt', fnamemodify(bufname('%'), ':t')) 130187bc3f74SBram Moolenaar call assert_equal('help', &ft) 130287bc3f74SBram Moolenaar call assert_match('\*version8.txt\*', getline('.')) 130387bc3f74SBram Moolenaar helpclose 130487bc3f74SBram Moolenaar norm! 0K 130587bc3f74SBram Moolenaar call assert_equal('version8.txt', fnamemodify(bufname('%'), ':t')) 130687bc3f74SBram Moolenaar call assert_equal('help', &ft) 130787bc3f74SBram Moolenaar call assert_match('\*version8\.0\*', getline('.')) 130887bc3f74SBram Moolenaar helpclose 130987bc3f74SBram Moolenaar 1310426f3754SBram Moolenaar set keywordprg=:new 1311426f3754SBram Moolenaar set iskeyword+=% 1312426f3754SBram Moolenaar set iskeyword+=\| 1313426f3754SBram Moolenaar 2 1314426f3754SBram Moolenaar norm! K 1315426f3754SBram Moolenaar call assert_equal('man', fnamemodify(bufname('%'), ':t')) 1316426f3754SBram Moolenaar bwipe! 1317426f3754SBram Moolenaar 3 1318426f3754SBram Moolenaar norm! K 1319426f3754SBram Moolenaar call assert_equal('aa%bb', fnamemodify(bufname('%'), ':t')) 1320426f3754SBram Moolenaar bwipe! 1321eb828d01SBram Moolenaar if !has('win32') 1322426f3754SBram Moolenaar 4 1323426f3754SBram Moolenaar norm! K 1324426f3754SBram Moolenaar call assert_equal('cc|dd', fnamemodify(bufname('%'), ':t')) 1325426f3754SBram Moolenaar bwipe! 1326eb828d01SBram Moolenaar endif 1327426f3754SBram Moolenaar set iskeyword-=% 1328426f3754SBram Moolenaar set iskeyword-=\| 1329426f3754SBram Moolenaar 13300913a108SBram Moolenaar " Only expect "man" to work on Unix 13310913a108SBram Moolenaar if !has("unix") 133287bc3f74SBram Moolenaar let &keywordprg = k 133387bc3f74SBram Moolenaar bw! 133487bc3f74SBram Moolenaar return 133587bc3f74SBram Moolenaar endif 133687bc3f74SBram Moolenaar set keywordprg=man\ --pager=cat 133787bc3f74SBram Moolenaar " Test for using man 133887bc3f74SBram Moolenaar 2 133987bc3f74SBram Moolenaar let a = execute('unsilent norm! K') 134087bc3f74SBram Moolenaar call assert_match("man --pager=cat 'man'", a) 134187bc3f74SBram Moolenaar 134287bc3f74SBram Moolenaar " clean up 134387bc3f74SBram Moolenaar let &keywordprg = k 134487bc3f74SBram Moolenaar bw! 13452931f2a5SBram Moolenaarendfunc 134687bc3f74SBram Moolenaar 134787bc3f74SBram Moolenaarfunc! Test_normal24_rot13() 134887bc3f74SBram Moolenaar " This test uses multi byte characters 134987bc3f74SBram Moolenaar if !has("multi_byte") 135087bc3f74SBram Moolenaar return 135187bc3f74SBram Moolenaar endif 135287bc3f74SBram Moolenaar " Testing for g?? g?g? 135387bc3f74SBram Moolenaar new 135487bc3f74SBram Moolenaar call append(0, 'abcdefghijklmnopqrstuvwxyzäüö') 135587bc3f74SBram Moolenaar 1 135687bc3f74SBram Moolenaar norm! g?? 135787bc3f74SBram Moolenaar call assert_equal('nopqrstuvwxyzabcdefghijklmäüö', getline('.')) 135887bc3f74SBram Moolenaar norm! g?g? 135987bc3f74SBram Moolenaar call assert_equal('abcdefghijklmnopqrstuvwxyzäüö', getline('.')) 136087bc3f74SBram Moolenaar 136187bc3f74SBram Moolenaar " clean up 136287bc3f74SBram Moolenaar bw! 13632931f2a5SBram Moolenaarendfunc 136487bc3f74SBram Moolenaar 136587bc3f74SBram Moolenaarfunc! Test_normal25_tag() 136687bc3f74SBram Moolenaar " Testing for CTRL-] g CTRL-] g] 136787bc3f74SBram Moolenaar " CTRL-W g] CTRL-W CTRL-] CTRL-W g CTRL-] 136887bc3f74SBram Moolenaar h 136987bc3f74SBram Moolenaar " Test for CTRL-] 137087bc3f74SBram Moolenaar call search('\<x\>$') 137187bc3f74SBram Moolenaar exe "norm! \<c-]>" 137287bc3f74SBram Moolenaar call assert_equal("change.txt", fnamemodify(bufname('%'), ':t')) 137387bc3f74SBram Moolenaar norm! yiW 137487bc3f74SBram Moolenaar call assert_equal("*x*", @0) 137587bc3f74SBram Moolenaar exe ":norm \<c-o>" 137687bc3f74SBram Moolenaar 137787bc3f74SBram Moolenaar " Test for g_CTRL-] 137887bc3f74SBram Moolenaar call search('\<v_u\>$') 137987bc3f74SBram Moolenaar exe "norm! g\<c-]>" 138087bc3f74SBram Moolenaar call assert_equal("change.txt", fnamemodify(bufname('%'), ':t')) 138187bc3f74SBram Moolenaar norm! yiW 138287bc3f74SBram Moolenaar call assert_equal("*v_u*", @0) 138387bc3f74SBram Moolenaar exe ":norm \<c-o>" 138487bc3f74SBram Moolenaar 138587bc3f74SBram Moolenaar " Test for g] 138687bc3f74SBram Moolenaar call search('\<i_<Esc>$') 138787bc3f74SBram Moolenaar let a = execute(":norm! g]") 138887bc3f74SBram Moolenaar call assert_match('i_<Esc>.*insert.txt', a) 138987bc3f74SBram Moolenaar 139087bc3f74SBram Moolenaar if !empty(exepath('cscope')) && has('cscope') 139187bc3f74SBram Moolenaar " setting cscopetag changes how g] works 139287bc3f74SBram Moolenaar set cst 139387bc3f74SBram Moolenaar exe "norm! g]" 139487bc3f74SBram Moolenaar call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t')) 139587bc3f74SBram Moolenaar norm! yiW 139687bc3f74SBram Moolenaar call assert_equal("*i_<Esc>*", @0) 139787bc3f74SBram Moolenaar exe ":norm \<c-o>" 139887bc3f74SBram Moolenaar " Test for CTRL-W g] 139987bc3f74SBram Moolenaar exe "norm! \<C-W>g]" 140087bc3f74SBram Moolenaar call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t')) 140187bc3f74SBram Moolenaar norm! yiW 140287bc3f74SBram Moolenaar call assert_equal("*i_<Esc>*", @0) 140387bc3f74SBram Moolenaar call assert_equal(3, winnr('$')) 140487bc3f74SBram Moolenaar helpclose 140587bc3f74SBram Moolenaar set nocst 140687bc3f74SBram Moolenaar endif 140787bc3f74SBram Moolenaar 140887bc3f74SBram Moolenaar " Test for CTRL-W g] 140987bc3f74SBram Moolenaar let a = execute("norm! \<C-W>g]") 141087bc3f74SBram Moolenaar call assert_match('i_<Esc>.*insert.txt', a) 141187bc3f74SBram Moolenaar 141287bc3f74SBram Moolenaar " Test for CTRL-W CTRL-] 141387bc3f74SBram Moolenaar exe "norm! \<C-W>\<C-]>" 141487bc3f74SBram Moolenaar call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t')) 141587bc3f74SBram Moolenaar norm! yiW 141687bc3f74SBram Moolenaar call assert_equal("*i_<Esc>*", @0) 141787bc3f74SBram Moolenaar call assert_equal(3, winnr('$')) 141887bc3f74SBram Moolenaar helpclose 141987bc3f74SBram Moolenaar 142087bc3f74SBram Moolenaar " Test for CTRL-W g CTRL-] 142187bc3f74SBram Moolenaar exe "norm! \<C-W>g\<C-]>" 142287bc3f74SBram Moolenaar call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t')) 142387bc3f74SBram Moolenaar norm! yiW 142487bc3f74SBram Moolenaar call assert_equal("*i_<Esc>*", @0) 142587bc3f74SBram Moolenaar call assert_equal(3, winnr('$')) 142687bc3f74SBram Moolenaar helpclose 142787bc3f74SBram Moolenaar 142887bc3f74SBram Moolenaar " clean up 142987bc3f74SBram Moolenaar helpclose 14302931f2a5SBram Moolenaarendfunc 143187bc3f74SBram Moolenaar 143287bc3f74SBram Moolenaarfunc! Test_normal26_put() 143387bc3f74SBram Moolenaar " Test for ]p ]P [p and [P 143487bc3f74SBram Moolenaar new 143587bc3f74SBram Moolenaar call append(0, ['while read LINE', 'do', ' ((count++))', ' if [ $? -ne 0 ]; then', " echo 'Error writing file'", ' fi', 'done']) 143687bc3f74SBram Moolenaar 1 143787bc3f74SBram Moolenaar /Error/y a 143887bc3f74SBram Moolenaar 2 143987bc3f74SBram Moolenaar norm! "a]pj"a[p 144087bc3f74SBram Moolenaar call assert_equal(['do', "echo 'Error writing file'", " echo 'Error writing file'", ' ((count++))'], getline(2,5)) 144187bc3f74SBram Moolenaar 1 144287bc3f74SBram Moolenaar /^\s\{4}/ 144387bc3f74SBram Moolenaar exe "norm! \"a]P3Eldt'" 144487bc3f74SBram Moolenaar exe "norm! j\"a[P2Eldt'" 144587bc3f74SBram Moolenaar call assert_equal([' if [ $? -ne 0 ]; then', " echo 'Error writing'", " echo 'Error'", " echo 'Error writing file'", ' fi'], getline(6,10)) 144687bc3f74SBram Moolenaar 144787bc3f74SBram Moolenaar " clean up 144887bc3f74SBram Moolenaar bw! 14492931f2a5SBram Moolenaarendfunc 145087bc3f74SBram Moolenaar 145187bc3f74SBram Moolenaarfunc! Test_normal27_bracket() 145287bc3f74SBram Moolenaar " Test for [' [` ]' ]` 145387bc3f74SBram Moolenaar call Setup_NewWindow() 145487bc3f74SBram Moolenaar 1,21s/.\+/ & b/ 145587bc3f74SBram Moolenaar 1 145687bc3f74SBram Moolenaar norm! $ma 145787bc3f74SBram Moolenaar 5 145887bc3f74SBram Moolenaar norm! $mb 145987bc3f74SBram Moolenaar 10 146087bc3f74SBram Moolenaar norm! $mc 146187bc3f74SBram Moolenaar 15 146287bc3f74SBram Moolenaar norm! $md 146387bc3f74SBram Moolenaar 20 146487bc3f74SBram Moolenaar norm! $me 146587bc3f74SBram Moolenaar 146687bc3f74SBram Moolenaar " Test for [' 146787bc3f74SBram Moolenaar 9 146887bc3f74SBram Moolenaar norm! 2[' 146987bc3f74SBram Moolenaar call assert_equal(' 1 b', getline('.')) 147087bc3f74SBram Moolenaar call assert_equal(1, line('.')) 147187bc3f74SBram Moolenaar call assert_equal(3, col('.')) 147287bc3f74SBram Moolenaar 147387bc3f74SBram Moolenaar " Test for ]' 147487bc3f74SBram Moolenaar norm! ]' 147587bc3f74SBram Moolenaar call assert_equal(' 5 b', getline('.')) 147687bc3f74SBram Moolenaar call assert_equal(5, line('.')) 147787bc3f74SBram Moolenaar call assert_equal(3, col('.')) 147887bc3f74SBram Moolenaar 147987bc3f74SBram Moolenaar " No mark after line 21, cursor moves to first non blank on current line 148087bc3f74SBram Moolenaar 21 148187bc3f74SBram Moolenaar norm! $]' 148287bc3f74SBram Moolenaar call assert_equal(' 21 b', getline('.')) 148387bc3f74SBram Moolenaar call assert_equal(21, line('.')) 148487bc3f74SBram Moolenaar call assert_equal(3, col('.')) 148587bc3f74SBram Moolenaar 148687bc3f74SBram Moolenaar " Test for [` 148787bc3f74SBram Moolenaar norm! 2[` 148887bc3f74SBram Moolenaar call assert_equal(' 15 b', getline('.')) 148987bc3f74SBram Moolenaar call assert_equal(15, line('.')) 149087bc3f74SBram Moolenaar call assert_equal(8, col('.')) 149187bc3f74SBram Moolenaar 149287bc3f74SBram Moolenaar " Test for ]` 149387bc3f74SBram Moolenaar norm! ]` 149487bc3f74SBram Moolenaar call assert_equal(' 20 b', getline('.')) 149587bc3f74SBram Moolenaar call assert_equal(20, line('.')) 149687bc3f74SBram Moolenaar call assert_equal(8, col('.')) 149787bc3f74SBram Moolenaar 149887bc3f74SBram Moolenaar " clean up 149987bc3f74SBram Moolenaar bw! 15002931f2a5SBram Moolenaarendfunc 150187bc3f74SBram Moolenaar 150287bc3f74SBram Moolenaarfunc! Test_normal28_parenthesis() 150387bc3f74SBram Moolenaar " basic testing for ( and ) 150487bc3f74SBram Moolenaar new 150587bc3f74SBram Moolenaar call append(0, ['This is a test. With some sentences!', '', 'Even with a question? And one more. And no sentence here']) 150687bc3f74SBram Moolenaar 150787bc3f74SBram Moolenaar $ 150887bc3f74SBram Moolenaar norm! d( 150987bc3f74SBram Moolenaar call assert_equal(['This is a test. With some sentences!', '', 'Even with a question? And one more. ', ''], getline(1, '$')) 151087bc3f74SBram Moolenaar norm! 2d( 151187bc3f74SBram Moolenaar call assert_equal(['This is a test. With some sentences!', '', ' ', ''], getline(1, '$')) 151287bc3f74SBram Moolenaar 1 151387bc3f74SBram Moolenaar norm! 0d) 151487bc3f74SBram Moolenaar call assert_equal(['With some sentences!', '', ' ', ''], getline(1, '$')) 151587bc3f74SBram Moolenaar 151687bc3f74SBram Moolenaar call append('$', ['This is a long sentence', '', 'spanning', 'over several lines. ']) 151787bc3f74SBram Moolenaar $ 151887bc3f74SBram Moolenaar norm! $d( 151987bc3f74SBram Moolenaar call assert_equal(['With some sentences!', '', ' ', '', 'This is a long sentence', ''], getline(1, '$')) 152087bc3f74SBram Moolenaar 152187bc3f74SBram Moolenaar " clean up 152287bc3f74SBram Moolenaar bw! 15232931f2a5SBram Moolenaarendfunc 152487bc3f74SBram Moolenaar 152587bc3f74SBram Moolenaarfun! Test_normal29_brace() 152687bc3f74SBram Moolenaar " basic test for { and } movements 152787bc3f74SBram Moolenaar let text= ['A paragraph begins after each empty line, and also at each of a set of', 152887bc3f74SBram Moolenaar \ 'paragraph macros, specified by the pairs of characters in the ''paragraphs''', 152987bc3f74SBram Moolenaar \ 'option. The default is "IPLPPPQPP TPHPLIPpLpItpplpipbp", which corresponds to', 153087bc3f74SBram Moolenaar \ 'the macros ".IP", ".LP", etc. (These are nroff macros, so the dot must be in', 153187bc3f74SBram Moolenaar \ 'the first column). A section boundary is also a paragraph boundary.', 153287bc3f74SBram Moolenaar \ 'Note that a blank line (only containing white space) is NOT a paragraph', 153387bc3f74SBram Moolenaar \ 'boundary.', 153487bc3f74SBram Moolenaar \ '', 153587bc3f74SBram Moolenaar \ '', 153687bc3f74SBram Moolenaar \ 'Also note that this does not include a ''{'' or ''}'' in the first column. When', 153787bc3f74SBram Moolenaar \ 'the ''{'' flag is in ''cpoptions'' then ''{'' in the first column is used as a', 153887bc3f74SBram Moolenaar \ 'paragraph boundary |posix|.', 153987bc3f74SBram Moolenaar \ '{', 154087bc3f74SBram Moolenaar \ 'This is no paragaraph', 154187bc3f74SBram Moolenaar \ 'unless the ''{'' is set', 154287bc3f74SBram Moolenaar \ 'in ''cpoptions''', 154387bc3f74SBram Moolenaar \ '}', 154487bc3f74SBram Moolenaar \ '.IP', 154587bc3f74SBram Moolenaar \ 'The nroff macros IP seperates a paragraph', 154687bc3f74SBram Moolenaar \ 'That means, it must be a ''.''', 154787bc3f74SBram Moolenaar \ 'followed by IP', 154887bc3f74SBram Moolenaar \ '.LPIt does not matter, if afterwards some', 154987bc3f74SBram Moolenaar \ 'more characters follow.', 155087bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 155187bc3f74SBram Moolenaar \ 'macros terminate a paragraph. That means', 155287bc3f74SBram Moolenaar \ 'a character like this:', 155387bc3f74SBram Moolenaar \ '.NH', 155487bc3f74SBram Moolenaar \ 'End of text here'] 155587bc3f74SBram Moolenaar new 155687bc3f74SBram Moolenaar call append(0, text) 155787bc3f74SBram Moolenaar 1 155887bc3f74SBram Moolenaar norm! 0d2} 155987bc3f74SBram Moolenaar call assert_equal(['.IP', 156087bc3f74SBram Moolenaar \ 'The nroff macros IP seperates a paragraph', 'That means, it must be a ''.''', 'followed by IP', 156187bc3f74SBram Moolenaar \ '.LPIt does not matter, if afterwards some', 'more characters follow.', '.SHAlso section boundaries from the nroff', 156287bc3f74SBram Moolenaar \ 'macros terminate a paragraph. That means', 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$')) 156387bc3f74SBram Moolenaar norm! 0d} 156487bc3f74SBram Moolenaar call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.', 156587bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 156687bc3f74SBram Moolenaar \ 'a character like this:', '.NH', 'End of text here', ''], getline(1, '$')) 156787bc3f74SBram Moolenaar $ 156887bc3f74SBram Moolenaar norm! d{ 156987bc3f74SBram Moolenaar call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.', 157087bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 'a character like this:', ''], getline(1, '$')) 157187bc3f74SBram Moolenaar norm! d{ 157287bc3f74SBram Moolenaar call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.', ''], getline(1,'$')) 157387bc3f74SBram Moolenaar " Test with { in cpooptions 157487bc3f74SBram Moolenaar %d 157587bc3f74SBram Moolenaar call append(0, text) 157687bc3f74SBram Moolenaar set cpo+={ 157787bc3f74SBram Moolenaar 1 157887bc3f74SBram Moolenaar norm! 0d2} 157987bc3f74SBram Moolenaar call assert_equal(['{', 'This is no paragaraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}', 158087bc3f74SBram Moolenaar \ '.IP', 'The nroff macros IP seperates a paragraph', 'That means, it must be a ''.''', 158187bc3f74SBram Moolenaar \ 'followed by IP', '.LPIt does not matter, if afterwards some', 'more characters follow.', 158287bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 158387bc3f74SBram Moolenaar \ 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$')) 158487bc3f74SBram Moolenaar $ 158587bc3f74SBram Moolenaar norm! d} 158687bc3f74SBram Moolenaar call assert_equal(['{', 'This is no paragaraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}', 158787bc3f74SBram Moolenaar \ '.IP', 'The nroff macros IP seperates a paragraph', 'That means, it must be a ''.''', 158887bc3f74SBram Moolenaar \ 'followed by IP', '.LPIt does not matter, if afterwards some', 'more characters follow.', 158987bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 159087bc3f74SBram Moolenaar \ 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$')) 159187bc3f74SBram Moolenaar norm! gg} 159287bc3f74SBram Moolenaar norm! d5} 159387bc3f74SBram Moolenaar call assert_equal(['{', 'This is no paragaraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}', ''], getline(1,'$')) 159487bc3f74SBram Moolenaar 159587bc3f74SBram Moolenaar " clean up 159687bc3f74SBram Moolenaar set cpo-={ 159787bc3f74SBram Moolenaar bw! 15982931f2a5SBram Moolenaarendfunc 159987bc3f74SBram Moolenaar 160087bc3f74SBram Moolenaarfun! Test_normal30_changecase() 160187bc3f74SBram Moolenaar " This test uses multi byte characters 160287bc3f74SBram Moolenaar if !has("multi_byte") 160387bc3f74SBram Moolenaar return 160487bc3f74SBram Moolenaar endif 160587bc3f74SBram Moolenaar new 160687bc3f74SBram Moolenaar call append(0, 'This is a simple test: äüöß') 160787bc3f74SBram Moolenaar norm! 1ggVu 160887bc3f74SBram Moolenaar call assert_equal('this is a simple test: äüöß', getline('.')) 160987bc3f74SBram Moolenaar norm! VU 161087bc3f74SBram Moolenaar call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.')) 161187bc3f74SBram Moolenaar norm! guu 161287bc3f74SBram Moolenaar call assert_equal('this is a simple test: äüöss', getline('.')) 161387bc3f74SBram Moolenaar norm! gUgU 161487bc3f74SBram Moolenaar call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.')) 161587bc3f74SBram Moolenaar norm! gugu 161687bc3f74SBram Moolenaar call assert_equal('this is a simple test: äüöss', getline('.')) 161787bc3f74SBram Moolenaar norm! gUU 161887bc3f74SBram Moolenaar call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.')) 161987bc3f74SBram Moolenaar norm! 010~ 162087bc3f74SBram Moolenaar call assert_equal('this is a SIMPLE TEST: ÄÜÖSS', getline('.')) 162187bc3f74SBram Moolenaar norm! V~ 162287bc3f74SBram Moolenaar call assert_equal('THIS IS A simple test: äüöss', getline('.')) 162387bc3f74SBram Moolenaar 16249f4de1f5SBram Moolenaar " Turkish ASCII turns to multi-byte. On Mac the Turkish locale is available 16259f4de1f5SBram Moolenaar " but toupper()/tolower() don't do the right thing. 1626d2381a2cSBram Moolenaar if !has('mac') && !has('osx') 16273317d5ebSBram Moolenaar try 16283317d5ebSBram Moolenaar lang tr_TR.UTF-8 16293317d5ebSBram Moolenaar set casemap= 16303317d5ebSBram Moolenaar call setline(1, 'iI') 16313317d5ebSBram Moolenaar 1normal gUU 16323317d5ebSBram Moolenaar call assert_equal("\u0130I", getline(1)) 16333317d5ebSBram Moolenaar call assert_equal("\u0130I", toupper("iI")) 16343317d5ebSBram Moolenaar 16353317d5ebSBram Moolenaar call setline(1, 'iI') 16363317d5ebSBram Moolenaar 1normal guu 16373317d5ebSBram Moolenaar call assert_equal("i\u0131", getline(1)) 16383317d5ebSBram Moolenaar call assert_equal("i\u0131", tolower("iI")) 16393317d5ebSBram Moolenaar 16401cc48206SBram Moolenaar set casemap& 16411cc48206SBram Moolenaar call setline(1, 'iI') 16421cc48206SBram Moolenaar 1normal gUU 16431cc48206SBram Moolenaar call assert_equal("II", getline(1)) 16441cc48206SBram Moolenaar call assert_equal("II", toupper("iI")) 16451cc48206SBram Moolenaar 16461cc48206SBram Moolenaar call setline(1, 'iI') 16471cc48206SBram Moolenaar 1normal guu 16481cc48206SBram Moolenaar call assert_equal("ii", getline(1)) 16491cc48206SBram Moolenaar call assert_equal("ii", tolower("iI")) 16501cc48206SBram Moolenaar 16513317d5ebSBram Moolenaar lang en_US.UTF-8 16523317d5ebSBram Moolenaar catch /E197:/ 16533317d5ebSBram Moolenaar " can't use Turkish locale 16543317d5ebSBram Moolenaar throw 'Skipped: Turkish locale not available' 16553317d5ebSBram Moolenaar endtry 16569f4de1f5SBram Moolenaar endif 16573317d5ebSBram Moolenaar 165887bc3f74SBram Moolenaar " clean up 165987bc3f74SBram Moolenaar bw! 16602931f2a5SBram Moolenaarendfunc 166187bc3f74SBram Moolenaar 166287bc3f74SBram Moolenaarfun! Test_normal31_r_cmd() 166387bc3f74SBram Moolenaar " Test for r command 166487bc3f74SBram Moolenaar new 166587bc3f74SBram Moolenaar call append(0, 'This is a simple test: abcd') 166687bc3f74SBram Moolenaar exe "norm! 1gg$r\<cr>" 166787bc3f74SBram Moolenaar call assert_equal(['This is a simple test: abc', '', ''], getline(1,'$')) 166887bc3f74SBram Moolenaar exe "norm! 1gg2wlr\<cr>" 166987bc3f74SBram Moolenaar call assert_equal(['This is a', 'simple test: abc', '', ''], getline(1,'$')) 167087bc3f74SBram Moolenaar exe "norm! 2gg0W5r\<cr>" 167187bc3f74SBram Moolenaar call assert_equal(['This is a', 'simple ', ' abc', '', ''], getline('1', '$')) 167287bc3f74SBram Moolenaar set autoindent 167387bc3f74SBram Moolenaar call setline(2, ['simple test: abc', '']) 167487bc3f74SBram Moolenaar exe "norm! 2gg0W5r\<cr>" 167587bc3f74SBram Moolenaar call assert_equal(['This is a', 'simple ', 'abc', '', '', ''], getline('1', '$')) 167687bc3f74SBram Moolenaar exe "norm! 1ggVr\<cr>" 167787bc3f74SBram Moolenaar call assert_equal('^M^M^M^M^M^M^M^M^M', strtrans(getline(1))) 167887bc3f74SBram Moolenaar call setline(1, 'This is a') 167987bc3f74SBram Moolenaar exe "norm! 1gg05rf" 168087bc3f74SBram Moolenaar call assert_equal('fffffis a', getline(1)) 168187bc3f74SBram Moolenaar 168287bc3f74SBram Moolenaar " clean up 168387bc3f74SBram Moolenaar set noautoindent 168487bc3f74SBram Moolenaar bw! 16852931f2a5SBram Moolenaarendfunc 168687bc3f74SBram Moolenaar 168787bc3f74SBram Moolenaarfunc! Test_normal32_g_cmd1() 168887bc3f74SBram Moolenaar " Test for g*, g# 168987bc3f74SBram Moolenaar new 169087bc3f74SBram Moolenaar call append(0, ['abc.x_foo', 'x_foobar.abc']) 169187bc3f74SBram Moolenaar 1 169287bc3f74SBram Moolenaar norm! $g* 169387bc3f74SBram Moolenaar call assert_equal('x_foo', @/) 169487bc3f74SBram Moolenaar call assert_equal('x_foobar.abc', getline('.')) 169587bc3f74SBram Moolenaar norm! $g# 169687bc3f74SBram Moolenaar call assert_equal('abc', @/) 169787bc3f74SBram Moolenaar call assert_equal('abc.x_foo', getline('.')) 169887bc3f74SBram Moolenaar 169987bc3f74SBram Moolenaar " clean up 170087bc3f74SBram Moolenaar bw! 17012931f2a5SBram Moolenaarendfunc 170287bc3f74SBram Moolenaar 170387bc3f74SBram Moolenaarfun! Test_normal33_g_cmd2() 170487bc3f74SBram Moolenaar if !has("jumplist") 170587bc3f74SBram Moolenaar return 170687bc3f74SBram Moolenaar endif 170787bc3f74SBram Moolenaar " Tests for g cmds 170887bc3f74SBram Moolenaar call Setup_NewWindow() 170987bc3f74SBram Moolenaar " Test for g` 171087bc3f74SBram Moolenaar clearjumps 171187bc3f74SBram Moolenaar norm! ma10j 171287bc3f74SBram Moolenaar let a=execute(':jumps') 171387bc3f74SBram Moolenaar " empty jumplist 171487bc3f74SBram Moolenaar call assert_equal('>', a[-1:]) 171587bc3f74SBram Moolenaar norm! g`a 171687bc3f74SBram Moolenaar call assert_equal('>', a[-1:]) 171787bc3f74SBram Moolenaar call assert_equal(1, line('.')) 171887bc3f74SBram Moolenaar call assert_equal('1', getline('.')) 171987bc3f74SBram Moolenaar 172087bc3f74SBram Moolenaar " Test for g; and g, 172187bc3f74SBram Moolenaar norm! g; 172287bc3f74SBram Moolenaar " there is only one change in the changelist 172387bc3f74SBram Moolenaar " currently, when we setup the window 172487bc3f74SBram Moolenaar call assert_equal(2, line('.')) 172587bc3f74SBram Moolenaar call assert_fails(':norm! g;', 'E662') 172687bc3f74SBram Moolenaar call assert_fails(':norm! g,', 'E663') 172787bc3f74SBram Moolenaar let &ul=&ul 172887bc3f74SBram Moolenaar call append('$', ['a', 'b', 'c', 'd']) 172987bc3f74SBram Moolenaar let &ul=&ul 173087bc3f74SBram Moolenaar call append('$', ['Z', 'Y', 'X', 'W']) 173187bc3f74SBram Moolenaar let a = execute(':changes') 173287bc3f74SBram Moolenaar call assert_match('2\s\+0\s\+2', a) 173387bc3f74SBram Moolenaar call assert_match('101\s\+0\s\+a', a) 173487bc3f74SBram Moolenaar call assert_match('105\s\+0\s\+Z', a) 173587bc3f74SBram Moolenaar norm! 3g; 173687bc3f74SBram Moolenaar call assert_equal(2, line('.')) 173787bc3f74SBram Moolenaar norm! 2g, 173887bc3f74SBram Moolenaar call assert_equal(105, line('.')) 173987bc3f74SBram Moolenaar 174087bc3f74SBram Moolenaar " Test for g& - global substitute 174187bc3f74SBram Moolenaar %d 174287bc3f74SBram Moolenaar call setline(1, range(1,10)) 174387bc3f74SBram Moolenaar call append('$', ['a', 'b', 'c', 'd']) 174487bc3f74SBram Moolenaar $s/\w/&&/g 174587bc3f74SBram Moolenaar exe "norm! /[1-8]\<cr>" 174687bc3f74SBram Moolenaar norm! g& 174787bc3f74SBram Moolenaar call assert_equal(['11', '22', '33', '44', '55', '66', '77', '88', '9', '110', 'a', 'b', 'c', 'dd'], getline(1, '$')) 174887bc3f74SBram Moolenaar 174987bc3f74SBram Moolenaar " Test for gv 175087bc3f74SBram Moolenaar %d 175187bc3f74SBram Moolenaar call append('$', repeat(['abcdefgh'], 8)) 175287bc3f74SBram Moolenaar exe "norm! 2gg02l\<c-v>2j2ly" 175387bc3f74SBram Moolenaar call assert_equal(['cde', 'cde', 'cde'], getreg(0, 1, 1)) 175487bc3f74SBram Moolenaar " in visual mode, gv swaps current and last selected region 175587bc3f74SBram Moolenaar exe "norm! G0\<c-v>4k4lgvd" 175687bc3f74SBram Moolenaar call assert_equal(['', 'abfgh', 'abfgh', 'abfgh', 'abcdefgh', 'abcdefgh', 'abcdefgh', 'abcdefgh', 'abcdefgh'], getline(1,'$')) 175787bc3f74SBram Moolenaar exe "norm! G0\<c-v>4k4ly" 175887bc3f74SBram Moolenaar exe "norm! gvood" 175987bc3f74SBram Moolenaar call assert_equal(['', 'abfgh', 'abfgh', 'abfgh', 'fgh', 'fgh', 'fgh', 'fgh', 'fgh'], getline(1,'$')) 176087bc3f74SBram Moolenaar 176187bc3f74SBram Moolenaar " Test for gk/gj 176287bc3f74SBram Moolenaar %d 176387bc3f74SBram Moolenaar 15vsp 176487bc3f74SBram Moolenaar set wrap listchars= sbr= 176587bc3f74SBram Moolenaar let lineA='abcdefghijklmnopqrstuvwxyz' 176687bc3f74SBram Moolenaar let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' 176787bc3f74SBram Moolenaar $put =lineA 176887bc3f74SBram Moolenaar $put =lineB 176987bc3f74SBram Moolenaar 177087bc3f74SBram Moolenaar norm! 3gg0dgk 177187bc3f74SBram Moolenaar call assert_equal(['', 'abcdefghijklmno', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'], getline(1, '$')) 177287bc3f74SBram Moolenaar set nu 177387bc3f74SBram Moolenaar norm! 3gg0gjdgj 177487bc3f74SBram Moolenaar call assert_equal(['', 'abcdefghijklmno', '0123456789AMNOPQRSTUVWXYZ'], getline(1,'$')) 177587bc3f74SBram Moolenaar 177687bc3f74SBram Moolenaar " Test for gJ 177787bc3f74SBram Moolenaar norm! 2gggJ 177887bc3f74SBram Moolenaar call assert_equal(['', 'abcdefghijklmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$')) 177987bc3f74SBram Moolenaar call assert_equal(16, col('.')) 178087bc3f74SBram Moolenaar " shouldn't do anything 178187bc3f74SBram Moolenaar norm! 10gJ 178287bc3f74SBram Moolenaar call assert_equal(1, col('.')) 178387bc3f74SBram Moolenaar 178487bc3f74SBram Moolenaar " Test for g0 g^ gm g$ 178587bc3f74SBram Moolenaar exe "norm! 2gg0gji " 178687bc3f74SBram Moolenaar call assert_equal(['', 'abcdefghijk lmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$')) 178787bc3f74SBram Moolenaar norm! g0yl 178887bc3f74SBram Moolenaar call assert_equal(12, col('.')) 178987bc3f74SBram Moolenaar call assert_equal(' ', getreg(0)) 179087bc3f74SBram Moolenaar norm! g$yl 179187bc3f74SBram Moolenaar call assert_equal(22, col('.')) 179287bc3f74SBram Moolenaar call assert_equal('3', getreg(0)) 179387bc3f74SBram Moolenaar norm! gmyl 179487bc3f74SBram Moolenaar call assert_equal(17, col('.')) 179587bc3f74SBram Moolenaar call assert_equal('n', getreg(0)) 179687bc3f74SBram Moolenaar norm! g^yl 179787bc3f74SBram Moolenaar call assert_equal(15, col('.')) 179887bc3f74SBram Moolenaar call assert_equal('l', getreg(0)) 179987bc3f74SBram Moolenaar 180087bc3f74SBram Moolenaar " Test for g Ctrl-G 18010913a108SBram Moolenaar set ff=unix 180287bc3f74SBram Moolenaar let a=execute(":norm! g\<c-g>") 180387bc3f74SBram Moolenaar call assert_match('Col 15 of 43; Line 2 of 2; Word 2 of 2; Byte 16 of 45', a) 180487bc3f74SBram Moolenaar 180587bc3f74SBram Moolenaar " Test for gI 180687bc3f74SBram Moolenaar norm! gIfoo 180787bc3f74SBram Moolenaar call assert_equal(['', 'fooabcdefghijk lmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$')) 180887bc3f74SBram Moolenaar 180987bc3f74SBram Moolenaar " Test for gi 181087bc3f74SBram Moolenaar wincmd c 181187bc3f74SBram Moolenaar %d 181287bc3f74SBram Moolenaar set tw=0 181387bc3f74SBram Moolenaar call setline(1, ['foobar', 'new line']) 181487bc3f74SBram Moolenaar norm! A next word 181587bc3f74SBram Moolenaar $put ='third line' 181687bc3f74SBram Moolenaar norm! gi another word 181787bc3f74SBram Moolenaar call assert_equal(['foobar next word another word', 'new line', 'third line'], getline(1,'$')) 181887bc3f74SBram Moolenaar 181987bc3f74SBram Moolenaar " clean up 182087bc3f74SBram Moolenaar bw! 18212931f2a5SBram Moolenaarendfunc 182287bc3f74SBram Moolenaar 182387bc3f74SBram Moolenaarfun! Test_normal34_g_cmd3() 182487bc3f74SBram Moolenaar if !has("multi_byte") 182587bc3f74SBram Moolenaar return 182687bc3f74SBram Moolenaar endif 1827395b6babSBram Moolenaar 182887bc3f74SBram Moolenaar " Test for g8 182987bc3f74SBram Moolenaar new 1830395b6babSBram Moolenaar let a=execute(':norm! 1G0g8') 1831395b6babSBram Moolenaar call assert_equal("\nNUL", a) 183287bc3f74SBram Moolenaar 1833395b6babSBram Moolenaar call setline(1, 'abcdefghijklmnopqrstuvwxyzäüö') 1834395b6babSBram Moolenaar let a=execute(':norm! 1G$g8') 1835395b6babSBram Moolenaar call assert_equal("\nc3 b6 ", a) 1836395b6babSBram Moolenaar 1837395b6babSBram Moolenaar call setline(1, "a\u0302") 1838395b6babSBram Moolenaar let a=execute(':norm! 1G0g8') 1839395b6babSBram Moolenaar call assert_equal("\n61 + cc 82 ", a) 1840395b6babSBram Moolenaar 184187bc3f74SBram Moolenaar " clean up 184287bc3f74SBram Moolenaar bw! 18432931f2a5SBram Moolenaarendfunc 184487bc3f74SBram Moolenaar 1845395b6babSBram Moolenaarfunc Test_normal_8g8() 1846395b6babSBram Moolenaar if !has("multi_byte") 1847395b6babSBram Moolenaar return 1848395b6babSBram Moolenaar endif 1849395b6babSBram Moolenaar new 1850395b6babSBram Moolenaar 1851395b6babSBram Moolenaar " Test 8g8 which finds invalid utf8 at or after the cursor. 1852395b6babSBram Moolenaar 1853395b6babSBram Moolenaar " With invalid byte. 1854395b6babSBram Moolenaar call setline(1, "___\xff___") 1855395b6babSBram Moolenaar norm! 1G08g8g 1856395b6babSBram Moolenaar call assert_equal([0, 1, 4, 0, 1], getcurpos()) 1857395b6babSBram Moolenaar 1858395b6babSBram Moolenaar " With invalid byte before the cursor. 1859395b6babSBram Moolenaar call setline(1, "___\xff___") 1860395b6babSBram Moolenaar norm! 1G$h8g8g 1861395b6babSBram Moolenaar call assert_equal([0, 1, 6, 0, 9], getcurpos()) 1862395b6babSBram Moolenaar 1863395b6babSBram Moolenaar " With truncated sequence. 1864395b6babSBram Moolenaar call setline(1, "___\xE2\x82___") 1865395b6babSBram Moolenaar norm! 1G08g8g 1866395b6babSBram Moolenaar call assert_equal([0, 1, 4, 0, 1], getcurpos()) 1867395b6babSBram Moolenaar 1868395b6babSBram Moolenaar " With overlong sequence. 1869395b6babSBram Moolenaar call setline(1, "___\xF0\x82\x82\xAC___") 1870395b6babSBram Moolenaar norm! 1G08g8g 1871395b6babSBram Moolenaar call assert_equal([0, 1, 4, 0, 1], getcurpos()) 1872395b6babSBram Moolenaar 1873395b6babSBram Moolenaar " With valid utf8. 1874395b6babSBram Moolenaar call setline(1, "café") 1875395b6babSBram Moolenaar norm! 1G08g8 1876395b6babSBram Moolenaar call assert_equal([0, 1, 1, 0, 1], getcurpos()) 1877395b6babSBram Moolenaar 1878395b6babSBram Moolenaar bw! 1879395b6babSBram Moolenaarendfunc 1880395b6babSBram Moolenaar 188187bc3f74SBram Moolenaarfun! Test_normal35_g_cmd4() 188287bc3f74SBram Moolenaar " Test for g< 188387bc3f74SBram Moolenaar " Cannot capture its output, 188487bc3f74SBram Moolenaar " probably a bug, therefore, test disabled: 188531845093SBram Moolenaar throw "Skipped: output of g< can't be tested currently" 188687bc3f74SBram Moolenaar echo "a\nb\nc\nd" 188787bc3f74SBram Moolenaar let b=execute(':norm! g<') 188887bc3f74SBram Moolenaar call assert_true(!empty(b), 'failed `execute(g<)`') 18892931f2a5SBram Moolenaarendfunc 189087bc3f74SBram Moolenaar 189187bc3f74SBram Moolenaarfun! Test_normal36_g_cmd5() 189287bc3f74SBram Moolenaar new 189387bc3f74SBram Moolenaar call append(0, 'abcdefghijklmnopqrstuvwxyz') 18940913a108SBram Moolenaar set ff=unix 189587bc3f74SBram Moolenaar " Test for gp gP 189687bc3f74SBram Moolenaar call append(1, range(1,10)) 189787bc3f74SBram Moolenaar 1 189887bc3f74SBram Moolenaar norm! 1yy 189987bc3f74SBram Moolenaar 3 190087bc3f74SBram Moolenaar norm! gp 190187bc3f74SBram Moolenaar call assert_equal([0, 5, 1, 0, 1], getcurpos()) 190287bc3f74SBram Moolenaar $ 190387bc3f74SBram Moolenaar norm! gP 190487bc3f74SBram Moolenaar call assert_equal([0, 14, 1, 0, 1], getcurpos()) 190587bc3f74SBram Moolenaar 190687bc3f74SBram Moolenaar " Test for go 190787bc3f74SBram Moolenaar norm! 26go 190887bc3f74SBram Moolenaar call assert_equal([0, 1, 26, 0, 26], getcurpos()) 190987bc3f74SBram Moolenaar norm! 27go 191087bc3f74SBram Moolenaar call assert_equal([0, 1, 26, 0, 26], getcurpos()) 191187bc3f74SBram Moolenaar norm! 28go 191287bc3f74SBram Moolenaar call assert_equal([0, 2, 1, 0, 1], getcurpos()) 191387bc3f74SBram Moolenaar set ff=dos 191487bc3f74SBram Moolenaar norm! 29go 191587bc3f74SBram Moolenaar call assert_equal([0, 2, 1, 0, 1], getcurpos()) 191687bc3f74SBram Moolenaar set ff=unix 191787bc3f74SBram Moolenaar norm! gg0 191887bc3f74SBram Moolenaar norm! 101go 191987bc3f74SBram Moolenaar call assert_equal([0, 13, 26, 0, 26], getcurpos()) 192087bc3f74SBram Moolenaar norm! 103go 192187bc3f74SBram Moolenaar call assert_equal([0, 14, 1, 0, 1], getcurpos()) 192287bc3f74SBram Moolenaar " count > buffer content 192387bc3f74SBram Moolenaar norm! 120go 192487bc3f74SBram Moolenaar call assert_equal([0, 14, 1, 0, 2147483647], getcurpos()) 192587bc3f74SBram Moolenaar " clean up 192687bc3f74SBram Moolenaar bw! 19272931f2a5SBram Moolenaarendfunc 192887bc3f74SBram Moolenaar 192987bc3f74SBram Moolenaarfun! Test_normal37_g_cmd6() 193087bc3f74SBram Moolenaar " basic test for gt and gT 193187bc3f74SBram Moolenaar tabnew 1.txt 193287bc3f74SBram Moolenaar tabnew 2.txt 193387bc3f74SBram Moolenaar tabnew 3.txt 193487bc3f74SBram Moolenaar norm! 1gt 193587bc3f74SBram Moolenaar call assert_equal(1, tabpagenr()) 193687bc3f74SBram Moolenaar norm! 3gt 193787bc3f74SBram Moolenaar call assert_equal(3, tabpagenr()) 193887bc3f74SBram Moolenaar norm! 1gT 193987bc3f74SBram Moolenaar " count gT goes not to the absolute tabpagenumber 194087bc3f74SBram Moolenaar " but, but goes to the count previous tabpagenumber 194187bc3f74SBram Moolenaar call assert_equal(2, tabpagenr()) 194287bc3f74SBram Moolenaar " wrap around 194387bc3f74SBram Moolenaar norm! 3gT 194487bc3f74SBram Moolenaar call assert_equal(3, tabpagenr()) 194587bc3f74SBram Moolenaar " gt does not wrap around 194687bc3f74SBram Moolenaar norm! 5gt 194787bc3f74SBram Moolenaar call assert_equal(3, tabpagenr()) 194887bc3f74SBram Moolenaar 194987bc3f74SBram Moolenaar for i in range(3) 195087bc3f74SBram Moolenaar tabclose 195187bc3f74SBram Moolenaar endfor 195287bc3f74SBram Moolenaar " clean up 195387bc3f74SBram Moolenaar call assert_fails(':tabclose', 'E784') 19542931f2a5SBram Moolenaarendfunc 195587bc3f74SBram Moolenaar 195687bc3f74SBram Moolenaarfun! Test_normal38_nvhome() 195787bc3f74SBram Moolenaar " Test for <Home> and <C-Home> key 195887bc3f74SBram Moolenaar new 195987bc3f74SBram Moolenaar call setline(1, range(10)) 196087bc3f74SBram Moolenaar $ 196187bc3f74SBram Moolenaar setl et sw=2 196287bc3f74SBram Moolenaar norm! V10>$ 196387bc3f74SBram Moolenaar " count is ignored 196487bc3f74SBram Moolenaar exe "norm! 10\<home>" 196587bc3f74SBram Moolenaar call assert_equal(1, col('.')) 196687bc3f74SBram Moolenaar exe "norm! \<home>" 196787bc3f74SBram Moolenaar call assert_equal([0, 10, 1, 0, 1], getcurpos()) 196887bc3f74SBram Moolenaar exe "norm! 5\<c-home>" 196987bc3f74SBram Moolenaar call assert_equal([0, 5, 1, 0, 1], getcurpos()) 197087bc3f74SBram Moolenaar exe "norm! \<c-home>" 197187bc3f74SBram Moolenaar call assert_equal([0, 1, 1, 0, 1], getcurpos()) 197287bc3f74SBram Moolenaar 197387bc3f74SBram Moolenaar " clean up 197487bc3f74SBram Moolenaar bw! 19752931f2a5SBram Moolenaarendfunc 197687bc3f74SBram Moolenaar 197787bc3f74SBram Moolenaarfun! Test_normal39_cw() 197887bc3f74SBram Moolenaar " Test for cw and cW on whitespace 197987bc3f74SBram Moolenaar " and cpo+=w setting 198087bc3f74SBram Moolenaar new 198187bc3f74SBram Moolenaar set tw=0 198287bc3f74SBram Moolenaar call append(0, 'here are some words') 198387bc3f74SBram Moolenaar norm! 1gg0elcwZZZ 198487bc3f74SBram Moolenaar call assert_equal('hereZZZare some words', getline('.')) 198587bc3f74SBram Moolenaar norm! 1gg0elcWYYY 198687bc3f74SBram Moolenaar call assert_equal('hereZZZareYYYsome words', getline('.')) 198787bc3f74SBram Moolenaar set cpo+=w 198887bc3f74SBram Moolenaar call setline(1, 'here are some words') 198987bc3f74SBram Moolenaar norm! 1gg0elcwZZZ 199087bc3f74SBram Moolenaar call assert_equal('hereZZZ are some words', getline('.')) 199187bc3f74SBram Moolenaar norm! 1gg2elcWYYY 199287bc3f74SBram Moolenaar call assert_equal('hereZZZ areYYY some words', getline('.')) 199387bc3f74SBram Moolenaar set cpo-=w 199487bc3f74SBram Moolenaar norm! 2gg0cwfoo 199587bc3f74SBram Moolenaar call assert_equal('foo', getline('.')) 199687bc3f74SBram Moolenaar 199787bc3f74SBram Moolenaar " clean up 199887bc3f74SBram Moolenaar bw! 19992931f2a5SBram Moolenaarendfunc 200087bc3f74SBram Moolenaar 200187bc3f74SBram Moolenaarfun! Test_normal40_ctrl_bsl() 200287bc3f74SBram Moolenaar " Basic test for CTRL-\ commands 200387bc3f74SBram Moolenaar new 200487bc3f74SBram Moolenaar call append(0, 'here are some words') 200587bc3f74SBram Moolenaar exe "norm! 1gg0a\<C-\>\<C-N>" 200687bc3f74SBram Moolenaar call assert_equal('n', mode()) 200787bc3f74SBram Moolenaar call assert_equal(1, col('.')) 200887bc3f74SBram Moolenaar call assert_equal('', visualmode()) 200987bc3f74SBram Moolenaar exe "norm! 1gg0viw\<C-\>\<C-N>" 201087bc3f74SBram Moolenaar call assert_equal('n', mode()) 201187bc3f74SBram Moolenaar call assert_equal(4, col('.')) 201287bc3f74SBram Moolenaar exe "norm! 1gg0a\<C-\>\<C-G>" 201387bc3f74SBram Moolenaar call assert_equal('n', mode()) 201487bc3f74SBram Moolenaar call assert_equal(1, col('.')) 201587bc3f74SBram Moolenaar "imap <buffer> , <c-\><c-n> 201687bc3f74SBram Moolenaar set im 201787bc3f74SBram Moolenaar exe ":norm! \<c-\>\<c-n>dw" 201887bc3f74SBram Moolenaar set noim 201987bc3f74SBram Moolenaar call assert_equal('are some words', getline(1)) 202087bc3f74SBram Moolenaar call assert_false(&insertmode) 202187bc3f74SBram Moolenaar 202287bc3f74SBram Moolenaar " clean up 202387bc3f74SBram Moolenaar bw! 20242931f2a5SBram Moolenaarendfunc 202587bc3f74SBram Moolenaar 202687bc3f74SBram Moolenaarfun! Test_normal41_insert_reg() 202787bc3f74SBram Moolenaar " Test for <c-r>=, <c-r><c-r>= and <c-r><c-o>= 202887bc3f74SBram Moolenaar " in insert mode 202987bc3f74SBram Moolenaar new 203087bc3f74SBram Moolenaar set sts=2 sw=2 ts=8 tw=0 203187bc3f74SBram Moolenaar call append(0, ["aaa\tbbb\tccc", '', '', '']) 203287bc3f74SBram Moolenaar let a=getline(1) 203387bc3f74SBram Moolenaar norm! 2gg0 203487bc3f74SBram Moolenaar exe "norm! a\<c-r>=a\<cr>" 203587bc3f74SBram Moolenaar norm! 3gg0 203687bc3f74SBram Moolenaar exe "norm! a\<c-r>\<c-r>=a\<cr>" 203787bc3f74SBram Moolenaar norm! 4gg0 203887bc3f74SBram Moolenaar exe "norm! a\<c-r>\<c-o>=a\<cr>" 203987bc3f74SBram Moolenaar call assert_equal(['aaa bbb ccc', 'aaa bbb ccc', 'aaa bbb ccc', 'aaa bbb ccc', ''], getline(1, '$')) 204087bc3f74SBram Moolenaar 204187bc3f74SBram Moolenaar " clean up 204287bc3f74SBram Moolenaar set sts=0 sw=8 ts=8 204331845093SBram Moolenaar bw! 20442931f2a5SBram Moolenaarendfunc 204587bc3f74SBram Moolenaar 204687bc3f74SBram Moolenaarfunc! Test_normal42_halfpage() 204787bc3f74SBram Moolenaar " basic test for Ctrl-D and Ctrl-U 204887bc3f74SBram Moolenaar call Setup_NewWindow() 204987bc3f74SBram Moolenaar call assert_equal(5, &scroll) 205087bc3f74SBram Moolenaar exe "norm! \<c-d>" 205187bc3f74SBram Moolenaar call assert_equal('6', getline('.')) 205287bc3f74SBram Moolenaar exe "norm! 2\<c-d>" 205387bc3f74SBram Moolenaar call assert_equal('8', getline('.')) 205487bc3f74SBram Moolenaar call assert_equal(2, &scroll) 205587bc3f74SBram Moolenaar set scroll=5 205687bc3f74SBram Moolenaar exe "norm! \<c-u>" 205787bc3f74SBram Moolenaar call assert_equal('3', getline('.')) 205887bc3f74SBram Moolenaar 1 205987bc3f74SBram Moolenaar set scrolloff=5 206087bc3f74SBram Moolenaar exe "norm! \<c-d>" 206187bc3f74SBram Moolenaar call assert_equal('10', getline('.')) 206287bc3f74SBram Moolenaar exe "norm! \<c-u>" 206387bc3f74SBram Moolenaar call assert_equal('5', getline('.')) 206487bc3f74SBram Moolenaar 1 206587bc3f74SBram Moolenaar set scrolloff=99 206687bc3f74SBram Moolenaar exe "norm! \<c-d>" 206787bc3f74SBram Moolenaar call assert_equal('10', getline('.')) 206887bc3f74SBram Moolenaar set scrolloff=0 206987bc3f74SBram Moolenaar 100 207087bc3f74SBram Moolenaar exe "norm! $\<c-u>" 207187bc3f74SBram Moolenaar call assert_equal('95', getline('.')) 207287bc3f74SBram Moolenaar call assert_equal([0, 95, 1, 0, 1], getcurpos()) 207387bc3f74SBram Moolenaar 100 207487bc3f74SBram Moolenaar set nostartofline 207587bc3f74SBram Moolenaar exe "norm! $\<c-u>" 207687bc3f74SBram Moolenaar call assert_equal('95', getline('.')) 207787bc3f74SBram Moolenaar call assert_equal([0, 95, 2, 0, 2147483647], getcurpos()) 207887bc3f74SBram Moolenaar " cleanup 207987bc3f74SBram Moolenaar set startofline 208087bc3f74SBram Moolenaar bw! 20812931f2a5SBram Moolenaarendfunc 208287bc3f74SBram Moolenaar 208387bc3f74SBram Moolenaarfun! Test_normal43_textobject1() 208487bc3f74SBram Moolenaar " basic tests for text object aw 208587bc3f74SBram Moolenaar new 208687bc3f74SBram Moolenaar call append(0, ['foobar,eins,foobar', 'foo,zwei,foo ']) 208787bc3f74SBram Moolenaar " diw 208887bc3f74SBram Moolenaar norm! 1gg0diw 208987bc3f74SBram Moolenaar call assert_equal([',eins,foobar', 'foo,zwei,foo ', ''], getline(1,'$')) 209087bc3f74SBram Moolenaar " daw 209187bc3f74SBram Moolenaar norm! 2ggEdaw 209287bc3f74SBram Moolenaar call assert_equal([',eins,foobar', 'foo,zwei,', ''], getline(1, '$')) 209387bc3f74SBram Moolenaar %d 209487bc3f74SBram Moolenaar call append(0, ["foo\teins\tfoobar", "foo\tzwei\tfoo "]) 209587bc3f74SBram Moolenaar " diW 209687bc3f74SBram Moolenaar norm! 2ggwd2iW 209787bc3f74SBram Moolenaar call assert_equal(['foo eins foobar', 'foo foo ', ''], getline(1,'$')) 209887bc3f74SBram Moolenaar " daW 209987bc3f74SBram Moolenaar norm! 1ggd2aW 210087bc3f74SBram Moolenaar call assert_equal(['foobar', 'foo foo ', ''], getline(1,'$')) 210187bc3f74SBram Moolenaar 210287bc3f74SBram Moolenaar %d 210387bc3f74SBram Moolenaar call append(0, ["foo\teins\tfoobar", "foo\tzwei\tfoo "]) 210487bc3f74SBram Moolenaar " aw in visual line mode switches to characterwise mode 210587bc3f74SBram Moolenaar norm! 2gg$Vawd 210687bc3f74SBram Moolenaar call assert_equal(['foo eins foobar', 'foo zwei foo'], getline(1,'$')) 210787bc3f74SBram Moolenaar norm! 1gg$Viwd 210887bc3f74SBram Moolenaar call assert_equal(['foo eins ', 'foo zwei foo'], getline(1,'$')) 210987bc3f74SBram Moolenaar 211087bc3f74SBram Moolenaar " clean up 211187bc3f74SBram Moolenaar bw! 21122931f2a5SBram Moolenaarendfunc 211387bc3f74SBram Moolenaar 211487bc3f74SBram Moolenaarfunc! Test_normal44_textobjects2() 211587bc3f74SBram Moolenaar " basic testing for is and as text objects 211687bc3f74SBram Moolenaar new 211787bc3f74SBram Moolenaar call append(0, ['This is a test. With some sentences!', '', 'Even with a question? And one more. And no sentence here']) 211887bc3f74SBram Moolenaar " Test for dis - does not remove trailing whitespace 211987bc3f74SBram Moolenaar norm! 1gg0dis 212087bc3f74SBram Moolenaar call assert_equal([' With some sentences!', '', 'Even with a question? And one more. And no sentence here', ''], getline(1,'$')) 212187bc3f74SBram Moolenaar " Test for das - removes leading whitespace 212287bc3f74SBram Moolenaar norm! 3ggf?ldas 212387bc3f74SBram Moolenaar call assert_equal([' With some sentences!', '', 'Even with a question? And no sentence here', ''], getline(1,'$')) 212487bc3f74SBram Moolenaar " when used in visual mode, is made characterwise 212587bc3f74SBram Moolenaar norm! 3gg$Visy 212687bc3f74SBram Moolenaar call assert_equal('v', visualmode()) 212787bc3f74SBram Moolenaar " reset visualmode() 212887bc3f74SBram Moolenaar norm! 3ggVy 212987bc3f74SBram Moolenaar norm! 3gg$Vasy 213087bc3f74SBram Moolenaar call assert_equal('v', visualmode()) 213187bc3f74SBram Moolenaar " basic testing for textobjects a< and at 213287bc3f74SBram Moolenaar %d 213387bc3f74SBram Moolenaar call setline(1, ['<div> ','<a href="foobar" class="foo">xyz</a>',' </div>', ' ']) 213487bc3f74SBram Moolenaar " a< 213587bc3f74SBram Moolenaar norm! 1gg0da< 213687bc3f74SBram Moolenaar call assert_equal([' ', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 213787bc3f74SBram Moolenaar norm! 1pj 213887bc3f74SBram Moolenaar call assert_equal([' <div>', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 213987bc3f74SBram Moolenaar " at 214087bc3f74SBram Moolenaar norm! d2at 214187bc3f74SBram Moolenaar call assert_equal([' '], getline(1,'$')) 214287bc3f74SBram Moolenaar %d 214387bc3f74SBram Moolenaar call setline(1, ['<div> ','<a href="foobar" class="foo">xyz</a>',' </div>', ' ']) 214487bc3f74SBram Moolenaar " i< 214587bc3f74SBram Moolenaar norm! 1gg0di< 214687bc3f74SBram Moolenaar call assert_equal(['<> ', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 214787bc3f74SBram Moolenaar norm! 1Pj 214887bc3f74SBram Moolenaar call assert_equal(['<div> ', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 214987bc3f74SBram Moolenaar norm! d2it 215087bc3f74SBram Moolenaar call assert_equal(['<div></div>',' '], getline(1,'$')) 215187bc3f74SBram Moolenaar " basic testing for a[ and i[ text object 215287bc3f74SBram Moolenaar %d 215387bc3f74SBram Moolenaar call setline(1, [' ', '[', 'one [two]', 'thre', ']']) 215487bc3f74SBram Moolenaar norm! 3gg0di[ 215587bc3f74SBram Moolenaar call assert_equal([' ', '[', ']'], getline(1,'$')) 215687bc3f74SBram Moolenaar call setline(1, [' ', '[', 'one [two]', 'thre', ']']) 215787bc3f74SBram Moolenaar norm! 3gg0ftd2a[ 215887bc3f74SBram Moolenaar call assert_equal([' '], getline(1,'$')) 215987bc3f74SBram Moolenaar %d 216087bc3f74SBram Moolenaar " Test for i" when cursor is in front of a quoted object 216187bc3f74SBram Moolenaar call append(0, 'foo "bar"') 216287bc3f74SBram Moolenaar norm! 1gg0di" 216387bc3f74SBram Moolenaar call assert_equal(['foo ""', ''], getline(1,'$')) 216487bc3f74SBram Moolenaar 216587bc3f74SBram Moolenaar " clean up 216687bc3f74SBram Moolenaar bw! 21672931f2a5SBram Moolenaarendfunc 216887bc3f74SBram Moolenaar 216987bc3f74SBram Moolenaarfunc! Test_normal45_drop() 217087bc3f74SBram Moolenaar if !has("dnd") 217187bc3f74SBram Moolenaar return 217287bc3f74SBram Moolenaar endif 217387bc3f74SBram Moolenaar " basic test for :drop command 217487bc3f74SBram Moolenaar " unfortunately, without a gui, we can't really test much here, 217587bc3f74SBram Moolenaar " so simply test that ~p fails (which uses the drop register) 217687bc3f74SBram Moolenaar new 217787bc3f74SBram Moolenaar call assert_fails(':norm! "~p', 'E353') 217887bc3f74SBram Moolenaar call assert_equal([], getreg('~', 1, 1)) 217987bc3f74SBram Moolenaar " the ~ register is read only 218087bc3f74SBram Moolenaar call assert_fails(':let @~="1"', 'E354') 218187bc3f74SBram Moolenaar bw! 21822931f2a5SBram Moolenaarendfunc 218387bc3f74SBram Moolenaar 218487bc3f74SBram Moolenaarfunc! Test_normal46_ignore() 21852931f2a5SBram Moolenaar " This test uses multi byte characters 21862931f2a5SBram Moolenaar if !has("multi_byte") 21872931f2a5SBram Moolenaar return 21882931f2a5SBram Moolenaar endif 21892931f2a5SBram Moolenaar 219087bc3f74SBram Moolenaar new 219187bc3f74SBram Moolenaar " How to test this? 219287bc3f74SBram Moolenaar " let's just for now test, that the buffer 219387bc3f74SBram Moolenaar " does not change 219487bc3f74SBram Moolenaar call feedkeys("\<c-s>", 't') 219587bc3f74SBram Moolenaar call assert_equal([''], getline(1,'$')) 219687bc3f74SBram Moolenaar 21972931f2a5SBram Moolenaar " no valid commands 21982931f2a5SBram Moolenaar exe "norm! \<char-0x100>" 21992931f2a5SBram Moolenaar call assert_equal([''], getline(1,'$')) 22002931f2a5SBram Moolenaar 22012931f2a5SBram Moolenaar exe "norm! ä" 22022931f2a5SBram Moolenaar call assert_equal([''], getline(1,'$')) 22032931f2a5SBram Moolenaar 220487bc3f74SBram Moolenaar " clean up 220587bc3f74SBram Moolenaar bw! 22062931f2a5SBram Moolenaarendfunc 2207c4a908e8SBram Moolenaar 2208c4a908e8SBram Moolenaarfunc! Test_normal47_visual_buf_wipe() 2209c4a908e8SBram Moolenaar " This was causing a crash or ml_get error. 2210c4a908e8SBram Moolenaar enew! 2211c4a908e8SBram Moolenaar call setline(1,'xxx') 2212c4a908e8SBram Moolenaar normal $ 2213c4a908e8SBram Moolenaar new 2214c4a908e8SBram Moolenaar call setline(1, range(1,2)) 2215c4a908e8SBram Moolenaar 2 2216c4a908e8SBram Moolenaar exe "norm \<C-V>$" 2217c4a908e8SBram Moolenaar bw! 2218c4a908e8SBram Moolenaar norm yp 2219c4a908e8SBram Moolenaar set nomodified 22202931f2a5SBram Moolenaarendfunc 22212931f2a5SBram Moolenaar 22222931f2a5SBram Moolenaarfunc! Test_normal47_autocmd() 22232931f2a5SBram Moolenaar " disabled, does not seem to be possible currently 22242931f2a5SBram Moolenaar throw "Skipped: not possible to test cursorhold autocmd while waiting for input in normal_cmd" 22252931f2a5SBram Moolenaar new 22262931f2a5SBram Moolenaar call append(0, repeat('-',20)) 22272931f2a5SBram Moolenaar au CursorHold * call feedkeys('2l', '') 22282931f2a5SBram Moolenaar 1 22292931f2a5SBram Moolenaar set updatetime=20 22302931f2a5SBram Moolenaar " should delete 12 chars (d12l) 22312931f2a5SBram Moolenaar call feedkeys('d1', '!') 22322931f2a5SBram Moolenaar call assert_equal('--------', getline(1)) 22332931f2a5SBram Moolenaar 22342931f2a5SBram Moolenaar " clean up 22352931f2a5SBram Moolenaar au! CursorHold 22362931f2a5SBram Moolenaar set updatetime=4000 22372931f2a5SBram Moolenaar bw! 22382931f2a5SBram Moolenaarendfunc 22392931f2a5SBram Moolenaar 22402931f2a5SBram Moolenaarfunc! Test_normal48_wincmd() 22412931f2a5SBram Moolenaar new 22422931f2a5SBram Moolenaar exe "norm! \<c-w>c" 22432931f2a5SBram Moolenaar call assert_equal(1, winnr('$')) 22442931f2a5SBram Moolenaar call assert_fails(":norm! \<c-w>c", "E444") 22452931f2a5SBram Moolenaarendfunc 22462931f2a5SBram Moolenaar 22472931f2a5SBram Moolenaarfunc! Test_normal49_counts() 22482931f2a5SBram Moolenaar new 22492931f2a5SBram Moolenaar call setline(1, 'one two three four five six seven eight nine ten') 22502931f2a5SBram Moolenaar 1 22512931f2a5SBram Moolenaar norm! 3d2w 22522931f2a5SBram Moolenaar call assert_equal('seven eight nine ten', getline(1)) 22532931f2a5SBram Moolenaar bw! 22542931f2a5SBram Moolenaarendfunc 22552931f2a5SBram Moolenaar 22562931f2a5SBram Moolenaarfunc! Test_normal50_commandline() 22574033c55eSBram Moolenaar if !has("timers") || !has("cmdline_hist") 22582931f2a5SBram Moolenaar return 22592931f2a5SBram Moolenaar endif 22602931f2a5SBram Moolenaar func! DoTimerWork(id) 22612931f2a5SBram Moolenaar call assert_equal('[Command Line]', bufname('')) 22622931f2a5SBram Moolenaar " should fail, with E11, but does fail with E23? 22632931f2a5SBram Moolenaar "call feedkeys("\<c-^>", 'tm') 22642931f2a5SBram Moolenaar 22652931f2a5SBram Moolenaar " should also fail with E11 22662931f2a5SBram Moolenaar call assert_fails(":wincmd p", 'E11') 22672931f2a5SBram Moolenaar " return from commandline window 22682931f2a5SBram Moolenaar call feedkeys("\<cr>") 22692931f2a5SBram Moolenaar endfunc 22702931f2a5SBram Moolenaar 22712931f2a5SBram Moolenaar let oldlang=v:lang 22722931f2a5SBram Moolenaar lang C 22732931f2a5SBram Moolenaar set updatetime=20 22742931f2a5SBram Moolenaar call timer_start(100, 'DoTimerWork') 22752931f2a5SBram Moolenaar try 22762931f2a5SBram Moolenaar " throws E23, for whatever reason... 22772931f2a5SBram Moolenaar call feedkeys('q:', 'x!') 22782931f2a5SBram Moolenaar catch /E23/ 22792931f2a5SBram Moolenaar " no-op 22802931f2a5SBram Moolenaar endtry 22812931f2a5SBram Moolenaar " clean up 22822931f2a5SBram Moolenaar set updatetime=4000 22832931f2a5SBram Moolenaar exe "lang" oldlang 22842931f2a5SBram Moolenaar bw! 22852931f2a5SBram Moolenaarendfunc 22862931f2a5SBram Moolenaar 22872931f2a5SBram Moolenaarfunc! Test_normal51_FileChangedRO() 22882931f2a5SBram Moolenaar if !has("autocmd") 22892931f2a5SBram Moolenaar return 22902931f2a5SBram Moolenaar endif 2291e5f2a075SBram Moolenaar " Don't sleep after the warning message. 2292e5f2a075SBram Moolenaar call test_settime(1) 22932931f2a5SBram Moolenaar call writefile(['foo'], 'Xreadonly.log') 22942931f2a5SBram Moolenaar new Xreadonly.log 22952931f2a5SBram Moolenaar setl ro 22962931f2a5SBram Moolenaar au FileChangedRO <buffer> :call feedkeys("\<c-^>", 'tix') 22972931f2a5SBram Moolenaar call assert_fails(":norm! Af", 'E788') 22982931f2a5SBram Moolenaar call assert_equal(['foo'], getline(1,'$')) 22992931f2a5SBram Moolenaar call assert_equal('Xreadonly.log', bufname('')) 23002931f2a5SBram Moolenaar 23012931f2a5SBram Moolenaar " cleanup 2302e5f2a075SBram Moolenaar call test_settime(0) 23032931f2a5SBram Moolenaar bw! 23042931f2a5SBram Moolenaar call delete("Xreadonly.log") 23052931f2a5SBram Moolenaarendfunc 23062931f2a5SBram Moolenaar 23072931f2a5SBram Moolenaarfunc! Test_normal52_rl() 23082931f2a5SBram Moolenaar if !has("rightleft") 23092931f2a5SBram Moolenaar return 23102931f2a5SBram Moolenaar endif 23112931f2a5SBram Moolenaar new 23122931f2a5SBram Moolenaar call setline(1, 'abcde fghij klmnopq') 23132931f2a5SBram Moolenaar norm! 1gg$ 23142931f2a5SBram Moolenaar set rl 23152931f2a5SBram Moolenaar call assert_equal(19, col('.')) 23162931f2a5SBram Moolenaar call feedkeys('l', 'tx') 23172931f2a5SBram Moolenaar call assert_equal(18, col('.')) 23182931f2a5SBram Moolenaar call feedkeys('h', 'tx') 23192931f2a5SBram Moolenaar call assert_equal(19, col('.')) 23202931f2a5SBram Moolenaar call feedkeys("\<right>", 'tx') 23212931f2a5SBram Moolenaar call assert_equal(18, col('.')) 23222931f2a5SBram Moolenaar call feedkeys("\<s-right>", 'tx') 23232931f2a5SBram Moolenaar call assert_equal(13, col('.')) 23242931f2a5SBram Moolenaar call feedkeys("\<c-right>", 'tx') 23252931f2a5SBram Moolenaar call assert_equal(7, col('.')) 23262931f2a5SBram Moolenaar call feedkeys("\<c-left>", 'tx') 23272931f2a5SBram Moolenaar call assert_equal(13, col('.')) 23282931f2a5SBram Moolenaar call feedkeys("\<s-left>", 'tx') 23292931f2a5SBram Moolenaar call assert_equal(19, col('.')) 23302931f2a5SBram Moolenaar call feedkeys("<<", 'tx') 23312931f2a5SBram Moolenaar call assert_equal(' abcde fghij klmnopq',getline(1)) 23322931f2a5SBram Moolenaar call feedkeys(">>", 'tx') 23332931f2a5SBram Moolenaar call assert_equal('abcde fghij klmnopq',getline(1)) 23342931f2a5SBram Moolenaar 23352931f2a5SBram Moolenaar " cleanup 23362931f2a5SBram Moolenaar set norl 23372931f2a5SBram Moolenaar bw! 23382931f2a5SBram Moolenaarendfunc 23392931f2a5SBram Moolenaar 23402931f2a5SBram Moolenaarfunc! Test_normal53_digraph() 23412931f2a5SBram Moolenaar if !has('digraphs') 23422931f2a5SBram Moolenaar return 23432931f2a5SBram Moolenaar endif 23442931f2a5SBram Moolenaar new 23452931f2a5SBram Moolenaar call setline(1, 'abcdefgh|') 23462931f2a5SBram Moolenaar exe "norm! 1gg0f\<c-k>!!" 23472931f2a5SBram Moolenaar call assert_equal(9, col('.')) 23482931f2a5SBram Moolenaar set cpo+=D 23492931f2a5SBram Moolenaar exe "norm! 1gg0f\<c-k>!!" 23502931f2a5SBram Moolenaar call assert_equal(1, col('.')) 23512931f2a5SBram Moolenaar 23522931f2a5SBram Moolenaar set cpo-=D 23532931f2a5SBram Moolenaar bw! 23542931f2a5SBram Moolenaarendfunc 23552931f2a5SBram Moolenaar 2356b1e04fcaSBram Moolenaarfunc Test_normal54_Ctrl_bsl() 23572931f2a5SBram Moolenaar new 23582931f2a5SBram Moolenaar call setline(1, 'abcdefghijklmn') 23592931f2a5SBram Moolenaar exe "norm! df\<c-\>\<c-n>" 23602931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn'], getline(1,'$')) 23612931f2a5SBram Moolenaar exe "norm! df\<c-\>\<c-g>" 23622931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn'], getline(1,'$')) 23632931f2a5SBram Moolenaar exe "norm! df\<c-\>m" 23642931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn'], getline(1,'$')) 23652931f2a5SBram Moolenaar if !has("multi_byte") 23662931f2a5SBram Moolenaar return 23672931f2a5SBram Moolenaar endif 23682931f2a5SBram Moolenaar call setline(2, 'abcdefghijklmnāf') 23692931f2a5SBram Moolenaar norm! 2gg0 23702931f2a5SBram Moolenaar exe "norm! df\<Char-0x101>" 23712931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn', 'f'], getline(1,'$')) 23722931f2a5SBram Moolenaar norm! 1gg0 23732931f2a5SBram Moolenaar exe "norm! df\<esc>" 23742931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn', 'f'], getline(1,'$')) 23752931f2a5SBram Moolenaar 23762931f2a5SBram Moolenaar " clean up 23772931f2a5SBram Moolenaar bw! 23782931f2a5SBram Moolenaarendfunc 2379b1e04fcaSBram Moolenaar 2380b1e04fcaSBram Moolenaarfunc Test_normal_large_count() 2381b1e04fcaSBram Moolenaar " This may fail with 32bit long, how do we detect that? 2382b1e04fcaSBram Moolenaar new 2383b1e04fcaSBram Moolenaar normal o 2384b1e04fcaSBram Moolenaar normal 6666666666dL 2385b1e04fcaSBram Moolenaar bwipe! 2386b1e04fcaSBram Moolenaarendfunc 2387bf3d5807SBram Moolenaar 2388bf3d5807SBram Moolenaarfunc Test_delete_until_paragraph() 2389bf3d5807SBram Moolenaar if !has('multi_byte') 2390bf3d5807SBram Moolenaar return 2391bf3d5807SBram Moolenaar endif 2392bf3d5807SBram Moolenaar new 2393bf3d5807SBram Moolenaar normal grádv} 2394bf3d5807SBram Moolenaar call assert_equal('á', getline(1)) 2395bf3d5807SBram Moolenaar normal grád} 2396bf3d5807SBram Moolenaar call assert_equal('', getline(1)) 2397bf3d5807SBram Moolenaar bwipe! 2398bf3d5807SBram Moolenaarendfunc 2399*fb094e14SBram Moolenaar 2400*fb094e14SBram Moolenaar" Test for the gr (virtual replace) command 2401*fb094e14SBram Moolenaar" Test for the bug fixed by 7.4.387 2402*fb094e14SBram Moolenaarfunc Test_gr_command() 2403*fb094e14SBram Moolenaar enew! 2404*fb094e14SBram Moolenaar let save_cpo = &cpo 2405*fb094e14SBram Moolenaar call append(0, ['First line', 'Second line', 'Third line']) 2406*fb094e14SBram Moolenaar exe "normal i\<C-G>u" 2407*fb094e14SBram Moolenaar call cursor(2, 1) 2408*fb094e14SBram Moolenaar set cpo-=X 2409*fb094e14SBram Moolenaar normal 4gro 2410*fb094e14SBram Moolenaar call assert_equal('oooond line', getline(2)) 2411*fb094e14SBram Moolenaar undo 2412*fb094e14SBram Moolenaar set cpo+=X 2413*fb094e14SBram Moolenaar normal 4gro 2414*fb094e14SBram Moolenaar call assert_equal('ooooecond line', getline(2)) 2415*fb094e14SBram Moolenaar let &cpo = save_cpo 2416*fb094e14SBram Moolenaar enew! 2417*fb094e14SBram Moolenaarendfunc 2418*fb094e14SBram Moolenaar 2419*fb094e14SBram Moolenaar" When splitting a window the changelist position is wrong. 2420*fb094e14SBram Moolenaar" Test the changelist position after splitting a window. 2421*fb094e14SBram Moolenaar" Test for the bug fixed by 7.4.386 2422*fb094e14SBram Moolenaarfunc Test_changelist() 2423*fb094e14SBram Moolenaar let save_ul = &ul 2424*fb094e14SBram Moolenaar enew! 2425*fb094e14SBram Moolenaar call append('$', ['1', '2']) 2426*fb094e14SBram Moolenaar exe "normal i\<C-G>u" 2427*fb094e14SBram Moolenaar exe "normal Gkylpa\<C-G>u" 2428*fb094e14SBram Moolenaar set ul=100 2429*fb094e14SBram Moolenaar exe "normal Gylpa\<C-G>u" 2430*fb094e14SBram Moolenaar set ul=100 2431*fb094e14SBram Moolenaar normal gg 2432*fb094e14SBram Moolenaar vsplit 2433*fb094e14SBram Moolenaar normal g; 2434*fb094e14SBram Moolenaar call assert_equal([3, 2], [line('.'), col('.')]) 2435*fb094e14SBram Moolenaar normal g; 2436*fb094e14SBram Moolenaar call assert_equal([2, 2], [line('.'), col('.')]) 2437*fb094e14SBram Moolenaar call assert_fails('normal g;', 'E662:') 2438*fb094e14SBram Moolenaar %bwipe! 2439*fb094e14SBram Moolenaar let &ul = save_ul 2440*fb094e14SBram Moolenaarendfunc 2441