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! $ 39265f08474SBram Moolenaar call assert_equal('cbar', expand('<cword>')) 39365f08474SBram Moolenaar call assert_equal('ifooar,,cbar', expand('<cWORD>')) 39465f08474SBram Moolenaar 39565f08474SBram Moolenaar call setline(1, ['prx = list[idx];']) 39665f08474SBram Moolenaar 1 39765f08474SBram Moolenaar let expected = ['', 'prx', 'prx', 'prx', 39865f08474SBram Moolenaar \ 'list', 'list', 'list', 'list', 'list', 'list', 'list', 39965f08474SBram Moolenaar \ 'idx', 'idx', 'idx', 'idx', 40065f08474SBram Moolenaar \ 'list[idx]', 40165f08474SBram Moolenaar \ '];', 40265f08474SBram Moolenaar \ ] 40365f08474SBram Moolenaar for i in range(1, 16) 40465f08474SBram Moolenaar exe 'norm ' . i . '|' 40565f08474SBram Moolenaar call assert_equal(expected[i], expand('<cexpr>'), 'i == ' . i) 40665f08474SBram Moolenaar endfor 40765f08474SBram Moolenaar 40887bc3f74SBram Moolenaar " clean up 40987bc3f74SBram Moolenaar bw! 4102931f2a5SBram Moolenaarendfunc 41187bc3f74SBram Moolenaar 41287bc3f74SBram Moolenaarfunc! Test_normal11_showcmd() 41387bc3f74SBram Moolenaar " test for 'showcmd' 41487bc3f74SBram Moolenaar 10new 41587bc3f74SBram Moolenaar exe "norm! ofoobar\<esc>" 41687bc3f74SBram Moolenaar call assert_equal(2, line('$')) 41787bc3f74SBram Moolenaar set showcmd 41887bc3f74SBram Moolenaar exe "norm! ofoobar2\<esc>" 41987bc3f74SBram Moolenaar call assert_equal(3, line('$')) 42087bc3f74SBram Moolenaar exe "norm! VAfoobar3\<esc>" 42187bc3f74SBram Moolenaar call assert_equal(3, line('$')) 42287bc3f74SBram Moolenaar exe "norm! 0d3\<del>2l" 42387bc3f74SBram Moolenaar call assert_equal('obar2foobar3', getline('.')) 42487bc3f74SBram Moolenaar bw! 4252931f2a5SBram Moolenaarendfunc 42687bc3f74SBram Moolenaar 42787bc3f74SBram Moolenaarfunc! Test_normal12_nv_error() 42887bc3f74SBram Moolenaar " Test for nv_error 42987bc3f74SBram Moolenaar 10new 43087bc3f74SBram Moolenaar call setline(1, range(1,5)) 43187bc3f74SBram Moolenaar " should not do anything, just beep 43287bc3f74SBram Moolenaar exe "norm! <c-k>" 43387bc3f74SBram Moolenaar call assert_equal(map(range(1,5), 'string(v:val)'), getline(1,'$')) 43487bc3f74SBram Moolenaar bw! 4352931f2a5SBram Moolenaarendfunc 43687bc3f74SBram Moolenaar 43787bc3f74SBram Moolenaarfunc! Test_normal13_help() 43887bc3f74SBram Moolenaar " Test for F1 43987bc3f74SBram Moolenaar call assert_equal(1, winnr()) 44087bc3f74SBram Moolenaar call feedkeys("\<f1>", 'txi') 44187bc3f74SBram Moolenaar call assert_match('help\.txt', bufname('%')) 44287bc3f74SBram Moolenaar call assert_equal(2, winnr('$')) 44387bc3f74SBram Moolenaar bw! 4442931f2a5SBram Moolenaarendfunc 44587bc3f74SBram Moolenaar 44687bc3f74SBram Moolenaarfunc! Test_normal14_page() 44787bc3f74SBram Moolenaar " basic test for Ctrl-F and Ctrl-B 44887bc3f74SBram Moolenaar call Setup_NewWindow() 44987bc3f74SBram Moolenaar exe "norm! \<c-f>" 45087bc3f74SBram Moolenaar call assert_equal('9', getline('.')) 45187bc3f74SBram Moolenaar exe "norm! 2\<c-f>" 45287bc3f74SBram Moolenaar call assert_equal('25', getline('.')) 45387bc3f74SBram Moolenaar exe "norm! 2\<c-b>" 45487bc3f74SBram Moolenaar call assert_equal('18', getline('.')) 45587bc3f74SBram Moolenaar 1 45687bc3f74SBram Moolenaar set scrolloff=5 45787bc3f74SBram Moolenaar exe "norm! 2\<c-f>" 45887bc3f74SBram Moolenaar call assert_equal('21', getline('.')) 45987bc3f74SBram Moolenaar exe "norm! \<c-b>" 46087bc3f74SBram Moolenaar call assert_equal('13', getline('.')) 46187bc3f74SBram Moolenaar 1 46287bc3f74SBram Moolenaar set scrolloff=99 46387bc3f74SBram Moolenaar exe "norm! \<c-f>" 46487bc3f74SBram Moolenaar call assert_equal('13', getline('.')) 46587bc3f74SBram Moolenaar set scrolloff=0 46687bc3f74SBram Moolenaar 100 46787bc3f74SBram Moolenaar exe "norm! $\<c-b>" 46887bc3f74SBram Moolenaar call assert_equal('92', getline('.')) 46987bc3f74SBram Moolenaar call assert_equal([0, 92, 1, 0, 1], getcurpos()) 47087bc3f74SBram Moolenaar 100 47187bc3f74SBram Moolenaar set nostartofline 47287bc3f74SBram Moolenaar exe "norm! $\<c-b>" 47387bc3f74SBram Moolenaar call assert_equal('92', getline('.')) 47487bc3f74SBram Moolenaar call assert_equal([0, 92, 2, 0, 2147483647], getcurpos()) 47587bc3f74SBram Moolenaar " cleanup 47687bc3f74SBram Moolenaar set startofline 47787bc3f74SBram Moolenaar bw! 4782931f2a5SBram Moolenaarendfunc 47987bc3f74SBram Moolenaar 480bc54f3f3SBram Moolenaarfunc! Test_normal14_page_eol() 481bc54f3f3SBram Moolenaar 10new 482bc54f3f3SBram Moolenaar norm oxxxxxxx 483bc54f3f3SBram Moolenaar exe "norm 2\<c-f>" 484bc54f3f3SBram Moolenaar " check with valgrind that cursor is put back in column 1 485bc54f3f3SBram Moolenaar exe "norm 2\<c-b>" 486bc54f3f3SBram Moolenaar bw! 487bc54f3f3SBram Moolenaarendfunc 488bc54f3f3SBram Moolenaar 48987bc3f74SBram Moolenaarfunc! Test_normal15_z_scroll_vert() 49087bc3f74SBram Moolenaar " basic test for z commands that scroll the window 49187bc3f74SBram Moolenaar call Setup_NewWindow() 49287bc3f74SBram Moolenaar 100 49387bc3f74SBram Moolenaar norm! >> 49487bc3f74SBram Moolenaar " Test for z<cr> 49587bc3f74SBram Moolenaar exe "norm! z\<cr>" 49687bc3f74SBram Moolenaar call assert_equal(' 100', getline('.')) 49787bc3f74SBram Moolenaar call assert_equal(100, winsaveview()['topline']) 49887bc3f74SBram Moolenaar call assert_equal([0, 100, 2, 0, 9], getcurpos()) 49987bc3f74SBram Moolenaar 50087bc3f74SBram Moolenaar " Test for zt 50187bc3f74SBram Moolenaar 21 50287bc3f74SBram Moolenaar norm! >>0zt 50387bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 50487bc3f74SBram Moolenaar call assert_equal(21, winsaveview()['topline']) 50587bc3f74SBram Moolenaar call assert_equal([0, 21, 1, 0, 8], getcurpos()) 50687bc3f74SBram Moolenaar 50787bc3f74SBram Moolenaar " Test for zb 50887bc3f74SBram Moolenaar 30 50987bc3f74SBram Moolenaar norm! >>$ztzb 51087bc3f74SBram Moolenaar call assert_equal(' 30', getline('.')) 51187bc3f74SBram Moolenaar call assert_equal(30, winsaveview()['topline']+winheight(0)-1) 51287bc3f74SBram Moolenaar call assert_equal([0, 30, 3, 0, 2147483647], getcurpos()) 51387bc3f74SBram Moolenaar 51487bc3f74SBram Moolenaar " Test for z- 51587bc3f74SBram Moolenaar 1 51687bc3f74SBram Moolenaar 30 51787bc3f74SBram Moolenaar norm! 0z- 51887bc3f74SBram Moolenaar call assert_equal(' 30', getline('.')) 51987bc3f74SBram Moolenaar call assert_equal(30, winsaveview()['topline']+winheight(0)-1) 52087bc3f74SBram Moolenaar call assert_equal([0, 30, 2, 0, 9], getcurpos()) 52187bc3f74SBram Moolenaar 52287bc3f74SBram Moolenaar " Test for z{height}<cr> 52387bc3f74SBram Moolenaar call assert_equal(10, winheight(0)) 52487bc3f74SBram Moolenaar exe "norm! z12\<cr>" 52587bc3f74SBram Moolenaar call assert_equal(12, winheight(0)) 52687bc3f74SBram Moolenaar exe "norm! z10\<cr>" 52787bc3f74SBram Moolenaar call assert_equal(10, winheight(0)) 52887bc3f74SBram Moolenaar 52987bc3f74SBram Moolenaar " Test for z. 53087bc3f74SBram Moolenaar 1 53187bc3f74SBram Moolenaar 21 53287bc3f74SBram Moolenaar norm! 0z. 53387bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 53487bc3f74SBram Moolenaar call assert_equal(17, winsaveview()['topline']) 53587bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 53687bc3f74SBram Moolenaar 53787bc3f74SBram Moolenaar " Test for zz 53887bc3f74SBram Moolenaar 1 53987bc3f74SBram Moolenaar 21 54087bc3f74SBram Moolenaar norm! 0zz 54187bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 54287bc3f74SBram Moolenaar call assert_equal(17, winsaveview()['topline']) 54387bc3f74SBram Moolenaar call assert_equal([0, 21, 1, 0, 8], getcurpos()) 54487bc3f74SBram Moolenaar 54587bc3f74SBram Moolenaar " Test for z+ 54687bc3f74SBram Moolenaar 11 54787bc3f74SBram Moolenaar norm! zt 54887bc3f74SBram Moolenaar norm! z+ 54987bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 55087bc3f74SBram Moolenaar call assert_equal(21, winsaveview()['topline']) 55187bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 55287bc3f74SBram Moolenaar 55387bc3f74SBram Moolenaar " Test for [count]z+ 55487bc3f74SBram Moolenaar 1 55587bc3f74SBram Moolenaar norm! 21z+ 55687bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 55787bc3f74SBram Moolenaar call assert_equal(21, winsaveview()['topline']) 55887bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 55987bc3f74SBram Moolenaar 56087bc3f74SBram Moolenaar " Test for z^ 56187bc3f74SBram Moolenaar norm! 22z+0 56287bc3f74SBram Moolenaar norm! z^ 56387bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 56487bc3f74SBram Moolenaar call assert_equal(12, winsaveview()['topline']) 56587bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 56687bc3f74SBram Moolenaar 56787bc3f74SBram Moolenaar " Test for [count]z^ 56887bc3f74SBram Moolenaar 1 56987bc3f74SBram Moolenaar norm! 30z^ 57087bc3f74SBram Moolenaar call assert_equal(' 21', getline('.')) 57187bc3f74SBram Moolenaar call assert_equal(12, winsaveview()['topline']) 57287bc3f74SBram Moolenaar call assert_equal([0, 21, 2, 0, 9], getcurpos()) 57387bc3f74SBram Moolenaar 57487bc3f74SBram Moolenaar " cleanup 57587bc3f74SBram Moolenaar bw! 5762931f2a5SBram Moolenaarendfunc 57787bc3f74SBram Moolenaar 57887bc3f74SBram Moolenaarfunc! Test_normal16_z_scroll_hor() 57987bc3f74SBram Moolenaar " basic test for z commands that scroll the window 58087bc3f74SBram Moolenaar 10new 58187bc3f74SBram Moolenaar 15vsp 58287bc3f74SBram Moolenaar set nowrap listchars= 58387bc3f74SBram Moolenaar let lineA='abcdefghijklmnopqrstuvwxyz' 58487bc3f74SBram Moolenaar let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' 58587bc3f74SBram Moolenaar $put =lineA 58687bc3f74SBram Moolenaar $put =lineB 58787bc3f74SBram Moolenaar 1d 58887bc3f74SBram Moolenaar 58987bc3f74SBram Moolenaar " Test for zl 59087bc3f74SBram Moolenaar 1 59187bc3f74SBram Moolenaar norm! 5zl 59287bc3f74SBram Moolenaar call assert_equal(lineA, getline('.')) 59387bc3f74SBram Moolenaar call assert_equal(6, col('.')) 59487bc3f74SBram Moolenaar call assert_equal(5, winsaveview()['leftcol']) 59587bc3f74SBram Moolenaar norm! yl 59687bc3f74SBram Moolenaar call assert_equal('f', @0) 59787bc3f74SBram Moolenaar 59887bc3f74SBram Moolenaar " Test for zh 59987bc3f74SBram Moolenaar norm! 2zh 60087bc3f74SBram Moolenaar call assert_equal(lineA, getline('.')) 60187bc3f74SBram Moolenaar call assert_equal(6, col('.')) 60287bc3f74SBram Moolenaar norm! yl 60387bc3f74SBram Moolenaar call assert_equal('f', @0) 60487bc3f74SBram Moolenaar call assert_equal(3, winsaveview()['leftcol']) 60587bc3f74SBram Moolenaar 60687bc3f74SBram Moolenaar " Test for zL 60787bc3f74SBram Moolenaar norm! zL 60887bc3f74SBram Moolenaar call assert_equal(11, col('.')) 60987bc3f74SBram Moolenaar norm! yl 61087bc3f74SBram Moolenaar call assert_equal('k', @0) 61187bc3f74SBram Moolenaar call assert_equal(10, winsaveview()['leftcol']) 61287bc3f74SBram Moolenaar norm! 2zL 61387bc3f74SBram Moolenaar call assert_equal(25, col('.')) 61487bc3f74SBram Moolenaar norm! yl 61587bc3f74SBram Moolenaar call assert_equal('y', @0) 61687bc3f74SBram Moolenaar call assert_equal(24, winsaveview()['leftcol']) 61787bc3f74SBram Moolenaar 61887bc3f74SBram Moolenaar " Test for zH 61987bc3f74SBram Moolenaar norm! 2zH 62087bc3f74SBram Moolenaar call assert_equal(25, col('.')) 62187bc3f74SBram Moolenaar call assert_equal(10, winsaveview()['leftcol']) 62287bc3f74SBram Moolenaar norm! yl 62387bc3f74SBram Moolenaar call assert_equal('y', @0) 62487bc3f74SBram Moolenaar 62587bc3f74SBram Moolenaar " Test for zs 62687bc3f74SBram Moolenaar norm! $zs 62787bc3f74SBram Moolenaar call assert_equal(26, col('.')) 62887bc3f74SBram Moolenaar call assert_equal(25, winsaveview()['leftcol']) 62987bc3f74SBram Moolenaar norm! yl 63087bc3f74SBram Moolenaar call assert_equal('z', @0) 63187bc3f74SBram Moolenaar 63287bc3f74SBram Moolenaar " Test for ze 63387bc3f74SBram Moolenaar norm! ze 63487bc3f74SBram Moolenaar call assert_equal(26, col('.')) 63587bc3f74SBram Moolenaar call assert_equal(11, winsaveview()['leftcol']) 63687bc3f74SBram Moolenaar norm! yl 63787bc3f74SBram Moolenaar call assert_equal('z', @0) 63887bc3f74SBram Moolenaar 63987bc3f74SBram Moolenaar " cleanup 64087bc3f74SBram Moolenaar set wrap listchars=eol:$ 64187bc3f74SBram Moolenaar bw! 6422931f2a5SBram Moolenaarendfunc 64387bc3f74SBram Moolenaar 64487bc3f74SBram Moolenaarfunc! Test_normal17_z_scroll_hor2() 64587bc3f74SBram Moolenaar " basic test for z commands that scroll the window 64687bc3f74SBram Moolenaar " using 'sidescrolloff' setting 64787bc3f74SBram Moolenaar 10new 64887bc3f74SBram Moolenaar 20vsp 64987bc3f74SBram Moolenaar set nowrap listchars= sidescrolloff=5 65087bc3f74SBram Moolenaar let lineA='abcdefghijklmnopqrstuvwxyz' 65187bc3f74SBram Moolenaar let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' 65287bc3f74SBram Moolenaar $put =lineA 65387bc3f74SBram Moolenaar $put =lineB 65487bc3f74SBram Moolenaar 1d 65587bc3f74SBram Moolenaar 65687bc3f74SBram Moolenaar " Test for zl 65787bc3f74SBram Moolenaar 1 65887bc3f74SBram Moolenaar norm! 5zl 65987bc3f74SBram Moolenaar call assert_equal(lineA, getline('.')) 66087bc3f74SBram Moolenaar call assert_equal(11, col('.')) 66187bc3f74SBram Moolenaar call assert_equal(5, winsaveview()['leftcol']) 66287bc3f74SBram Moolenaar norm! yl 66387bc3f74SBram Moolenaar call assert_equal('k', @0) 66487bc3f74SBram Moolenaar 66587bc3f74SBram Moolenaar " Test for zh 66687bc3f74SBram Moolenaar norm! 2zh 66787bc3f74SBram Moolenaar call assert_equal(lineA, getline('.')) 66887bc3f74SBram Moolenaar call assert_equal(11, col('.')) 66987bc3f74SBram Moolenaar norm! yl 67087bc3f74SBram Moolenaar call assert_equal('k', @0) 67187bc3f74SBram Moolenaar call assert_equal(3, winsaveview()['leftcol']) 67287bc3f74SBram Moolenaar 67387bc3f74SBram Moolenaar " Test for zL 67487bc3f74SBram Moolenaar norm! 0zL 67587bc3f74SBram Moolenaar call assert_equal(16, col('.')) 67687bc3f74SBram Moolenaar norm! yl 67787bc3f74SBram Moolenaar call assert_equal('p', @0) 67887bc3f74SBram Moolenaar call assert_equal(10, winsaveview()['leftcol']) 67987bc3f74SBram Moolenaar norm! 2zL 68087bc3f74SBram Moolenaar call assert_equal(26, col('.')) 68187bc3f74SBram Moolenaar norm! yl 68287bc3f74SBram Moolenaar call assert_equal('z', @0) 68387bc3f74SBram Moolenaar call assert_equal(15, winsaveview()['leftcol']) 68487bc3f74SBram Moolenaar 68587bc3f74SBram Moolenaar " Test for zH 68687bc3f74SBram Moolenaar norm! 2zH 68787bc3f74SBram Moolenaar call assert_equal(15, col('.')) 68887bc3f74SBram Moolenaar call assert_equal(0, winsaveview()['leftcol']) 68987bc3f74SBram Moolenaar norm! yl 69087bc3f74SBram Moolenaar call assert_equal('o', @0) 69187bc3f74SBram Moolenaar 69287bc3f74SBram Moolenaar " Test for zs 69387bc3f74SBram Moolenaar norm! $zs 69487bc3f74SBram Moolenaar call assert_equal(26, col('.')) 69587bc3f74SBram Moolenaar call assert_equal(20, winsaveview()['leftcol']) 69687bc3f74SBram Moolenaar norm! yl 69787bc3f74SBram Moolenaar call assert_equal('z', @0) 69887bc3f74SBram Moolenaar 69987bc3f74SBram Moolenaar " Test for ze 70087bc3f74SBram Moolenaar norm! ze 70187bc3f74SBram Moolenaar call assert_equal(26, col('.')) 70287bc3f74SBram Moolenaar call assert_equal(11, winsaveview()['leftcol']) 70387bc3f74SBram Moolenaar norm! yl 70487bc3f74SBram Moolenaar call assert_equal('z', @0) 70587bc3f74SBram Moolenaar 70687bc3f74SBram Moolenaar " cleanup 70787bc3f74SBram Moolenaar set wrap listchars=eol:$ sidescrolloff=0 70887bc3f74SBram Moolenaar bw! 7092931f2a5SBram Moolenaarendfunc 71087bc3f74SBram Moolenaar 71187bc3f74SBram Moolenaarfunc! Test_normal18_z_fold() 71287bc3f74SBram Moolenaar " basic tests for foldopen/folddelete 71387bc3f74SBram Moolenaar if !has("folding") 71487bc3f74SBram Moolenaar return 71587bc3f74SBram Moolenaar endif 71687bc3f74SBram Moolenaar call Setup_NewWindow() 71787bc3f74SBram Moolenaar 50 71887bc3f74SBram Moolenaar setl foldenable fdm=marker foldlevel=5 71987bc3f74SBram Moolenaar 72087bc3f74SBram Moolenaar " Test for zF 72187bc3f74SBram Moolenaar " First fold 72287bc3f74SBram Moolenaar norm! 4zF 72387bc3f74SBram Moolenaar " check that folds have been created 72487bc3f74SBram Moolenaar call assert_equal(['50/*{{{*/', '51', '52', '53/*}}}*/'], getline(50,53)) 72587bc3f74SBram Moolenaar 72687bc3f74SBram Moolenaar " Test for zd 72787bc3f74SBram Moolenaar 51 72887bc3f74SBram Moolenaar norm! 2zF 72987bc3f74SBram Moolenaar call assert_equal(2, foldlevel('.')) 73087bc3f74SBram Moolenaar norm! kzd 73187bc3f74SBram Moolenaar call assert_equal(['50', '51/*{{{*/', '52/*}}}*/', '53'], getline(50,53)) 73287bc3f74SBram Moolenaar norm! j 73387bc3f74SBram Moolenaar call assert_equal(1, foldlevel('.')) 73487bc3f74SBram Moolenaar 73587bc3f74SBram Moolenaar " Test for zD 73687bc3f74SBram Moolenaar " also deletes partially selected folds recursively 73787bc3f74SBram Moolenaar 51 73887bc3f74SBram Moolenaar norm! zF 73987bc3f74SBram Moolenaar call assert_equal(2, foldlevel('.')) 74087bc3f74SBram Moolenaar norm! kV2jzD 74187bc3f74SBram Moolenaar call assert_equal(['50', '51', '52', '53'], getline(50,53)) 74287bc3f74SBram Moolenaar 74387bc3f74SBram Moolenaar " Test for zE 74487bc3f74SBram Moolenaar 85 74587bc3f74SBram Moolenaar norm! 4zF 74687bc3f74SBram Moolenaar 86 74787bc3f74SBram Moolenaar norm! 2zF 74887bc3f74SBram Moolenaar 90 74987bc3f74SBram Moolenaar norm! 4zF 75087bc3f74SBram Moolenaar call assert_equal(['85/*{{{*/', '86/*{{{*/', '87/*}}}*/', '88/*}}}*/', '89', '90/*{{{*/', '91', '92', '93/*}}}*/'], getline(85,93)) 75187bc3f74SBram Moolenaar norm! zE 75287bc3f74SBram Moolenaar call assert_equal(['85', '86', '87', '88', '89', '90', '91', '92', '93'], getline(85,93)) 75387bc3f74SBram Moolenaar 75487bc3f74SBram Moolenaar " Test for zn 75587bc3f74SBram Moolenaar 50 75687bc3f74SBram Moolenaar set foldlevel=0 75787bc3f74SBram Moolenaar norm! 2zF 75887bc3f74SBram Moolenaar norm! zn 75987bc3f74SBram Moolenaar norm! k 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('51/*}}}*/', getline('.')) 76587bc3f74SBram Moolenaar norm! j 76687bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 76787bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 76887bc3f74SBram Moolenaar 76987bc3f74SBram Moolenaar " Test for zN 77087bc3f74SBram Moolenaar 49 77187bc3f74SBram Moolenaar norm! zN 77287bc3f74SBram Moolenaar call assert_equal('49', getline('.')) 77387bc3f74SBram Moolenaar norm! j 77487bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 77587bc3f74SBram Moolenaar norm! j 77687bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 77787bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 77887bc3f74SBram Moolenaar 77987bc3f74SBram Moolenaar " Test for zi 78087bc3f74SBram Moolenaar norm! zi 78187bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 78287bc3f74SBram Moolenaar norm! zi 78387bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 78487bc3f74SBram Moolenaar norm! zi 78587bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 78687bc3f74SBram Moolenaar norm! zi 78787bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 78887bc3f74SBram Moolenaar 78987bc3f74SBram Moolenaar " Test for za 79087bc3f74SBram Moolenaar 50 79187bc3f74SBram Moolenaar norm! za 79287bc3f74SBram Moolenaar norm! k 79387bc3f74SBram Moolenaar call assert_equal('49', getline('.')) 79487bc3f74SBram Moolenaar norm! j 79587bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 79687bc3f74SBram Moolenaar norm! j 79787bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 79887bc3f74SBram Moolenaar norm! j 79987bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 80087bc3f74SBram Moolenaar 50 80187bc3f74SBram Moolenaar norm! za 80287bc3f74SBram Moolenaar norm! k 80387bc3f74SBram Moolenaar call assert_equal('49', getline('.')) 80487bc3f74SBram Moolenaar norm! j 80587bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 80687bc3f74SBram Moolenaar norm! j 80787bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 80887bc3f74SBram Moolenaar 80987bc3f74SBram Moolenaar 49 81087bc3f74SBram Moolenaar norm! 5zF 81187bc3f74SBram Moolenaar norm! k 81287bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 81387bc3f74SBram Moolenaar norm! j 81487bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 81587bc3f74SBram Moolenaar norm! j 81687bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 81787bc3f74SBram Moolenaar 49 81887bc3f74SBram Moolenaar norm! za 81987bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 82087bc3f74SBram Moolenaar norm! j 82187bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 82287bc3f74SBram Moolenaar norm! j 82387bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 82487bc3f74SBram Moolenaar set nofoldenable 82587bc3f74SBram Moolenaar " close fold and set foldenable 82687bc3f74SBram Moolenaar norm! za 82787bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 82887bc3f74SBram Moolenaar 82987bc3f74SBram Moolenaar 50 83087bc3f74SBram Moolenaar " have to use {count}za to open all folds and make the cursor visible 83187bc3f74SBram Moolenaar norm! 2za 83287bc3f74SBram Moolenaar norm! 2k 83387bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 83487bc3f74SBram Moolenaar norm! j 83587bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 83687bc3f74SBram Moolenaar norm! j 83787bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 83887bc3f74SBram Moolenaar norm! j 83987bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 84087bc3f74SBram Moolenaar norm! j 84187bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 84287bc3f74SBram Moolenaar 84387bc3f74SBram Moolenaar " Test for zA 84487bc3f74SBram Moolenaar 49 84587bc3f74SBram Moolenaar set foldlevel=0 84687bc3f74SBram Moolenaar 50 84787bc3f74SBram Moolenaar norm! zA 84887bc3f74SBram Moolenaar norm! 2k 84987bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 85087bc3f74SBram Moolenaar norm! j 85187bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 85287bc3f74SBram Moolenaar norm! j 85387bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 85487bc3f74SBram Moolenaar norm! j 85587bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 85687bc3f74SBram Moolenaar norm! j 85787bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 85887bc3f74SBram Moolenaar 859395b6babSBram Moolenaar " zA on a opened fold when foldenable is not set 86087bc3f74SBram Moolenaar 50 86187bc3f74SBram Moolenaar set nofoldenable 86287bc3f74SBram Moolenaar norm! zA 86387bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 86487bc3f74SBram Moolenaar norm! k 86587bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 86687bc3f74SBram Moolenaar norm! j 86787bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 86887bc3f74SBram Moolenaar norm! j 86987bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 87087bc3f74SBram Moolenaar 87187bc3f74SBram Moolenaar " Test for zc 87287bc3f74SBram Moolenaar norm! zE 87387bc3f74SBram Moolenaar 50 87487bc3f74SBram Moolenaar norm! 2zF 87587bc3f74SBram Moolenaar 49 87687bc3f74SBram Moolenaar norm! 5zF 87787bc3f74SBram Moolenaar set nofoldenable 87887bc3f74SBram Moolenaar 50 87987bc3f74SBram Moolenaar " There most likely is a bug somewhere: 88087bc3f74SBram Moolenaar " https://groups.google.com/d/msg/vim_dev/v2EkfJ_KQjI/u-Cvv94uCAAJ 88187bc3f74SBram Moolenaar " TODO: Should this only close the inner most fold or both folds? 88287bc3f74SBram Moolenaar norm! zc 88387bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 88487bc3f74SBram Moolenaar norm! k 88587bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 88687bc3f74SBram Moolenaar norm! j 88787bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 88887bc3f74SBram Moolenaar norm! j 88987bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 89087bc3f74SBram Moolenaar set nofoldenable 89187bc3f74SBram Moolenaar 50 89287bc3f74SBram Moolenaar norm! Vjzc 89387bc3f74SBram Moolenaar norm! k 89487bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 89587bc3f74SBram Moolenaar norm! j 89687bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 89787bc3f74SBram Moolenaar norm! j 89887bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 89987bc3f74SBram Moolenaar 90087bc3f74SBram Moolenaar " Test for zC 90187bc3f74SBram Moolenaar set nofoldenable 90287bc3f74SBram Moolenaar 50 90387bc3f74SBram Moolenaar norm! zCk 90487bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 90587bc3f74SBram Moolenaar norm! j 90687bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 90787bc3f74SBram Moolenaar norm! j 90887bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 90987bc3f74SBram Moolenaar 91087bc3f74SBram Moolenaar " Test for zx 91187bc3f74SBram Moolenaar " 1) close folds at line 49-54 91287bc3f74SBram Moolenaar set nofoldenable 91387bc3f74SBram Moolenaar 48 91487bc3f74SBram Moolenaar norm! zx 91587bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 91687bc3f74SBram Moolenaar norm! j 91787bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 91887bc3f74SBram Moolenaar norm! j 91987bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 92087bc3f74SBram Moolenaar 921395b6babSBram Moolenaar " 2) do not close fold under cursor 92287bc3f74SBram Moolenaar 51 92387bc3f74SBram Moolenaar set nofoldenable 92487bc3f74SBram Moolenaar norm! zx 92587bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 92687bc3f74SBram Moolenaar norm! 3k 92787bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 92887bc3f74SBram Moolenaar norm! j 92987bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 93087bc3f74SBram Moolenaar norm! j 93187bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 93287bc3f74SBram Moolenaar norm! j 93387bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 93487bc3f74SBram Moolenaar norm! j 93587bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 93687bc3f74SBram Moolenaar norm! j 93787bc3f74SBram Moolenaar call assert_equal('53', getline('.')) 93887bc3f74SBram Moolenaar norm! j 93987bc3f74SBram Moolenaar call assert_equal('54/*}}}*/', getline('.')) 94087bc3f74SBram Moolenaar norm! j 94187bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 94287bc3f74SBram Moolenaar 94387bc3f74SBram Moolenaar " 3) close one level of folds 94487bc3f74SBram Moolenaar 48 94587bc3f74SBram Moolenaar set nofoldenable 94687bc3f74SBram Moolenaar set foldlevel=1 94787bc3f74SBram Moolenaar norm! zx 94887bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 94987bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 95087bc3f74SBram Moolenaar norm! j 95187bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 95287bc3f74SBram Moolenaar norm! j 95387bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 95487bc3f74SBram Moolenaar norm! j 95587bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 95687bc3f74SBram Moolenaar norm! j 95787bc3f74SBram Moolenaar call assert_equal('53', getline('.')) 95887bc3f74SBram Moolenaar norm! j 95987bc3f74SBram Moolenaar call assert_equal('54/*}}}*/', getline('.')) 96087bc3f74SBram Moolenaar norm! j 96187bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 96287bc3f74SBram Moolenaar 96387bc3f74SBram Moolenaar " Test for zX 96487bc3f74SBram Moolenaar " Close all folds 96587bc3f74SBram Moolenaar set foldlevel=0 nofoldenable 96687bc3f74SBram Moolenaar 50 96787bc3f74SBram Moolenaar norm! zX 96887bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 96987bc3f74SBram Moolenaar norm! k 97087bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 97187bc3f74SBram Moolenaar norm! j 97287bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 97387bc3f74SBram Moolenaar norm! j 97487bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 97587bc3f74SBram Moolenaar 97687bc3f74SBram Moolenaar " Test for zm 97787bc3f74SBram Moolenaar 50 97887bc3f74SBram Moolenaar set nofoldenable foldlevel=2 97987bc3f74SBram Moolenaar norm! zm 98087bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 98187bc3f74SBram Moolenaar call assert_equal(1, &foldlevel) 98287bc3f74SBram Moolenaar norm! zm 98387bc3f74SBram Moolenaar call assert_equal(0, &foldlevel) 98487bc3f74SBram Moolenaar norm! zm 98587bc3f74SBram Moolenaar call assert_equal(0, &foldlevel) 98687bc3f74SBram Moolenaar norm! k 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 zM 99487bc3f74SBram Moolenaar 48 99587bc3f74SBram Moolenaar set nofoldenable foldlevel=99 99687bc3f74SBram Moolenaar norm! zM 99787bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 99887bc3f74SBram Moolenaar call assert_equal(0, &foldlevel) 99987bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 100087bc3f74SBram Moolenaar norm! j 100187bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 100287bc3f74SBram Moolenaar norm! j 100387bc3f74SBram Moolenaar call assert_equal('55', getline('.')) 100487bc3f74SBram Moolenaar 100587bc3f74SBram Moolenaar " Test for zr 100687bc3f74SBram Moolenaar 48 100787bc3f74SBram Moolenaar set nofoldenable foldlevel=0 100887bc3f74SBram Moolenaar norm! zr 100987bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 101087bc3f74SBram Moolenaar call assert_equal(1, &foldlevel) 101187bc3f74SBram Moolenaar set foldlevel=0 foldenable 101287bc3f74SBram Moolenaar norm! zr 101387bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 101487bc3f74SBram Moolenaar call assert_equal(1, &foldlevel) 101587bc3f74SBram Moolenaar norm! zr 101687bc3f74SBram Moolenaar call assert_equal(2, &foldlevel) 101787bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 101887bc3f74SBram Moolenaar norm! j 101987bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 102087bc3f74SBram Moolenaar norm! j 102187bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 102287bc3f74SBram Moolenaar norm! j 102387bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 102487bc3f74SBram Moolenaar norm! j 102587bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 102687bc3f74SBram Moolenaar 102787bc3f74SBram Moolenaar " Test for zR 102887bc3f74SBram Moolenaar 48 102987bc3f74SBram Moolenaar set nofoldenable foldlevel=0 103087bc3f74SBram Moolenaar norm! zR 103187bc3f74SBram Moolenaar call assert_equal(0, &foldenable) 103287bc3f74SBram Moolenaar call assert_equal(2, &foldlevel) 103387bc3f74SBram Moolenaar set foldenable foldlevel=0 103487bc3f74SBram Moolenaar norm! zR 103587bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 103687bc3f74SBram Moolenaar call assert_equal(2, &foldlevel) 103787bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 103887bc3f74SBram Moolenaar norm! j 103987bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 104087bc3f74SBram Moolenaar norm! j 104187bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 104287bc3f74SBram Moolenaar norm! j 104387bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 104487bc3f74SBram Moolenaar norm! j 104587bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 104687bc3f74SBram Moolenaar call append(50, ['a /*{{{*/', 'b /*}}}*/']) 104787bc3f74SBram Moolenaar 48 104887bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 104987bc3f74SBram Moolenaar norm! j 105087bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 105187bc3f74SBram Moolenaar norm! j 105287bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 105387bc3f74SBram Moolenaar norm! j 105487bc3f74SBram Moolenaar call assert_equal('a /*{{{*/', getline('.')) 105587bc3f74SBram Moolenaar norm! j 105687bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 105787bc3f74SBram Moolenaar norm! j 105887bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 105987bc3f74SBram Moolenaar 48 106087bc3f74SBram Moolenaar norm! zR 106187bc3f74SBram Moolenaar call assert_equal(1, &foldenable) 106287bc3f74SBram Moolenaar call assert_equal(3, &foldlevel) 106387bc3f74SBram Moolenaar call assert_equal('48', getline('.')) 106487bc3f74SBram Moolenaar norm! j 106587bc3f74SBram Moolenaar call assert_equal('49/*{{{*/', getline('.')) 106687bc3f74SBram Moolenaar norm! j 106787bc3f74SBram Moolenaar call assert_equal('50/*{{{*/', getline('.')) 106887bc3f74SBram Moolenaar norm! j 106987bc3f74SBram Moolenaar call assert_equal('a /*{{{*/', getline('.')) 107087bc3f74SBram Moolenaar norm! j 107187bc3f74SBram Moolenaar call assert_equal('b /*}}}*/', getline('.')) 107287bc3f74SBram Moolenaar norm! j 107387bc3f74SBram Moolenaar call assert_equal('51/*}}}*/', getline('.')) 107487bc3f74SBram Moolenaar norm! j 107587bc3f74SBram Moolenaar call assert_equal('52', getline('.')) 107687bc3f74SBram Moolenaar 107787bc3f74SBram Moolenaar " clean up 107887bc3f74SBram Moolenaar setl nofoldenable fdm=marker foldlevel=0 107987bc3f74SBram Moolenaar bw! 10802931f2a5SBram Moolenaarendfunc 108187bc3f74SBram Moolenaar 108287bc3f74SBram Moolenaarfunc! Test_normal19_z_spell() 108387bc3f74SBram Moolenaar if !has("spell") || !has('syntax') 108487bc3f74SBram Moolenaar return 108587bc3f74SBram Moolenaar endif 108687bc3f74SBram Moolenaar new 108787bc3f74SBram Moolenaar call append(0, ['1 good', '2 goood', '3 goood']) 108887bc3f74SBram Moolenaar set spell spellfile=./Xspellfile.add spelllang=en 108987bc3f74SBram Moolenaar let oldlang=v:lang 109087bc3f74SBram Moolenaar lang C 109187bc3f74SBram Moolenaar 109287bc3f74SBram Moolenaar " Test for zg 109387bc3f74SBram Moolenaar 1 109487bc3f74SBram Moolenaar norm! ]s 109587bc3f74SBram Moolenaar call assert_equal('2 goood', getline('.')) 109687bc3f74SBram Moolenaar norm! zg 109787bc3f74SBram Moolenaar 1 109887bc3f74SBram Moolenaar let a=execute('unsilent :norm! ]s') 109987bc3f74SBram Moolenaar call assert_equal('1 good', getline('.')) 110087bc3f74SBram Moolenaar call assert_equal('search hit BOTTOM, continuing at TOP', a[1:]) 110187bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 110287bc3f74SBram Moolenaar call assert_equal('goood', cnt[0]) 110387bc3f74SBram Moolenaar 110487bc3f74SBram Moolenaar " Test for zw 110587bc3f74SBram Moolenaar 2 110687bc3f74SBram Moolenaar norm! $zw 110787bc3f74SBram Moolenaar 1 110887bc3f74SBram Moolenaar norm! ]s 110987bc3f74SBram Moolenaar call assert_equal('2 goood', getline('.')) 111087bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 111187bc3f74SBram Moolenaar call assert_equal('#oood', cnt[0]) 111287bc3f74SBram Moolenaar call assert_equal('goood/!', cnt[1]) 111387bc3f74SBram Moolenaar 111487bc3f74SBram Moolenaar " Test for zg in visual mode 111587bc3f74SBram Moolenaar let a=execute('unsilent :norm! V$zg') 111687bc3f74SBram Moolenaar call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) 111787bc3f74SBram Moolenaar 1 111887bc3f74SBram Moolenaar norm! ]s 111987bc3f74SBram Moolenaar call assert_equal('3 goood', getline('.')) 112087bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 112187bc3f74SBram Moolenaar call assert_equal('2 goood', cnt[2]) 112287bc3f74SBram Moolenaar " Remove "2 good" from spellfile 112387bc3f74SBram Moolenaar 2 112487bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zw') 112587bc3f74SBram Moolenaar call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) 112687bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 112787bc3f74SBram Moolenaar call assert_equal('2 goood/!', cnt[3]) 112887bc3f74SBram Moolenaar 112987bc3f74SBram Moolenaar " Test for zG 113087bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zG') 113187bc3f74SBram Moolenaar call assert_match("Word '2 goood' added to .*", a) 113287bc3f74SBram Moolenaar let fname=matchstr(a, 'to\s\+\zs\f\+$') 113387bc3f74SBram Moolenaar let cnt=readfile(fname) 113487bc3f74SBram Moolenaar call assert_equal('2 goood', cnt[0]) 113587bc3f74SBram Moolenaar 113687bc3f74SBram Moolenaar " Test for zW 113787bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zW') 113887bc3f74SBram Moolenaar call assert_match("Word '2 goood' added to .*", a) 113987bc3f74SBram Moolenaar let cnt=readfile(fname) 114087bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 114187bc3f74SBram Moolenaar call assert_equal('2 goood/!', cnt[1]) 114287bc3f74SBram Moolenaar 114387bc3f74SBram Moolenaar " Test for zuW 114487bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zuW') 114587bc3f74SBram Moolenaar call assert_match("Word '2 goood' removed from .*", a) 114687bc3f74SBram Moolenaar let cnt=readfile(fname) 114787bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 114887bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[1]) 114987bc3f74SBram Moolenaar 115087bc3f74SBram Moolenaar " Test for zuG 115187bc3f74SBram Moolenaar let a=execute('unsilent norm! $zG') 115287bc3f74SBram Moolenaar call assert_match("Word 'goood' added to .*", a) 115387bc3f74SBram Moolenaar let cnt=readfile(fname) 115487bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 115587bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[1]) 115687bc3f74SBram Moolenaar call assert_equal('goood', cnt[2]) 115787bc3f74SBram Moolenaar let a=execute('unsilent norm! $zuG') 115887bc3f74SBram Moolenaar let cnt=readfile(fname) 115987bc3f74SBram Moolenaar call assert_match("Word 'goood' removed from .*", a) 116087bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 116187bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[1]) 116287bc3f74SBram Moolenaar call assert_equal('#oood', cnt[2]) 116387bc3f74SBram Moolenaar " word not found in wordlist 116487bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zuG') 116587bc3f74SBram Moolenaar let cnt=readfile(fname) 116687bc3f74SBram Moolenaar call assert_match("", a) 116787bc3f74SBram Moolenaar call assert_equal('# goood', cnt[0]) 116887bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[1]) 116987bc3f74SBram Moolenaar call assert_equal('#oood', cnt[2]) 117087bc3f74SBram Moolenaar 117187bc3f74SBram Moolenaar " Test for zug 117287bc3f74SBram Moolenaar call delete('./Xspellfile.add') 117387bc3f74SBram Moolenaar 2 117487bc3f74SBram Moolenaar let a=execute('unsilent norm! $zg') 117587bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 117687bc3f74SBram Moolenaar call assert_equal('goood', cnt[0]) 117787bc3f74SBram Moolenaar let a=execute('unsilent norm! $zug') 117887bc3f74SBram Moolenaar call assert_match("Word 'goood' removed from \./Xspellfile.add", a) 117987bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 118087bc3f74SBram Moolenaar call assert_equal('#oood', cnt[0]) 118187bc3f74SBram Moolenaar " word not in wordlist 118287bc3f74SBram Moolenaar let a=execute('unsilent norm! V$zug') 118387bc3f74SBram Moolenaar call assert_match('', a) 118487bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 118587bc3f74SBram Moolenaar call assert_equal('#oood', cnt[0]) 118687bc3f74SBram Moolenaar 118787bc3f74SBram Moolenaar " Test for zuw 118887bc3f74SBram Moolenaar call delete('./Xspellfile.add') 118987bc3f74SBram Moolenaar 2 119087bc3f74SBram Moolenaar let a=execute('unsilent norm! Vzw') 119187bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 119287bc3f74SBram Moolenaar call assert_equal('2 goood/!', cnt[0]) 119387bc3f74SBram Moolenaar let a=execute('unsilent norm! Vzuw') 119487bc3f74SBram Moolenaar call assert_match("Word '2 goood' removed from \./Xspellfile.add", a) 119587bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 119687bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[0]) 119787bc3f74SBram Moolenaar " word not in wordlist 119887bc3f74SBram Moolenaar let a=execute('unsilent norm! $zug') 119987bc3f74SBram Moolenaar call assert_match('', a) 120087bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile.add') 120187bc3f74SBram Moolenaar call assert_equal('# goood/!', cnt[0]) 120287bc3f74SBram Moolenaar 120387bc3f74SBram Moolenaar " add second entry to spellfile setting 120487bc3f74SBram Moolenaar set spellfile=./Xspellfile.add,./Xspellfile2.add 120587bc3f74SBram Moolenaar call delete('./Xspellfile.add') 120687bc3f74SBram Moolenaar 2 120787bc3f74SBram Moolenaar let a=execute('unsilent norm! $2zg') 120887bc3f74SBram Moolenaar let cnt=readfile('./Xspellfile2.add') 120987bc3f74SBram Moolenaar call assert_match("Word 'goood' added to ./Xspellfile2.add", a) 121087bc3f74SBram Moolenaar call assert_equal('goood', cnt[0]) 121187bc3f74SBram Moolenaar 121287bc3f74SBram Moolenaar " clean up 121387bc3f74SBram Moolenaar exe "lang" oldlang 121487bc3f74SBram Moolenaar call delete("./Xspellfile.add") 121587bc3f74SBram Moolenaar call delete("./Xspellfile2.add") 1216df0db16cSBram Moolenaar call delete("./Xspellfile.add.spl") 1217df0db16cSBram Moolenaar call delete("./Xspellfile2.add.spl") 121887bc3f74SBram Moolenaar 121987bc3f74SBram Moolenaar " zux -> no-op 122087bc3f74SBram Moolenaar 2 122187bc3f74SBram Moolenaar norm! $zux 122287bc3f74SBram Moolenaar call assert_equal([], glob('Xspellfile.add',0,1)) 122387bc3f74SBram Moolenaar call assert_equal([], glob('Xspellfile2.add',0,1)) 122487bc3f74SBram Moolenaar 122587bc3f74SBram Moolenaar set spellfile= 122687bc3f74SBram Moolenaar bw! 12272931f2a5SBram Moolenaarendfunc 122887bc3f74SBram Moolenaar 122987bc3f74SBram Moolenaarfunc! Test_normal20_exmode() 12300913a108SBram Moolenaar if !has("unix") 12310913a108SBram Moolenaar " Reading from redirected file doesn't work on MS-Windows 123287bc3f74SBram Moolenaar return 123387bc3f74SBram Moolenaar endif 123487bc3f74SBram Moolenaar call writefile(['1a', 'foo', 'bar', '.', 'w! Xfile2', 'q!'], 'Xscript') 123587bc3f74SBram Moolenaar call writefile(['1', '2'], 'Xfile') 123687bc3f74SBram Moolenaar call system(v:progpath .' -e -s < Xscript Xfile') 123787bc3f74SBram Moolenaar let a=readfile('Xfile2') 123887bc3f74SBram Moolenaar call assert_equal(['1', 'foo', 'bar', '2'], a) 123987bc3f74SBram Moolenaar 124087bc3f74SBram Moolenaar " clean up 124187bc3f74SBram Moolenaar for file in ['Xfile', 'Xfile2', 'Xscript'] 124287bc3f74SBram Moolenaar call delete(file) 124387bc3f74SBram Moolenaar endfor 124487bc3f74SBram Moolenaar bw! 12452931f2a5SBram Moolenaarendfunc 124687bc3f74SBram Moolenaar 124787bc3f74SBram Moolenaarfunc! Test_normal21_nv_hat() 124887bc3f74SBram Moolenaar set hidden 12492931f2a5SBram Moolenaar new 12502931f2a5SBram Moolenaar " to many buffers opened already, will not work 12512931f2a5SBram Moolenaar "call assert_fails(":b#", 'E23') 12522931f2a5SBram Moolenaar "call assert_equal('', @#) 125387bc3f74SBram Moolenaar e Xfoobar 125487bc3f74SBram Moolenaar e Xfile2 125587bc3f74SBram Moolenaar call feedkeys("\<c-^>", 't') 125687bc3f74SBram Moolenaar call assert_equal("Xfile2", fnamemodify(bufname('%'), ':t')) 125787bc3f74SBram Moolenaar call feedkeys("f\<c-^>", 't') 125887bc3f74SBram Moolenaar call assert_equal("Xfile2", fnamemodify(bufname('%'), ':t')) 125987bc3f74SBram Moolenaar " clean up 126087bc3f74SBram Moolenaar set nohidden 126187bc3f74SBram Moolenaar bw! 12622931f2a5SBram Moolenaarendfunc 126387bc3f74SBram Moolenaar 126487bc3f74SBram Moolenaarfunc! Test_normal22_zet() 126587bc3f74SBram Moolenaar " Test for ZZ 12660913a108SBram Moolenaar " let shell = &shell 12670913a108SBram Moolenaar " let &shell = 'sh' 126887bc3f74SBram Moolenaar call writefile(['1', '2'], 'Xfile') 126987bc3f74SBram Moolenaar let args = ' -u NONE -N -U NONE -i NONE --noplugins -X --not-a-term' 127087bc3f74SBram Moolenaar call system(v:progpath . args . ' -c "%d" -c ":norm! ZZ" Xfile') 127187bc3f74SBram Moolenaar let a = readfile('Xfile') 127287bc3f74SBram Moolenaar call assert_equal([], a) 127387bc3f74SBram Moolenaar " Test for ZQ 127487bc3f74SBram Moolenaar call writefile(['1', '2'], 'Xfile') 127587bc3f74SBram Moolenaar call system(v:progpath . args . ' -c "%d" -c ":norm! ZQ" Xfile') 127687bc3f74SBram Moolenaar let a = readfile('Xfile') 127787bc3f74SBram Moolenaar call assert_equal(['1', '2'], a) 127887bc3f74SBram Moolenaar 127987bc3f74SBram Moolenaar " clean up 128087bc3f74SBram Moolenaar for file in ['Xfile'] 128187bc3f74SBram Moolenaar call delete(file) 128287bc3f74SBram Moolenaar endfor 12830913a108SBram Moolenaar " let &shell = shell 12842931f2a5SBram Moolenaarendfunc 128587bc3f74SBram Moolenaar 128687bc3f74SBram Moolenaarfunc! Test_normal23_K() 128787bc3f74SBram Moolenaar " Test for K command 128887bc3f74SBram Moolenaar new 1289426f3754SBram Moolenaar call append(0, ['version8.txt', 'man', 'aa%bb', 'cc|dd']) 129087bc3f74SBram Moolenaar let k = &keywordprg 129187bc3f74SBram Moolenaar set keywordprg=:help 129287bc3f74SBram Moolenaar 1 129387bc3f74SBram Moolenaar norm! VK 129487bc3f74SBram Moolenaar call assert_equal('version8.txt', fnamemodify(bufname('%'), ':t')) 129587bc3f74SBram Moolenaar call assert_equal('help', &ft) 129687bc3f74SBram Moolenaar call assert_match('\*version8.txt\*', getline('.')) 129787bc3f74SBram Moolenaar helpclose 129887bc3f74SBram Moolenaar norm! 0K 129987bc3f74SBram Moolenaar call assert_equal('version8.txt', fnamemodify(bufname('%'), ':t')) 130087bc3f74SBram Moolenaar call assert_equal('help', &ft) 130187bc3f74SBram Moolenaar call assert_match('\*version8\.0\*', getline('.')) 130287bc3f74SBram Moolenaar helpclose 130387bc3f74SBram Moolenaar 1304426f3754SBram Moolenaar set keywordprg=:new 1305426f3754SBram Moolenaar set iskeyword+=% 1306426f3754SBram Moolenaar set iskeyword+=\| 1307426f3754SBram Moolenaar 2 1308426f3754SBram Moolenaar norm! K 1309426f3754SBram Moolenaar call assert_equal('man', fnamemodify(bufname('%'), ':t')) 1310426f3754SBram Moolenaar bwipe! 1311426f3754SBram Moolenaar 3 1312426f3754SBram Moolenaar norm! K 1313426f3754SBram Moolenaar call assert_equal('aa%bb', fnamemodify(bufname('%'), ':t')) 1314426f3754SBram Moolenaar bwipe! 1315eb828d01SBram Moolenaar if !has('win32') 1316426f3754SBram Moolenaar 4 1317426f3754SBram Moolenaar norm! K 1318426f3754SBram Moolenaar call assert_equal('cc|dd', fnamemodify(bufname('%'), ':t')) 1319426f3754SBram Moolenaar bwipe! 1320eb828d01SBram Moolenaar endif 1321426f3754SBram Moolenaar set iskeyword-=% 1322426f3754SBram Moolenaar set iskeyword-=\| 1323426f3754SBram Moolenaar 13240913a108SBram Moolenaar " Only expect "man" to work on Unix 13250913a108SBram Moolenaar if !has("unix") 132687bc3f74SBram Moolenaar let &keywordprg = k 132787bc3f74SBram Moolenaar bw! 132887bc3f74SBram Moolenaar return 132987bc3f74SBram Moolenaar endif 133087bc3f74SBram Moolenaar set keywordprg=man\ --pager=cat 133187bc3f74SBram Moolenaar " Test for using man 133287bc3f74SBram Moolenaar 2 133387bc3f74SBram Moolenaar let a = execute('unsilent norm! K') 133487bc3f74SBram Moolenaar call assert_match("man --pager=cat 'man'", a) 133587bc3f74SBram Moolenaar 133687bc3f74SBram Moolenaar " clean up 133787bc3f74SBram Moolenaar let &keywordprg = k 133887bc3f74SBram Moolenaar bw! 13392931f2a5SBram Moolenaarendfunc 134087bc3f74SBram Moolenaar 134187bc3f74SBram Moolenaarfunc! Test_normal24_rot13() 134287bc3f74SBram Moolenaar " This test uses multi byte characters 134387bc3f74SBram Moolenaar if !has("multi_byte") 134487bc3f74SBram Moolenaar return 134587bc3f74SBram Moolenaar endif 134687bc3f74SBram Moolenaar " Testing for g?? g?g? 134787bc3f74SBram Moolenaar new 134887bc3f74SBram Moolenaar call append(0, 'abcdefghijklmnopqrstuvwxyzäüö') 134987bc3f74SBram Moolenaar 1 135087bc3f74SBram Moolenaar norm! g?? 135187bc3f74SBram Moolenaar call assert_equal('nopqrstuvwxyzabcdefghijklmäüö', getline('.')) 135287bc3f74SBram Moolenaar norm! g?g? 135387bc3f74SBram Moolenaar call assert_equal('abcdefghijklmnopqrstuvwxyzäüö', getline('.')) 135487bc3f74SBram Moolenaar 135587bc3f74SBram Moolenaar " clean up 135687bc3f74SBram Moolenaar bw! 13572931f2a5SBram Moolenaarendfunc 135887bc3f74SBram Moolenaar 135987bc3f74SBram Moolenaarfunc! Test_normal25_tag() 136087bc3f74SBram Moolenaar " Testing for CTRL-] g CTRL-] g] 136187bc3f74SBram Moolenaar " CTRL-W g] CTRL-W CTRL-] CTRL-W g CTRL-] 136287bc3f74SBram Moolenaar h 136387bc3f74SBram Moolenaar " Test for CTRL-] 136487bc3f74SBram Moolenaar call search('\<x\>$') 136587bc3f74SBram Moolenaar exe "norm! \<c-]>" 136687bc3f74SBram Moolenaar call assert_equal("change.txt", fnamemodify(bufname('%'), ':t')) 136787bc3f74SBram Moolenaar norm! yiW 136887bc3f74SBram Moolenaar call assert_equal("*x*", @0) 136987bc3f74SBram Moolenaar exe ":norm \<c-o>" 137087bc3f74SBram Moolenaar 137187bc3f74SBram Moolenaar " Test for g_CTRL-] 137287bc3f74SBram Moolenaar call search('\<v_u\>$') 137387bc3f74SBram Moolenaar exe "norm! g\<c-]>" 137487bc3f74SBram Moolenaar call assert_equal("change.txt", fnamemodify(bufname('%'), ':t')) 137587bc3f74SBram Moolenaar norm! yiW 137687bc3f74SBram Moolenaar call assert_equal("*v_u*", @0) 137787bc3f74SBram Moolenaar exe ":norm \<c-o>" 137887bc3f74SBram Moolenaar 137987bc3f74SBram Moolenaar " Test for g] 138087bc3f74SBram Moolenaar call search('\<i_<Esc>$') 138187bc3f74SBram Moolenaar let a = execute(":norm! g]") 138287bc3f74SBram Moolenaar call assert_match('i_<Esc>.*insert.txt', a) 138387bc3f74SBram Moolenaar 138487bc3f74SBram Moolenaar if !empty(exepath('cscope')) && has('cscope') 138587bc3f74SBram Moolenaar " setting cscopetag changes how g] works 138687bc3f74SBram Moolenaar set cst 138787bc3f74SBram Moolenaar exe "norm! g]" 138887bc3f74SBram Moolenaar call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t')) 138987bc3f74SBram Moolenaar norm! yiW 139087bc3f74SBram Moolenaar call assert_equal("*i_<Esc>*", @0) 139187bc3f74SBram Moolenaar exe ":norm \<c-o>" 139287bc3f74SBram Moolenaar " Test for CTRL-W g] 139387bc3f74SBram Moolenaar exe "norm! \<C-W>g]" 139487bc3f74SBram Moolenaar call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t')) 139587bc3f74SBram Moolenaar norm! yiW 139687bc3f74SBram Moolenaar call assert_equal("*i_<Esc>*", @0) 139787bc3f74SBram Moolenaar call assert_equal(3, winnr('$')) 139887bc3f74SBram Moolenaar helpclose 139987bc3f74SBram Moolenaar set nocst 140087bc3f74SBram Moolenaar endif 140187bc3f74SBram Moolenaar 140287bc3f74SBram Moolenaar " Test for CTRL-W g] 140387bc3f74SBram Moolenaar let a = execute("norm! \<C-W>g]") 140487bc3f74SBram Moolenaar call assert_match('i_<Esc>.*insert.txt', a) 140587bc3f74SBram Moolenaar 140687bc3f74SBram Moolenaar " Test for CTRL-W CTRL-] 140787bc3f74SBram Moolenaar exe "norm! \<C-W>\<C-]>" 140887bc3f74SBram Moolenaar call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t')) 140987bc3f74SBram Moolenaar norm! yiW 141087bc3f74SBram Moolenaar call assert_equal("*i_<Esc>*", @0) 141187bc3f74SBram Moolenaar call assert_equal(3, winnr('$')) 141287bc3f74SBram Moolenaar helpclose 141387bc3f74SBram Moolenaar 141487bc3f74SBram Moolenaar " Test for CTRL-W g CTRL-] 141587bc3f74SBram Moolenaar exe "norm! \<C-W>g\<C-]>" 141687bc3f74SBram Moolenaar call assert_equal("insert.txt", fnamemodify(bufname('%'), ':t')) 141787bc3f74SBram Moolenaar norm! yiW 141887bc3f74SBram Moolenaar call assert_equal("*i_<Esc>*", @0) 141987bc3f74SBram Moolenaar call assert_equal(3, winnr('$')) 142087bc3f74SBram Moolenaar helpclose 142187bc3f74SBram Moolenaar 142287bc3f74SBram Moolenaar " clean up 142387bc3f74SBram Moolenaar helpclose 14242931f2a5SBram Moolenaarendfunc 142587bc3f74SBram Moolenaar 142687bc3f74SBram Moolenaarfunc! Test_normal26_put() 142787bc3f74SBram Moolenaar " Test for ]p ]P [p and [P 142887bc3f74SBram Moolenaar new 142987bc3f74SBram Moolenaar call append(0, ['while read LINE', 'do', ' ((count++))', ' if [ $? -ne 0 ]; then', " echo 'Error writing file'", ' fi', 'done']) 143087bc3f74SBram Moolenaar 1 143187bc3f74SBram Moolenaar /Error/y a 143287bc3f74SBram Moolenaar 2 143387bc3f74SBram Moolenaar norm! "a]pj"a[p 143487bc3f74SBram Moolenaar call assert_equal(['do', "echo 'Error writing file'", " echo 'Error writing file'", ' ((count++))'], getline(2,5)) 143587bc3f74SBram Moolenaar 1 143687bc3f74SBram Moolenaar /^\s\{4}/ 143787bc3f74SBram Moolenaar exe "norm! \"a]P3Eldt'" 143887bc3f74SBram Moolenaar exe "norm! j\"a[P2Eldt'" 143987bc3f74SBram Moolenaar call assert_equal([' if [ $? -ne 0 ]; then', " echo 'Error writing'", " echo 'Error'", " echo 'Error writing file'", ' fi'], getline(6,10)) 144087bc3f74SBram Moolenaar 144187bc3f74SBram Moolenaar " clean up 144287bc3f74SBram Moolenaar bw! 14432931f2a5SBram Moolenaarendfunc 144487bc3f74SBram Moolenaar 144587bc3f74SBram Moolenaarfunc! Test_normal27_bracket() 144687bc3f74SBram Moolenaar " Test for [' [` ]' ]` 144787bc3f74SBram Moolenaar call Setup_NewWindow() 144887bc3f74SBram Moolenaar 1,21s/.\+/ & b/ 144987bc3f74SBram Moolenaar 1 145087bc3f74SBram Moolenaar norm! $ma 145187bc3f74SBram Moolenaar 5 145287bc3f74SBram Moolenaar norm! $mb 145387bc3f74SBram Moolenaar 10 145487bc3f74SBram Moolenaar norm! $mc 145587bc3f74SBram Moolenaar 15 145687bc3f74SBram Moolenaar norm! $md 145787bc3f74SBram Moolenaar 20 145887bc3f74SBram Moolenaar norm! $me 145987bc3f74SBram Moolenaar 146087bc3f74SBram Moolenaar " Test for [' 146187bc3f74SBram Moolenaar 9 146287bc3f74SBram Moolenaar norm! 2[' 146387bc3f74SBram Moolenaar call assert_equal(' 1 b', getline('.')) 146487bc3f74SBram Moolenaar call assert_equal(1, line('.')) 146587bc3f74SBram Moolenaar call assert_equal(3, col('.')) 146687bc3f74SBram Moolenaar 146787bc3f74SBram Moolenaar " Test for ]' 146887bc3f74SBram Moolenaar norm! ]' 146987bc3f74SBram Moolenaar call assert_equal(' 5 b', getline('.')) 147087bc3f74SBram Moolenaar call assert_equal(5, line('.')) 147187bc3f74SBram Moolenaar call assert_equal(3, col('.')) 147287bc3f74SBram Moolenaar 147387bc3f74SBram Moolenaar " No mark after line 21, cursor moves to first non blank on current line 147487bc3f74SBram Moolenaar 21 147587bc3f74SBram Moolenaar norm! $]' 147687bc3f74SBram Moolenaar call assert_equal(' 21 b', getline('.')) 147787bc3f74SBram Moolenaar call assert_equal(21, line('.')) 147887bc3f74SBram Moolenaar call assert_equal(3, col('.')) 147987bc3f74SBram Moolenaar 148087bc3f74SBram Moolenaar " Test for [` 148187bc3f74SBram Moolenaar norm! 2[` 148287bc3f74SBram Moolenaar call assert_equal(' 15 b', getline('.')) 148387bc3f74SBram Moolenaar call assert_equal(15, line('.')) 148487bc3f74SBram Moolenaar call assert_equal(8, col('.')) 148587bc3f74SBram Moolenaar 148687bc3f74SBram Moolenaar " Test for ]` 148787bc3f74SBram Moolenaar norm! ]` 148887bc3f74SBram Moolenaar call assert_equal(' 20 b', getline('.')) 148987bc3f74SBram Moolenaar call assert_equal(20, line('.')) 149087bc3f74SBram Moolenaar call assert_equal(8, col('.')) 149187bc3f74SBram Moolenaar 149287bc3f74SBram Moolenaar " clean up 149387bc3f74SBram Moolenaar bw! 14942931f2a5SBram Moolenaarendfunc 149587bc3f74SBram Moolenaar 149687bc3f74SBram Moolenaarfunc! Test_normal28_parenthesis() 149787bc3f74SBram Moolenaar " basic testing for ( and ) 149887bc3f74SBram Moolenaar new 149987bc3f74SBram Moolenaar call append(0, ['This is a test. With some sentences!', '', 'Even with a question? And one more. And no sentence here']) 150087bc3f74SBram Moolenaar 150187bc3f74SBram Moolenaar $ 150287bc3f74SBram Moolenaar norm! d( 150387bc3f74SBram Moolenaar call assert_equal(['This is a test. With some sentences!', '', 'Even with a question? And one more. ', ''], getline(1, '$')) 150487bc3f74SBram Moolenaar norm! 2d( 150587bc3f74SBram Moolenaar call assert_equal(['This is a test. With some sentences!', '', ' ', ''], getline(1, '$')) 150687bc3f74SBram Moolenaar 1 150787bc3f74SBram Moolenaar norm! 0d) 150887bc3f74SBram Moolenaar call assert_equal(['With some sentences!', '', ' ', ''], getline(1, '$')) 150987bc3f74SBram Moolenaar 151087bc3f74SBram Moolenaar call append('$', ['This is a long sentence', '', 'spanning', 'over several lines. ']) 151187bc3f74SBram Moolenaar $ 151287bc3f74SBram Moolenaar norm! $d( 151387bc3f74SBram Moolenaar call assert_equal(['With some sentences!', '', ' ', '', 'This is a long sentence', ''], getline(1, '$')) 151487bc3f74SBram Moolenaar 151587bc3f74SBram Moolenaar " clean up 151687bc3f74SBram Moolenaar bw! 15172931f2a5SBram Moolenaarendfunc 151887bc3f74SBram Moolenaar 151987bc3f74SBram Moolenaarfun! Test_normal29_brace() 152087bc3f74SBram Moolenaar " basic test for { and } movements 152187bc3f74SBram Moolenaar let text= ['A paragraph begins after each empty line, and also at each of a set of', 152287bc3f74SBram Moolenaar \ 'paragraph macros, specified by the pairs of characters in the ''paragraphs''', 152387bc3f74SBram Moolenaar \ 'option. The default is "IPLPPPQPP TPHPLIPpLpItpplpipbp", which corresponds to', 152487bc3f74SBram Moolenaar \ 'the macros ".IP", ".LP", etc. (These are nroff macros, so the dot must be in', 152587bc3f74SBram Moolenaar \ 'the first column). A section boundary is also a paragraph boundary.', 152687bc3f74SBram Moolenaar \ 'Note that a blank line (only containing white space) is NOT a paragraph', 152787bc3f74SBram Moolenaar \ 'boundary.', 152887bc3f74SBram Moolenaar \ '', 152987bc3f74SBram Moolenaar \ '', 153087bc3f74SBram Moolenaar \ 'Also note that this does not include a ''{'' or ''}'' in the first column. When', 153187bc3f74SBram Moolenaar \ 'the ''{'' flag is in ''cpoptions'' then ''{'' in the first column is used as a', 153287bc3f74SBram Moolenaar \ 'paragraph boundary |posix|.', 153387bc3f74SBram Moolenaar \ '{', 153487bc3f74SBram Moolenaar \ 'This is no paragaraph', 153587bc3f74SBram Moolenaar \ 'unless the ''{'' is set', 153687bc3f74SBram Moolenaar \ 'in ''cpoptions''', 153787bc3f74SBram Moolenaar \ '}', 153887bc3f74SBram Moolenaar \ '.IP', 153987bc3f74SBram Moolenaar \ 'The nroff macros IP seperates a paragraph', 154087bc3f74SBram Moolenaar \ 'That means, it must be a ''.''', 154187bc3f74SBram Moolenaar \ 'followed by IP', 154287bc3f74SBram Moolenaar \ '.LPIt does not matter, if afterwards some', 154387bc3f74SBram Moolenaar \ 'more characters follow.', 154487bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 154587bc3f74SBram Moolenaar \ 'macros terminate a paragraph. That means', 154687bc3f74SBram Moolenaar \ 'a character like this:', 154787bc3f74SBram Moolenaar \ '.NH', 154887bc3f74SBram Moolenaar \ 'End of text here'] 154987bc3f74SBram Moolenaar new 155087bc3f74SBram Moolenaar call append(0, text) 155187bc3f74SBram Moolenaar 1 155287bc3f74SBram Moolenaar norm! 0d2} 155387bc3f74SBram Moolenaar call assert_equal(['.IP', 155487bc3f74SBram Moolenaar \ 'The nroff macros IP seperates a paragraph', 'That means, it must be a ''.''', 'followed by IP', 155587bc3f74SBram Moolenaar \ '.LPIt does not matter, if afterwards some', 'more characters follow.', '.SHAlso section boundaries from the nroff', 155687bc3f74SBram Moolenaar \ 'macros terminate a paragraph. That means', 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$')) 155787bc3f74SBram Moolenaar norm! 0d} 155887bc3f74SBram Moolenaar call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.', 155987bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 156087bc3f74SBram Moolenaar \ 'a character like this:', '.NH', 'End of text here', ''], getline(1, '$')) 156187bc3f74SBram Moolenaar $ 156287bc3f74SBram Moolenaar norm! d{ 156387bc3f74SBram Moolenaar call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.', 156487bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 'a character like this:', ''], getline(1, '$')) 156587bc3f74SBram Moolenaar norm! d{ 156687bc3f74SBram Moolenaar call assert_equal(['.LPIt does not matter, if afterwards some', 'more characters follow.', ''], getline(1,'$')) 156787bc3f74SBram Moolenaar " Test with { in cpooptions 156887bc3f74SBram Moolenaar %d 156987bc3f74SBram Moolenaar call append(0, text) 157087bc3f74SBram Moolenaar set cpo+={ 157187bc3f74SBram Moolenaar 1 157287bc3f74SBram Moolenaar norm! 0d2} 157387bc3f74SBram Moolenaar call assert_equal(['{', 'This is no paragaraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}', 157487bc3f74SBram Moolenaar \ '.IP', 'The nroff macros IP seperates a paragraph', 'That means, it must be a ''.''', 157587bc3f74SBram Moolenaar \ 'followed by IP', '.LPIt does not matter, if afterwards some', 'more characters follow.', 157687bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 157787bc3f74SBram Moolenaar \ 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$')) 157887bc3f74SBram Moolenaar $ 157987bc3f74SBram Moolenaar norm! d} 158087bc3f74SBram Moolenaar call assert_equal(['{', 'This is no paragaraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}', 158187bc3f74SBram Moolenaar \ '.IP', 'The nroff macros IP seperates a paragraph', 'That means, it must be a ''.''', 158287bc3f74SBram Moolenaar \ 'followed by IP', '.LPIt does not matter, if afterwards some', 'more characters follow.', 158387bc3f74SBram Moolenaar \ '.SHAlso section boundaries from the nroff', 'macros terminate a paragraph. That means', 158487bc3f74SBram Moolenaar \ 'a character like this:', '.NH', 'End of text here', ''], getline(1,'$')) 158587bc3f74SBram Moolenaar norm! gg} 158687bc3f74SBram Moolenaar norm! d5} 158787bc3f74SBram Moolenaar call assert_equal(['{', 'This is no paragaraph', 'unless the ''{'' is set', 'in ''cpoptions''', '}', ''], getline(1,'$')) 158887bc3f74SBram Moolenaar 158987bc3f74SBram Moolenaar " clean up 159087bc3f74SBram Moolenaar set cpo-={ 159187bc3f74SBram Moolenaar bw! 15922931f2a5SBram Moolenaarendfunc 159387bc3f74SBram Moolenaar 159487bc3f74SBram Moolenaarfun! Test_normal30_changecase() 159587bc3f74SBram Moolenaar " This test uses multi byte characters 159687bc3f74SBram Moolenaar if !has("multi_byte") 159787bc3f74SBram Moolenaar return 159887bc3f74SBram Moolenaar endif 159987bc3f74SBram Moolenaar new 160087bc3f74SBram Moolenaar call append(0, 'This is a simple test: äüöß') 160187bc3f74SBram Moolenaar norm! 1ggVu 160287bc3f74SBram Moolenaar call assert_equal('this is a simple test: äüöß', getline('.')) 160387bc3f74SBram Moolenaar norm! VU 160487bc3f74SBram Moolenaar call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.')) 160587bc3f74SBram Moolenaar norm! guu 160687bc3f74SBram Moolenaar call assert_equal('this is a simple test: äüöss', getline('.')) 160787bc3f74SBram Moolenaar norm! gUgU 160887bc3f74SBram Moolenaar call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.')) 160987bc3f74SBram Moolenaar norm! gugu 161087bc3f74SBram Moolenaar call assert_equal('this is a simple test: äüöss', getline('.')) 161187bc3f74SBram Moolenaar norm! gUU 161287bc3f74SBram Moolenaar call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.')) 161387bc3f74SBram Moolenaar norm! 010~ 161487bc3f74SBram Moolenaar call assert_equal('this is a SIMPLE TEST: ÄÜÖSS', getline('.')) 161587bc3f74SBram Moolenaar norm! V~ 161687bc3f74SBram Moolenaar call assert_equal('THIS IS A simple test: äüöss', getline('.')) 161787bc3f74SBram Moolenaar 16189f4de1f5SBram Moolenaar " Turkish ASCII turns to multi-byte. On Mac the Turkish locale is available 16199f4de1f5SBram Moolenaar " but toupper()/tolower() don't do the right thing. 1620d2381a2cSBram Moolenaar if !has('mac') && !has('osx') 16213317d5ebSBram Moolenaar try 16223317d5ebSBram Moolenaar lang tr_TR.UTF-8 16233317d5ebSBram Moolenaar set casemap= 16243317d5ebSBram Moolenaar call setline(1, 'iI') 16253317d5ebSBram Moolenaar 1normal gUU 16263317d5ebSBram Moolenaar call assert_equal("\u0130I", getline(1)) 16273317d5ebSBram Moolenaar call assert_equal("\u0130I", toupper("iI")) 16283317d5ebSBram Moolenaar 16293317d5ebSBram Moolenaar call setline(1, 'iI') 16303317d5ebSBram Moolenaar 1normal guu 16313317d5ebSBram Moolenaar call assert_equal("i\u0131", getline(1)) 16323317d5ebSBram Moolenaar call assert_equal("i\u0131", tolower("iI")) 16333317d5ebSBram Moolenaar 16341cc48206SBram Moolenaar set casemap& 16351cc48206SBram Moolenaar call setline(1, 'iI') 16361cc48206SBram Moolenaar 1normal gUU 16371cc48206SBram Moolenaar call assert_equal("II", getline(1)) 16381cc48206SBram Moolenaar call assert_equal("II", toupper("iI")) 16391cc48206SBram Moolenaar 16401cc48206SBram Moolenaar call setline(1, 'iI') 16411cc48206SBram Moolenaar 1normal guu 16421cc48206SBram Moolenaar call assert_equal("ii", getline(1)) 16431cc48206SBram Moolenaar call assert_equal("ii", tolower("iI")) 16441cc48206SBram Moolenaar 16453317d5ebSBram Moolenaar lang en_US.UTF-8 16463317d5ebSBram Moolenaar catch /E197:/ 16473317d5ebSBram Moolenaar " can't use Turkish locale 16483317d5ebSBram Moolenaar throw 'Skipped: Turkish locale not available' 16493317d5ebSBram Moolenaar endtry 16509f4de1f5SBram Moolenaar endif 16513317d5ebSBram Moolenaar 165287bc3f74SBram Moolenaar " clean up 165387bc3f74SBram Moolenaar bw! 16542931f2a5SBram Moolenaarendfunc 165587bc3f74SBram Moolenaar 165687bc3f74SBram Moolenaarfun! Test_normal31_r_cmd() 165787bc3f74SBram Moolenaar " Test for r command 165887bc3f74SBram Moolenaar new 165987bc3f74SBram Moolenaar call append(0, 'This is a simple test: abcd') 166087bc3f74SBram Moolenaar exe "norm! 1gg$r\<cr>" 166187bc3f74SBram Moolenaar call assert_equal(['This is a simple test: abc', '', ''], getline(1,'$')) 166287bc3f74SBram Moolenaar exe "norm! 1gg2wlr\<cr>" 166387bc3f74SBram Moolenaar call assert_equal(['This is a', 'simple test: abc', '', ''], getline(1,'$')) 166487bc3f74SBram Moolenaar exe "norm! 2gg0W5r\<cr>" 166587bc3f74SBram Moolenaar call assert_equal(['This is a', 'simple ', ' abc', '', ''], getline('1', '$')) 166687bc3f74SBram Moolenaar set autoindent 166787bc3f74SBram Moolenaar call setline(2, ['simple test: abc', '']) 166887bc3f74SBram Moolenaar exe "norm! 2gg0W5r\<cr>" 166987bc3f74SBram Moolenaar call assert_equal(['This is a', 'simple ', 'abc', '', '', ''], getline('1', '$')) 167087bc3f74SBram Moolenaar exe "norm! 1ggVr\<cr>" 167187bc3f74SBram Moolenaar call assert_equal('^M^M^M^M^M^M^M^M^M', strtrans(getline(1))) 167287bc3f74SBram Moolenaar call setline(1, 'This is a') 167387bc3f74SBram Moolenaar exe "norm! 1gg05rf" 167487bc3f74SBram Moolenaar call assert_equal('fffffis a', getline(1)) 167587bc3f74SBram Moolenaar 167687bc3f74SBram Moolenaar " clean up 167787bc3f74SBram Moolenaar set noautoindent 167887bc3f74SBram Moolenaar bw! 16792931f2a5SBram Moolenaarendfunc 168087bc3f74SBram Moolenaar 168187bc3f74SBram Moolenaarfunc! Test_normal32_g_cmd1() 168287bc3f74SBram Moolenaar " Test for g*, g# 168387bc3f74SBram Moolenaar new 168487bc3f74SBram Moolenaar call append(0, ['abc.x_foo', 'x_foobar.abc']) 168587bc3f74SBram Moolenaar 1 168687bc3f74SBram Moolenaar norm! $g* 168787bc3f74SBram Moolenaar call assert_equal('x_foo', @/) 168887bc3f74SBram Moolenaar call assert_equal('x_foobar.abc', getline('.')) 168987bc3f74SBram Moolenaar norm! $g# 169087bc3f74SBram Moolenaar call assert_equal('abc', @/) 169187bc3f74SBram Moolenaar call assert_equal('abc.x_foo', getline('.')) 169287bc3f74SBram Moolenaar 169387bc3f74SBram Moolenaar " clean up 169487bc3f74SBram Moolenaar bw! 16952931f2a5SBram Moolenaarendfunc 169687bc3f74SBram Moolenaar 169787bc3f74SBram Moolenaarfun! Test_normal33_g_cmd2() 169887bc3f74SBram Moolenaar if !has("jumplist") 169987bc3f74SBram Moolenaar return 170087bc3f74SBram Moolenaar endif 170187bc3f74SBram Moolenaar " Tests for g cmds 170287bc3f74SBram Moolenaar call Setup_NewWindow() 170387bc3f74SBram Moolenaar " Test for g` 170487bc3f74SBram Moolenaar clearjumps 170587bc3f74SBram Moolenaar norm! ma10j 170687bc3f74SBram Moolenaar let a=execute(':jumps') 170787bc3f74SBram Moolenaar " empty jumplist 170887bc3f74SBram Moolenaar call assert_equal('>', a[-1:]) 170987bc3f74SBram Moolenaar norm! g`a 171087bc3f74SBram Moolenaar call assert_equal('>', a[-1:]) 171187bc3f74SBram Moolenaar call assert_equal(1, line('.')) 171287bc3f74SBram Moolenaar call assert_equal('1', getline('.')) 171387bc3f74SBram Moolenaar 171487bc3f74SBram Moolenaar " Test for g; and g, 171587bc3f74SBram Moolenaar norm! g; 171687bc3f74SBram Moolenaar " there is only one change in the changelist 171787bc3f74SBram Moolenaar " currently, when we setup the window 171887bc3f74SBram Moolenaar call assert_equal(2, line('.')) 171987bc3f74SBram Moolenaar call assert_fails(':norm! g;', 'E662') 172087bc3f74SBram Moolenaar call assert_fails(':norm! g,', 'E663') 172187bc3f74SBram Moolenaar let &ul=&ul 172287bc3f74SBram Moolenaar call append('$', ['a', 'b', 'c', 'd']) 172387bc3f74SBram Moolenaar let &ul=&ul 172487bc3f74SBram Moolenaar call append('$', ['Z', 'Y', 'X', 'W']) 172587bc3f74SBram Moolenaar let a = execute(':changes') 172687bc3f74SBram Moolenaar call assert_match('2\s\+0\s\+2', a) 172787bc3f74SBram Moolenaar call assert_match('101\s\+0\s\+a', a) 172887bc3f74SBram Moolenaar call assert_match('105\s\+0\s\+Z', a) 172987bc3f74SBram Moolenaar norm! 3g; 173087bc3f74SBram Moolenaar call assert_equal(2, line('.')) 173187bc3f74SBram Moolenaar norm! 2g, 173287bc3f74SBram Moolenaar call assert_equal(105, line('.')) 173387bc3f74SBram Moolenaar 173487bc3f74SBram Moolenaar " Test for g& - global substitute 173587bc3f74SBram Moolenaar %d 173687bc3f74SBram Moolenaar call setline(1, range(1,10)) 173787bc3f74SBram Moolenaar call append('$', ['a', 'b', 'c', 'd']) 173887bc3f74SBram Moolenaar $s/\w/&&/g 173987bc3f74SBram Moolenaar exe "norm! /[1-8]\<cr>" 174087bc3f74SBram Moolenaar norm! g& 174187bc3f74SBram Moolenaar call assert_equal(['11', '22', '33', '44', '55', '66', '77', '88', '9', '110', 'a', 'b', 'c', 'dd'], getline(1, '$')) 174287bc3f74SBram Moolenaar 174387bc3f74SBram Moolenaar " Test for gv 174487bc3f74SBram Moolenaar %d 174587bc3f74SBram Moolenaar call append('$', repeat(['abcdefgh'], 8)) 174687bc3f74SBram Moolenaar exe "norm! 2gg02l\<c-v>2j2ly" 174787bc3f74SBram Moolenaar call assert_equal(['cde', 'cde', 'cde'], getreg(0, 1, 1)) 174887bc3f74SBram Moolenaar " in visual mode, gv swaps current and last selected region 174987bc3f74SBram Moolenaar exe "norm! G0\<c-v>4k4lgvd" 175087bc3f74SBram Moolenaar call assert_equal(['', 'abfgh', 'abfgh', 'abfgh', 'abcdefgh', 'abcdefgh', 'abcdefgh', 'abcdefgh', 'abcdefgh'], getline(1,'$')) 175187bc3f74SBram Moolenaar exe "norm! G0\<c-v>4k4ly" 175287bc3f74SBram Moolenaar exe "norm! gvood" 175387bc3f74SBram Moolenaar call assert_equal(['', 'abfgh', 'abfgh', 'abfgh', 'fgh', 'fgh', 'fgh', 'fgh', 'fgh'], getline(1,'$')) 175487bc3f74SBram Moolenaar 175587bc3f74SBram Moolenaar " Test for gk/gj 175687bc3f74SBram Moolenaar %d 175787bc3f74SBram Moolenaar 15vsp 175887bc3f74SBram Moolenaar set wrap listchars= sbr= 175987bc3f74SBram Moolenaar let lineA='abcdefghijklmnopqrstuvwxyz' 176087bc3f74SBram Moolenaar let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' 176187bc3f74SBram Moolenaar $put =lineA 176287bc3f74SBram Moolenaar $put =lineB 176387bc3f74SBram Moolenaar 176487bc3f74SBram Moolenaar norm! 3gg0dgk 176587bc3f74SBram Moolenaar call assert_equal(['', 'abcdefghijklmno', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'], getline(1, '$')) 176687bc3f74SBram Moolenaar set nu 176787bc3f74SBram Moolenaar norm! 3gg0gjdgj 176887bc3f74SBram Moolenaar call assert_equal(['', 'abcdefghijklmno', '0123456789AMNOPQRSTUVWXYZ'], getline(1,'$')) 176987bc3f74SBram Moolenaar 177087bc3f74SBram Moolenaar " Test for gJ 177187bc3f74SBram Moolenaar norm! 2gggJ 177287bc3f74SBram Moolenaar call assert_equal(['', 'abcdefghijklmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$')) 177387bc3f74SBram Moolenaar call assert_equal(16, col('.')) 177487bc3f74SBram Moolenaar " shouldn't do anything 177587bc3f74SBram Moolenaar norm! 10gJ 177687bc3f74SBram Moolenaar call assert_equal(1, col('.')) 177787bc3f74SBram Moolenaar 177887bc3f74SBram Moolenaar " Test for g0 g^ gm g$ 177987bc3f74SBram Moolenaar exe "norm! 2gg0gji " 178087bc3f74SBram Moolenaar call assert_equal(['', 'abcdefghijk lmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$')) 178187bc3f74SBram Moolenaar norm! g0yl 178287bc3f74SBram Moolenaar call assert_equal(12, col('.')) 178387bc3f74SBram Moolenaar call assert_equal(' ', getreg(0)) 178487bc3f74SBram Moolenaar norm! g$yl 178587bc3f74SBram Moolenaar call assert_equal(22, col('.')) 178687bc3f74SBram Moolenaar call assert_equal('3', getreg(0)) 178787bc3f74SBram Moolenaar norm! gmyl 178887bc3f74SBram Moolenaar call assert_equal(17, col('.')) 178987bc3f74SBram Moolenaar call assert_equal('n', getreg(0)) 179087bc3f74SBram Moolenaar norm! g^yl 179187bc3f74SBram Moolenaar call assert_equal(15, col('.')) 179287bc3f74SBram Moolenaar call assert_equal('l', getreg(0)) 179387bc3f74SBram Moolenaar 179487bc3f74SBram Moolenaar " Test for g Ctrl-G 17950913a108SBram Moolenaar set ff=unix 179687bc3f74SBram Moolenaar let a=execute(":norm! g\<c-g>") 179787bc3f74SBram Moolenaar call assert_match('Col 15 of 43; Line 2 of 2; Word 2 of 2; Byte 16 of 45', a) 179887bc3f74SBram Moolenaar 179987bc3f74SBram Moolenaar " Test for gI 180087bc3f74SBram Moolenaar norm! gIfoo 180187bc3f74SBram Moolenaar call assert_equal(['', 'fooabcdefghijk lmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$')) 180287bc3f74SBram Moolenaar 180387bc3f74SBram Moolenaar " Test for gi 180487bc3f74SBram Moolenaar wincmd c 180587bc3f74SBram Moolenaar %d 180687bc3f74SBram Moolenaar set tw=0 180787bc3f74SBram Moolenaar call setline(1, ['foobar', 'new line']) 180887bc3f74SBram Moolenaar norm! A next word 180987bc3f74SBram Moolenaar $put ='third line' 181087bc3f74SBram Moolenaar norm! gi another word 181187bc3f74SBram Moolenaar call assert_equal(['foobar next word another word', 'new line', 'third line'], getline(1,'$')) 181287bc3f74SBram Moolenaar 181387bc3f74SBram Moolenaar " clean up 181487bc3f74SBram Moolenaar bw! 18152931f2a5SBram Moolenaarendfunc 181687bc3f74SBram Moolenaar 181787bc3f74SBram Moolenaarfun! Test_normal34_g_cmd3() 181887bc3f74SBram Moolenaar if !has("multi_byte") 181987bc3f74SBram Moolenaar return 182087bc3f74SBram Moolenaar endif 1821395b6babSBram Moolenaar 182287bc3f74SBram Moolenaar " Test for g8 182387bc3f74SBram Moolenaar new 1824395b6babSBram Moolenaar let a=execute(':norm! 1G0g8') 1825395b6babSBram Moolenaar call assert_equal("\nNUL", a) 182687bc3f74SBram Moolenaar 1827395b6babSBram Moolenaar call setline(1, 'abcdefghijklmnopqrstuvwxyzäüö') 1828395b6babSBram Moolenaar let a=execute(':norm! 1G$g8') 1829395b6babSBram Moolenaar call assert_equal("\nc3 b6 ", a) 1830395b6babSBram Moolenaar 1831395b6babSBram Moolenaar call setline(1, "a\u0302") 1832395b6babSBram Moolenaar let a=execute(':norm! 1G0g8') 1833395b6babSBram Moolenaar call assert_equal("\n61 + cc 82 ", a) 1834395b6babSBram Moolenaar 183587bc3f74SBram Moolenaar " clean up 183687bc3f74SBram Moolenaar bw! 18372931f2a5SBram Moolenaarendfunc 183887bc3f74SBram Moolenaar 1839395b6babSBram Moolenaarfunc Test_normal_8g8() 1840395b6babSBram Moolenaar if !has("multi_byte") 1841395b6babSBram Moolenaar return 1842395b6babSBram Moolenaar endif 1843395b6babSBram Moolenaar new 1844395b6babSBram Moolenaar 1845395b6babSBram Moolenaar " Test 8g8 which finds invalid utf8 at or after the cursor. 1846395b6babSBram Moolenaar 1847395b6babSBram Moolenaar " With invalid byte. 1848395b6babSBram Moolenaar call setline(1, "___\xff___") 1849395b6babSBram Moolenaar norm! 1G08g8g 1850395b6babSBram Moolenaar call assert_equal([0, 1, 4, 0, 1], getcurpos()) 1851395b6babSBram Moolenaar 1852395b6babSBram Moolenaar " With invalid byte before the cursor. 1853395b6babSBram Moolenaar call setline(1, "___\xff___") 1854395b6babSBram Moolenaar norm! 1G$h8g8g 1855395b6babSBram Moolenaar call assert_equal([0, 1, 6, 0, 9], getcurpos()) 1856395b6babSBram Moolenaar 1857395b6babSBram Moolenaar " With truncated sequence. 1858395b6babSBram Moolenaar call setline(1, "___\xE2\x82___") 1859395b6babSBram Moolenaar norm! 1G08g8g 1860395b6babSBram Moolenaar call assert_equal([0, 1, 4, 0, 1], getcurpos()) 1861395b6babSBram Moolenaar 1862395b6babSBram Moolenaar " With overlong sequence. 1863395b6babSBram Moolenaar call setline(1, "___\xF0\x82\x82\xAC___") 1864395b6babSBram Moolenaar norm! 1G08g8g 1865395b6babSBram Moolenaar call assert_equal([0, 1, 4, 0, 1], getcurpos()) 1866395b6babSBram Moolenaar 1867395b6babSBram Moolenaar " With valid utf8. 1868395b6babSBram Moolenaar call setline(1, "café") 1869395b6babSBram Moolenaar norm! 1G08g8 1870395b6babSBram Moolenaar call assert_equal([0, 1, 1, 0, 1], getcurpos()) 1871395b6babSBram Moolenaar 1872395b6babSBram Moolenaar bw! 1873395b6babSBram Moolenaarendfunc 1874395b6babSBram Moolenaar 187587bc3f74SBram Moolenaarfun! Test_normal35_g_cmd4() 187687bc3f74SBram Moolenaar " Test for g< 187787bc3f74SBram Moolenaar " Cannot capture its output, 187887bc3f74SBram Moolenaar " probably a bug, therefore, test disabled: 187931845093SBram Moolenaar throw "Skipped: output of g< can't be tested currently" 188087bc3f74SBram Moolenaar echo "a\nb\nc\nd" 188187bc3f74SBram Moolenaar let b=execute(':norm! g<') 188287bc3f74SBram Moolenaar call assert_true(!empty(b), 'failed `execute(g<)`') 18832931f2a5SBram Moolenaarendfunc 188487bc3f74SBram Moolenaar 188587bc3f74SBram Moolenaarfun! Test_normal36_g_cmd5() 188687bc3f74SBram Moolenaar new 188787bc3f74SBram Moolenaar call append(0, 'abcdefghijklmnopqrstuvwxyz') 18880913a108SBram Moolenaar set ff=unix 188987bc3f74SBram Moolenaar " Test for gp gP 189087bc3f74SBram Moolenaar call append(1, range(1,10)) 189187bc3f74SBram Moolenaar 1 189287bc3f74SBram Moolenaar norm! 1yy 189387bc3f74SBram Moolenaar 3 189487bc3f74SBram Moolenaar norm! gp 189587bc3f74SBram Moolenaar call assert_equal([0, 5, 1, 0, 1], getcurpos()) 189687bc3f74SBram Moolenaar $ 189787bc3f74SBram Moolenaar norm! gP 189887bc3f74SBram Moolenaar call assert_equal([0, 14, 1, 0, 1], getcurpos()) 189987bc3f74SBram Moolenaar 190087bc3f74SBram Moolenaar " Test for go 190187bc3f74SBram Moolenaar norm! 26go 190287bc3f74SBram Moolenaar call assert_equal([0, 1, 26, 0, 26], getcurpos()) 190387bc3f74SBram Moolenaar norm! 27go 190487bc3f74SBram Moolenaar call assert_equal([0, 1, 26, 0, 26], getcurpos()) 190587bc3f74SBram Moolenaar norm! 28go 190687bc3f74SBram Moolenaar call assert_equal([0, 2, 1, 0, 1], getcurpos()) 190787bc3f74SBram Moolenaar set ff=dos 190887bc3f74SBram Moolenaar norm! 29go 190987bc3f74SBram Moolenaar call assert_equal([0, 2, 1, 0, 1], getcurpos()) 191087bc3f74SBram Moolenaar set ff=unix 191187bc3f74SBram Moolenaar norm! gg0 191287bc3f74SBram Moolenaar norm! 101go 191387bc3f74SBram Moolenaar call assert_equal([0, 13, 26, 0, 26], getcurpos()) 191487bc3f74SBram Moolenaar norm! 103go 191587bc3f74SBram Moolenaar call assert_equal([0, 14, 1, 0, 1], getcurpos()) 191687bc3f74SBram Moolenaar " count > buffer content 191787bc3f74SBram Moolenaar norm! 120go 191887bc3f74SBram Moolenaar call assert_equal([0, 14, 1, 0, 2147483647], getcurpos()) 191987bc3f74SBram Moolenaar " clean up 192087bc3f74SBram Moolenaar bw! 19212931f2a5SBram Moolenaarendfunc 192287bc3f74SBram Moolenaar 192387bc3f74SBram Moolenaarfun! Test_normal37_g_cmd6() 192487bc3f74SBram Moolenaar " basic test for gt and gT 192587bc3f74SBram Moolenaar tabnew 1.txt 192687bc3f74SBram Moolenaar tabnew 2.txt 192787bc3f74SBram Moolenaar tabnew 3.txt 192887bc3f74SBram Moolenaar norm! 1gt 192987bc3f74SBram Moolenaar call assert_equal(1, tabpagenr()) 193087bc3f74SBram Moolenaar norm! 3gt 193187bc3f74SBram Moolenaar call assert_equal(3, tabpagenr()) 193287bc3f74SBram Moolenaar norm! 1gT 193387bc3f74SBram Moolenaar " count gT goes not to the absolute tabpagenumber 193487bc3f74SBram Moolenaar " but, but goes to the count previous tabpagenumber 193587bc3f74SBram Moolenaar call assert_equal(2, tabpagenr()) 193687bc3f74SBram Moolenaar " wrap around 193787bc3f74SBram Moolenaar norm! 3gT 193887bc3f74SBram Moolenaar call assert_equal(3, tabpagenr()) 193987bc3f74SBram Moolenaar " gt does not wrap around 194087bc3f74SBram Moolenaar norm! 5gt 194187bc3f74SBram Moolenaar call assert_equal(3, tabpagenr()) 194287bc3f74SBram Moolenaar 194387bc3f74SBram Moolenaar for i in range(3) 194487bc3f74SBram Moolenaar tabclose 194587bc3f74SBram Moolenaar endfor 194687bc3f74SBram Moolenaar " clean up 194787bc3f74SBram Moolenaar call assert_fails(':tabclose', 'E784') 19482931f2a5SBram Moolenaarendfunc 194987bc3f74SBram Moolenaar 195087bc3f74SBram Moolenaarfun! Test_normal38_nvhome() 195187bc3f74SBram Moolenaar " Test for <Home> and <C-Home> key 195287bc3f74SBram Moolenaar new 195387bc3f74SBram Moolenaar call setline(1, range(10)) 195487bc3f74SBram Moolenaar $ 195587bc3f74SBram Moolenaar setl et sw=2 195687bc3f74SBram Moolenaar norm! V10>$ 195787bc3f74SBram Moolenaar " count is ignored 195887bc3f74SBram Moolenaar exe "norm! 10\<home>" 195987bc3f74SBram Moolenaar call assert_equal(1, col('.')) 196087bc3f74SBram Moolenaar exe "norm! \<home>" 196187bc3f74SBram Moolenaar call assert_equal([0, 10, 1, 0, 1], getcurpos()) 196287bc3f74SBram Moolenaar exe "norm! 5\<c-home>" 196387bc3f74SBram Moolenaar call assert_equal([0, 5, 1, 0, 1], getcurpos()) 196487bc3f74SBram Moolenaar exe "norm! \<c-home>" 196587bc3f74SBram Moolenaar call assert_equal([0, 1, 1, 0, 1], getcurpos()) 196687bc3f74SBram Moolenaar 196787bc3f74SBram Moolenaar " clean up 196887bc3f74SBram Moolenaar bw! 19692931f2a5SBram Moolenaarendfunc 197087bc3f74SBram Moolenaar 197187bc3f74SBram Moolenaarfun! Test_normal39_cw() 197287bc3f74SBram Moolenaar " Test for cw and cW on whitespace 197387bc3f74SBram Moolenaar " and cpo+=w setting 197487bc3f74SBram Moolenaar new 197587bc3f74SBram Moolenaar set tw=0 197687bc3f74SBram Moolenaar call append(0, 'here are some words') 197787bc3f74SBram Moolenaar norm! 1gg0elcwZZZ 197887bc3f74SBram Moolenaar call assert_equal('hereZZZare some words', getline('.')) 197987bc3f74SBram Moolenaar norm! 1gg0elcWYYY 198087bc3f74SBram Moolenaar call assert_equal('hereZZZareYYYsome words', getline('.')) 198187bc3f74SBram Moolenaar set cpo+=w 198287bc3f74SBram Moolenaar call setline(1, 'here are some words') 198387bc3f74SBram Moolenaar norm! 1gg0elcwZZZ 198487bc3f74SBram Moolenaar call assert_equal('hereZZZ are some words', getline('.')) 198587bc3f74SBram Moolenaar norm! 1gg2elcWYYY 198687bc3f74SBram Moolenaar call assert_equal('hereZZZ areYYY some words', getline('.')) 198787bc3f74SBram Moolenaar set cpo-=w 198887bc3f74SBram Moolenaar norm! 2gg0cwfoo 198987bc3f74SBram Moolenaar call assert_equal('foo', getline('.')) 199087bc3f74SBram Moolenaar 199187bc3f74SBram Moolenaar " clean up 199287bc3f74SBram Moolenaar bw! 19932931f2a5SBram Moolenaarendfunc 199487bc3f74SBram Moolenaar 199587bc3f74SBram Moolenaarfun! Test_normal40_ctrl_bsl() 199687bc3f74SBram Moolenaar " Basic test for CTRL-\ commands 199787bc3f74SBram Moolenaar new 199887bc3f74SBram Moolenaar call append(0, 'here are some words') 199987bc3f74SBram Moolenaar exe "norm! 1gg0a\<C-\>\<C-N>" 200087bc3f74SBram Moolenaar call assert_equal('n', mode()) 200187bc3f74SBram Moolenaar call assert_equal(1, col('.')) 200287bc3f74SBram Moolenaar call assert_equal('', visualmode()) 200387bc3f74SBram Moolenaar exe "norm! 1gg0viw\<C-\>\<C-N>" 200487bc3f74SBram Moolenaar call assert_equal('n', mode()) 200587bc3f74SBram Moolenaar call assert_equal(4, col('.')) 200687bc3f74SBram Moolenaar exe "norm! 1gg0a\<C-\>\<C-G>" 200787bc3f74SBram Moolenaar call assert_equal('n', mode()) 200887bc3f74SBram Moolenaar call assert_equal(1, col('.')) 200987bc3f74SBram Moolenaar "imap <buffer> , <c-\><c-n> 201087bc3f74SBram Moolenaar set im 201187bc3f74SBram Moolenaar exe ":norm! \<c-\>\<c-n>dw" 201287bc3f74SBram Moolenaar set noim 201387bc3f74SBram Moolenaar call assert_equal('are some words', getline(1)) 201487bc3f74SBram Moolenaar call assert_false(&insertmode) 201587bc3f74SBram Moolenaar 201687bc3f74SBram Moolenaar " clean up 201787bc3f74SBram Moolenaar bw! 20182931f2a5SBram Moolenaarendfunc 201987bc3f74SBram Moolenaar 202087bc3f74SBram Moolenaarfun! Test_normal41_insert_reg() 202187bc3f74SBram Moolenaar " Test for <c-r>=, <c-r><c-r>= and <c-r><c-o>= 202287bc3f74SBram Moolenaar " in insert mode 202387bc3f74SBram Moolenaar new 202487bc3f74SBram Moolenaar set sts=2 sw=2 ts=8 tw=0 202587bc3f74SBram Moolenaar call append(0, ["aaa\tbbb\tccc", '', '', '']) 202687bc3f74SBram Moolenaar let a=getline(1) 202787bc3f74SBram Moolenaar norm! 2gg0 202887bc3f74SBram Moolenaar exe "norm! a\<c-r>=a\<cr>" 202987bc3f74SBram Moolenaar norm! 3gg0 203087bc3f74SBram Moolenaar exe "norm! a\<c-r>\<c-r>=a\<cr>" 203187bc3f74SBram Moolenaar norm! 4gg0 203287bc3f74SBram Moolenaar exe "norm! a\<c-r>\<c-o>=a\<cr>" 203387bc3f74SBram Moolenaar call assert_equal(['aaa bbb ccc', 'aaa bbb ccc', 'aaa bbb ccc', 'aaa bbb ccc', ''], getline(1, '$')) 203487bc3f74SBram Moolenaar 203587bc3f74SBram Moolenaar " clean up 203687bc3f74SBram Moolenaar set sts=0 sw=8 ts=8 203731845093SBram Moolenaar bw! 20382931f2a5SBram Moolenaarendfunc 203987bc3f74SBram Moolenaar 204087bc3f74SBram Moolenaarfunc! Test_normal42_halfpage() 204187bc3f74SBram Moolenaar " basic test for Ctrl-D and Ctrl-U 204287bc3f74SBram Moolenaar call Setup_NewWindow() 204387bc3f74SBram Moolenaar call assert_equal(5, &scroll) 204487bc3f74SBram Moolenaar exe "norm! \<c-d>" 204587bc3f74SBram Moolenaar call assert_equal('6', getline('.')) 204687bc3f74SBram Moolenaar exe "norm! 2\<c-d>" 204787bc3f74SBram Moolenaar call assert_equal('8', getline('.')) 204887bc3f74SBram Moolenaar call assert_equal(2, &scroll) 204987bc3f74SBram Moolenaar set scroll=5 205087bc3f74SBram Moolenaar exe "norm! \<c-u>" 205187bc3f74SBram Moolenaar call assert_equal('3', getline('.')) 205287bc3f74SBram Moolenaar 1 205387bc3f74SBram Moolenaar set scrolloff=5 205487bc3f74SBram Moolenaar exe "norm! \<c-d>" 205587bc3f74SBram Moolenaar call assert_equal('10', getline('.')) 205687bc3f74SBram Moolenaar exe "norm! \<c-u>" 205787bc3f74SBram Moolenaar call assert_equal('5', getline('.')) 205887bc3f74SBram Moolenaar 1 205987bc3f74SBram Moolenaar set scrolloff=99 206087bc3f74SBram Moolenaar exe "norm! \<c-d>" 206187bc3f74SBram Moolenaar call assert_equal('10', getline('.')) 206287bc3f74SBram Moolenaar set scrolloff=0 206387bc3f74SBram Moolenaar 100 206487bc3f74SBram Moolenaar exe "norm! $\<c-u>" 206587bc3f74SBram Moolenaar call assert_equal('95', getline('.')) 206687bc3f74SBram Moolenaar call assert_equal([0, 95, 1, 0, 1], getcurpos()) 206787bc3f74SBram Moolenaar 100 206887bc3f74SBram Moolenaar set nostartofline 206987bc3f74SBram Moolenaar exe "norm! $\<c-u>" 207087bc3f74SBram Moolenaar call assert_equal('95', getline('.')) 207187bc3f74SBram Moolenaar call assert_equal([0, 95, 2, 0, 2147483647], getcurpos()) 207287bc3f74SBram Moolenaar " cleanup 207387bc3f74SBram Moolenaar set startofline 207487bc3f74SBram Moolenaar bw! 20752931f2a5SBram Moolenaarendfunc 207687bc3f74SBram Moolenaar 207787bc3f74SBram Moolenaarfun! Test_normal43_textobject1() 207887bc3f74SBram Moolenaar " basic tests for text object aw 207987bc3f74SBram Moolenaar new 208087bc3f74SBram Moolenaar call append(0, ['foobar,eins,foobar', 'foo,zwei,foo ']) 208187bc3f74SBram Moolenaar " diw 208287bc3f74SBram Moolenaar norm! 1gg0diw 208387bc3f74SBram Moolenaar call assert_equal([',eins,foobar', 'foo,zwei,foo ', ''], getline(1,'$')) 208487bc3f74SBram Moolenaar " daw 208587bc3f74SBram Moolenaar norm! 2ggEdaw 208687bc3f74SBram Moolenaar call assert_equal([',eins,foobar', 'foo,zwei,', ''], getline(1, '$')) 208787bc3f74SBram Moolenaar %d 208887bc3f74SBram Moolenaar call append(0, ["foo\teins\tfoobar", "foo\tzwei\tfoo "]) 208987bc3f74SBram Moolenaar " diW 209087bc3f74SBram Moolenaar norm! 2ggwd2iW 209187bc3f74SBram Moolenaar call assert_equal(['foo eins foobar', 'foo foo ', ''], getline(1,'$')) 209287bc3f74SBram Moolenaar " daW 209387bc3f74SBram Moolenaar norm! 1ggd2aW 209487bc3f74SBram Moolenaar call assert_equal(['foobar', 'foo foo ', ''], getline(1,'$')) 209587bc3f74SBram Moolenaar 209687bc3f74SBram Moolenaar %d 209787bc3f74SBram Moolenaar call append(0, ["foo\teins\tfoobar", "foo\tzwei\tfoo "]) 209887bc3f74SBram Moolenaar " aw in visual line mode switches to characterwise mode 209987bc3f74SBram Moolenaar norm! 2gg$Vawd 210087bc3f74SBram Moolenaar call assert_equal(['foo eins foobar', 'foo zwei foo'], getline(1,'$')) 210187bc3f74SBram Moolenaar norm! 1gg$Viwd 210287bc3f74SBram Moolenaar call assert_equal(['foo eins ', 'foo zwei foo'], getline(1,'$')) 210387bc3f74SBram Moolenaar 210487bc3f74SBram Moolenaar " clean up 210587bc3f74SBram Moolenaar bw! 21062931f2a5SBram Moolenaarendfunc 210787bc3f74SBram Moolenaar 210887bc3f74SBram Moolenaarfunc! Test_normal44_textobjects2() 210987bc3f74SBram Moolenaar " basic testing for is and as text objects 211087bc3f74SBram Moolenaar new 211187bc3f74SBram Moolenaar call append(0, ['This is a test. With some sentences!', '', 'Even with a question? And one more. And no sentence here']) 211287bc3f74SBram Moolenaar " Test for dis - does not remove trailing whitespace 211387bc3f74SBram Moolenaar norm! 1gg0dis 211487bc3f74SBram Moolenaar call assert_equal([' With some sentences!', '', 'Even with a question? And one more. And no sentence here', ''], getline(1,'$')) 211587bc3f74SBram Moolenaar " Test for das - removes leading whitespace 211687bc3f74SBram Moolenaar norm! 3ggf?ldas 211787bc3f74SBram Moolenaar call assert_equal([' With some sentences!', '', 'Even with a question? And no sentence here', ''], getline(1,'$')) 211887bc3f74SBram Moolenaar " when used in visual mode, is made characterwise 211987bc3f74SBram Moolenaar norm! 3gg$Visy 212087bc3f74SBram Moolenaar call assert_equal('v', visualmode()) 212187bc3f74SBram Moolenaar " reset visualmode() 212287bc3f74SBram Moolenaar norm! 3ggVy 212387bc3f74SBram Moolenaar norm! 3gg$Vasy 212487bc3f74SBram Moolenaar call assert_equal('v', visualmode()) 212587bc3f74SBram Moolenaar " basic testing for textobjects a< and at 212687bc3f74SBram Moolenaar %d 212787bc3f74SBram Moolenaar call setline(1, ['<div> ','<a href="foobar" class="foo">xyz</a>',' </div>', ' ']) 212887bc3f74SBram Moolenaar " a< 212987bc3f74SBram Moolenaar norm! 1gg0da< 213087bc3f74SBram Moolenaar call assert_equal([' ', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 213187bc3f74SBram Moolenaar norm! 1pj 213287bc3f74SBram Moolenaar call assert_equal([' <div>', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 213387bc3f74SBram Moolenaar " at 213487bc3f74SBram Moolenaar norm! d2at 213587bc3f74SBram Moolenaar call assert_equal([' '], getline(1,'$')) 213687bc3f74SBram Moolenaar %d 213787bc3f74SBram Moolenaar call setline(1, ['<div> ','<a href="foobar" class="foo">xyz</a>',' </div>', ' ']) 213887bc3f74SBram Moolenaar " i< 213987bc3f74SBram Moolenaar norm! 1gg0di< 214087bc3f74SBram Moolenaar call assert_equal(['<> ', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 214187bc3f74SBram Moolenaar norm! 1Pj 214287bc3f74SBram Moolenaar call assert_equal(['<div> ', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 214387bc3f74SBram Moolenaar norm! d2it 214487bc3f74SBram Moolenaar call assert_equal(['<div></div>',' '], getline(1,'$')) 214587bc3f74SBram Moolenaar " basic testing for a[ and i[ text object 214687bc3f74SBram Moolenaar %d 214787bc3f74SBram Moolenaar call setline(1, [' ', '[', 'one [two]', 'thre', ']']) 214887bc3f74SBram Moolenaar norm! 3gg0di[ 214987bc3f74SBram Moolenaar call assert_equal([' ', '[', ']'], getline(1,'$')) 215087bc3f74SBram Moolenaar call setline(1, [' ', '[', 'one [two]', 'thre', ']']) 215187bc3f74SBram Moolenaar norm! 3gg0ftd2a[ 215287bc3f74SBram Moolenaar call assert_equal([' '], getline(1,'$')) 215387bc3f74SBram Moolenaar %d 215487bc3f74SBram Moolenaar " Test for i" when cursor is in front of a quoted object 215587bc3f74SBram Moolenaar call append(0, 'foo "bar"') 215687bc3f74SBram Moolenaar norm! 1gg0di" 215787bc3f74SBram Moolenaar call assert_equal(['foo ""', ''], getline(1,'$')) 215887bc3f74SBram Moolenaar 215987bc3f74SBram Moolenaar " clean up 216087bc3f74SBram Moolenaar bw! 21612931f2a5SBram Moolenaarendfunc 216287bc3f74SBram Moolenaar 216387bc3f74SBram Moolenaarfunc! Test_normal45_drop() 216487bc3f74SBram Moolenaar if !has("dnd") 216587bc3f74SBram Moolenaar return 216687bc3f74SBram Moolenaar endif 216787bc3f74SBram Moolenaar " basic test for :drop command 216887bc3f74SBram Moolenaar " unfortunately, without a gui, we can't really test much here, 216987bc3f74SBram Moolenaar " so simply test that ~p fails (which uses the drop register) 217087bc3f74SBram Moolenaar new 217187bc3f74SBram Moolenaar call assert_fails(':norm! "~p', 'E353') 217287bc3f74SBram Moolenaar call assert_equal([], getreg('~', 1, 1)) 217387bc3f74SBram Moolenaar " the ~ register is read only 217487bc3f74SBram Moolenaar call assert_fails(':let @~="1"', 'E354') 217587bc3f74SBram Moolenaar bw! 21762931f2a5SBram Moolenaarendfunc 217787bc3f74SBram Moolenaar 217887bc3f74SBram Moolenaarfunc! Test_normal46_ignore() 21792931f2a5SBram Moolenaar " This test uses multi byte characters 21802931f2a5SBram Moolenaar if !has("multi_byte") 21812931f2a5SBram Moolenaar return 21822931f2a5SBram Moolenaar endif 21832931f2a5SBram Moolenaar 218487bc3f74SBram Moolenaar new 218587bc3f74SBram Moolenaar " How to test this? 218687bc3f74SBram Moolenaar " let's just for now test, that the buffer 218787bc3f74SBram Moolenaar " does not change 218887bc3f74SBram Moolenaar call feedkeys("\<c-s>", 't') 218987bc3f74SBram Moolenaar call assert_equal([''], getline(1,'$')) 219087bc3f74SBram Moolenaar 21912931f2a5SBram Moolenaar " no valid commands 21922931f2a5SBram Moolenaar exe "norm! \<char-0x100>" 21932931f2a5SBram Moolenaar call assert_equal([''], getline(1,'$')) 21942931f2a5SBram Moolenaar 21952931f2a5SBram Moolenaar exe "norm! ä" 21962931f2a5SBram Moolenaar call assert_equal([''], getline(1,'$')) 21972931f2a5SBram Moolenaar 219887bc3f74SBram Moolenaar " clean up 219987bc3f74SBram Moolenaar bw! 22002931f2a5SBram Moolenaarendfunc 2201c4a908e8SBram Moolenaar 2202c4a908e8SBram Moolenaarfunc! Test_normal47_visual_buf_wipe() 2203c4a908e8SBram Moolenaar " This was causing a crash or ml_get error. 2204c4a908e8SBram Moolenaar enew! 2205c4a908e8SBram Moolenaar call setline(1,'xxx') 2206c4a908e8SBram Moolenaar normal $ 2207c4a908e8SBram Moolenaar new 2208c4a908e8SBram Moolenaar call setline(1, range(1,2)) 2209c4a908e8SBram Moolenaar 2 2210c4a908e8SBram Moolenaar exe "norm \<C-V>$" 2211c4a908e8SBram Moolenaar bw! 2212c4a908e8SBram Moolenaar norm yp 2213c4a908e8SBram Moolenaar set nomodified 22142931f2a5SBram Moolenaarendfunc 22152931f2a5SBram Moolenaar 22162931f2a5SBram Moolenaarfunc! Test_normal47_autocmd() 22172931f2a5SBram Moolenaar " disabled, does not seem to be possible currently 22182931f2a5SBram Moolenaar throw "Skipped: not possible to test cursorhold autocmd while waiting for input in normal_cmd" 22192931f2a5SBram Moolenaar new 22202931f2a5SBram Moolenaar call append(0, repeat('-',20)) 22212931f2a5SBram Moolenaar au CursorHold * call feedkeys('2l', '') 22222931f2a5SBram Moolenaar 1 22232931f2a5SBram Moolenaar set updatetime=20 22242931f2a5SBram Moolenaar " should delete 12 chars (d12l) 22252931f2a5SBram Moolenaar call feedkeys('d1', '!') 22262931f2a5SBram Moolenaar call assert_equal('--------', getline(1)) 22272931f2a5SBram Moolenaar 22282931f2a5SBram Moolenaar " clean up 22292931f2a5SBram Moolenaar au! CursorHold 22302931f2a5SBram Moolenaar set updatetime=4000 22312931f2a5SBram Moolenaar bw! 22322931f2a5SBram Moolenaarendfunc 22332931f2a5SBram Moolenaar 22342931f2a5SBram Moolenaarfunc! Test_normal48_wincmd() 22352931f2a5SBram Moolenaar new 22362931f2a5SBram Moolenaar exe "norm! \<c-w>c" 22372931f2a5SBram Moolenaar call assert_equal(1, winnr('$')) 22382931f2a5SBram Moolenaar call assert_fails(":norm! \<c-w>c", "E444") 22392931f2a5SBram Moolenaarendfunc 22402931f2a5SBram Moolenaar 22412931f2a5SBram Moolenaarfunc! Test_normal49_counts() 22422931f2a5SBram Moolenaar new 22432931f2a5SBram Moolenaar call setline(1, 'one two three four five six seven eight nine ten') 22442931f2a5SBram Moolenaar 1 22452931f2a5SBram Moolenaar norm! 3d2w 22462931f2a5SBram Moolenaar call assert_equal('seven eight nine ten', getline(1)) 22472931f2a5SBram Moolenaar bw! 22482931f2a5SBram Moolenaarendfunc 22492931f2a5SBram Moolenaar 22502931f2a5SBram Moolenaarfunc! Test_normal50_commandline() 2251*4033c55eSBram Moolenaar if !has("timers") || !has("cmdline_hist") 22522931f2a5SBram Moolenaar return 22532931f2a5SBram Moolenaar endif 22542931f2a5SBram Moolenaar func! DoTimerWork(id) 22552931f2a5SBram Moolenaar call assert_equal('[Command Line]', bufname('')) 22562931f2a5SBram Moolenaar " should fail, with E11, but does fail with E23? 22572931f2a5SBram Moolenaar "call feedkeys("\<c-^>", 'tm') 22582931f2a5SBram Moolenaar 22592931f2a5SBram Moolenaar " should also fail with E11 22602931f2a5SBram Moolenaar call assert_fails(":wincmd p", 'E11') 22612931f2a5SBram Moolenaar " return from commandline window 22622931f2a5SBram Moolenaar call feedkeys("\<cr>") 22632931f2a5SBram Moolenaar endfunc 22642931f2a5SBram Moolenaar 22652931f2a5SBram Moolenaar let oldlang=v:lang 22662931f2a5SBram Moolenaar lang C 22672931f2a5SBram Moolenaar set updatetime=20 22682931f2a5SBram Moolenaar call timer_start(100, 'DoTimerWork') 22692931f2a5SBram Moolenaar try 22702931f2a5SBram Moolenaar " throws E23, for whatever reason... 22712931f2a5SBram Moolenaar call feedkeys('q:', 'x!') 22722931f2a5SBram Moolenaar catch /E23/ 22732931f2a5SBram Moolenaar " no-op 22742931f2a5SBram Moolenaar endtry 22752931f2a5SBram Moolenaar " clean up 22762931f2a5SBram Moolenaar set updatetime=4000 22772931f2a5SBram Moolenaar exe "lang" oldlang 22782931f2a5SBram Moolenaar bw! 22792931f2a5SBram Moolenaarendfunc 22802931f2a5SBram Moolenaar 22812931f2a5SBram Moolenaarfunc! Test_normal51_FileChangedRO() 22822931f2a5SBram Moolenaar if !has("autocmd") 22832931f2a5SBram Moolenaar return 22842931f2a5SBram Moolenaar endif 2285e5f2a075SBram Moolenaar " Don't sleep after the warning message. 2286e5f2a075SBram Moolenaar call test_settime(1) 22872931f2a5SBram Moolenaar call writefile(['foo'], 'Xreadonly.log') 22882931f2a5SBram Moolenaar new Xreadonly.log 22892931f2a5SBram Moolenaar setl ro 22902931f2a5SBram Moolenaar au FileChangedRO <buffer> :call feedkeys("\<c-^>", 'tix') 22912931f2a5SBram Moolenaar call assert_fails(":norm! Af", 'E788') 22922931f2a5SBram Moolenaar call assert_equal(['foo'], getline(1,'$')) 22932931f2a5SBram Moolenaar call assert_equal('Xreadonly.log', bufname('')) 22942931f2a5SBram Moolenaar 22952931f2a5SBram Moolenaar " cleanup 2296e5f2a075SBram Moolenaar call test_settime(0) 22972931f2a5SBram Moolenaar bw! 22982931f2a5SBram Moolenaar call delete("Xreadonly.log") 22992931f2a5SBram Moolenaarendfunc 23002931f2a5SBram Moolenaar 23012931f2a5SBram Moolenaarfunc! Test_normal52_rl() 23022931f2a5SBram Moolenaar if !has("rightleft") 23032931f2a5SBram Moolenaar return 23042931f2a5SBram Moolenaar endif 23052931f2a5SBram Moolenaar new 23062931f2a5SBram Moolenaar call setline(1, 'abcde fghij klmnopq') 23072931f2a5SBram Moolenaar norm! 1gg$ 23082931f2a5SBram Moolenaar set rl 23092931f2a5SBram Moolenaar call assert_equal(19, col('.')) 23102931f2a5SBram Moolenaar call feedkeys('l', 'tx') 23112931f2a5SBram Moolenaar call assert_equal(18, col('.')) 23122931f2a5SBram Moolenaar call feedkeys('h', 'tx') 23132931f2a5SBram Moolenaar call assert_equal(19, col('.')) 23142931f2a5SBram Moolenaar call feedkeys("\<right>", 'tx') 23152931f2a5SBram Moolenaar call assert_equal(18, col('.')) 23162931f2a5SBram Moolenaar call feedkeys("\<s-right>", 'tx') 23172931f2a5SBram Moolenaar call assert_equal(13, col('.')) 23182931f2a5SBram Moolenaar call feedkeys("\<c-right>", 'tx') 23192931f2a5SBram Moolenaar call assert_equal(7, col('.')) 23202931f2a5SBram Moolenaar call feedkeys("\<c-left>", 'tx') 23212931f2a5SBram Moolenaar call assert_equal(13, col('.')) 23222931f2a5SBram Moolenaar call feedkeys("\<s-left>", 'tx') 23232931f2a5SBram Moolenaar call assert_equal(19, col('.')) 23242931f2a5SBram Moolenaar call feedkeys("<<", 'tx') 23252931f2a5SBram Moolenaar call assert_equal(' abcde fghij klmnopq',getline(1)) 23262931f2a5SBram Moolenaar call feedkeys(">>", 'tx') 23272931f2a5SBram Moolenaar call assert_equal('abcde fghij klmnopq',getline(1)) 23282931f2a5SBram Moolenaar 23292931f2a5SBram Moolenaar " cleanup 23302931f2a5SBram Moolenaar set norl 23312931f2a5SBram Moolenaar bw! 23322931f2a5SBram Moolenaarendfunc 23332931f2a5SBram Moolenaar 23342931f2a5SBram Moolenaarfunc! Test_normal53_digraph() 23352931f2a5SBram Moolenaar if !has('digraphs') 23362931f2a5SBram Moolenaar return 23372931f2a5SBram Moolenaar endif 23382931f2a5SBram Moolenaar new 23392931f2a5SBram Moolenaar call setline(1, 'abcdefgh|') 23402931f2a5SBram Moolenaar exe "norm! 1gg0f\<c-k>!!" 23412931f2a5SBram Moolenaar call assert_equal(9, col('.')) 23422931f2a5SBram Moolenaar set cpo+=D 23432931f2a5SBram Moolenaar exe "norm! 1gg0f\<c-k>!!" 23442931f2a5SBram Moolenaar call assert_equal(1, col('.')) 23452931f2a5SBram Moolenaar 23462931f2a5SBram Moolenaar set cpo-=D 23472931f2a5SBram Moolenaar bw! 23482931f2a5SBram Moolenaarendfunc 23492931f2a5SBram Moolenaar 2350b1e04fcaSBram Moolenaarfunc Test_normal54_Ctrl_bsl() 23512931f2a5SBram Moolenaar new 23522931f2a5SBram Moolenaar call setline(1, 'abcdefghijklmn') 23532931f2a5SBram Moolenaar exe "norm! df\<c-\>\<c-n>" 23542931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn'], getline(1,'$')) 23552931f2a5SBram Moolenaar exe "norm! df\<c-\>\<c-g>" 23562931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn'], getline(1,'$')) 23572931f2a5SBram Moolenaar exe "norm! df\<c-\>m" 23582931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn'], getline(1,'$')) 23592931f2a5SBram Moolenaar if !has("multi_byte") 23602931f2a5SBram Moolenaar return 23612931f2a5SBram Moolenaar endif 23622931f2a5SBram Moolenaar call setline(2, 'abcdefghijklmnāf') 23632931f2a5SBram Moolenaar norm! 2gg0 23642931f2a5SBram Moolenaar exe "norm! df\<Char-0x101>" 23652931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn', 'f'], getline(1,'$')) 23662931f2a5SBram Moolenaar norm! 1gg0 23672931f2a5SBram Moolenaar exe "norm! df\<esc>" 23682931f2a5SBram Moolenaar call assert_equal(['abcdefghijklmn', 'f'], getline(1,'$')) 23692931f2a5SBram Moolenaar 23702931f2a5SBram Moolenaar " clean up 23712931f2a5SBram Moolenaar bw! 23722931f2a5SBram Moolenaarendfunc 2373b1e04fcaSBram Moolenaar 2374b1e04fcaSBram Moolenaarfunc Test_normal_large_count() 2375b1e04fcaSBram Moolenaar " This may fail with 32bit long, how do we detect that? 2376b1e04fcaSBram Moolenaar new 2377b1e04fcaSBram Moolenaar normal o 2378b1e04fcaSBram Moolenaar normal 6666666666dL 2379b1e04fcaSBram Moolenaar bwipe! 2380b1e04fcaSBram Moolenaarendfunc 2381bf3d5807SBram Moolenaar 2382bf3d5807SBram Moolenaarfunc Test_delete_until_paragraph() 2383bf3d5807SBram Moolenaar if !has('multi_byte') 2384bf3d5807SBram Moolenaar return 2385bf3d5807SBram Moolenaar endif 2386bf3d5807SBram Moolenaar new 2387bf3d5807SBram Moolenaar normal grádv} 2388bf3d5807SBram Moolenaar call assert_equal('á', getline(1)) 2389bf3d5807SBram Moolenaar normal grád} 2390bf3d5807SBram Moolenaar call assert_equal('', getline(1)) 2391bf3d5807SBram Moolenaar bwipe! 2392bf3d5807SBram Moolenaarendfunc 2393