187bc3f74SBram Moolenaar" Test for various Normal mode commands 287bc3f74SBram Moolenaar 3c3c766eaSBram Moolenaarset belloff=all 487bc3f74SBram Moolenaarfunc! Setup_NewWindow() 587bc3f74SBram Moolenaar 10new 687bc3f74SBram Moolenaar call setline(1, range(1,100)) 787bc3f74SBram Moolenaarendfunc 887bc3f74SBram Moolenaar 987bc3f74SBram Moolenaarfunc! MyFormatExpr() 1087bc3f74SBram Moolenaar " Adds '->$' at lines having numbers followed by trailing whitespace 1187bc3f74SBram Moolenaar for ln in range(v:lnum, v:lnum+v:count-1) 1287bc3f74SBram Moolenaar let line = getline(ln) 1387bc3f74SBram Moolenaar if getline(ln) =~# '\d\s\+$' 1487bc3f74SBram Moolenaar call setline(ln, substitute(line, '\s\+$', '', '') . '->$') 1587bc3f74SBram Moolenaar endif 1687bc3f74SBram Moolenaar endfor 172931f2a5SBram Moolenaarendfunc 1887bc3f74SBram Moolenaar 192931f2a5SBram Moolenaarfunc! CountSpaces(type, ...) 2087bc3f74SBram Moolenaar " for testing operatorfunc 2187bc3f74SBram Moolenaar " will count the number of spaces 2287bc3f74SBram Moolenaar " and return the result in g:a 2387bc3f74SBram Moolenaar let sel_save = &selection 2487bc3f74SBram Moolenaar let &selection = "inclusive" 2587bc3f74SBram Moolenaar let reg_save = @@ 2687bc3f74SBram Moolenaar 2787bc3f74SBram Moolenaar if a:0 " Invoked from Visual mode, use gv command. 2887bc3f74SBram Moolenaar silent exe "normal! gvy" 2987bc3f74SBram Moolenaar elseif a:type == 'line' 3087bc3f74SBram Moolenaar silent exe "normal! '[V']y" 3187bc3f74SBram Moolenaar else 3287bc3f74SBram Moolenaar silent exe "normal! `[v`]y" 3387bc3f74SBram Moolenaar endif 3487bc3f74SBram Moolenaar let g:a=strlen(substitute(@@, '[^ ]', '', 'g')) 3587bc3f74SBram Moolenaar let &selection = sel_save 3687bc3f74SBram Moolenaar let @@ = reg_save 372931f2a5SBram Moolenaarendfunc 382931f2a5SBram Moolenaar 394a08b0dcSBram Moolenaarfunc! OpfuncDummy(type, ...) 404a08b0dcSBram Moolenaar " for testing operatorfunc 414a08b0dcSBram Moolenaar let g:opt=&linebreak 424a08b0dcSBram Moolenaar 434a08b0dcSBram Moolenaar if a:0 " Invoked from Visual mode, use gv command. 444a08b0dcSBram Moolenaar silent exe "normal! gvy" 454a08b0dcSBram Moolenaar elseif a:type == 'line' 464a08b0dcSBram Moolenaar silent exe "normal! '[V']y" 474a08b0dcSBram Moolenaar else 484a08b0dcSBram Moolenaar silent exe "normal! `[v`]y" 494a08b0dcSBram Moolenaar endif 504a08b0dcSBram Moolenaar " Create a new dummy window 514a08b0dcSBram Moolenaar new 524a08b0dcSBram Moolenaar let g:bufnr=bufnr('%') 532931f2a5SBram Moolenaarendfunc 5487bc3f74SBram Moolenaar 5587bc3f74SBram Moolenaarfun! Test_normal00_optrans() 5687bc3f74SBram Moolenaar new 5787bc3f74SBram Moolenaar call append(0, ['1 This is a simple test: abcd', '2 This is the second line', '3 this is the third line']) 5887bc3f74SBram Moolenaar 1 5987bc3f74SBram Moolenaar exe "norm! Sfoobar\<esc>" 6087bc3f74SBram Moolenaar call assert_equal(['foobar', '2 This is the second line', '3 this is the third line', ''], getline(1,'$')) 6187bc3f74SBram Moolenaar 2 6287bc3f74SBram Moolenaar exe "norm! $vbsone" 6387bc3f74SBram Moolenaar call assert_equal(['foobar', '2 This is the second one', '3 this is the third line', ''], getline(1,'$')) 6487bc3f74SBram Moolenaar norm! VS Second line here 6587bc3f74SBram Moolenaar call assert_equal(['foobar', ' Second line here', '3 this is the third line', ''], getline(1, '$')) 6687bc3f74SBram Moolenaar %d 6787bc3f74SBram Moolenaar call append(0, ['4 This is a simple test: abcd', '5 This is the second line', '6 this is the third line']) 6887bc3f74SBram Moolenaar call append(0, ['1 This is a simple test: abcd', '2 This is the second line', '3 this is the third line']) 6987bc3f74SBram Moolenaar 7087bc3f74SBram Moolenaar 1 7187bc3f74SBram Moolenaar norm! 2D 7287bc3f74SBram 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,'$')) 7387bc3f74SBram Moolenaar set cpo+=# 7487bc3f74SBram Moolenaar norm! 4D 7587bc3f74SBram 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,'$')) 7687bc3f74SBram Moolenaar 7787bc3f74SBram Moolenaar " clean up 7887bc3f74SBram Moolenaar set cpo-=# 7987bc3f74SBram Moolenaar bw! 802931f2a5SBram Moolenaarendfunc 8187bc3f74SBram Moolenaar 8287bc3f74SBram Moolenaarfunc! Test_normal01_keymodel() 8387bc3f74SBram Moolenaar call Setup_NewWindow() 8487bc3f74SBram Moolenaar " Test 1: depending on 'keymodel' <s-down> does something different 852931f2a5SBram Moolenaar 50 8687bc3f74SBram Moolenaar call feedkeys("V\<S-Up>y", 'tx') 8787bc3f74SBram Moolenaar call assert_equal(['47', '48', '49', '50'], getline("'<", "'>")) 882931f2a5SBram Moolenaar set keymodel=startsel 892931f2a5SBram Moolenaar 50 9087bc3f74SBram Moolenaar call feedkeys("V\<S-Up>y", 'tx') 9187bc3f74SBram Moolenaar call assert_equal(['49', '50'], getline("'<", "'>")) 9287bc3f74SBram Moolenaar " Start visual mode when keymodel = startsel 932931f2a5SBram Moolenaar 50 9487bc3f74SBram Moolenaar call feedkeys("\<S-Up>y", 'tx') 9587bc3f74SBram Moolenaar call assert_equal(['49', '5'], getreg(0, 0, 1)) 9687bc3f74SBram Moolenaar " Do not start visual mode when keymodel= 972931f2a5SBram Moolenaar set keymodel= 982931f2a5SBram Moolenaar 50 9987bc3f74SBram Moolenaar call feedkeys("\<S-Up>y$", 'tx') 10087bc3f74SBram Moolenaar call assert_equal(['42'], getreg(0, 0, 1)) 1012931f2a5SBram Moolenaar " Stop visual mode when keymodel=stopsel 1022931f2a5SBram Moolenaar set keymodel=stopsel 1032931f2a5SBram Moolenaar 50 1042931f2a5SBram Moolenaar call feedkeys("Vkk\<Up>yy", 'tx') 1052931f2a5SBram Moolenaar call assert_equal(['47'], getreg(0, 0, 1)) 1062931f2a5SBram Moolenaar 1072931f2a5SBram Moolenaar set keymodel= 1082931f2a5SBram Moolenaar 50 1092931f2a5SBram Moolenaar call feedkeys("Vkk\<Up>yy", 'tx') 1102931f2a5SBram Moolenaar call assert_equal(['47', '48', '49', '50'], getreg(0, 0, 1)) 11187bc3f74SBram Moolenaar 11287bc3f74SBram Moolenaar " clean up 11387bc3f74SBram Moolenaar bw! 11487bc3f74SBram Moolenaarendfunc 11587bc3f74SBram Moolenaar 11687bc3f74SBram Moolenaarfunc! Test_normal02_selectmode() 11787bc3f74SBram Moolenaar " some basic select mode tests 11887bc3f74SBram Moolenaar call Setup_NewWindow() 11987bc3f74SBram Moolenaar 50 12087bc3f74SBram Moolenaar norm! gHy 12187bc3f74SBram Moolenaar call assert_equal('y51', getline('.')) 12287bc3f74SBram Moolenaar call setline(1, range(1,100)) 12387bc3f74SBram Moolenaar 50 12487bc3f74SBram Moolenaar exe ":norm! V9jo\<c-g>y" 12587bc3f74SBram Moolenaar call assert_equal('y60', getline('.')) 12687bc3f74SBram Moolenaar " clean up 12787bc3f74SBram Moolenaar bw! 1282931f2a5SBram Moolenaarendfunc 1292931f2a5SBram Moolenaar 1302931f2a5SBram Moolenaarfunc! Test_normal02_selectmode2() 1312931f2a5SBram Moolenaar " some basic select mode tests 1322931f2a5SBram Moolenaar call Setup_NewWindow() 1332931f2a5SBram Moolenaar 50 1342931f2a5SBram Moolenaar call feedkeys(":set im\n\<c-o>gHc\<c-o>:set noim\n", 'tx') 1352931f2a5SBram Moolenaar call assert_equal('c51', getline('.')) 1362931f2a5SBram Moolenaar " clean up 1372931f2a5SBram Moolenaar bw! 1382931f2a5SBram Moolenaarendfunc 13987bc3f74SBram Moolenaar 14087bc3f74SBram Moolenaarfunc! Test_normal03_join() 14187bc3f74SBram Moolenaar " basic join test 14287bc3f74SBram Moolenaar call Setup_NewWindow() 14387bc3f74SBram Moolenaar 50 14487bc3f74SBram Moolenaar norm! VJ 14587bc3f74SBram Moolenaar call assert_equal('50 51', getline('.')) 14687bc3f74SBram Moolenaar $ 14787bc3f74SBram Moolenaar norm! J 14887bc3f74SBram Moolenaar call assert_equal('100', getline('.')) 14987bc3f74SBram Moolenaar $ 15087bc3f74SBram Moolenaar norm! V9-gJ 15187bc3f74SBram Moolenaar call assert_equal('919293949596979899100', getline('.')) 15287bc3f74SBram Moolenaar call setline(1, range(1,100)) 15387bc3f74SBram Moolenaar $ 15487bc3f74SBram Moolenaar :j 10 15587bc3f74SBram Moolenaar call assert_equal('100', getline('.')) 15687bc3f74SBram Moolenaar " clean up 15787bc3f74SBram Moolenaar bw! 1582931f2a5SBram Moolenaarendfunc 15987bc3f74SBram Moolenaar 16087bc3f74SBram Moolenaarfunc! Test_normal04_filter() 16187bc3f74SBram Moolenaar " basic filter test 16287bc3f74SBram Moolenaar " only test on non windows platform 1634a08b0dcSBram Moolenaar if has('win32') 16487bc3f74SBram Moolenaar return 16587bc3f74SBram Moolenaar endif 16687bc3f74SBram Moolenaar call Setup_NewWindow() 16787bc3f74SBram Moolenaar 1 16887bc3f74SBram Moolenaar call feedkeys("!!sed -e 's/^/| /'\n", 'tx') 16987bc3f74SBram Moolenaar call assert_equal('| 1', getline('.')) 17087bc3f74SBram Moolenaar 90 17187bc3f74SBram Moolenaar :sil :!echo one 17287bc3f74SBram Moolenaar call feedkeys('.', 'tx') 17387bc3f74SBram Moolenaar call assert_equal('| 90', getline('.')) 17487bc3f74SBram Moolenaar 95 17587bc3f74SBram Moolenaar set cpo+=! 17687bc3f74SBram Moolenaar " 2 <CR>, 1: for executing the command, 17787bc3f74SBram Moolenaar " 2: clear hit-enter-prompt 17887bc3f74SBram Moolenaar call feedkeys("!!\n", 'tx') 17987bc3f74SBram Moolenaar call feedkeys(":!echo one\n\n", 'tx') 18087bc3f74SBram Moolenaar call feedkeys(".", 'tx') 18187bc3f74SBram Moolenaar call assert_equal('one', getline('.')) 18287bc3f74SBram Moolenaar set cpo-=! 18387bc3f74SBram Moolenaar bw! 1842931f2a5SBram Moolenaarendfunc 18587bc3f74SBram Moolenaar 18687bc3f74SBram Moolenaarfunc! Test_normal05_formatexpr() 18787bc3f74SBram Moolenaar " basic formatexpr test 18887bc3f74SBram Moolenaar call Setup_NewWindow() 18987bc3f74SBram Moolenaar %d_ 19087bc3f74SBram Moolenaar call setline(1, ['here: 1 ', '2', 'here: 3 ', '4', 'not here: ']) 19187bc3f74SBram Moolenaar 1 19287bc3f74SBram Moolenaar set formatexpr=MyFormatExpr() 19387bc3f74SBram Moolenaar norm! gqG 19487bc3f74SBram Moolenaar call assert_equal(['here: 1->$', '2', 'here: 3->$', '4', 'not here: '], getline(1,'$')) 19587bc3f74SBram Moolenaar set formatexpr= 19687bc3f74SBram Moolenaar bw! 1972931f2a5SBram Moolenaarendfunc 19887bc3f74SBram Moolenaar 199d77f9d59SBram Moolenaarfunc Test_normal05_formatexpr_newbuf() 200d77f9d59SBram Moolenaar " Edit another buffer in the 'formatexpr' function 201d77f9d59SBram Moolenaar new 202d77f9d59SBram Moolenaar func! Format() 203d77f9d59SBram Moolenaar edit another 204d77f9d59SBram Moolenaar endfunc 205d77f9d59SBram Moolenaar set formatexpr=Format() 206d77f9d59SBram Moolenaar norm gqG 207d77f9d59SBram Moolenaar bw! 208d77f9d59SBram Moolenaar set formatexpr= 209d77f9d59SBram Moolenaarendfunc 210d77f9d59SBram Moolenaar 211d77f9d59SBram Moolenaarfunc Test_normal05_formatexpr_setopt() 212d77f9d59SBram Moolenaar " Change the 'formatexpr' value in the function 213d77f9d59SBram Moolenaar new 214d77f9d59SBram Moolenaar func! Format() 215d77f9d59SBram Moolenaar set formatexpr= 216d77f9d59SBram Moolenaar endfunc 217d77f9d59SBram Moolenaar set formatexpr=Format() 218d77f9d59SBram Moolenaar norm gqG 219d77f9d59SBram Moolenaar bw! 220d77f9d59SBram Moolenaar set formatexpr= 221d77f9d59SBram Moolenaarendfunc 222d77f9d59SBram Moolenaar 22387bc3f74SBram Moolenaarfunc! Test_normal06_formatprg() 22487bc3f74SBram Moolenaar " basic test for formatprg 22587bc3f74SBram Moolenaar " only test on non windows platform 2264a08b0dcSBram Moolenaar if has('win32') 22787bc3f74SBram Moolenaar return 2289be7c04eSBram Moolenaar endif 2299be7c04eSBram Moolenaar 23087bc3f74SBram Moolenaar " uses sed to number non-empty lines 23187bc3f74SBram Moolenaar call writefile(['#!/bin/sh', 'sed ''/./=''|sed ''/./{', 'N', 's/\n/ /', '}'''], 'Xsed_format.sh') 23287bc3f74SBram Moolenaar call system('chmod +x ./Xsed_format.sh') 2339be7c04eSBram Moolenaar let text = ['a', '', 'c', '', ' ', 'd', 'e'] 2349be7c04eSBram Moolenaar let expected = ['1 a', '', '3 c', '', '5 ', '6 d', '7 e'] 2359be7c04eSBram Moolenaar 2369be7c04eSBram Moolenaar 10new 2379be7c04eSBram Moolenaar call setline(1, text) 23887bc3f74SBram Moolenaar set formatprg=./Xsed_format.sh 23987bc3f74SBram Moolenaar norm! gggqG 2409be7c04eSBram Moolenaar call assert_equal(expected, getline(1, '$')) 2419be7c04eSBram Moolenaar bw! 2429be7c04eSBram Moolenaar 2439be7c04eSBram Moolenaar 10new 2449be7c04eSBram Moolenaar call setline(1, text) 2459be7c04eSBram Moolenaar set formatprg=donothing 2469be7c04eSBram Moolenaar setlocal formatprg=./Xsed_format.sh 2479be7c04eSBram Moolenaar norm! gggqG 2489be7c04eSBram Moolenaar call assert_equal(expected, getline(1, '$')) 2499be7c04eSBram Moolenaar bw! 2509be7c04eSBram Moolenaar 25187bc3f74SBram Moolenaar " clean up 25287bc3f74SBram Moolenaar set formatprg= 2539be7c04eSBram Moolenaar setlocal formatprg= 25487bc3f74SBram Moolenaar call delete('Xsed_format.sh') 2552931f2a5SBram Moolenaarendfunc 25687bc3f74SBram Moolenaar 25787bc3f74SBram Moolenaarfunc! Test_normal07_internalfmt() 25887bc3f74SBram Moolenaar " basic test for internal formmatter to textwidth of 12 25987bc3f74SBram Moolenaar let list=range(1,11) 26087bc3f74SBram Moolenaar call map(list, 'v:val." "') 26187bc3f74SBram Moolenaar 10new 26287bc3f74SBram Moolenaar call setline(1, list) 26387bc3f74SBram Moolenaar set tw=12 26487bc3f74SBram Moolenaar norm! gggqG 26587bc3f74SBram Moolenaar call assert_equal(['1 2 3', '4 5 6', '7 8 9', '10 11 '], getline(1, '$')) 26687bc3f74SBram Moolenaar " clean up 2679be7c04eSBram Moolenaar set tw=0 26887bc3f74SBram Moolenaar bw! 2692931f2a5SBram Moolenaarendfunc 27087bc3f74SBram Moolenaar 27187bc3f74SBram Moolenaarfunc! Test_normal08_fold() 27287bc3f74SBram Moolenaar " basic tests for foldopen/folddelete 27387bc3f74SBram Moolenaar if !has("folding") 27487bc3f74SBram Moolenaar return 27587bc3f74SBram Moolenaar endif 27687bc3f74SBram Moolenaar call Setup_NewWindow() 27787bc3f74SBram Moolenaar 50 27887bc3f74SBram Moolenaar setl foldenable fdm=marker 27987bc3f74SBram Moolenaar " First fold 28087bc3f74SBram Moolenaar norm! V4jzf 28187bc3f74SBram Moolenaar " check that folds have been created 28287bc3f74SBram Moolenaar call assert_equal(['50/*{{{*/', '51', '52', '53', '54/*}}}*/'], getline(50,54)) 28387bc3f74SBram Moolenaar " Second fold 28487bc3f74SBram Moolenaar 46 28587bc3f74SBram Moolenaar norm! V10jzf 28687bc3f74SBram Moolenaar " check that folds have been created 28787bc3f74SBram Moolenaar call assert_equal('46/*{{{*/', getline(46)) 28887bc3f74SBram Moolenaar call assert_equal('60/*}}}*/', getline(60)) 28987bc3f74SBram Moolenaar norm! k 29087bc3f74SBram Moolenaar call assert_equal('45', getline('.')) 29187bc3f74SBram Moolenaar norm! j 29287bc3f74SBram Moolenaar call assert_equal('46/*{{{*/', getline('.')) 29387bc3f74SBram Moolenaar norm! j 29487bc3f74SBram Moolenaar call assert_equal('61', getline('.')) 29587bc3f74SBram Moolenaar norm! k 29687bc3f74SBram Moolenaar " open a fold 29787bc3f74SBram Moolenaar norm! Vzo 29887bc3f74SBram Moolenaar norm! k 29987bc3f74SBram Moolenaar call assert_equal('45', getline('.')) 30087bc3f74SBram Moolenaar norm! j 30187bc3f74SBram Moolenaar call assert_equal('46/*{{{*/', getline('.')) 30287bc3f74SBram Moolenaar norm! j 30387bc3f74SBram Moolenaar call assert_equal('47', getline('.')) 30487bc3f74SBram Moolenaar norm! k 30587bc3f74SBram Moolenaar norm! zcVzO 30687bc3f74SBram Moolenaar call assert_equal('46/*{{{*/', getline('.')) 30787bc3f74SBram Moolenaar norm! j 30887bc3f74SBram Moolenaar call assert_equal('47', getline('.')) 30987bc3f74SBram Moolenaar norm! j 31087bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 31187bc3f74SBram Moolenaar norm! j 31287bc3f74SBram Moolenaar call assert_equal('49', getline('.')) 31387bc3f74SBram Moolenaar norm! j 31487bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 31587bc3f74SBram Moolenaar norm! j 31687bc3f74SBram Moolenaar call assert_equal('51', getline('.')) 31787bc3f74SBram Moolenaar " delete folds 31887bc3f74SBram Moolenaar :46 31987bc3f74SBram Moolenaar " collapse fold 32087bc3f74SBram Moolenaar norm! V14jzC 32187bc3f74SBram Moolenaar " delete all folds recursively 32287bc3f74SBram Moolenaar norm! VzD 32387bc3f74SBram Moolenaar call assert_equal(['46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60'], getline(46,60)) 32487bc3f74SBram Moolenaar 32587bc3f74SBram Moolenaar " clean up 32687bc3f74SBram Moolenaar setl nofoldenable fdm=marker 32787bc3f74SBram Moolenaar bw! 3282931f2a5SBram Moolenaarendfunc 32987bc3f74SBram Moolenaar 33087bc3f74SBram Moolenaarfunc! Test_normal09_operatorfunc() 33187bc3f74SBram Moolenaar " Test operatorfunc 33287bc3f74SBram Moolenaar call Setup_NewWindow() 33387bc3f74SBram Moolenaar " Add some spaces for counting 33487bc3f74SBram Moolenaar 50,60s/$/ / 33587bc3f74SBram Moolenaar unlet! g:a 33687bc3f74SBram Moolenaar let g:a=0 33787bc3f74SBram Moolenaar nmap <buffer><silent> ,, :set opfunc=CountSpaces<CR>g@ 33887bc3f74SBram Moolenaar vmap <buffer><silent> ,, :<C-U>call CountSpaces(visualmode(), 1)<CR> 33987bc3f74SBram Moolenaar 50 34087bc3f74SBram Moolenaar norm V2j,, 34187bc3f74SBram Moolenaar call assert_equal(6, g:a) 34287bc3f74SBram Moolenaar norm V,, 34387bc3f74SBram Moolenaar call assert_equal(2, g:a) 34487bc3f74SBram Moolenaar norm ,,l 34587bc3f74SBram Moolenaar call assert_equal(0, g:a) 34687bc3f74SBram Moolenaar 50 34787bc3f74SBram Moolenaar exe "norm 0\<c-v>10j2l,," 34887bc3f74SBram Moolenaar call assert_equal(11, g:a) 34987bc3f74SBram Moolenaar 50 35087bc3f74SBram Moolenaar norm V10j,, 35187bc3f74SBram Moolenaar call assert_equal(22, g:a) 35287bc3f74SBram Moolenaar 35387bc3f74SBram Moolenaar " clean up 35487bc3f74SBram Moolenaar unmap <buffer> ,, 35587bc3f74SBram Moolenaar set opfunc= 3564a08b0dcSBram Moolenaar unlet! g:a 35787bc3f74SBram Moolenaar bw! 3582931f2a5SBram Moolenaarendfunc 35987bc3f74SBram Moolenaar 3604a08b0dcSBram Moolenaarfunc! Test_normal09a_operatorfunc() 3614a08b0dcSBram Moolenaar " Test operatorfunc 3624a08b0dcSBram Moolenaar call Setup_NewWindow() 3634a08b0dcSBram Moolenaar " Add some spaces for counting 3644a08b0dcSBram Moolenaar 50,60s/$/ / 3654a08b0dcSBram Moolenaar unlet! g:opt 3664a08b0dcSBram Moolenaar set linebreak 3674a08b0dcSBram Moolenaar nmap <buffer><silent> ,, :set opfunc=OpfuncDummy<CR>g@ 3684a08b0dcSBram Moolenaar 50 3694a08b0dcSBram Moolenaar norm ,,j 3704a08b0dcSBram Moolenaar exe "bd!" g:bufnr 3714a08b0dcSBram Moolenaar call assert_true(&linebreak) 3724a08b0dcSBram Moolenaar call assert_equal(g:opt, &linebreak) 3734a08b0dcSBram Moolenaar set nolinebreak 3744a08b0dcSBram Moolenaar norm ,,j 3754a08b0dcSBram Moolenaar exe "bd!" g:bufnr 3764a08b0dcSBram Moolenaar call assert_false(&linebreak) 3774a08b0dcSBram Moolenaar call assert_equal(g:opt, &linebreak) 3784a08b0dcSBram Moolenaar 3794a08b0dcSBram Moolenaar " clean up 3804a08b0dcSBram Moolenaar unmap <buffer> ,, 3814a08b0dcSBram Moolenaar set opfunc= 3824a08b0dcSBram Moolenaar bw! 3834a08b0dcSBram Moolenaar unlet! g:opt 3844a08b0dcSBram Moolenaarendfunc 3854a08b0dcSBram Moolenaar 38687bc3f74SBram Moolenaarfunc! Test_normal10_expand() 38787bc3f74SBram Moolenaar " Test for expand() 38887bc3f74SBram Moolenaar 10new 38987bc3f74SBram Moolenaar call setline(1, ['1', 'ifooar,,cbar']) 39087bc3f74SBram Moolenaar 2 39187bc3f74SBram Moolenaar norm! $ 39287bc3f74SBram Moolenaar let a=expand('<cword>') 39387bc3f74SBram Moolenaar let b=expand('<cWORD>') 39487bc3f74SBram Moolenaar call assert_equal('cbar', a) 39587bc3f74SBram Moolenaar call assert_equal('ifooar,,cbar', b) 39687bc3f74SBram Moolenaar " clean up 39787bc3f74SBram Moolenaar bw! 3982931f2a5SBram Moolenaarendfunc 39987bc3f74SBram Moolenaar 40087bc3f74SBram Moolenaarfunc! Test_normal11_showcmd() 40187bc3f74SBram Moolenaar " test for 'showcmd' 40287bc3f74SBram Moolenaar 10new 40387bc3f74SBram Moolenaar exe "norm! ofoobar\<esc>" 40487bc3f74SBram Moolenaar call assert_equal(2, line('$')) 40587bc3f74SBram Moolenaar set showcmd 40687bc3f74SBram Moolenaar exe "norm! ofoobar2\<esc>" 40787bc3f74SBram Moolenaar call assert_equal(3, line('$')) 40887bc3f74SBram Moolenaar exe "norm! VAfoobar3\<esc>" 40987bc3f74SBram Moolenaar call assert_equal(3, line('$')) 41087bc3f74SBram Moolenaar exe "norm! 0d3\<del>2l" 41187bc3f74SBram Moolenaar call assert_equal('obar2foobar3', getline('.')) 41287bc3f74SBram Moolenaar bw! 4132931f2a5SBram Moolenaarendfunc 41487bc3f74SBram Moolenaar 41587bc3f74SBram Moolenaarfunc! Test_normal12_nv_error() 41687bc3f74SBram Moolenaar " Test for nv_error 41787bc3f74SBram Moolenaar 10new 41887bc3f74SBram Moolenaar call setline(1, range(1,5)) 41987bc3f74SBram Moolenaar " should not do anything, just beep 42087bc3f74SBram Moolenaar exe "norm! <c-k>" 42187bc3f74SBram Moolenaar call assert_equal(map(range(1,5), 'string(v:val)'), getline(1,'$')) 42287bc3f74SBram Moolenaar bw! 4232931f2a5SBram Moolenaarendfunc 42487bc3f74SBram Moolenaar 42587bc3f74SBram Moolenaarfunc! Test_normal13_help() 42687bc3f74SBram Moolenaar " Test for F1 42787bc3f74SBram Moolenaar call assert_equal(1, winnr()) 42887bc3f74SBram Moolenaar call feedkeys("\<f1>", 'txi') 42987bc3f74SBram Moolenaar call assert_match('help\.txt', bufname('%')) 43087bc3f74SBram Moolenaar call assert_equal(2, winnr('$')) 43187bc3f74SBram Moolenaar bw! 4322931f2a5SBram Moolenaarendfunc 43387bc3f74SBram Moolenaar 43487bc3f74SBram Moolenaarfunc! Test_normal14_page() 43587bc3f74SBram Moolenaar " basic test for Ctrl-F and Ctrl-B 43687bc3f74SBram Moolenaar call Setup_NewWindow() 43787bc3f74SBram Moolenaar exe "norm! \<c-f>" 43887bc3f74SBram Moolenaar call assert_equal('9', getline('.')) 43987bc3f74SBram Moolenaar exe "norm! 2\<c-f>" 44087bc3f74SBram Moolenaar call assert_equal('25', getline('.')) 44187bc3f74SBram Moolenaar exe "norm! 2\<c-b>" 44287bc3f74SBram Moolenaar call assert_equal('18', getline('.')) 44387bc3f74SBram Moolenaar 1 44487bc3f74SBram Moolenaar set scrolloff=5 44587bc3f74SBram Moolenaar exe "norm! 2\<c-f>" 44687bc3f74SBram Moolenaar call assert_equal('21', getline('.')) 44787bc3f74SBram Moolenaar exe "norm! \<c-b>" 44887bc3f74SBram Moolenaar call assert_equal('13', getline('.')) 44987bc3f74SBram Moolenaar 1 45087bc3f74SBram Moolenaar set scrolloff=99 45187bc3f74SBram Moolenaar exe "norm! \<c-f>" 45287bc3f74SBram Moolenaar call assert_equal('13', getline('.')) 45387bc3f74SBram Moolenaar set scrolloff=0 45487bc3f74SBram Moolenaar 100 45587bc3f74SBram Moolenaar exe "norm! $\<c-b>" 45687bc3f74SBram Moolenaar call assert_equal('92', getline('.')) 45787bc3f74SBram Moolenaar call assert_equal([0, 92, 1, 0, 1], getcurpos()) 45887bc3f74SBram Moolenaar 100 45987bc3f74SBram Moolenaar set nostartofline 46087bc3f74SBram Moolenaar exe "norm! $\<c-b>" 46187bc3f74SBram Moolenaar call assert_equal('92', getline('.')) 46287bc3f74SBram Moolenaar call assert_equal([0, 92, 2, 0, 2147483647], getcurpos()) 46387bc3f74SBram Moolenaar " cleanup 46487bc3f74SBram Moolenaar set startofline 46587bc3f74SBram Moolenaar bw! 4662931f2a5SBram Moolenaarendfunc 46787bc3f74SBram Moolenaar 468bc54f3f3SBram Moolenaarfunc! Test_normal14_page_eol() 469bc54f3f3SBram Moolenaar 10new 470bc54f3f3SBram Moolenaar norm oxxxxxxx 471bc54f3f3SBram Moolenaar exe "norm 2\<c-f>" 472bc54f3f3SBram Moolenaar " check with valgrind that cursor is put back in column 1 473bc54f3f3SBram Moolenaar exe "norm 2\<c-b>" 474bc54f3f3SBram Moolenaar bw! 475bc54f3f3SBram Moolenaarendfunc 476bc54f3f3SBram Moolenaar 47787bc3f74SBram Moolenaarfunc! Test_normal15_z_scroll_vert() 47887bc3f74SBram Moolenaar " basic test for z commands that scroll the window 47987bc3f74SBram Moolenaar call Setup_NewWindow() 48087bc3f74SBram Moolenaar 100 48187bc3f74SBram Moolenaar norm! >> 48287bc3f74SBram Moolenaar " Test for z<cr> 48387bc3f74SBram Moolenaar exe "norm! z\<cr>" 48487bc3f74SBram Moolenaar call assert_equal(' 100', getline('.')) 48587bc3f74SBram Moolenaar call assert_equal(100, winsaveview()['topline']) 48687bc3f74SBram Moolenaar call assert_equal([0, 100, 2, 0, 9], getcurpos()) 48787bc3f74SBram Moolenaar 48887bc3f74SBram Moolenaar " Test for zt 48987bc3f74SBram Moolenaar 21 49087bc3f74SBram Moolenaar norm! >>0zt 49187bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 49287bc3f74SBram Moolenaar call assert_equal(21, winsaveview()['topline']) 49387bc3f74SBram Moolenaar call assert_equal([0, 21, 1, 0, 8], getcurpos()) 49487bc3f74SBram Moolenaar 49587bc3f74SBram Moolenaar " Test for zb 49687bc3f74SBram Moolenaar 30 49787bc3f74SBram Moolenaar norm! >>$ztzb 49887bc3f74SBram Moolenaar call assert_equal(' 30', getline('.')) 49987bc3f74SBram Moolenaar call assert_equal(30, winsaveview()['topline']+winheight(0)-1) 50087bc3f74SBram Moolenaar call assert_equal([0, 30, 3, 0, 2147483647], getcurpos()) 50187bc3f74SBram Moolenaar 50287bc3f74SBram Moolenaar " Test for z- 50387bc3f74SBram Moolenaar 1 50487bc3f74SBram Moolenaar 30 50587bc3f74SBram Moolenaar norm! 0z- 50687bc3f74SBram Moolenaar call assert_equal(' 30', getline('.')) 50787bc3f74SBram Moolenaar call assert_equal(30, winsaveview()['topline']+winheight(0)-1) 50887bc3f74SBram Moolenaar call assert_equal([0, 30, 2, 0, 9], getcurpos()) 50987bc3f74SBram Moolenaar 51087bc3f74SBram Moolenaar " Test for z{height}<cr> 51187bc3f74SBram Moolenaar call assert_equal(10, winheight(0)) 51287bc3f74SBram Moolenaar exe "norm! z12\<cr>" 51387bc3f74SBram Moolenaar call assert_equal(12, winheight(0)) 51487bc3f74SBram Moolenaar exe "norm! z10\<cr>" 51587bc3f74SBram Moolenaar call assert_equal(10, winheight(0)) 51687bc3f74SBram Moolenaar 51787bc3f74SBram Moolenaar " Test for z. 51887bc3f74SBram Moolenaar 1 51987bc3f74SBram Moolenaar 21 52087bc3f74SBram Moolenaar norm! 0z. 52187bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 52287bc3f74SBram Moolenaar call assert_equal(17, winsaveview()['topline']) 52387bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 52487bc3f74SBram Moolenaar 52587bc3f74SBram Moolenaar " Test for zz 52687bc3f74SBram Moolenaar 1 52787bc3f74SBram Moolenaar 21 52887bc3f74SBram Moolenaar norm! 0zz 52987bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 53087bc3f74SBram Moolenaar call assert_equal(17, winsaveview()['topline']) 53187bc3f74SBram Moolenaar call assert_equal([0, 21, 1, 0, 8], getcurpos()) 53287bc3f74SBram Moolenaar 53387bc3f74SBram Moolenaar " Test for z+ 53487bc3f74SBram Moolenaar 11 53587bc3f74SBram Moolenaar norm! zt 53687bc3f74SBram Moolenaar norm! z+ 53787bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 53887bc3f74SBram Moolenaar call assert_equal(21, winsaveview()['topline']) 53987bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 54087bc3f74SBram Moolenaar 54187bc3f74SBram Moolenaar " Test for [count]z+ 54287bc3f74SBram Moolenaar 1 54387bc3f74SBram Moolenaar norm! 21z+ 54487bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 54587bc3f74SBram Moolenaar call assert_equal(21, winsaveview()['topline']) 54687bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 54787bc3f74SBram Moolenaar 54887bc3f74SBram Moolenaar " Test for z^ 54987bc3f74SBram Moolenaar norm! 22z+0 55087bc3f74SBram Moolenaar norm! z^ 55187bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 55287bc3f74SBram Moolenaar call assert_equal(12, winsaveview()['topline']) 55387bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 55487bc3f74SBram Moolenaar 55587bc3f74SBram Moolenaar " Test for [count]z^ 55687bc3f74SBram Moolenaar 1 55787bc3f74SBram Moolenaar norm! 30z^ 55887bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 55987bc3f74SBram Moolenaar call assert_equal(12, winsaveview()['topline']) 56087bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 56187bc3f74SBram Moolenaar 56287bc3f74SBram Moolenaar " cleanup 56387bc3f74SBram Moolenaar bw! 5642931f2a5SBram Moolenaarendfunc 56587bc3f74SBram Moolenaar 56687bc3f74SBram Moolenaarfunc! Test_normal16_z_scroll_hor() 56787bc3f74SBram Moolenaar " basic test for z commands that scroll the window 56887bc3f74SBram Moolenaar 10new 56987bc3f74SBram Moolenaar 15vsp 57087bc3f74SBram Moolenaar set nowrap listchars= 57187bc3f74SBram Moolenaar let lineA='abcdefghijklmnopqrstuvwxyz' 57287bc3f74SBram Moolenaar let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' 57387bc3f74SBram Moolenaar $put =lineA 57487bc3f74SBram Moolenaar $put =lineB 57587bc3f74SBram Moolenaar 1d 57687bc3f74SBram Moolenaar 57787bc3f74SBram Moolenaar " Test for zl 57887bc3f74SBram Moolenaar 1 57987bc3f74SBram Moolenaar norm! 5zl 58087bc3f74SBram Moolenaar call assert_equal(lineA, getline('.')) 58187bc3f74SBram Moolenaar call assert_equal(6, col('.')) 58287bc3f74SBram Moolenaar call assert_equal(5, winsaveview()['leftcol']) 58387bc3f74SBram Moolenaar norm! yl 58487bc3f74SBram Moolenaar call assert_equal('f', @0) 58587bc3f74SBram Moolenaar 58687bc3f74SBram Moolenaar " Test for zh 58787bc3f74SBram Moolenaar norm! 2zh 58887bc3f74SBram Moolenaar call assert_equal(lineA, getline('.')) 58987bc3f74SBram Moolenaar call assert_equal(6, col('.')) 59087bc3f74SBram Moolenaar norm! yl 59187bc3f74SBram Moolenaar call assert_equal('f', @0) 59287bc3f74SBram Moolenaar call assert_equal(3, winsaveview()['leftcol']) 59387bc3f74SBram Moolenaar 59487bc3f74SBram Moolenaar " Test for zL 59587bc3f74SBram Moolenaar norm! zL 59687bc3f74SBram Moolenaar call assert_equal(11, col('.')) 59787bc3f74SBram Moolenaar norm! yl 59887bc3f74SBram Moolenaar call assert_equal('k', @0) 59987bc3f74SBram Moolenaar call assert_equal(10, winsaveview()['leftcol']) 60087bc3f74SBram Moolenaar norm! 2zL 60187bc3f74SBram Moolenaar call assert_equal(25, col('.')) 60287bc3f74SBram Moolenaar norm! yl 60387bc3f74SBram Moolenaar call assert_equal('y', @0) 60487bc3f74SBram Moolenaar call assert_equal(24, winsaveview()['leftcol']) 60587bc3f74SBram Moolenaar 60687bc3f74SBram Moolenaar " Test for zH 60787bc3f74SBram Moolenaar norm! 2zH 60887bc3f74SBram Moolenaar call assert_equal(25, col('.')) 60987bc3f74SBram Moolenaar call assert_equal(10, winsaveview()['leftcol']) 61087bc3f74SBram Moolenaar norm! yl 61187bc3f74SBram Moolenaar call assert_equal('y', @0) 61287bc3f74SBram Moolenaar 61387bc3f74SBram Moolenaar " Test for zs 61487bc3f74SBram Moolenaar norm! $zs 61587bc3f74SBram Moolenaar call assert_equal(26, col('.')) 61687bc3f74SBram Moolenaar call assert_equal(25, winsaveview()['leftcol']) 61787bc3f74SBram Moolenaar norm! yl 61887bc3f74SBram Moolenaar call assert_equal('z', @0) 61987bc3f74SBram Moolenaar 62087bc3f74SBram Moolenaar " Test for ze 62187bc3f74SBram Moolenaar norm! ze 62287bc3f74SBram Moolenaar call assert_equal(26, col('.')) 62387bc3f74SBram Moolenaar call assert_equal(11, winsaveview()['leftcol']) 62487bc3f74SBram Moolenaar norm! yl 62587bc3f74SBram Moolenaar call assert_equal('z', @0) 62687bc3f74SBram Moolenaar 62787bc3f74SBram Moolenaar " cleanup 62887bc3f74SBram Moolenaar set wrap listchars=eol:$ 62987bc3f74SBram Moolenaar bw! 6302931f2a5SBram Moolenaarendfunc 63187bc3f74SBram Moolenaar 63287bc3f74SBram Moolenaarfunc! Test_normal17_z_scroll_hor2() 63387bc3f74SBram Moolenaar " basic test for z commands that scroll the window 63487bc3f74SBram Moolenaar " using 'sidescrolloff' setting 63587bc3f74SBram Moolenaar 10new 63687bc3f74SBram Moolenaar 20vsp 63787bc3f74SBram Moolenaar set nowrap listchars= sidescrolloff=5 63887bc3f74SBram Moolenaar let lineA='abcdefghijklmnopqrstuvwxyz' 63987bc3f74SBram Moolenaar let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' 64087bc3f74SBram Moolenaar $put =lineA 64187bc3f74SBram Moolenaar $put =lineB 64287bc3f74SBram Moolenaar 1d 64387bc3f74SBram Moolenaar 64487bc3f74SBram Moolenaar " Test for zl 64587bc3f74SBram Moolenaar 1 64687bc3f74SBram Moolenaar norm! 5zl 64787bc3f74SBram Moolenaar call assert_equal(lineA, getline('.')) 64887bc3f74SBram Moolenaar call assert_equal(11, col('.')) 64987bc3f74SBram Moolenaar call assert_equal(5, winsaveview()['leftcol']) 65087bc3f74SBram Moolenaar norm! yl 65187bc3f74SBram Moolenaar call assert_equal('k', @0) 65287bc3f74SBram Moolenaar 65387bc3f74SBram Moolenaar " Test for zh 65487bc3f74SBram Moolenaar norm! 2zh 65587bc3f74SBram Moolenaar call assert_equal(lineA, getline('.')) 65687bc3f74SBram Moolenaar call assert_equal(11, col('.')) 65787bc3f74SBram Moolenaar norm! yl 65887bc3f74SBram Moolenaar call assert_equal('k', @0) 65987bc3f74SBram Moolenaar call assert_equal(3, winsaveview()['leftcol']) 66087bc3f74SBram Moolenaar 66187bc3f74SBram Moolenaar " Test for zL 66287bc3f74SBram Moolenaar norm! 0zL 66387bc3f74SBram Moolenaar call assert_equal(16, col('.')) 66487bc3f74SBram Moolenaar norm! yl 66587bc3f74SBram Moolenaar call assert_equal('p', @0) 66687bc3f74SBram Moolenaar call assert_equal(10, winsaveview()['leftcol']) 66787bc3f74SBram Moolenaar norm! 2zL 66887bc3f74SBram Moolenaar call assert_equal(26, col('.')) 66987bc3f74SBram Moolenaar norm! yl 67087bc3f74SBram Moolenaar call assert_equal('z', @0) 67187bc3f74SBram Moolenaar call assert_equal(15, winsaveview()['leftcol']) 67287bc3f74SBram Moolenaar 67387bc3f74SBram Moolenaar " Test for zH 67487bc3f74SBram Moolenaar norm! 2zH 67587bc3f74SBram Moolenaar call assert_equal(15, col('.')) 67687bc3f74SBram Moolenaar call assert_equal(0, winsaveview()['leftcol']) 67787bc3f74SBram Moolenaar norm! yl 67887bc3f74SBram Moolenaar call assert_equal('o', @0) 67987bc3f74SBram Moolenaar 68087bc3f74SBram Moolenaar " Test for zs 68187bc3f74SBram Moolenaar norm! $zs 68287bc3f74SBram Moolenaar call assert_equal(26, col('.')) 68387bc3f74SBram Moolenaar call assert_equal(20, winsaveview()['leftcol']) 68487bc3f74SBram Moolenaar norm! yl 68587bc3f74SBram Moolenaar call assert_equal('z', @0) 68687bc3f74SBram Moolenaar 68787bc3f74SBram Moolenaar " Test for ze 68887bc3f74SBram Moolenaar norm! ze 68987bc3f74SBram Moolenaar call assert_equal(26, col('.')) 69087bc3f74SBram Moolenaar call assert_equal(11, winsaveview()['leftcol']) 69187bc3f74SBram Moolenaar norm! yl 69287bc3f74SBram Moolenaar call assert_equal('z', @0) 69387bc3f74SBram Moolenaar 69487bc3f74SBram Moolenaar " cleanup 69587bc3f74SBram Moolenaar set wrap listchars=eol:$ sidescrolloff=0 69687bc3f74SBram Moolenaar bw! 6972931f2a5SBram Moolenaarendfunc 69887bc3f74SBram Moolenaar 69987bc3f74SBram Moolenaarfunc! Test_normal18_z_fold() 70087bc3f74SBram Moolenaar " basic tests for foldopen/folddelete 70187bc3f74SBram Moolenaar if !has("folding") 70287bc3f74SBram Moolenaar return 70387bc3f74SBram Moolenaar endif 70487bc3f74SBram Moolenaar call Setup_NewWindow() 70587bc3f74SBram Moolenaar 50 70687bc3f74SBram Moolenaar setl foldenable fdm=marker foldlevel=5 70787bc3f74SBram Moolenaar 70887bc3f74SBram Moolenaar " Test for zF 70987bc3f74SBram Moolenaar " First fold 71087bc3f74SBram Moolenaar norm! 4zF 71187bc3f74SBram Moolenaar " check that folds have been created 71287bc3f74SBram Moolenaar call assert_equal(['50/*{{{*/', '51', '52', '53/*}}}*/'], getline(50,53)) 71387bc3f74SBram Moolenaar 71487bc3f74SBram Moolenaar " Test for zd 71587bc3f74SBram Moolenaar 51 71687bc3f74SBram Moolenaar norm! 2zF 71787bc3f74SBram Moolenaar call assert_equal(2, foldlevel('.')) 71887bc3f74SBram Moolenaar norm! kzd 71987bc3f74SBram Moolenaar call assert_equal(['50', '51/*{{{*/', '52/*}}}*/', '53'], getline(50,53)) 72087bc3f74SBram Moolenaar norm! j 72187bc3f74SBram Moolenaar call assert_equal(1, foldlevel('.')) 72287bc3f74SBram Moolenaar 72387bc3f74SBram Moolenaar " Test for zD 72487bc3f74SBram Moolenaar " also deletes partially selected folds recursively 72587bc3f74SBram Moolenaar 51 72687bc3f74SBram Moolenaar norm! zF 72787bc3f74SBram Moolenaar call assert_equal(2, foldlevel('.')) 72887bc3f74SBram Moolenaar norm! kV2jzD 72987bc3f74SBram Moolenaar call assert_equal(['50', '51', '52', '53'], getline(50,53)) 73087bc3f74SBram Moolenaar 73187bc3f74SBram Moolenaar " Test for zE 73287bc3f74SBram Moolenaar 85 73387bc3f74SBram Moolenaar norm! 4zF 73487bc3f74SBram Moolenaar 86 73587bc3f74SBram Moolenaar norm! 2zF 73687bc3f74SBram Moolenaar 90 73787bc3f74SBram Moolenaar norm! 4zF 73887bc3f74SBram Moolenaar call assert_equal(['85/*{{{*/', '86/*{{{*/', '87/*}}}*/', '88/*}}}*/', '89', '90/*{{{*/', '91', '92', '93/*}}}*/'], getline(85,93)) 73987bc3f74SBram Moolenaar norm! zE 74087bc3f74SBram Moolenaar call assert_equal(['85', '86', '87', '88', '89', '90', '91', '92', '93'], getline(85,93)) 74187bc3f74SBram Moolenaar 74287bc3f74SBram Moolenaar " Test for zn 74387bc3f74SBram Moolenaar 50 74487bc3f74SBram Moolenaar set foldlevel=0 74587bc3f74SBram Moolenaar norm! 2zF 74687bc3f74SBram Moolenaar norm! zn 74787bc3f74SBram Moolenaar norm! k 74887bc3f74SBram Moolenaar call assert_equal('49', getline('.')) 74987bc3f74SBram Moolenaar norm! j 75087bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 75187bc3f74SBram Moolenaar norm! j 75287bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 75387bc3f74SBram Moolenaar norm! j 75487bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 75587bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 75687bc3f74SBram Moolenaar 75787bc3f74SBram Moolenaar " Test for zN 75887bc3f74SBram Moolenaar 49 75987bc3f74SBram Moolenaar norm! zN 76087bc3f74SBram Moolenaar call assert_equal('49', getline('.')) 76187bc3f74SBram Moolenaar norm! j 76287bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 76387bc3f74SBram Moolenaar norm! j 76487bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 76587bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 76687bc3f74SBram Moolenaar 76787bc3f74SBram Moolenaar " Test for zi 76887bc3f74SBram Moolenaar norm! zi 76987bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 77087bc3f74SBram Moolenaar norm! zi 77187bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 77287bc3f74SBram Moolenaar norm! zi 77387bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 77487bc3f74SBram Moolenaar norm! zi 77587bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 77687bc3f74SBram Moolenaar 77787bc3f74SBram Moolenaar " Test for za 77887bc3f74SBram Moolenaar 50 77987bc3f74SBram Moolenaar norm! za 78087bc3f74SBram Moolenaar norm! k 78187bc3f74SBram Moolenaar call assert_equal('49', getline('.')) 78287bc3f74SBram Moolenaar norm! j 78387bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 78487bc3f74SBram Moolenaar norm! j 78587bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 78687bc3f74SBram Moolenaar norm! j 78787bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 78887bc3f74SBram Moolenaar 50 78987bc3f74SBram Moolenaar norm! za 79087bc3f74SBram Moolenaar norm! k 79187bc3f74SBram Moolenaar call assert_equal('49', getline('.')) 79287bc3f74SBram Moolenaar norm! j 79387bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 79487bc3f74SBram Moolenaar norm! j 79587bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 79687bc3f74SBram Moolenaar 79787bc3f74SBram Moolenaar 49 79887bc3f74SBram Moolenaar norm! 5zF 79987bc3f74SBram Moolenaar norm! k 80087bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 80187bc3f74SBram Moolenaar norm! j 80287bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 80387bc3f74SBram Moolenaar norm! j 80487bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 80587bc3f74SBram Moolenaar 49 80687bc3f74SBram Moolenaar norm! za 80787bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 80887bc3f74SBram Moolenaar norm! j 80987bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 81087bc3f74SBram Moolenaar norm! j 81187bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 81287bc3f74SBram Moolenaar set nofoldenable 81387bc3f74SBram Moolenaar " close fold and set foldenable 81487bc3f74SBram Moolenaar norm! za 81587bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 81687bc3f74SBram Moolenaar 81787bc3f74SBram Moolenaar 50 81887bc3f74SBram Moolenaar " have to use {count}za to open all folds and make the cursor visible 81987bc3f74SBram Moolenaar norm! 2za 82087bc3f74SBram Moolenaar norm! 2k 82187bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 82287bc3f74SBram Moolenaar norm! j 82387bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 82487bc3f74SBram Moolenaar norm! j 82587bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 82687bc3f74SBram Moolenaar norm! j 82787bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 82887bc3f74SBram Moolenaar norm! j 82987bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 83087bc3f74SBram Moolenaar 83187bc3f74SBram Moolenaar " Test for zA 83287bc3f74SBram Moolenaar 49 83387bc3f74SBram Moolenaar set foldlevel=0 83487bc3f74SBram Moolenaar 50 83587bc3f74SBram Moolenaar norm! zA 83687bc3f74SBram Moolenaar norm! 2k 83787bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 83887bc3f74SBram Moolenaar norm! j 83987bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 84087bc3f74SBram Moolenaar norm! j 84187bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 84287bc3f74SBram Moolenaar norm! j 84387bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 84487bc3f74SBram Moolenaar norm! j 84587bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 84687bc3f74SBram Moolenaar 847395b6babSBram Moolenaar " zA on a opened fold when foldenable is not set 84887bc3f74SBram Moolenaar 50 84987bc3f74SBram Moolenaar set nofoldenable 85087bc3f74SBram Moolenaar norm! zA 85187bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 85287bc3f74SBram Moolenaar norm! k 85387bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 85487bc3f74SBram Moolenaar norm! j 85587bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 85687bc3f74SBram Moolenaar norm! j 85787bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 85887bc3f74SBram Moolenaar 85987bc3f74SBram Moolenaar " Test for zc 86087bc3f74SBram Moolenaar norm! zE 86187bc3f74SBram Moolenaar 50 86287bc3f74SBram Moolenaar norm! 2zF 86387bc3f74SBram Moolenaar 49 86487bc3f74SBram Moolenaar norm! 5zF 86587bc3f74SBram Moolenaar set nofoldenable 86687bc3f74SBram Moolenaar 50 86787bc3f74SBram Moolenaar " There most likely is a bug somewhere: 86887bc3f74SBram Moolenaar " https://groups.google.com/d/msg/vim_dev/v2EkfJ_KQjI/u-Cvv94uCAAJ 86987bc3f74SBram Moolenaar " TODO: Should this only close the inner most fold or both folds? 87087bc3f74SBram Moolenaar norm! zc 87187bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 87287bc3f74SBram Moolenaar norm! k 87387bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 87487bc3f74SBram Moolenaar norm! j 87587bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 87687bc3f74SBram Moolenaar norm! j 87787bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 87887bc3f74SBram Moolenaar set nofoldenable 87987bc3f74SBram Moolenaar 50 88087bc3f74SBram Moolenaar norm! Vjzc 88187bc3f74SBram Moolenaar norm! k 88287bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 88387bc3f74SBram Moolenaar norm! j 88487bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 88587bc3f74SBram Moolenaar norm! j 88687bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 88787bc3f74SBram Moolenaar 88887bc3f74SBram Moolenaar " Test for zC 88987bc3f74SBram Moolenaar set nofoldenable 89087bc3f74SBram Moolenaar 50 89187bc3f74SBram Moolenaar norm! zCk 89287bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 89387bc3f74SBram Moolenaar norm! j 89487bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 89587bc3f74SBram Moolenaar norm! j 89687bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 89787bc3f74SBram Moolenaar 89887bc3f74SBram Moolenaar " Test for zx 89987bc3f74SBram Moolenaar " 1) close folds at line 49-54 90087bc3f74SBram Moolenaar set nofoldenable 90187bc3f74SBram Moolenaar 48 90287bc3f74SBram Moolenaar norm! zx 90387bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 90487bc3f74SBram Moolenaar norm! j 90587bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 90687bc3f74SBram Moolenaar norm! j 90787bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 90887bc3f74SBram Moolenaar 909395b6babSBram Moolenaar " 2) do not close fold under cursor 91087bc3f74SBram Moolenaar 51 91187bc3f74SBram Moolenaar set nofoldenable 91287bc3f74SBram Moolenaar norm! zx 91387bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 91487bc3f74SBram Moolenaar norm! 3k 91587bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 91687bc3f74SBram Moolenaar norm! j 91787bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 91887bc3f74SBram Moolenaar norm! j 91987bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 92087bc3f74SBram Moolenaar norm! j 92187bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 92287bc3f74SBram Moolenaar norm! j 92387bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 92487bc3f74SBram Moolenaar norm! j 92587bc3f74SBram Moolenaar call assert_equal('53', getline('.')) 92687bc3f74SBram Moolenaar norm! j 92787bc3f74SBram Moolenaar call assert_equal('54/*}}}*/', getline('.')) 92887bc3f74SBram Moolenaar norm! j 92987bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 93087bc3f74SBram Moolenaar 93187bc3f74SBram Moolenaar " 3) close one level of folds 93287bc3f74SBram Moolenaar 48 93387bc3f74SBram Moolenaar set nofoldenable 93487bc3f74SBram Moolenaar set foldlevel=1 93587bc3f74SBram Moolenaar norm! zx 93687bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 93787bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 93887bc3f74SBram Moolenaar norm! j 93987bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 94087bc3f74SBram Moolenaar norm! j 94187bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 94287bc3f74SBram Moolenaar norm! j 94387bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 94487bc3f74SBram Moolenaar norm! j 94587bc3f74SBram Moolenaar call assert_equal('53', getline('.')) 94687bc3f74SBram Moolenaar norm! j 94787bc3f74SBram Moolenaar call assert_equal('54/*}}}*/', getline('.')) 94887bc3f74SBram Moolenaar norm! j 94987bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 95087bc3f74SBram Moolenaar 95187bc3f74SBram Moolenaar " Test for zX 95287bc3f74SBram Moolenaar " Close all folds 95387bc3f74SBram Moolenaar set foldlevel=0 nofoldenable 95487bc3f74SBram Moolenaar 50 95587bc3f74SBram Moolenaar norm! zX 95687bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 95787bc3f74SBram Moolenaar norm! k 95887bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 95987bc3f74SBram Moolenaar norm! j 96087bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 96187bc3f74SBram Moolenaar norm! j 96287bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 96387bc3f74SBram Moolenaar 96487bc3f74SBram Moolenaar " Test for zm 96587bc3f74SBram Moolenaar 50 96687bc3f74SBram Moolenaar set nofoldenable foldlevel=2 96787bc3f74SBram Moolenaar norm! zm 96887bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 96987bc3f74SBram Moolenaar call assert_equal(1, &foldlevel) 97087bc3f74SBram Moolenaar norm! zm 97187bc3f74SBram Moolenaar call assert_equal(0, &foldlevel) 97287bc3f74SBram Moolenaar norm! zm 97387bc3f74SBram Moolenaar call assert_equal(0, &foldlevel) 97487bc3f74SBram Moolenaar norm! k 97587bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 97687bc3f74SBram Moolenaar norm! j 97787bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 97887bc3f74SBram Moolenaar norm! j 97987bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 98087bc3f74SBram Moolenaar 98187bc3f74SBram Moolenaar " Test for zM 98287bc3f74SBram Moolenaar 48 98387bc3f74SBram Moolenaar set nofoldenable foldlevel=99 98487bc3f74SBram Moolenaar norm! zM 98587bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 98687bc3f74SBram Moolenaar call assert_equal(0, &foldlevel) 98787bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 98887bc3f74SBram Moolenaar norm! j 98987bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 99087bc3f74SBram Moolenaar norm! j 99187bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 99287bc3f74SBram Moolenaar 99387bc3f74SBram Moolenaar " Test for zr 99487bc3f74SBram Moolenaar 48 99587bc3f74SBram Moolenaar set nofoldenable foldlevel=0 99687bc3f74SBram Moolenaar norm! zr 99787bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 99887bc3f74SBram Moolenaar call assert_equal(1, &foldlevel) 99987bc3f74SBram Moolenaar set foldlevel=0 foldenable 100087bc3f74SBram Moolenaar norm! zr 100187bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 100287bc3f74SBram Moolenaar call assert_equal(1, &foldlevel) 100387bc3f74SBram Moolenaar norm! zr 100487bc3f74SBram Moolenaar call assert_equal(2, &foldlevel) 100587bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 100687bc3f74SBram Moolenaar norm! j 100787bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 100887bc3f74SBram Moolenaar norm! j 100987bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 101087bc3f74SBram Moolenaar norm! j 101187bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 101287bc3f74SBram Moolenaar norm! j 101387bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 101487bc3f74SBram Moolenaar 101587bc3f74SBram Moolenaar " Test for zR 101687bc3f74SBram Moolenaar 48 101787bc3f74SBram Moolenaar set nofoldenable foldlevel=0 101887bc3f74SBram Moolenaar norm! zR 101987bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 102087bc3f74SBram Moolenaar call assert_equal(2, &foldlevel) 102187bc3f74SBram Moolenaar set foldenable foldlevel=0 102287bc3f74SBram Moolenaar norm! zR 102387bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 102487bc3f74SBram Moolenaar call assert_equal(2, &foldlevel) 102587bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 102687bc3f74SBram Moolenaar norm! j 102787bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 102887bc3f74SBram Moolenaar norm! j 102987bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 103087bc3f74SBram Moolenaar norm! j 103187bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 103287bc3f74SBram Moolenaar norm! j 103387bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 103487bc3f74SBram Moolenaar call append(50, ['a /*{{{*/', 'b /*}}}*/']) 103587bc3f74SBram Moolenaar 48 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('a /*{{{*/', getline('.')) 104387bc3f74SBram Moolenaar norm! j 104487bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 104587bc3f74SBram Moolenaar norm! j 104687bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 104787bc3f74SBram Moolenaar 48 104887bc3f74SBram Moolenaar norm! zR 104987bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 105087bc3f74SBram Moolenaar call assert_equal(3, &foldlevel) 105187bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 105287bc3f74SBram Moolenaar norm! j 105387bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 105487bc3f74SBram Moolenaar norm! j 105587bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 105687bc3f74SBram Moolenaar norm! j 105787bc3f74SBram Moolenaar call assert_equal('a /*{{{*/', getline('.')) 105887bc3f74SBram Moolenaar norm! j 105987bc3f74SBram Moolenaar call assert_equal('b /*}}}*/', getline('.')) 106087bc3f74SBram Moolenaar norm! j 106187bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 106287bc3f74SBram Moolenaar norm! j 106387bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 106487bc3f74SBram Moolenaar 106587bc3f74SBram Moolenaar " clean up 106687bc3f74SBram Moolenaar setl nofoldenable fdm=marker foldlevel=0 106787bc3f74SBram Moolenaar bw! 10682931f2a5SBram Moolenaarendfunc 106987bc3f74SBram Moolenaar 107087bc3f74SBram Moolenaarfunc! Test_normal19_z_spell() 107187bc3f74SBram Moolenaar if !has("spell") || !has('syntax') 107287bc3f74SBram Moolenaar return 107387bc3f74SBram Moolenaar endif 107487bc3f74SBram Moolenaar new 107587bc3f74SBram Moolenaar call append(0, ['1 good', '2 goood', '3 goood']) 107687bc3f74SBram Moolenaar set spell spellfile=./Xspellfile.add spelllang=en 107787bc3f74SBram Moolenaar let oldlang=v:lang 107887bc3f74SBram Moolenaar lang C 107987bc3f74SBram Moolenaar 108087bc3f74SBram Moolenaar " Test for zg 108187bc3f74SBram Moolenaar 1 108287bc3f74SBram Moolenaar norm! ]s 108387bc3f74SBram Moolenaar call assert_equal('2 goood', getline('.')) 108487bc3f74SBram Moolenaar norm! zg 108587bc3f74SBram Moolenaar 1 108687bc3f74SBram Moolenaar let a=execute('unsilent :norm! ]s') 108787bc3f74SBram Moolenaar call assert_equal('1 good', getline('.')) 108887bc3f74SBram Moolenaar call assert_equal('search hit BOTTOM, continuing at TOP', a[1:]) 108987bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 109087bc3f74SBram Moolenaar call assert_equal('goood', cnt[0]) 109187bc3f74SBram Moolenaar 109287bc3f74SBram Moolenaar " Test for zw 109387bc3f74SBram Moolenaar 2 109487bc3f74SBram Moolenaar norm! $zw 109587bc3f74SBram Moolenaar 1 109687bc3f74SBram Moolenaar norm! ]s 109787bc3f74SBram Moolenaar call assert_equal('2 goood', getline('.')) 109887bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 109987bc3f74SBram Moolenaar call assert_equal('#oood', cnt[0]) 110087bc3f74SBram Moolenaar call assert_equal('goood/!', cnt[1]) 110187bc3f74SBram Moolenaar 110287bc3f74SBram Moolenaar " Test for zg in visual mode 110387bc3f74SBram Moolenaar let a=execute('unsilent :norm! V$zg') 110487bc3f74SBram Moolenaar call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) 110587bc3f74SBram Moolenaar 1 110687bc3f74SBram Moolenaar norm! ]s 110787bc3f74SBram Moolenaar call assert_equal('3 goood', getline('.')) 110887bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 110987bc3f74SBram Moolenaar call assert_equal('2 goood', cnt[2]) 111087bc3f74SBram Moolenaar " Remove "2 good" from spellfile 111187bc3f74SBram Moolenaar 2 111287bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zw') 111387bc3f74SBram Moolenaar call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) 111487bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 111587bc3f74SBram Moolenaar call assert_equal('2 goood/!', cnt[3]) 111687bc3f74SBram Moolenaar 111787bc3f74SBram Moolenaar " Test for zG 111887bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zG') 111987bc3f74SBram Moolenaar call assert_match("Word '2 goood' added to .*", a) 112087bc3f74SBram Moolenaar let fname=matchstr(a, 'to\s\+\zs\f\+$') 112187bc3f74SBram Moolenaar let cnt=readfile(fname) 112287bc3f74SBram Moolenaar call assert_equal('2 goood', cnt[0]) 112387bc3f74SBram Moolenaar 112487bc3f74SBram Moolenaar " Test for zW 112587bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zW') 112687bc3f74SBram Moolenaar call assert_match("Word '2 goood' added to .*", a) 112787bc3f74SBram Moolenaar let cnt=readfile(fname) 112887bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 112987bc3f74SBram Moolenaar call assert_equal('2 goood/!', cnt[1]) 113087bc3f74SBram Moolenaar 113187bc3f74SBram Moolenaar " Test for zuW 113287bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zuW') 113387bc3f74SBram Moolenaar call assert_match("Word '2 goood' removed from .*", a) 113487bc3f74SBram Moolenaar let cnt=readfile(fname) 113587bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 113687bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[1]) 113787bc3f74SBram Moolenaar 113887bc3f74SBram Moolenaar " Test for zuG 113987bc3f74SBram Moolenaar let a=execute('unsilent norm! $zG') 114087bc3f74SBram Moolenaar call assert_match("Word 'goood' added to .*", a) 114187bc3f74SBram Moolenaar let cnt=readfile(fname) 114287bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 114387bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[1]) 114487bc3f74SBram Moolenaar call assert_equal('goood', cnt[2]) 114587bc3f74SBram Moolenaar let a=execute('unsilent norm! $zuG') 114687bc3f74SBram Moolenaar let cnt=readfile(fname) 114787bc3f74SBram Moolenaar call assert_match("Word 'goood' removed from .*", a) 114887bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 114987bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[1]) 115087bc3f74SBram Moolenaar call assert_equal('#oood', cnt[2]) 115187bc3f74SBram Moolenaar " word not found in wordlist 115287bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zuG') 115387bc3f74SBram Moolenaar let cnt=readfile(fname) 115487bc3f74SBram Moolenaar call assert_match("", a) 115587bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 115687bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[1]) 115787bc3f74SBram Moolenaar call assert_equal('#oood', cnt[2]) 115887bc3f74SBram Moolenaar 115987bc3f74SBram Moolenaar " Test for zug 116087bc3f74SBram Moolenaar call delete('./Xspellfile.add') 116187bc3f74SBram Moolenaar 2 116287bc3f74SBram Moolenaar let a=execute('unsilent norm! $zg') 116387bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 116487bc3f74SBram Moolenaar call assert_equal('goood', cnt[0]) 116587bc3f74SBram Moolenaar let a=execute('unsilent norm! $zug') 116687bc3f74SBram Moolenaar call assert_match("Word 'goood' removed from \./Xspellfile.add", a) 116787bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 116887bc3f74SBram Moolenaar call assert_equal('#oood', cnt[0]) 116987bc3f74SBram Moolenaar " word not in wordlist 117087bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zug') 117187bc3f74SBram Moolenaar call assert_match('', a) 117287bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 117387bc3f74SBram Moolenaar call assert_equal('#oood', cnt[0]) 117487bc3f74SBram Moolenaar 117587bc3f74SBram Moolenaar " Test for zuw 117687bc3f74SBram Moolenaar call delete('./Xspellfile.add') 117787bc3f74SBram Moolenaar 2 117887bc3f74SBram Moolenaar let a=execute('unsilent norm! Vzw') 117987bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 118087bc3f74SBram Moolenaar call assert_equal('2 goood/!', cnt[0]) 118187bc3f74SBram Moolenaar let a=execute('unsilent norm! Vzuw') 118287bc3f74SBram Moolenaar call assert_match("Word '2 goood' removed from \./Xspellfile.add", a) 118387bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 118487bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[0]) 118587bc3f74SBram Moolenaar " word not in wordlist 118687bc3f74SBram Moolenaar let a=execute('unsilent norm! $zug') 118787bc3f74SBram Moolenaar call assert_match('', a) 118887bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 118987bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[0]) 119087bc3f74SBram Moolenaar 119187bc3f74SBram Moolenaar " add second entry to spellfile setting 119287bc3f74SBram Moolenaar set spellfile=./Xspellfile.add,./Xspellfile2.add 119387bc3f74SBram Moolenaar call delete('./Xspellfile.add') 119487bc3f74SBram Moolenaar 2 119587bc3f74SBram Moolenaar let a=execute('unsilent norm! $2zg') 119687bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile2.add') 119787bc3f74SBram Moolenaar call assert_match("Word 'goood' added to ./Xspellfile2.add", a) 119887bc3f74SBram Moolenaar call assert_equal('goood', cnt[0]) 119987bc3f74SBram Moolenaar 120087bc3f74SBram Moolenaar " clean up 120187bc3f74SBram Moolenaar exe "lang" oldlang 120287bc3f74SBram Moolenaar call delete("./Xspellfile.add") 120387bc3f74SBram Moolenaar call delete("./Xspellfile2.add") 1204df0db16cSBram Moolenaar call delete("./Xspellfile.add.spl") 1205df0db16cSBram Moolenaar call delete("./Xspellfile2.add.spl") 120687bc3f74SBram Moolenaar 120787bc3f74SBram Moolenaar " zux -> no-op 120887bc3f74SBram Moolenaar 2 120987bc3f74SBram Moolenaar norm! $zux 121087bc3f74SBram Moolenaar call assert_equal([], glob('Xspellfile.add',0,1)) 121187bc3f74SBram Moolenaar call assert_equal([], glob('Xspellfile2.add',0,1)) 121287bc3f74SBram Moolenaar 121387bc3f74SBram Moolenaar set spellfile= 121487bc3f74SBram Moolenaar bw! 12152931f2a5SBram Moolenaarendfunc 121687bc3f74SBram Moolenaar 121787bc3f74SBram Moolenaarfunc! Test_normal20_exmode() 12180913a108SBram Moolenaar if !has("unix") 12190913a108SBram Moolenaar " Reading from redirected file doesn't work on MS-Windows 122087bc3f74SBram Moolenaar return 122187bc3f74SBram Moolenaar endif 122287bc3f74SBram Moolenaar call writefile(['1a', 'foo', 'bar', '.', 'w! Xfile2', 'q!'], 'Xscript') 122387bc3f74SBram Moolenaar call writefile(['1', '2'], 'Xfile') 122487bc3f74SBram Moolenaar call system(v:progpath .' -e -s < Xscript Xfile') 122587bc3f74SBram Moolenaar let a=readfile('Xfile2') 122687bc3f74SBram Moolenaar call assert_equal(['1', 'foo', 'bar', '2'], a) 122787bc3f74SBram Moolenaar 122887bc3f74SBram Moolenaar " clean up 122987bc3f74SBram Moolenaar for file in ['Xfile', 'Xfile2', 'Xscript'] 123087bc3f74SBram Moolenaar call delete(file) 123187bc3f74SBram Moolenaar endfor 123287bc3f74SBram Moolenaar bw! 12332931f2a5SBram Moolenaarendfunc 123487bc3f74SBram Moolenaar 123587bc3f74SBram Moolenaarfunc! Test_normal21_nv_hat() 123687bc3f74SBram Moolenaar set hidden 12372931f2a5SBram Moolenaar new 12382931f2a5SBram Moolenaar " to many buffers opened already, will not work 12392931f2a5SBram Moolenaar "call assert_fails(":b#", 'E23') 12402931f2a5SBram Moolenaar "call assert_equal('', @#) 124187bc3f74SBram Moolenaar e Xfoobar 124287bc3f74SBram Moolenaar e Xfile2 124387bc3f74SBram Moolenaar call feedkeys("\<c-^>", 't') 124487bc3f74SBram Moolenaar call assert_equal("Xfile2", fnamemodify(bufname('%'), ':t')) 124587bc3f74SBram Moolenaar call feedkeys("f\<c-^>", 't') 124687bc3f74SBram Moolenaar call assert_equal("Xfile2", fnamemodify(bufname('%'), ':t')) 124787bc3f74SBram Moolenaar " clean up 124887bc3f74SBram Moolenaar set nohidden 124987bc3f74SBram Moolenaar bw! 12502931f2a5SBram Moolenaarendfunc 125187bc3f74SBram Moolenaar 125287bc3f74SBram Moolenaarfunc! Test_normal22_zet() 125387bc3f74SBram Moolenaar " Test for ZZ 12540913a108SBram Moolenaar " let shell = &shell 12550913a108SBram Moolenaar " let &shell = 'sh' 125687bc3f74SBram Moolenaar call writefile(['1', '2'], 'Xfile') 125787bc3f74SBram Moolenaar let args = ' -u NONE -N -U NONE -i NONE --noplugins -X --not-a-term' 125887bc3f74SBram Moolenaar call system(v:progpath . args . ' -c "%d" -c ":norm! ZZ" Xfile') 125987bc3f74SBram Moolenaar let a = readfile('Xfile') 126087bc3f74SBram Moolenaar call assert_equal([], a) 126187bc3f74SBram Moolenaar " Test for ZQ 126287bc3f74SBram Moolenaar call writefile(['1', '2'], 'Xfile') 126387bc3f74SBram Moolenaar call system(v:progpath . args . ' -c "%d" -c ":norm! ZQ" Xfile') 126487bc3f74SBram Moolenaar let a = readfile('Xfile') 126587bc3f74SBram Moolenaar call assert_equal(['1', '2'], a) 126687bc3f74SBram Moolenaar 126787bc3f74SBram Moolenaar " clean up 126887bc3f74SBram Moolenaar for file in ['Xfile'] 126987bc3f74SBram Moolenaar call delete(file) 127087bc3f74SBram Moolenaar endfor 12710913a108SBram Moolenaar " let &shell = shell 12722931f2a5SBram Moolenaarendfunc 127387bc3f74SBram Moolenaar 127487bc3f74SBram Moolenaarfunc! Test_normal23_K() 127587bc3f74SBram Moolenaar " Test for K command 127687bc3f74SBram Moolenaar new 1277426f3754SBram Moolenaar call append(0, ['version8.txt', 'man', 'aa%bb', 'cc|dd']) 127887bc3f74SBram Moolenaar let k = &keywordprg 127987bc3f74SBram Moolenaar set keywordprg=:help 128087bc3f74SBram Moolenaar 1 128187bc3f74SBram Moolenaar norm! VK 128287bc3f74SBram Moolenaar call assert_equal('version8.txt', fnamemodify(bufname('%'), ':t')) 128387bc3f74SBram Moolenaar call assert_equal('help', &ft) 128487bc3f74SBram Moolenaar call assert_match('\*version8.txt\*', getline('.')) 128587bc3f74SBram Moolenaar helpclose 128687bc3f74SBram Moolenaar norm! 0K 128787bc3f74SBram Moolenaar call assert_equal('version8.txt', fnamemodify(bufname('%'), ':t')) 128887bc3f74SBram Moolenaar call assert_equal('help', &ft) 128987bc3f74SBram Moolenaar call assert_match('\*version8\.0\*', getline('.')) 129087bc3f74SBram Moolenaar helpclose 129187bc3f74SBram Moolenaar 1292426f3754SBram Moolenaar set keywordprg=:new 1293426f3754SBram Moolenaar set iskeyword+=% 1294426f3754SBram Moolenaar set iskeyword+=\| 1295426f3754SBram Moolenaar 2 1296426f3754SBram Moolenaar norm! K 1297426f3754SBram Moolenaar call assert_equal('man', fnamemodify(bufname('%'), ':t')) 1298426f3754SBram Moolenaar bwipe! 1299426f3754SBram Moolenaar 3 1300426f3754SBram Moolenaar norm! K 1301426f3754SBram Moolenaar call assert_equal('aa%bb', fnamemodify(bufname('%'), ':t')) 1302426f3754SBram Moolenaar bwipe! 1303eb828d01SBram Moolenaar if !has('win32') 1304426f3754SBram Moolenaar 4 1305426f3754SBram Moolenaar norm! K 1306426f3754SBram Moolenaar call assert_equal('cc|dd', fnamemodify(bufname('%'), ':t')) 1307426f3754SBram Moolenaar bwipe! 1308eb828d01SBram Moolenaar endif 1309426f3754SBram Moolenaar set iskeyword-=% 1310426f3754SBram Moolenaar set iskeyword-=\| 1311426f3754SBram Moolenaar 13120913a108SBram Moolenaar " Only expect "man" to work on Unix 13130913a108SBram Moolenaar if !has("unix") 131487bc3f74SBram Moolenaar let &keywordprg = k 131587bc3f74SBram Moolenaar bw! 131687bc3f74SBram Moolenaar return 131787bc3f74SBram Moolenaar endif 131887bc3f74SBram Moolenaar set keywordprg=man\ --pager=cat 131987bc3f74SBram Moolenaar " Test for using man 132087bc3f74SBram Moolenaar 2 132187bc3f74SBram Moolenaar let a = execute('unsilent norm! K') 132287bc3f74SBram Moolenaar call assert_match("man --pager=cat 'man'", a) 132387bc3f74SBram Moolenaar 132487bc3f74SBram Moolenaar " clean up 132587bc3f74SBram Moolenaar let &keywordprg = k 132687bc3f74SBram Moolenaar bw! 13272931f2a5SBram Moolenaarendfunc 132887bc3f74SBram Moolenaar 132987bc3f74SBram Moolenaarfunc! Test_normal24_rot13() 133087bc3f74SBram Moolenaar " This test uses multi byte characters 133187bc3f74SBram Moolenaar if !has("multi_byte") 133287bc3f74SBram Moolenaar return 133387bc3f74SBram Moolenaar endif 133487bc3f74SBram Moolenaar " Testing for g?? g?g? 133587bc3f74SBram Moolenaar new 133687bc3f74SBram Moolenaar call append(0, 'abcdefghijklmnopqrstuvwxyzäüö') 133787bc3f74SBram Moolenaar 1 133887bc3f74SBram Moolenaar norm! g?? 133987bc3f74SBram Moolenaar call assert_equal('nopqrstuvwxyzabcdefghijklmäüö', getline('.')) 134087bc3f74SBram Moolenaar norm! g?g? 134187bc3f74SBram Moolenaar call assert_equal('abcdefghijklmnopqrstuvwxyzäüö', getline('.')) 134287bc3f74SBram Moolenaar 134387bc3f74SBram Moolenaar " clean up 134487bc3f74SBram Moolenaar bw! 13452931f2a5SBram Moolenaarendfunc 134687bc3f74SBram Moolenaar 134787bc3f74SBram Moolenaarfunc! Test_normal25_tag() 134887bc3f74SBram Moolenaar " Testing for CTRL-] g CTRL-] g] 134987bc3f74SBram Moolenaar " CTRL-W g] CTRL-W CTRL-] CTRL-W g CTRL-] 135087bc3f74SBram Moolenaar h 135187bc3f74SBram Moolenaar " Test for CTRL-] 135287bc3f74SBram Moolenaar call search('\<x\>$') 135387bc3f74SBram Moolenaar exe "norm! \<c-]>" 135487bc3f74SBram Moolenaar call assert_equal("change.txt", fnamemodify(bufname('%'), ':t')) 135587bc3f74SBram Moolenaar norm! yiW 135687bc3f74SBram Moolenaar call assert_equal("*x*", @0) 135787bc3f74SBram Moolenaar exe ":norm \<c-o>" 135887bc3f74SBram Moolenaar 135987bc3f74SBram Moolenaar " Test for g_CTRL-] 136087bc3f74SBram Moolenaar call search('\<v_u\>$') 136187bc3f74SBram Moolenaar exe "norm! g\<c-]>" 136287bc3f74SBram Moolenaar call assert_equal("change.txt", fnamemodify(bufname('%'), ':t')) 136387bc3f74SBram Moolenaar norm! yiW 136487bc3f74SBram Moolenaar call assert_equal("*v_u*", @0) 136587bc3f74SBram Moolenaar exe ":norm \<c-o>" 136687bc3f74SBram Moolenaar 136787bc3f74SBram Moolenaar " Test for g] 136887bc3f74SBram Moolenaar call search('\<i_<Esc>$') 136987bc3f74SBram Moolenaar let a = execute(":norm! g]") 137087bc3f74SBram Moolenaar call assert_match('i_<Esc>.*insert.txt', a) 137187bc3f74SBram Moolenaar 137287bc3f74SBram Moolenaar if !empty(exepath('cscope')) && has('cscope') 137387bc3f74SBram Moolenaar " setting cscopetag changes how g] works 137487bc3f74SBram Moolenaar set cst 137587bc3f74SBram Moolenaar exe "norm! g]" 137687bc3f74SBram Moolenaar call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t')) 137787bc3f74SBram Moolenaar norm! yiW 137887bc3f74SBram Moolenaar call assert_equal("*i_<Esc>*", @0) 137987bc3f74SBram Moolenaar exe ":norm \<c-o>" 138087bc3f74SBram Moolenaar " Test for CTRL-W g] 138187bc3f74SBram Moolenaar exe "norm! \<C-W>g]" 138287bc3f74SBram Moolenaar call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t')) 138387bc3f74SBram Moolenaar norm! yiW 138487bc3f74SBram Moolenaar call assert_equal("*i_<Esc>*", @0) 138587bc3f74SBram Moolenaar call assert_equal(3, winnr('$')) 138687bc3f74SBram Moolenaar helpclose 138787bc3f74SBram Moolenaar set nocst 138887bc3f74SBram Moolenaar endif 138987bc3f74SBram Moolenaar 139087bc3f74SBram Moolenaar " Test for CTRL-W g] 139187bc3f74SBram Moolenaar let a = execute("norm! \<C-W>g]") 139287bc3f74SBram Moolenaar call assert_match('i_<Esc>.*insert.txt', a) 139387bc3f74SBram Moolenaar 139487bc3f74SBram Moolenaar " Test for CTRL-W CTRL-] 139587bc3f74SBram Moolenaar exe "norm! \<C-W>\<C-]>" 139687bc3f74SBram Moolenaar call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t')) 139787bc3f74SBram Moolenaar norm! yiW 139887bc3f74SBram Moolenaar call assert_equal("*i_<Esc>*", @0) 139987bc3f74SBram Moolenaar call assert_equal(3, winnr('$')) 140087bc3f74SBram Moolenaar helpclose 140187bc3f74SBram Moolenaar 140287bc3f74SBram Moolenaar " Test for CTRL-W g CTRL-] 140387bc3f74SBram Moolenaar exe "norm! \<C-W>g\<C-]>" 140487bc3f74SBram Moolenaar call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t')) 140587bc3f74SBram Moolenaar norm! yiW 140687bc3f74SBram Moolenaar call assert_equal("*i_<Esc>*", @0) 140787bc3f74SBram Moolenaar call assert_equal(3, winnr('$')) 140887bc3f74SBram Moolenaar helpclose 140987bc3f74SBram Moolenaar 141087bc3f74SBram Moolenaar " clean up 141187bc3f74SBram Moolenaar helpclose 14122931f2a5SBram Moolenaarendfunc 141387bc3f74SBram Moolenaar 141487bc3f74SBram Moolenaarfunc! Test_normal26_put() 141587bc3f74SBram Moolenaar " Test for ]p ]P [p and [P 141687bc3f74SBram Moolenaar new 141787bc3f74SBram Moolenaar call append(0, ['while read LINE', 'do', ' ((count++))', ' if [ $? -ne 0 ]; then', " echo 'Error writing file'", ' fi', 'done']) 141887bc3f74SBram Moolenaar 1 141987bc3f74SBram Moolenaar /Error/y a 142087bc3f74SBram Moolenaar 2 142187bc3f74SBram Moolenaar norm! "a]pj"a[p 142287bc3f74SBram Moolenaar call assert_equal(['do', "echo 'Error writing file'", " echo 'Error writing file'", ' ((count++))'], getline(2,5)) 142387bc3f74SBram Moolenaar 1 142487bc3f74SBram Moolenaar /^\s\{4}/ 142587bc3f74SBram Moolenaar exe "norm! \"a]P3Eldt'" 142687bc3f74SBram Moolenaar exe "norm! j\"a[P2Eldt'" 142787bc3f74SBram Moolenaar call assert_equal([' if [ $? -ne 0 ]; then', " echo 'Error writing'", " echo 'Error'", " echo 'Error writing file'", ' fi'], getline(6,10)) 142887bc3f74SBram Moolenaar 142987bc3f74SBram Moolenaar " clean up 143087bc3f74SBram Moolenaar bw! 14312931f2a5SBram Moolenaarendfunc 143287bc3f74SBram Moolenaar 143387bc3f74SBram Moolenaarfunc! Test_normal27_bracket() 143487bc3f74SBram Moolenaar " Test for [' [` ]' ]` 143587bc3f74SBram Moolenaar call Setup_NewWindow() 143687bc3f74SBram Moolenaar 1,21s/.\+/ & b/ 143787bc3f74SBram Moolenaar 1 143887bc3f74SBram Moolenaar norm! $ma 143987bc3f74SBram Moolenaar 5 144087bc3f74SBram Moolenaar norm! $mb 144187bc3f74SBram Moolenaar 10 144287bc3f74SBram Moolenaar norm! $mc 144387bc3f74SBram Moolenaar 15 144487bc3f74SBram Moolenaar norm! $md 144587bc3f74SBram Moolenaar 20 144687bc3f74SBram Moolenaar norm! $me 144787bc3f74SBram Moolenaar 144887bc3f74SBram Moolenaar " Test for [' 144987bc3f74SBram Moolenaar 9 145087bc3f74SBram Moolenaar norm! 2[' 145187bc3f74SBram Moolenaar call assert_equal(' 1 b', getline('.')) 145287bc3f74SBram Moolenaar call assert_equal(1, line('.')) 145387bc3f74SBram Moolenaar call assert_equal(3, col('.')) 145487bc3f74SBram Moolenaar 145587bc3f74SBram Moolenaar " Test for ]' 145687bc3f74SBram Moolenaar norm! ]' 145787bc3f74SBram Moolenaar call assert_equal(' 5 b', getline('.')) 145887bc3f74SBram Moolenaar call assert_equal(5, line('.')) 145987bc3f74SBram Moolenaar call assert_equal(3, col('.')) 146087bc3f74SBram Moolenaar 146187bc3f74SBram Moolenaar " No mark after line 21, cursor moves to first non blank on current line 146287bc3f74SBram Moolenaar 21 146387bc3f74SBram Moolenaar norm! $]' 146487bc3f74SBram Moolenaar call assert_equal(' 21 b', getline('.')) 146587bc3f74SBram Moolenaar call assert_equal(21, line('.')) 146687bc3f74SBram Moolenaar call assert_equal(3, col('.')) 146787bc3f74SBram Moolenaar 146887bc3f74SBram Moolenaar " Test for [` 146987bc3f74SBram Moolenaar norm! 2[` 147087bc3f74SBram Moolenaar call assert_equal(' 15 b', getline('.')) 147187bc3f74SBram Moolenaar call assert_equal(15, line('.')) 147287bc3f74SBram Moolenaar call assert_equal(8, col('.')) 147387bc3f74SBram Moolenaar 147487bc3f74SBram Moolenaar " Test for ]` 147587bc3f74SBram Moolenaar norm! ]` 147687bc3f74SBram Moolenaar call assert_equal(' 20 b', getline('.')) 147787bc3f74SBram Moolenaar call assert_equal(20, line('.')) 147887bc3f74SBram Moolenaar call assert_equal(8, col('.')) 147987bc3f74SBram Moolenaar 148087bc3f74SBram Moolenaar " clean up 148187bc3f74SBram Moolenaar bw! 14822931f2a5SBram Moolenaarendfunc 148387bc3f74SBram Moolenaar 148487bc3f74SBram Moolenaarfunc! Test_normal28_parenthesis() 148587bc3f74SBram Moolenaar " basic testing for ( and ) 148687bc3f74SBram Moolenaar new 148787bc3f74SBram Moolenaar call append(0, ['This is a test. With some sentences!', '', 'Even with a question? And one more. And no sentence here']) 148887bc3f74SBram Moolenaar 148987bc3f74SBram Moolenaar $ 149087bc3f74SBram Moolenaar norm! d( 149187bc3f74SBram Moolenaar call assert_equal(['This is a test. With some sentences!', '', 'Even with a question? And one more. ', ''], getline(1, '$')) 149287bc3f74SBram Moolenaar norm! 2d( 149387bc3f74SBram Moolenaar call assert_equal(['This is a test. With some sentences!', '', ' ', ''], getline(1, '$')) 149487bc3f74SBram Moolenaar 1 149587bc3f74SBram Moolenaar norm! 0d) 149687bc3f74SBram Moolenaar call assert_equal(['With some sentences!', '', ' ', ''], getline(1, '$')) 149787bc3f74SBram Moolenaar 149887bc3f74SBram Moolenaar call append('$', ['This is a long sentence', '', 'spanning', 'over several lines. ']) 149987bc3f74SBram Moolenaar $ 150087bc3f74SBram Moolenaar norm! $d( 150187bc3f74SBram Moolenaar call assert_equal(['With some sentences!', '', ' ', '', 'This is a long sentence', ''], getline(1, '$')) 150287bc3f74SBram Moolenaar 150387bc3f74SBram Moolenaar " clean up 150487bc3f74SBram Moolenaar bw! 15052931f2a5SBram Moolenaarendfunc 150687bc3f74SBram Moolenaar 150787bc3f74SBram Moolenaarfun! Test_normal29_brace() 150887bc3f74SBram Moolenaar " basic test for { and } movements 150987bc3f74SBram Moolenaar let text= ['A paragraph begins after each empty line, and also at each of a set of', 151087bc3f74SBram Moolenaar \ 'paragraph macros, specified by the pairs of characters in the ''paragraphs''', 151187bc3f74SBram Moolenaar \ 'option. The default is "IPLPPPQPP TPHPLIPpLpItpplpipbp", which corresponds to', 151287bc3f74SBram Moolenaar \ 'the macros ".IP", ".LP", etc. (These are nroff macros, so the dot must be in', 151387bc3f74SBram Moolenaar \ 'the first column). A section boundary is also a paragraph boundary.', 151487bc3f74SBram Moolenaar \ 'Note that a blank line (only containing white space) is NOT a paragraph', 151587bc3f74SBram Moolenaar \ 'boundary.', 151687bc3f74SBram Moolenaar \ '', 151787bc3f74SBram Moolenaar \ '', 151887bc3f74SBram Moolenaar \ 'Also note that this does not include a ''{'' or ''}'' in the first column. When', 151987bc3f74SBram Moolenaar \ 'the ''{'' flag is in ''cpoptions'' then ''{'' in the first column is used as a', 152087bc3f74SBram Moolenaar \ 'paragraph boundary |posix|.', 152187bc3f74SBram Moolenaar \ '{', 152287bc3f74SBram Moolenaar \ 'This is no paragaraph', 152387bc3f74SBram Moolenaar \ 'unless the ''{'' is set', 152487bc3f74SBram Moolenaar \ 'in ''cpoptions''', 152587bc3f74SBram Moolenaar \ '}', 152687bc3f74SBram Moolenaar \ '.IP', 152787bc3f74SBram Moolenaar \ 'The nroff macros IP seperates a paragraph', 152887bc3f74SBram Moolenaar \ 'That means, it must be a ''.''', 152987bc3f74SBram Moolenaar \ 'followed by IP', 153087bc3f74SBram Moolenaar \ '.LPIt does not matter, if afterwards some', 153187bc3f74SBram Moolenaar \ 'more characters follow.', 153287bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 153387bc3f74SBram Moolenaar \ 'macros terminate a paragraph. That means', 153487bc3f74SBram Moolenaar \ 'a character like this:', 153587bc3f74SBram Moolenaar \ '.NH', 153687bc3f74SBram Moolenaar \ 'End of text here'] 153787bc3f74SBram Moolenaar new 153887bc3f74SBram Moolenaar call append(0, text) 153987bc3f74SBram Moolenaar 1 154087bc3f74SBram Moolenaar norm! 0d2} 154187bc3f74SBram Moolenaar call assert_equal(['.IP', 154287bc3f74SBram Moolenaar \ 'The nroff macros IP seperates a paragraph', 'That means, it must be a ''.''', 'followed by IP', 154387bc3f74SBram Moolenaar \ '.LPIt does not matter, if afterwards some', 'more characters follow.', '.SHAlso section boundaries from the nroff', 154487bc3f74SBram Moolenaar \ 'macros terminate a paragraph. That means', 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$')) 154587bc3f74SBram Moolenaar norm! 0d} 154687bc3f74SBram Moolenaar call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.', 154787bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 154887bc3f74SBram Moolenaar \ 'a character like this:', '.NH', 'End of text here', ''], getline(1, '$')) 154987bc3f74SBram Moolenaar $ 155087bc3f74SBram Moolenaar norm! d{ 155187bc3f74SBram Moolenaar call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.', 155287bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 'a character like this:', ''], getline(1, '$')) 155387bc3f74SBram Moolenaar norm! d{ 155487bc3f74SBram Moolenaar call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.', ''], getline(1,'$')) 155587bc3f74SBram Moolenaar " Test with { in cpooptions 155687bc3f74SBram Moolenaar %d 155787bc3f74SBram Moolenaar call append(0, text) 155887bc3f74SBram Moolenaar set cpo+={ 155987bc3f74SBram Moolenaar 1 156087bc3f74SBram Moolenaar norm! 0d2} 156187bc3f74SBram Moolenaar call assert_equal(['{', 'This is no paragaraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}', 156287bc3f74SBram Moolenaar \ '.IP', 'The nroff macros IP seperates a paragraph', 'That means, it must be a ''.''', 156387bc3f74SBram Moolenaar \ 'followed by IP', '.LPIt does not matter, if afterwards some', 'more characters follow.', 156487bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 156587bc3f74SBram Moolenaar \ 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$')) 156687bc3f74SBram Moolenaar $ 156787bc3f74SBram Moolenaar norm! d} 156887bc3f74SBram Moolenaar call assert_equal(['{', 'This is no paragaraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}', 156987bc3f74SBram Moolenaar \ '.IP', 'The nroff macros IP seperates a paragraph', 'That means, it must be a ''.''', 157087bc3f74SBram Moolenaar \ 'followed by IP', '.LPIt does not matter, if afterwards some', 'more characters follow.', 157187bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 157287bc3f74SBram Moolenaar \ 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$')) 157387bc3f74SBram Moolenaar norm! gg} 157487bc3f74SBram Moolenaar norm! d5} 157587bc3f74SBram Moolenaar call assert_equal(['{', 'This is no paragaraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}', ''], getline(1,'$')) 157687bc3f74SBram Moolenaar 157787bc3f74SBram Moolenaar " clean up 157887bc3f74SBram Moolenaar set cpo-={ 157987bc3f74SBram Moolenaar bw! 15802931f2a5SBram Moolenaarendfunc 158187bc3f74SBram Moolenaar 158287bc3f74SBram Moolenaarfun! Test_normal30_changecase() 158387bc3f74SBram Moolenaar " This test uses multi byte characters 158487bc3f74SBram Moolenaar if !has("multi_byte") 158587bc3f74SBram Moolenaar return 158687bc3f74SBram Moolenaar endif 158787bc3f74SBram Moolenaar new 158887bc3f74SBram Moolenaar call append(0, 'This is a simple test: äüöß') 158987bc3f74SBram Moolenaar norm! 1ggVu 159087bc3f74SBram Moolenaar call assert_equal('this is a simple test: äüöß', getline('.')) 159187bc3f74SBram Moolenaar norm! VU 159287bc3f74SBram Moolenaar call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.')) 159387bc3f74SBram Moolenaar norm! guu 159487bc3f74SBram Moolenaar call assert_equal('this is a simple test: äüöss', getline('.')) 159587bc3f74SBram Moolenaar norm! gUgU 159687bc3f74SBram Moolenaar call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.')) 159787bc3f74SBram Moolenaar norm! gugu 159887bc3f74SBram Moolenaar call assert_equal('this is a simple test: äüöss', getline('.')) 159987bc3f74SBram Moolenaar norm! gUU 160087bc3f74SBram Moolenaar call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.')) 160187bc3f74SBram Moolenaar norm! 010~ 160287bc3f74SBram Moolenaar call assert_equal('this is a SIMPLE TEST: ÄÜÖSS', getline('.')) 160387bc3f74SBram Moolenaar norm! V~ 160487bc3f74SBram Moolenaar call assert_equal('THIS IS A simple test: äüöss', getline('.')) 160587bc3f74SBram Moolenaar 16069f4de1f5SBram Moolenaar " Turkish ASCII turns to multi-byte. On Mac the Turkish locale is available 16079f4de1f5SBram Moolenaar " but toupper()/tolower() don't do the right thing. 1608*d2381a2cSBram Moolenaar if !has('mac') && !has('osx') 16093317d5ebSBram Moolenaar try 16103317d5ebSBram Moolenaar lang tr_TR.UTF-8 16113317d5ebSBram Moolenaar set casemap= 16123317d5ebSBram Moolenaar call setline(1, 'iI') 16133317d5ebSBram Moolenaar 1normal gUU 16143317d5ebSBram Moolenaar call assert_equal("\u0130I", getline(1)) 16153317d5ebSBram Moolenaar call assert_equal("\u0130I", toupper("iI")) 16163317d5ebSBram Moolenaar 16173317d5ebSBram Moolenaar call setline(1, 'iI') 16183317d5ebSBram Moolenaar 1normal guu 16193317d5ebSBram Moolenaar call assert_equal("i\u0131", getline(1)) 16203317d5ebSBram Moolenaar call assert_equal("i\u0131", tolower("iI")) 16213317d5ebSBram Moolenaar 16221cc48206SBram Moolenaar set casemap& 16231cc48206SBram Moolenaar call setline(1, 'iI') 16241cc48206SBram Moolenaar 1normal gUU 16251cc48206SBram Moolenaar call assert_equal("II", getline(1)) 16261cc48206SBram Moolenaar call assert_equal("II", toupper("iI")) 16271cc48206SBram Moolenaar 16281cc48206SBram Moolenaar call setline(1, 'iI') 16291cc48206SBram Moolenaar 1normal guu 16301cc48206SBram Moolenaar call assert_equal("ii", getline(1)) 16311cc48206SBram Moolenaar call assert_equal("ii", tolower("iI")) 16321cc48206SBram Moolenaar 16333317d5ebSBram Moolenaar lang en_US.UTF-8 16343317d5ebSBram Moolenaar catch /E197:/ 16353317d5ebSBram Moolenaar " can't use Turkish locale 16363317d5ebSBram Moolenaar throw 'Skipped: Turkish locale not available' 16373317d5ebSBram Moolenaar endtry 16389f4de1f5SBram Moolenaar endif 16393317d5ebSBram Moolenaar 164087bc3f74SBram Moolenaar " clean up 164187bc3f74SBram Moolenaar bw! 16422931f2a5SBram Moolenaarendfunc 164387bc3f74SBram Moolenaar 164487bc3f74SBram Moolenaarfun! Test_normal31_r_cmd() 164587bc3f74SBram Moolenaar " Test for r command 164687bc3f74SBram Moolenaar new 164787bc3f74SBram Moolenaar call append(0, 'This is a simple test: abcd') 164887bc3f74SBram Moolenaar exe "norm! 1gg$r\<cr>" 164987bc3f74SBram Moolenaar call assert_equal(['This is a simple test: abc', '', ''], getline(1,'$')) 165087bc3f74SBram Moolenaar exe "norm! 1gg2wlr\<cr>" 165187bc3f74SBram Moolenaar call assert_equal(['This is a', 'simple test: abc', '', ''], getline(1,'$')) 165287bc3f74SBram Moolenaar exe "norm! 2gg0W5r\<cr>" 165387bc3f74SBram Moolenaar call assert_equal(['This is a', 'simple ', ' abc', '', ''], getline('1', '$')) 165487bc3f74SBram Moolenaar set autoindent 165587bc3f74SBram Moolenaar call setline(2, ['simple test: abc', '']) 165687bc3f74SBram Moolenaar exe "norm! 2gg0W5r\<cr>" 165787bc3f74SBram Moolenaar call assert_equal(['This is a', 'simple ', 'abc', '', '', ''], getline('1', '$')) 165887bc3f74SBram Moolenaar exe "norm! 1ggVr\<cr>" 165987bc3f74SBram Moolenaar call assert_equal('^M^M^M^M^M^M^M^M^M', strtrans(getline(1))) 166087bc3f74SBram Moolenaar call setline(1, 'This is a') 166187bc3f74SBram Moolenaar exe "norm! 1gg05rf" 166287bc3f74SBram Moolenaar call assert_equal('fffffis a', getline(1)) 166387bc3f74SBram Moolenaar 166487bc3f74SBram Moolenaar " clean up 166587bc3f74SBram Moolenaar set noautoindent 166687bc3f74SBram Moolenaar bw! 16672931f2a5SBram Moolenaarendfunc 166887bc3f74SBram Moolenaar 166987bc3f74SBram Moolenaarfunc! Test_normal32_g_cmd1() 167087bc3f74SBram Moolenaar " Test for g*, g# 167187bc3f74SBram Moolenaar new 167287bc3f74SBram Moolenaar call append(0, ['abc.x_foo', 'x_foobar.abc']) 167387bc3f74SBram Moolenaar 1 167487bc3f74SBram Moolenaar norm! $g* 167587bc3f74SBram Moolenaar call assert_equal('x_foo', @/) 167687bc3f74SBram Moolenaar call assert_equal('x_foobar.abc', getline('.')) 167787bc3f74SBram Moolenaar norm! $g# 167887bc3f74SBram Moolenaar call assert_equal('abc', @/) 167987bc3f74SBram Moolenaar call assert_equal('abc.x_foo', getline('.')) 168087bc3f74SBram Moolenaar 168187bc3f74SBram Moolenaar " clean up 168287bc3f74SBram Moolenaar bw! 16832931f2a5SBram Moolenaarendfunc 168487bc3f74SBram Moolenaar 168587bc3f74SBram Moolenaarfun! Test_normal33_g_cmd2() 168687bc3f74SBram Moolenaar if !has("jumplist") 168787bc3f74SBram Moolenaar return 168887bc3f74SBram Moolenaar endif 168987bc3f74SBram Moolenaar " Tests for g cmds 169087bc3f74SBram Moolenaar call Setup_NewWindow() 169187bc3f74SBram Moolenaar " Test for g` 169287bc3f74SBram Moolenaar clearjumps 169387bc3f74SBram Moolenaar norm! ma10j 169487bc3f74SBram Moolenaar let a=execute(':jumps') 169587bc3f74SBram Moolenaar " empty jumplist 169687bc3f74SBram Moolenaar call assert_equal('>', a[-1:]) 169787bc3f74SBram Moolenaar norm! g`a 169887bc3f74SBram Moolenaar call assert_equal('>', a[-1:]) 169987bc3f74SBram Moolenaar call assert_equal(1, line('.')) 170087bc3f74SBram Moolenaar call assert_equal('1', getline('.')) 170187bc3f74SBram Moolenaar 170287bc3f74SBram Moolenaar " Test for g; and g, 170387bc3f74SBram Moolenaar norm! g; 170487bc3f74SBram Moolenaar " there is only one change in the changelist 170587bc3f74SBram Moolenaar " currently, when we setup the window 170687bc3f74SBram Moolenaar call assert_equal(2, line('.')) 170787bc3f74SBram Moolenaar call assert_fails(':norm! g;', 'E662') 170887bc3f74SBram Moolenaar call assert_fails(':norm! g,', 'E663') 170987bc3f74SBram Moolenaar let &ul=&ul 171087bc3f74SBram Moolenaar call append('$', ['a', 'b', 'c', 'd']) 171187bc3f74SBram Moolenaar let &ul=&ul 171287bc3f74SBram Moolenaar call append('$', ['Z', 'Y', 'X', 'W']) 171387bc3f74SBram Moolenaar let a = execute(':changes') 171487bc3f74SBram Moolenaar call assert_match('2\s\+0\s\+2', a) 171587bc3f74SBram Moolenaar call assert_match('101\s\+0\s\+a', a) 171687bc3f74SBram Moolenaar call assert_match('105\s\+0\s\+Z', a) 171787bc3f74SBram Moolenaar norm! 3g; 171887bc3f74SBram Moolenaar call assert_equal(2, line('.')) 171987bc3f74SBram Moolenaar norm! 2g, 172087bc3f74SBram Moolenaar call assert_equal(105, line('.')) 172187bc3f74SBram Moolenaar 172287bc3f74SBram Moolenaar " Test for g& - global substitute 172387bc3f74SBram Moolenaar %d 172487bc3f74SBram Moolenaar call setline(1, range(1,10)) 172587bc3f74SBram Moolenaar call append('$', ['a', 'b', 'c', 'd']) 172687bc3f74SBram Moolenaar $s/\w/&&/g 172787bc3f74SBram Moolenaar exe "norm! /[1-8]\<cr>" 172887bc3f74SBram Moolenaar norm! g& 172987bc3f74SBram Moolenaar call assert_equal(['11', '22', '33', '44', '55', '66', '77', '88', '9', '110', 'a', 'b', 'c', 'dd'], getline(1, '$')) 173087bc3f74SBram Moolenaar 173187bc3f74SBram Moolenaar " Test for gv 173287bc3f74SBram Moolenaar %d 173387bc3f74SBram Moolenaar call append('$', repeat(['abcdefgh'], 8)) 173487bc3f74SBram Moolenaar exe "norm! 2gg02l\<c-v>2j2ly" 173587bc3f74SBram Moolenaar call assert_equal(['cde', 'cde', 'cde'], getreg(0, 1, 1)) 173687bc3f74SBram Moolenaar " in visual mode, gv swaps current and last selected region 173787bc3f74SBram Moolenaar exe "norm! G0\<c-v>4k4lgvd" 173887bc3f74SBram Moolenaar call assert_equal(['', 'abfgh', 'abfgh', 'abfgh', 'abcdefgh', 'abcdefgh', 'abcdefgh', 'abcdefgh', 'abcdefgh'], getline(1,'$')) 173987bc3f74SBram Moolenaar exe "norm! G0\<c-v>4k4ly" 174087bc3f74SBram Moolenaar exe "norm! gvood" 174187bc3f74SBram Moolenaar call assert_equal(['', 'abfgh', 'abfgh', 'abfgh', 'fgh', 'fgh', 'fgh', 'fgh', 'fgh'], getline(1,'$')) 174287bc3f74SBram Moolenaar 174387bc3f74SBram Moolenaar " Test for gk/gj 174487bc3f74SBram Moolenaar %d 174587bc3f74SBram Moolenaar 15vsp 174687bc3f74SBram Moolenaar set wrap listchars= sbr= 174787bc3f74SBram Moolenaar let lineA='abcdefghijklmnopqrstuvwxyz' 174887bc3f74SBram Moolenaar let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' 174987bc3f74SBram Moolenaar $put =lineA 175087bc3f74SBram Moolenaar $put =lineB 175187bc3f74SBram Moolenaar 175287bc3f74SBram Moolenaar norm! 3gg0dgk 175387bc3f74SBram Moolenaar call assert_equal(['', 'abcdefghijklmno', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'], getline(1, '$')) 175487bc3f74SBram Moolenaar set nu 175587bc3f74SBram Moolenaar norm! 3gg0gjdgj 175687bc3f74SBram Moolenaar call assert_equal(['', 'abcdefghijklmno', '0123456789AMNOPQRSTUVWXYZ'], getline(1,'$')) 175787bc3f74SBram Moolenaar 175887bc3f74SBram Moolenaar " Test for gJ 175987bc3f74SBram Moolenaar norm! 2gggJ 176087bc3f74SBram Moolenaar call assert_equal(['', 'abcdefghijklmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$')) 176187bc3f74SBram Moolenaar call assert_equal(16, col('.')) 176287bc3f74SBram Moolenaar " shouldn't do anything 176387bc3f74SBram Moolenaar norm! 10gJ 176487bc3f74SBram Moolenaar call assert_equal(1, col('.')) 176587bc3f74SBram Moolenaar 176687bc3f74SBram Moolenaar " Test for g0 g^ gm g$ 176787bc3f74SBram Moolenaar exe "norm! 2gg0gji " 176887bc3f74SBram Moolenaar call assert_equal(['', 'abcdefghijk lmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$')) 176987bc3f74SBram Moolenaar norm! g0yl 177087bc3f74SBram Moolenaar call assert_equal(12, col('.')) 177187bc3f74SBram Moolenaar call assert_equal(' ', getreg(0)) 177287bc3f74SBram Moolenaar norm! g$yl 177387bc3f74SBram Moolenaar call assert_equal(22, col('.')) 177487bc3f74SBram Moolenaar call assert_equal('3', getreg(0)) 177587bc3f74SBram Moolenaar norm! gmyl 177687bc3f74SBram Moolenaar call assert_equal(17, col('.')) 177787bc3f74SBram Moolenaar call assert_equal('n', getreg(0)) 177887bc3f74SBram Moolenaar norm! g^yl 177987bc3f74SBram Moolenaar call assert_equal(15, col('.')) 178087bc3f74SBram Moolenaar call assert_equal('l', getreg(0)) 178187bc3f74SBram Moolenaar 178287bc3f74SBram Moolenaar " Test for g Ctrl-G 17830913a108SBram Moolenaar set ff=unix 178487bc3f74SBram Moolenaar let a=execute(":norm! g\<c-g>") 178587bc3f74SBram Moolenaar call assert_match('Col 15 of 43; Line 2 of 2; Word 2 of 2; Byte 16 of 45', a) 178687bc3f74SBram Moolenaar 178787bc3f74SBram Moolenaar " Test for gI 178887bc3f74SBram Moolenaar norm! gIfoo 178987bc3f74SBram Moolenaar call assert_equal(['', 'fooabcdefghijk lmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$')) 179087bc3f74SBram Moolenaar 179187bc3f74SBram Moolenaar " Test for gi 179287bc3f74SBram Moolenaar wincmd c 179387bc3f74SBram Moolenaar %d 179487bc3f74SBram Moolenaar set tw=0 179587bc3f74SBram Moolenaar call setline(1, ['foobar', 'new line']) 179687bc3f74SBram Moolenaar norm! A next word 179787bc3f74SBram Moolenaar $put ='third line' 179887bc3f74SBram Moolenaar norm! gi another word 179987bc3f74SBram Moolenaar call assert_equal(['foobar next word another word', 'new line', 'third line'], getline(1,'$')) 180087bc3f74SBram Moolenaar 180187bc3f74SBram Moolenaar " clean up 180287bc3f74SBram Moolenaar bw! 18032931f2a5SBram Moolenaarendfunc 180487bc3f74SBram Moolenaar 180587bc3f74SBram Moolenaarfun! Test_normal34_g_cmd3() 180687bc3f74SBram Moolenaar if !has("multi_byte") 180787bc3f74SBram Moolenaar return 180887bc3f74SBram Moolenaar endif 1809395b6babSBram Moolenaar 181087bc3f74SBram Moolenaar " Test for g8 181187bc3f74SBram Moolenaar new 1812395b6babSBram Moolenaar let a=execute(':norm! 1G0g8') 1813395b6babSBram Moolenaar call assert_equal("\nNUL", a) 181487bc3f74SBram Moolenaar 1815395b6babSBram Moolenaar call setline(1, 'abcdefghijklmnopqrstuvwxyzäüö') 1816395b6babSBram Moolenaar let a=execute(':norm! 1G$g8') 1817395b6babSBram Moolenaar call assert_equal("\nc3 b6 ", a) 1818395b6babSBram Moolenaar 1819395b6babSBram Moolenaar call setline(1, "a\u0302") 1820395b6babSBram Moolenaar let a=execute(':norm! 1G0g8') 1821395b6babSBram Moolenaar call assert_equal("\n61 + cc 82 ", a) 1822395b6babSBram Moolenaar 182387bc3f74SBram Moolenaar " clean up 182487bc3f74SBram Moolenaar bw! 18252931f2a5SBram Moolenaarendfunc 182687bc3f74SBram Moolenaar 1827395b6babSBram Moolenaarfunc Test_normal_8g8() 1828395b6babSBram Moolenaar if !has("multi_byte") 1829395b6babSBram Moolenaar return 1830395b6babSBram Moolenaar endif 1831395b6babSBram Moolenaar new 1832395b6babSBram Moolenaar 1833395b6babSBram Moolenaar " Test 8g8 which finds invalid utf8 at or after the cursor. 1834395b6babSBram Moolenaar 1835395b6babSBram Moolenaar " With invalid byte. 1836395b6babSBram Moolenaar call setline(1, "___\xff___") 1837395b6babSBram Moolenaar norm! 1G08g8g 1838395b6babSBram Moolenaar call assert_equal([0, 1, 4, 0, 1], getcurpos()) 1839395b6babSBram Moolenaar 1840395b6babSBram Moolenaar " With invalid byte before the cursor. 1841395b6babSBram Moolenaar call setline(1, "___\xff___") 1842395b6babSBram Moolenaar norm! 1G$h8g8g 1843395b6babSBram Moolenaar call assert_equal([0, 1, 6, 0, 9], getcurpos()) 1844395b6babSBram Moolenaar 1845395b6babSBram Moolenaar " With truncated sequence. 1846395b6babSBram Moolenaar call setline(1, "___\xE2\x82___") 1847395b6babSBram Moolenaar norm! 1G08g8g 1848395b6babSBram Moolenaar call assert_equal([0, 1, 4, 0, 1], getcurpos()) 1849395b6babSBram Moolenaar 1850395b6babSBram Moolenaar " With overlong sequence. 1851395b6babSBram Moolenaar call setline(1, "___\xF0\x82\x82\xAC___") 1852395b6babSBram Moolenaar norm! 1G08g8g 1853395b6babSBram Moolenaar call assert_equal([0, 1, 4, 0, 1], getcurpos()) 1854395b6babSBram Moolenaar 1855395b6babSBram Moolenaar " With valid utf8. 1856395b6babSBram Moolenaar call setline(1, "café") 1857395b6babSBram Moolenaar norm! 1G08g8 1858395b6babSBram Moolenaar call assert_equal([0, 1, 1, 0, 1], getcurpos()) 1859395b6babSBram Moolenaar 1860395b6babSBram Moolenaar bw! 1861395b6babSBram Moolenaarendfunc 1862395b6babSBram Moolenaar 186387bc3f74SBram Moolenaarfun! Test_normal35_g_cmd4() 186487bc3f74SBram Moolenaar " Test for g< 186587bc3f74SBram Moolenaar " Cannot capture its output, 186687bc3f74SBram Moolenaar " probably a bug, therefore, test disabled: 186731845093SBram Moolenaar throw "Skipped: output of g< can't be tested currently" 186887bc3f74SBram Moolenaar echo "a\nb\nc\nd" 186987bc3f74SBram Moolenaar let b=execute(':norm! g<') 187087bc3f74SBram Moolenaar call assert_true(!empty(b), 'failed `execute(g<)`') 18712931f2a5SBram Moolenaarendfunc 187287bc3f74SBram Moolenaar 187387bc3f74SBram Moolenaarfun! Test_normal36_g_cmd5() 187487bc3f74SBram Moolenaar new 187587bc3f74SBram Moolenaar call append(0, 'abcdefghijklmnopqrstuvwxyz') 18760913a108SBram Moolenaar set ff=unix 187787bc3f74SBram Moolenaar " Test for gp gP 187887bc3f74SBram Moolenaar call append(1, range(1,10)) 187987bc3f74SBram Moolenaar 1 188087bc3f74SBram Moolenaar norm! 1yy 188187bc3f74SBram Moolenaar 3 188287bc3f74SBram Moolenaar norm! gp 188387bc3f74SBram Moolenaar call assert_equal([0, 5, 1, 0, 1], getcurpos()) 188487bc3f74SBram Moolenaar $ 188587bc3f74SBram Moolenaar norm! gP 188687bc3f74SBram Moolenaar call assert_equal([0, 14, 1, 0, 1], getcurpos()) 188787bc3f74SBram Moolenaar 188887bc3f74SBram Moolenaar " Test for go 188987bc3f74SBram Moolenaar norm! 26go 189087bc3f74SBram Moolenaar call assert_equal([0, 1, 26, 0, 26], getcurpos()) 189187bc3f74SBram Moolenaar norm! 27go 189287bc3f74SBram Moolenaar call assert_equal([0, 1, 26, 0, 26], getcurpos()) 189387bc3f74SBram Moolenaar norm! 28go 189487bc3f74SBram Moolenaar call assert_equal([0, 2, 1, 0, 1], getcurpos()) 189587bc3f74SBram Moolenaar set ff=dos 189687bc3f74SBram Moolenaar norm! 29go 189787bc3f74SBram Moolenaar call assert_equal([0, 2, 1, 0, 1], getcurpos()) 189887bc3f74SBram Moolenaar set ff=unix 189987bc3f74SBram Moolenaar norm! gg0 190087bc3f74SBram Moolenaar norm! 101go 190187bc3f74SBram Moolenaar call assert_equal([0, 13, 26, 0, 26], getcurpos()) 190287bc3f74SBram Moolenaar norm! 103go 190387bc3f74SBram Moolenaar call assert_equal([0, 14, 1, 0, 1], getcurpos()) 190487bc3f74SBram Moolenaar " count > buffer content 190587bc3f74SBram Moolenaar norm! 120go 190687bc3f74SBram Moolenaar call assert_equal([0, 14, 1, 0, 2147483647], getcurpos()) 190787bc3f74SBram Moolenaar " clean up 190887bc3f74SBram Moolenaar bw! 19092931f2a5SBram Moolenaarendfunc 191087bc3f74SBram Moolenaar 191187bc3f74SBram Moolenaarfun! Test_normal37_g_cmd6() 191287bc3f74SBram Moolenaar " basic test for gt and gT 191387bc3f74SBram Moolenaar tabnew 1.txt 191487bc3f74SBram Moolenaar tabnew 2.txt 191587bc3f74SBram Moolenaar tabnew 3.txt 191687bc3f74SBram Moolenaar norm! 1gt 191787bc3f74SBram Moolenaar call assert_equal(1, tabpagenr()) 191887bc3f74SBram Moolenaar norm! 3gt 191987bc3f74SBram Moolenaar call assert_equal(3, tabpagenr()) 192087bc3f74SBram Moolenaar norm! 1gT 192187bc3f74SBram Moolenaar " count gT goes not to the absolute tabpagenumber 192287bc3f74SBram Moolenaar " but, but goes to the count previous tabpagenumber 192387bc3f74SBram Moolenaar call assert_equal(2, tabpagenr()) 192487bc3f74SBram Moolenaar " wrap around 192587bc3f74SBram Moolenaar norm! 3gT 192687bc3f74SBram Moolenaar call assert_equal(3, tabpagenr()) 192787bc3f74SBram Moolenaar " gt does not wrap around 192887bc3f74SBram Moolenaar norm! 5gt 192987bc3f74SBram Moolenaar call assert_equal(3, tabpagenr()) 193087bc3f74SBram Moolenaar 193187bc3f74SBram Moolenaar for i in range(3) 193287bc3f74SBram Moolenaar tabclose 193387bc3f74SBram Moolenaar endfor 193487bc3f74SBram Moolenaar " clean up 193587bc3f74SBram Moolenaar call assert_fails(':tabclose', 'E784') 19362931f2a5SBram Moolenaarendfunc 193787bc3f74SBram Moolenaar 193887bc3f74SBram Moolenaarfun! Test_normal38_nvhome() 193987bc3f74SBram Moolenaar " Test for <Home> and <C-Home> key 194087bc3f74SBram Moolenaar new 194187bc3f74SBram Moolenaar call setline(1, range(10)) 194287bc3f74SBram Moolenaar $ 194387bc3f74SBram Moolenaar setl et sw=2 194487bc3f74SBram Moolenaar norm! V10>$ 194587bc3f74SBram Moolenaar " count is ignored 194687bc3f74SBram Moolenaar exe "norm! 10\<home>" 194787bc3f74SBram Moolenaar call assert_equal(1, col('.')) 194887bc3f74SBram Moolenaar exe "norm! \<home>" 194987bc3f74SBram Moolenaar call assert_equal([0, 10, 1, 0, 1], getcurpos()) 195087bc3f74SBram Moolenaar exe "norm! 5\<c-home>" 195187bc3f74SBram Moolenaar call assert_equal([0, 5, 1, 0, 1], getcurpos()) 195287bc3f74SBram Moolenaar exe "norm! \<c-home>" 195387bc3f74SBram Moolenaar call assert_equal([0, 1, 1, 0, 1], getcurpos()) 195487bc3f74SBram Moolenaar 195587bc3f74SBram Moolenaar " clean up 195687bc3f74SBram Moolenaar bw! 19572931f2a5SBram Moolenaarendfunc 195887bc3f74SBram Moolenaar 195987bc3f74SBram Moolenaarfun! Test_normal39_cw() 196087bc3f74SBram Moolenaar " Test for cw and cW on whitespace 196187bc3f74SBram Moolenaar " and cpo+=w setting 196287bc3f74SBram Moolenaar new 196387bc3f74SBram Moolenaar set tw=0 196487bc3f74SBram Moolenaar call append(0, 'here are some words') 196587bc3f74SBram Moolenaar norm! 1gg0elcwZZZ 196687bc3f74SBram Moolenaar call assert_equal('hereZZZare some words', getline('.')) 196787bc3f74SBram Moolenaar norm! 1gg0elcWYYY 196887bc3f74SBram Moolenaar call assert_equal('hereZZZareYYYsome words', getline('.')) 196987bc3f74SBram Moolenaar set cpo+=w 197087bc3f74SBram Moolenaar call setline(1, 'here are some words') 197187bc3f74SBram Moolenaar norm! 1gg0elcwZZZ 197287bc3f74SBram Moolenaar call assert_equal('hereZZZ are some words', getline('.')) 197387bc3f74SBram Moolenaar norm! 1gg2elcWYYY 197487bc3f74SBram Moolenaar call assert_equal('hereZZZ areYYY some words', getline('.')) 197587bc3f74SBram Moolenaar set cpo-=w 197687bc3f74SBram Moolenaar norm! 2gg0cwfoo 197787bc3f74SBram Moolenaar call assert_equal('foo', getline('.')) 197887bc3f74SBram Moolenaar 197987bc3f74SBram Moolenaar " clean up 198087bc3f74SBram Moolenaar bw! 19812931f2a5SBram Moolenaarendfunc 198287bc3f74SBram Moolenaar 198387bc3f74SBram Moolenaarfun! Test_normal40_ctrl_bsl() 198487bc3f74SBram Moolenaar " Basic test for CTRL-\ commands 198587bc3f74SBram Moolenaar new 198687bc3f74SBram Moolenaar call append(0, 'here are some words') 198787bc3f74SBram Moolenaar exe "norm! 1gg0a\<C-\>\<C-N>" 198887bc3f74SBram Moolenaar call assert_equal('n', mode()) 198987bc3f74SBram Moolenaar call assert_equal(1, col('.')) 199087bc3f74SBram Moolenaar call assert_equal('', visualmode()) 199187bc3f74SBram Moolenaar exe "norm! 1gg0viw\<C-\>\<C-N>" 199287bc3f74SBram Moolenaar call assert_equal('n', mode()) 199387bc3f74SBram Moolenaar call assert_equal(4, col('.')) 199487bc3f74SBram Moolenaar exe "norm! 1gg0a\<C-\>\<C-G>" 199587bc3f74SBram Moolenaar call assert_equal('n', mode()) 199687bc3f74SBram Moolenaar call assert_equal(1, col('.')) 199787bc3f74SBram Moolenaar "imap <buffer> , <c-\><c-n> 199887bc3f74SBram Moolenaar set im 199987bc3f74SBram Moolenaar exe ":norm! \<c-\>\<c-n>dw" 200087bc3f74SBram Moolenaar set noim 200187bc3f74SBram Moolenaar call assert_equal('are some words', getline(1)) 200287bc3f74SBram Moolenaar call assert_false(&insertmode) 200387bc3f74SBram Moolenaar 200487bc3f74SBram Moolenaar " clean up 200587bc3f74SBram Moolenaar bw! 20062931f2a5SBram Moolenaarendfunc 200787bc3f74SBram Moolenaar 200887bc3f74SBram Moolenaarfun! Test_normal41_insert_reg() 200987bc3f74SBram Moolenaar " Test for <c-r>=, <c-r><c-r>= and <c-r><c-o>= 201087bc3f74SBram Moolenaar " in insert mode 201187bc3f74SBram Moolenaar new 201287bc3f74SBram Moolenaar set sts=2 sw=2 ts=8 tw=0 201387bc3f74SBram Moolenaar call append(0, ["aaa\tbbb\tccc", '', '', '']) 201487bc3f74SBram Moolenaar let a=getline(1) 201587bc3f74SBram Moolenaar norm! 2gg0 201687bc3f74SBram Moolenaar exe "norm! a\<c-r>=a\<cr>" 201787bc3f74SBram Moolenaar norm! 3gg0 201887bc3f74SBram Moolenaar exe "norm! a\<c-r>\<c-r>=a\<cr>" 201987bc3f74SBram Moolenaar norm! 4gg0 202087bc3f74SBram Moolenaar exe "norm! a\<c-r>\<c-o>=a\<cr>" 202187bc3f74SBram Moolenaar call assert_equal(['aaa bbb ccc', 'aaa bbb ccc', 'aaa bbb ccc', 'aaa bbb ccc', ''], getline(1, '$')) 202287bc3f74SBram Moolenaar 202387bc3f74SBram Moolenaar " clean up 202487bc3f74SBram Moolenaar set sts=0 sw=8 ts=8 202531845093SBram Moolenaar bw! 20262931f2a5SBram Moolenaarendfunc 202787bc3f74SBram Moolenaar 202887bc3f74SBram Moolenaarfunc! Test_normal42_halfpage() 202987bc3f74SBram Moolenaar " basic test for Ctrl-D and Ctrl-U 203087bc3f74SBram Moolenaar call Setup_NewWindow() 203187bc3f74SBram Moolenaar call assert_equal(5, &scroll) 203287bc3f74SBram Moolenaar exe "norm! \<c-d>" 203387bc3f74SBram Moolenaar call assert_equal('6', getline('.')) 203487bc3f74SBram Moolenaar exe "norm! 2\<c-d>" 203587bc3f74SBram Moolenaar call assert_equal('8', getline('.')) 203687bc3f74SBram Moolenaar call assert_equal(2, &scroll) 203787bc3f74SBram Moolenaar set scroll=5 203887bc3f74SBram Moolenaar exe "norm! \<c-u>" 203987bc3f74SBram Moolenaar call assert_equal('3', getline('.')) 204087bc3f74SBram Moolenaar 1 204187bc3f74SBram Moolenaar set scrolloff=5 204287bc3f74SBram Moolenaar exe "norm! \<c-d>" 204387bc3f74SBram Moolenaar call assert_equal('10', getline('.')) 204487bc3f74SBram Moolenaar exe "norm! \<c-u>" 204587bc3f74SBram Moolenaar call assert_equal('5', getline('.')) 204687bc3f74SBram Moolenaar 1 204787bc3f74SBram Moolenaar set scrolloff=99 204887bc3f74SBram Moolenaar exe "norm! \<c-d>" 204987bc3f74SBram Moolenaar call assert_equal('10', getline('.')) 205087bc3f74SBram Moolenaar set scrolloff=0 205187bc3f74SBram Moolenaar 100 205287bc3f74SBram Moolenaar exe "norm! $\<c-u>" 205387bc3f74SBram Moolenaar call assert_equal('95', getline('.')) 205487bc3f74SBram Moolenaar call assert_equal([0, 95, 1, 0, 1], getcurpos()) 205587bc3f74SBram Moolenaar 100 205687bc3f74SBram Moolenaar set nostartofline 205787bc3f74SBram Moolenaar exe "norm! $\<c-u>" 205887bc3f74SBram Moolenaar call assert_equal('95', getline('.')) 205987bc3f74SBram Moolenaar call assert_equal([0, 95, 2, 0, 2147483647], getcurpos()) 206087bc3f74SBram Moolenaar " cleanup 206187bc3f74SBram Moolenaar set startofline 206287bc3f74SBram Moolenaar bw! 20632931f2a5SBram Moolenaarendfunc 206487bc3f74SBram Moolenaar 206587bc3f74SBram Moolenaarfun! Test_normal43_textobject1() 206687bc3f74SBram Moolenaar " basic tests for text object aw 206787bc3f74SBram Moolenaar new 206887bc3f74SBram Moolenaar call append(0, ['foobar,eins,foobar', 'foo,zwei,foo ']) 206987bc3f74SBram Moolenaar " diw 207087bc3f74SBram Moolenaar norm! 1gg0diw 207187bc3f74SBram Moolenaar call assert_equal([',eins,foobar', 'foo,zwei,foo ', ''], getline(1,'$')) 207287bc3f74SBram Moolenaar " daw 207387bc3f74SBram Moolenaar norm! 2ggEdaw 207487bc3f74SBram Moolenaar call assert_equal([',eins,foobar', 'foo,zwei,', ''], getline(1, '$')) 207587bc3f74SBram Moolenaar %d 207687bc3f74SBram Moolenaar call append(0, ["foo\teins\tfoobar", "foo\tzwei\tfoo "]) 207787bc3f74SBram Moolenaar " diW 207887bc3f74SBram Moolenaar norm! 2ggwd2iW 207987bc3f74SBram Moolenaar call assert_equal(['foo eins foobar', 'foo foo ', ''], getline(1,'$')) 208087bc3f74SBram Moolenaar " daW 208187bc3f74SBram Moolenaar norm! 1ggd2aW 208287bc3f74SBram Moolenaar call assert_equal(['foobar', 'foo foo ', ''], getline(1,'$')) 208387bc3f74SBram Moolenaar 208487bc3f74SBram Moolenaar %d 208587bc3f74SBram Moolenaar call append(0, ["foo\teins\tfoobar", "foo\tzwei\tfoo "]) 208687bc3f74SBram Moolenaar " aw in visual line mode switches to characterwise mode 208787bc3f74SBram Moolenaar norm! 2gg$Vawd 208887bc3f74SBram Moolenaar call assert_equal(['foo eins foobar', 'foo zwei foo'], getline(1,'$')) 208987bc3f74SBram Moolenaar norm! 1gg$Viwd 209087bc3f74SBram Moolenaar call assert_equal(['foo eins ', 'foo zwei foo'], getline(1,'$')) 209187bc3f74SBram Moolenaar 209287bc3f74SBram Moolenaar " clean up 209387bc3f74SBram Moolenaar bw! 20942931f2a5SBram Moolenaarendfunc 209587bc3f74SBram Moolenaar 209687bc3f74SBram Moolenaarfunc! Test_normal44_textobjects2() 209787bc3f74SBram Moolenaar " basic testing for is and as text objects 209887bc3f74SBram Moolenaar new 209987bc3f74SBram Moolenaar call append(0, ['This is a test. With some sentences!', '', 'Even with a question? And one more. And no sentence here']) 210087bc3f74SBram Moolenaar " Test for dis - does not remove trailing whitespace 210187bc3f74SBram Moolenaar norm! 1gg0dis 210287bc3f74SBram Moolenaar call assert_equal([' With some sentences!', '', 'Even with a question? And one more. And no sentence here', ''], getline(1,'$')) 210387bc3f74SBram Moolenaar " Test for das - removes leading whitespace 210487bc3f74SBram Moolenaar norm! 3ggf?ldas 210587bc3f74SBram Moolenaar call assert_equal([' With some sentences!', '', 'Even with a question? And no sentence here', ''], getline(1,'$')) 210687bc3f74SBram Moolenaar " when used in visual mode, is made characterwise 210787bc3f74SBram Moolenaar norm! 3gg$Visy 210887bc3f74SBram Moolenaar call assert_equal('v', visualmode()) 210987bc3f74SBram Moolenaar " reset visualmode() 211087bc3f74SBram Moolenaar norm! 3ggVy 211187bc3f74SBram Moolenaar norm! 3gg$Vasy 211287bc3f74SBram Moolenaar call assert_equal('v', visualmode()) 211387bc3f74SBram Moolenaar " basic testing for textobjects a< and at 211487bc3f74SBram Moolenaar %d 211587bc3f74SBram Moolenaar call setline(1, ['<div> ','<a href="foobar" class="foo">xyz</a>',' </div>', ' ']) 211687bc3f74SBram Moolenaar " a< 211787bc3f74SBram Moolenaar norm! 1gg0da< 211887bc3f74SBram Moolenaar call assert_equal([' ', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 211987bc3f74SBram Moolenaar norm! 1pj 212087bc3f74SBram Moolenaar call assert_equal([' <div>', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 212187bc3f74SBram Moolenaar " at 212287bc3f74SBram Moolenaar norm! d2at 212387bc3f74SBram Moolenaar call assert_equal([' '], getline(1,'$')) 212487bc3f74SBram Moolenaar %d 212587bc3f74SBram Moolenaar call setline(1, ['<div> ','<a href="foobar" class="foo">xyz</a>',' </div>', ' ']) 212687bc3f74SBram Moolenaar " i< 212787bc3f74SBram Moolenaar norm! 1gg0di< 212887bc3f74SBram Moolenaar call assert_equal(['<> ', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 212987bc3f74SBram Moolenaar norm! 1Pj 213087bc3f74SBram Moolenaar call assert_equal(['<div> ', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 213187bc3f74SBram Moolenaar norm! d2it 213287bc3f74SBram Moolenaar call assert_equal(['<div></div>',' '], getline(1,'$')) 213387bc3f74SBram Moolenaar " basic testing for a[ and i[ text object 213487bc3f74SBram Moolenaar %d 213587bc3f74SBram Moolenaar call setline(1, [' ', '[', 'one [two]', 'thre', ']']) 213687bc3f74SBram Moolenaar norm! 3gg0di[ 213787bc3f74SBram Moolenaar call assert_equal([' ', '[', ']'], getline(1,'$')) 213887bc3f74SBram Moolenaar call setline(1, [' ', '[', 'one [two]', 'thre', ']']) 213987bc3f74SBram Moolenaar norm! 3gg0ftd2a[ 214087bc3f74SBram Moolenaar call assert_equal([' '], getline(1,'$')) 214187bc3f74SBram Moolenaar %d 214287bc3f74SBram Moolenaar " Test for i" when cursor is in front of a quoted object 214387bc3f74SBram Moolenaar call append(0, 'foo "bar"') 214487bc3f74SBram Moolenaar norm! 1gg0di" 214587bc3f74SBram Moolenaar call assert_equal(['foo ""', ''], getline(1,'$')) 214687bc3f74SBram Moolenaar 214787bc3f74SBram Moolenaar " clean up 214887bc3f74SBram Moolenaar bw! 21492931f2a5SBram Moolenaarendfunc 215087bc3f74SBram Moolenaar 215187bc3f74SBram Moolenaarfunc! Test_normal45_drop() 215287bc3f74SBram Moolenaar if !has("dnd") 215387bc3f74SBram Moolenaar return 215487bc3f74SBram Moolenaar endif 215587bc3f74SBram Moolenaar " basic test for :drop command 215687bc3f74SBram Moolenaar " unfortunately, without a gui, we can't really test much here, 215787bc3f74SBram Moolenaar " so simply test that ~p fails (which uses the drop register) 215887bc3f74SBram Moolenaar new 215987bc3f74SBram Moolenaar call assert_fails(':norm! "~p', 'E353') 216087bc3f74SBram Moolenaar call assert_equal([], getreg('~', 1, 1)) 216187bc3f74SBram Moolenaar " the ~ register is read only 216287bc3f74SBram Moolenaar call assert_fails(':let @~="1"', 'E354') 216387bc3f74SBram Moolenaar bw! 21642931f2a5SBram Moolenaarendfunc 216587bc3f74SBram Moolenaar 216687bc3f74SBram Moolenaarfunc! Test_normal46_ignore() 21672931f2a5SBram Moolenaar " This test uses multi byte characters 21682931f2a5SBram Moolenaar if !has("multi_byte") 21692931f2a5SBram Moolenaar return 21702931f2a5SBram Moolenaar endif 21712931f2a5SBram Moolenaar 217287bc3f74SBram Moolenaar new 217387bc3f74SBram Moolenaar " How to test this? 217487bc3f74SBram Moolenaar " let's just for now test, that the buffer 217587bc3f74SBram Moolenaar " does not change 217687bc3f74SBram Moolenaar call feedkeys("\<c-s>", 't') 217787bc3f74SBram Moolenaar call assert_equal([''], getline(1,'$')) 217887bc3f74SBram Moolenaar 21792931f2a5SBram Moolenaar " no valid commands 21802931f2a5SBram Moolenaar exe "norm! \<char-0x100>" 21812931f2a5SBram Moolenaar call assert_equal([''], getline(1,'$')) 21822931f2a5SBram Moolenaar 21832931f2a5SBram Moolenaar exe "norm! ä" 21842931f2a5SBram Moolenaar call assert_equal([''], getline(1,'$')) 21852931f2a5SBram Moolenaar 218687bc3f74SBram Moolenaar " clean up 218787bc3f74SBram Moolenaar bw! 21882931f2a5SBram Moolenaarendfunc 2189c4a908e8SBram Moolenaar 2190c4a908e8SBram Moolenaarfunc! Test_normal47_visual_buf_wipe() 2191c4a908e8SBram Moolenaar " This was causing a crash or ml_get error. 2192c4a908e8SBram Moolenaar enew! 2193c4a908e8SBram Moolenaar call setline(1,'xxx') 2194c4a908e8SBram Moolenaar normal $ 2195c4a908e8SBram Moolenaar new 2196c4a908e8SBram Moolenaar call setline(1, range(1,2)) 2197c4a908e8SBram Moolenaar 2 2198c4a908e8SBram Moolenaar exe "norm \<C-V>$" 2199c4a908e8SBram Moolenaar bw! 2200c4a908e8SBram Moolenaar norm yp 2201c4a908e8SBram Moolenaar set nomodified 22022931f2a5SBram Moolenaarendfunc 22032931f2a5SBram Moolenaar 22042931f2a5SBram Moolenaarfunc! Test_normal47_autocmd() 22052931f2a5SBram Moolenaar " disabled, does not seem to be possible currently 22062931f2a5SBram Moolenaar throw "Skipped: not possible to test cursorhold autocmd while waiting for input in normal_cmd" 22072931f2a5SBram Moolenaar new 22082931f2a5SBram Moolenaar call append(0, repeat('-',20)) 22092931f2a5SBram Moolenaar au CursorHold * call feedkeys('2l', '') 22102931f2a5SBram Moolenaar 1 22112931f2a5SBram Moolenaar set updatetime=20 22122931f2a5SBram Moolenaar " should delete 12 chars (d12l) 22132931f2a5SBram Moolenaar call feedkeys('d1', '!') 22142931f2a5SBram Moolenaar call assert_equal('--------', getline(1)) 22152931f2a5SBram Moolenaar 22162931f2a5SBram Moolenaar " clean up 22172931f2a5SBram Moolenaar au! CursorHold 22182931f2a5SBram Moolenaar set updatetime=4000 22192931f2a5SBram Moolenaar bw! 22202931f2a5SBram Moolenaarendfunc 22212931f2a5SBram Moolenaar 22222931f2a5SBram Moolenaarfunc! Test_normal48_wincmd() 22232931f2a5SBram Moolenaar new 22242931f2a5SBram Moolenaar exe "norm! \<c-w>c" 22252931f2a5SBram Moolenaar call assert_equal(1, winnr('$')) 22262931f2a5SBram Moolenaar call assert_fails(":norm! \<c-w>c", "E444") 22272931f2a5SBram Moolenaarendfunc 22282931f2a5SBram Moolenaar 22292931f2a5SBram Moolenaarfunc! Test_normal49_counts() 22302931f2a5SBram Moolenaar new 22312931f2a5SBram Moolenaar call setline(1, 'one two three four five six seven eight nine ten') 22322931f2a5SBram Moolenaar 1 22332931f2a5SBram Moolenaar norm! 3d2w 22342931f2a5SBram Moolenaar call assert_equal('seven eight nine ten', getline(1)) 22352931f2a5SBram Moolenaar bw! 22362931f2a5SBram Moolenaarendfunc 22372931f2a5SBram Moolenaar 22382931f2a5SBram Moolenaarfunc! Test_normal50_commandline() 22392931f2a5SBram Moolenaar if !has("timers") || !has("cmdline_hist") || !has("vertsplit") 22402931f2a5SBram Moolenaar return 22412931f2a5SBram Moolenaar endif 22422931f2a5SBram Moolenaar func! DoTimerWork(id) 22432931f2a5SBram Moolenaar call assert_equal('[Command Line]', bufname('')) 22442931f2a5SBram Moolenaar " should fail, with E11, but does fail with E23? 22452931f2a5SBram Moolenaar "call feedkeys("\<c-^>", 'tm') 22462931f2a5SBram Moolenaar 22472931f2a5SBram Moolenaar " should also fail with E11 22482931f2a5SBram Moolenaar call assert_fails(":wincmd p", 'E11') 22492931f2a5SBram Moolenaar " return from commandline window 22502931f2a5SBram Moolenaar call feedkeys("\<cr>") 22512931f2a5SBram Moolenaar endfunc 22522931f2a5SBram Moolenaar 22532931f2a5SBram Moolenaar let oldlang=v:lang 22542931f2a5SBram Moolenaar lang C 22552931f2a5SBram Moolenaar set updatetime=20 22562931f2a5SBram Moolenaar call timer_start(100, 'DoTimerWork') 22572931f2a5SBram Moolenaar try 22582931f2a5SBram Moolenaar " throws E23, for whatever reason... 22592931f2a5SBram Moolenaar call feedkeys('q:', 'x!') 22602931f2a5SBram Moolenaar catch /E23/ 22612931f2a5SBram Moolenaar " no-op 22622931f2a5SBram Moolenaar endtry 22632931f2a5SBram Moolenaar " clean up 22642931f2a5SBram Moolenaar set updatetime=4000 22652931f2a5SBram Moolenaar exe "lang" oldlang 22662931f2a5SBram Moolenaar bw! 22672931f2a5SBram Moolenaarendfunc 22682931f2a5SBram Moolenaar 22692931f2a5SBram Moolenaarfunc! Test_normal51_FileChangedRO() 22702931f2a5SBram Moolenaar if !has("autocmd") 22712931f2a5SBram Moolenaar return 22722931f2a5SBram Moolenaar endif 2273e5f2a075SBram Moolenaar " Don't sleep after the warning message. 2274e5f2a075SBram Moolenaar call test_settime(1) 22752931f2a5SBram Moolenaar call writefile(['foo'], 'Xreadonly.log') 22762931f2a5SBram Moolenaar new Xreadonly.log 22772931f2a5SBram Moolenaar setl ro 22782931f2a5SBram Moolenaar au FileChangedRO <buffer> :call feedkeys("\<c-^>", 'tix') 22792931f2a5SBram Moolenaar call assert_fails(":norm! Af", 'E788') 22802931f2a5SBram Moolenaar call assert_equal(['foo'], getline(1,'$')) 22812931f2a5SBram Moolenaar call assert_equal('Xreadonly.log', bufname('')) 22822931f2a5SBram Moolenaar 22832931f2a5SBram Moolenaar " cleanup 2284e5f2a075SBram Moolenaar call test_settime(0) 22852931f2a5SBram Moolenaar bw! 22862931f2a5SBram Moolenaar call delete("Xreadonly.log") 22872931f2a5SBram Moolenaarendfunc 22882931f2a5SBram Moolenaar 22892931f2a5SBram Moolenaarfunc! Test_normal52_rl() 22902931f2a5SBram Moolenaar if !has("rightleft") 22912931f2a5SBram Moolenaar return 22922931f2a5SBram Moolenaar endif 22932931f2a5SBram Moolenaar new 22942931f2a5SBram Moolenaar call setline(1, 'abcde fghij klmnopq') 22952931f2a5SBram Moolenaar norm! 1gg$ 22962931f2a5SBram Moolenaar set rl 22972931f2a5SBram Moolenaar call assert_equal(19, col('.')) 22982931f2a5SBram Moolenaar call feedkeys('l', 'tx') 22992931f2a5SBram Moolenaar call assert_equal(18, col('.')) 23002931f2a5SBram Moolenaar call feedkeys('h', 'tx') 23012931f2a5SBram Moolenaar call assert_equal(19, col('.')) 23022931f2a5SBram Moolenaar call feedkeys("\<right>", 'tx') 23032931f2a5SBram Moolenaar call assert_equal(18, col('.')) 23042931f2a5SBram Moolenaar call feedkeys("\<s-right>", 'tx') 23052931f2a5SBram Moolenaar call assert_equal(13, col('.')) 23062931f2a5SBram Moolenaar call feedkeys("\<c-right>", 'tx') 23072931f2a5SBram Moolenaar call assert_equal(7, col('.')) 23082931f2a5SBram Moolenaar call feedkeys("\<c-left>", 'tx') 23092931f2a5SBram Moolenaar call assert_equal(13, col('.')) 23102931f2a5SBram Moolenaar call feedkeys("\<s-left>", 'tx') 23112931f2a5SBram Moolenaar call assert_equal(19, col('.')) 23122931f2a5SBram Moolenaar call feedkeys("<<", 'tx') 23132931f2a5SBram Moolenaar call assert_equal(' abcde fghij klmnopq',getline(1)) 23142931f2a5SBram Moolenaar call feedkeys(">>", 'tx') 23152931f2a5SBram Moolenaar call assert_equal('abcde fghij klmnopq',getline(1)) 23162931f2a5SBram Moolenaar 23172931f2a5SBram Moolenaar " cleanup 23182931f2a5SBram Moolenaar set norl 23192931f2a5SBram Moolenaar bw! 23202931f2a5SBram Moolenaarendfunc 23212931f2a5SBram Moolenaar 23222931f2a5SBram Moolenaarfunc! Test_normal53_digraph() 23232931f2a5SBram Moolenaar if !has('digraphs') 23242931f2a5SBram Moolenaar return 23252931f2a5SBram Moolenaar endif 23262931f2a5SBram Moolenaar new 23272931f2a5SBram Moolenaar call setline(1, 'abcdefgh|') 23282931f2a5SBram Moolenaar exe "norm! 1gg0f\<c-k>!!" 23292931f2a5SBram Moolenaar call assert_equal(9, col('.')) 23302931f2a5SBram Moolenaar set cpo+=D 23312931f2a5SBram Moolenaar exe "norm! 1gg0f\<c-k>!!" 23322931f2a5SBram Moolenaar call assert_equal(1, col('.')) 23332931f2a5SBram Moolenaar 23342931f2a5SBram Moolenaar set cpo-=D 23352931f2a5SBram Moolenaar bw! 23362931f2a5SBram Moolenaarendfunc 23372931f2a5SBram Moolenaar 2338b1e04fcaSBram Moolenaarfunc Test_normal54_Ctrl_bsl() 23392931f2a5SBram Moolenaar new 23402931f2a5SBram Moolenaar call setline(1, 'abcdefghijklmn') 23412931f2a5SBram Moolenaar exe "norm! df\<c-\>\<c-n>" 23422931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn'], getline(1,'$')) 23432931f2a5SBram Moolenaar exe "norm! df\<c-\>\<c-g>" 23442931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn'], getline(1,'$')) 23452931f2a5SBram Moolenaar exe "norm! df\<c-\>m" 23462931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn'], getline(1,'$')) 23472931f2a5SBram Moolenaar if !has("multi_byte") 23482931f2a5SBram Moolenaar return 23492931f2a5SBram Moolenaar endif 23502931f2a5SBram Moolenaar call setline(2, 'abcdefghijklmnāf') 23512931f2a5SBram Moolenaar norm! 2gg0 23522931f2a5SBram Moolenaar exe "norm! df\<Char-0x101>" 23532931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn', 'f'], getline(1,'$')) 23542931f2a5SBram Moolenaar norm! 1gg0 23552931f2a5SBram Moolenaar exe "norm! df\<esc>" 23562931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn', 'f'], getline(1,'$')) 23572931f2a5SBram Moolenaar 23582931f2a5SBram Moolenaar " clean up 23592931f2a5SBram Moolenaar bw! 23602931f2a5SBram Moolenaarendfunc 2361b1e04fcaSBram Moolenaar 2362b1e04fcaSBram Moolenaarfunc Test_normal_large_count() 2363b1e04fcaSBram Moolenaar " This may fail with 32bit long, how do we detect that? 2364b1e04fcaSBram Moolenaar new 2365b1e04fcaSBram Moolenaar normal o 2366b1e04fcaSBram Moolenaar normal 6666666666dL 2367b1e04fcaSBram Moolenaar bwipe! 2368b1e04fcaSBram Moolenaarendfunc 2369bf3d5807SBram Moolenaar 2370bf3d5807SBram Moolenaarfunc Test_delete_until_paragraph() 2371bf3d5807SBram Moolenaar if !has('multi_byte') 2372bf3d5807SBram Moolenaar return 2373bf3d5807SBram Moolenaar endif 2374bf3d5807SBram Moolenaar new 2375bf3d5807SBram Moolenaar normal grádv} 2376bf3d5807SBram Moolenaar call assert_equal('á', getline(1)) 2377bf3d5807SBram Moolenaar normal grád} 2378bf3d5807SBram Moolenaar call assert_equal('', getline(1)) 2379bf3d5807SBram Moolenaar bwipe! 2380bf3d5807SBram Moolenaarendfunc 2381