100b24be4SBram Moolenaar" Test for textobjects 200b24be4SBram Moolenaar 3*b46fecd3SBram Moolenaarsource check.vim 4*b46fecd3SBram MoolenaarCheckFeature textobjects 500b24be4SBram Moolenaar 6c5e2b040SBram Moolenaarfunc CpoM(line, useM, expected) 700b24be4SBram Moolenaar new 800b24be4SBram Moolenaar 900b24be4SBram Moolenaar if a:useM 1000b24be4SBram Moolenaar set cpoptions+=M 1100b24be4SBram Moolenaar else 1200b24be4SBram Moolenaar set cpoptions-=M 1300b24be4SBram Moolenaar endif 1400b24be4SBram Moolenaar 1500b24be4SBram Moolenaar call setline(1, a:line) 1600b24be4SBram Moolenaar 1700b24be4SBram Moolenaar call setreg('"', '') 1800b24be4SBram Moolenaar normal! ggfrmavi)y 1900b24be4SBram Moolenaar call assert_equal(getreg('"'), a:expected[0]) 2000b24be4SBram Moolenaar 2100b24be4SBram Moolenaar call setreg('"', '') 2200b24be4SBram Moolenaar normal! `afbmavi)y 2300b24be4SBram Moolenaar call assert_equal(getreg('"'), a:expected[1]) 2400b24be4SBram Moolenaar 2500b24be4SBram Moolenaar call setreg('"', '') 2600b24be4SBram Moolenaar normal! `afgmavi)y 2700b24be4SBram Moolenaar call assert_equal(getreg('"'), a:expected[2]) 2800b24be4SBram Moolenaar 2900b24be4SBram Moolenaar q! 30c5e2b040SBram Moolenaarendfunc 3100b24be4SBram Moolenaar 32c5e2b040SBram Moolenaarfunc Test_inner_block_without_cpo_M() 3300b24be4SBram Moolenaar call CpoM('(red \(blue) green)', 0, ['red \(blue', 'red \(blue', '']) 34c5e2b040SBram Moolenaarendfunc 3500b24be4SBram Moolenaar 36c5e2b040SBram Moolenaarfunc Test_inner_block_with_cpo_M_left_backslash() 3700b24be4SBram Moolenaar call CpoM('(red \(blue) green)', 1, ['red \(blue) green', 'blue', 'red \(blue) green']) 38c5e2b040SBram Moolenaarendfunc 3900b24be4SBram Moolenaar 40c5e2b040SBram Moolenaarfunc Test_inner_block_with_cpo_M_right_backslash() 4100b24be4SBram Moolenaar call CpoM('(red (blue\) green)', 1, ['red (blue\) green', 'blue\', 'red (blue\) green']) 42c5e2b040SBram Moolenaarendfunc 43c5e2b040SBram Moolenaar 44c5e2b040SBram Moolenaarfunc Test_quote_selection_selection_exclusive() 45c5e2b040SBram Moolenaar new 46c5e2b040SBram Moolenaar call setline(1, "a 'bcde' f") 47c5e2b040SBram Moolenaar set selection=exclusive 48c5e2b040SBram Moolenaar exe "norm! fdvhi'y" 49c5e2b040SBram Moolenaar call assert_equal('bcde', @") 50c5e2b040SBram Moolenaar set selection&vim 51c5e2b040SBram Moolenaar bw! 52c5e2b040SBram Moolenaarendfunc 53db510071SBram Moolenaar 5455d3bdbbSBram Moolenaarfunc Test_quote_selection_selection_exclusive_abort() 5555d3bdbbSBram Moolenaar new 5655d3bdbbSBram Moolenaar set selection=exclusive 5755d3bdbbSBram Moolenaar call setline(1, "'abzzc'") 5855d3bdbbSBram Moolenaar let exp_curs = [0, 1, 6, 0] 5955d3bdbbSBram Moolenaar call cursor(1,1) 6055d3bdbbSBram Moolenaar exe 'norm! fcdvi"' 6155d3bdbbSBram Moolenaar " make sure to end visual mode to have a clear state 6255d3bdbbSBram Moolenaar exe "norm! \<esc>" 6355d3bdbbSBram Moolenaar call assert_equal(exp_curs, getpos('.')) 6455d3bdbbSBram Moolenaar call cursor(1,1) 6555d3bdbbSBram Moolenaar exe 'norm! fcvi"' 6655d3bdbbSBram Moolenaar exe "norm! \<esc>" 6755d3bdbbSBram Moolenaar call assert_equal(exp_curs, getpos('.')) 6855d3bdbbSBram Moolenaar call cursor(1,2) 6955d3bdbbSBram Moolenaar exe 'norm! vfcoi"' 7055d3bdbbSBram Moolenaar exe "norm! \<esc>" 7155d3bdbbSBram Moolenaar let exp_curs = [0, 1, 2, 0] 7255d3bdbbSBram Moolenaar let exp_visu = [0, 1, 7, 0] 7355d3bdbbSBram Moolenaar call assert_equal(exp_curs, getpos('.')) 7455d3bdbbSBram Moolenaar call assert_equal(exp_visu, getpos("'>")) 7555d3bdbbSBram Moolenaar set selection&vim 7655d3bdbbSBram Moolenaar bw! 7755d3bdbbSBram Moolenaarendfunc 7855d3bdbbSBram Moolenaar 79db510071SBram Moolenaar" Tests for string and html text objects 80db510071SBram Moolenaarfunc Test_string_html_objects() 81db510071SBram Moolenaar enew! 82db510071SBram Moolenaar 83db510071SBram Moolenaar let t = '"wo\"rd\\" foo' 84db510071SBram Moolenaar put =t 85db510071SBram Moolenaar normal! da" 86db510071SBram Moolenaar call assert_equal('foo', getline('.')) 87db510071SBram Moolenaar 88db510071SBram Moolenaar let t = "'foo' 'bar' 'piep'" 89db510071SBram Moolenaar put =t 90db510071SBram Moolenaar normal! 0va'a'rx 91db510071SBram Moolenaar call assert_equal("xxxxxxxxxxxx'piep'", getline('.')) 92db510071SBram Moolenaar 93db510071SBram Moolenaar let t = "bla bla `quote` blah" 94db510071SBram Moolenaar put =t 95db510071SBram Moolenaar normal! 02f`da` 96db510071SBram Moolenaar call assert_equal("bla bla blah", getline('.')) 97db510071SBram Moolenaar 98db510071SBram Moolenaar let t = 'out " in "noXno"' 99db510071SBram Moolenaar put =t 100db510071SBram Moolenaar normal! 0fXdi" 101db510071SBram Moolenaar call assert_equal('out " in ""', getline('.')) 102db510071SBram Moolenaar 103db510071SBram Moolenaar let t = "\"'\" 'blah' rep 'buh'" 104db510071SBram Moolenaar put =t 105db510071SBram Moolenaar normal! 03f'vi'ry 106db510071SBram Moolenaar call assert_equal("\"'\" 'blah'yyyyy'buh'", getline('.')) 107db510071SBram Moolenaar 108db510071SBram Moolenaar set quoteescape=+*- 109db510071SBram Moolenaar let t = "bla `s*`d-`+++`l**` b`la" 110db510071SBram Moolenaar put =t 111db510071SBram Moolenaar normal! di` 112db510071SBram Moolenaar call assert_equal("bla `` b`la", getline('.')) 113db510071SBram Moolenaar 114db510071SBram Moolenaar let t = 'voo "nah" sdf " asdf" sdf " sdf" sd' 115db510071SBram Moolenaar put =t 116db510071SBram Moolenaar normal! $F"va"oha"i"rz 117db510071SBram Moolenaar call assert_equal('voo "zzzzzzzzzzzzzzzzzzzzzzzzzzzzsd', getline('.')) 118db510071SBram Moolenaar 119db510071SBram Moolenaar let t = "-<b>asdf<i>Xasdf</i>asdf</b>-" 120db510071SBram Moolenaar put =t 121db510071SBram Moolenaar normal! fXdit 122db510071SBram Moolenaar call assert_equal('-<b>asdf<i></i>asdf</b>-', getline('.')) 123db510071SBram Moolenaar 124db510071SBram Moolenaar let t = "-<b>asdX<i>a<i />sdf</i>asdf</b>-" 125db510071SBram Moolenaar put =t 126db510071SBram Moolenaar normal! 0fXdit 127db510071SBram Moolenaar call assert_equal('-<b></b>-', getline('.')) 128db510071SBram Moolenaar 129db510071SBram Moolenaar let t = "-<b>asdf<i>Xasdf</i>asdf</b>-" 130db510071SBram Moolenaar put =t 131db510071SBram Moolenaar normal! fXdat 132db510071SBram Moolenaar call assert_equal('-<b>asdfasdf</b>-', getline('.')) 133db510071SBram Moolenaar 134db510071SBram Moolenaar let t = "-<b>asdX<i>as<b />df</i>asdf</b>-" 135db510071SBram Moolenaar put =t 136db510071SBram Moolenaar normal! 0fXdat 137db510071SBram Moolenaar call assert_equal('--', getline('.')) 138db510071SBram Moolenaar 139db510071SBram Moolenaar let t = "-<b>\ninnertext object\n</b>" 140db510071SBram Moolenaar put =t 141db510071SBram Moolenaar normal! dit 142db510071SBram Moolenaar call assert_equal('-<b></b>', getline('.')) 143db510071SBram Moolenaar 144db510071SBram Moolenaar set quoteescape& 145db510071SBram Moolenaar enew! 146db510071SBram Moolenaarendfunc 147db510071SBram Moolenaar 148b476cb7dSBram Moolenaarfunc Test_empty_html_tag() 149b476cb7dSBram Moolenaar new 150b476cb7dSBram Moolenaar call setline(1, '<div></div>') 151b476cb7dSBram Moolenaar normal 0citxxx 152b476cb7dSBram Moolenaar call assert_equal('<div>xxx</div>', getline(1)) 153b476cb7dSBram Moolenaar 154b476cb7dSBram Moolenaar call setline(1, '<div></div>') 155b476cb7dSBram Moolenaar normal 0f<cityyy 156b476cb7dSBram Moolenaar call assert_equal('<div>yyy</div>', getline(1)) 157b476cb7dSBram Moolenaar 158b476cb7dSBram Moolenaar call setline(1, '<div></div>') 159b476cb7dSBram Moolenaar normal 0f<vitsaaa 160b476cb7dSBram Moolenaar call assert_equal('aaa', getline(1)) 161b476cb7dSBram Moolenaar 162b476cb7dSBram Moolenaar bwipe! 163b476cb7dSBram Moolenaarendfunc 164b476cb7dSBram Moolenaar 165db510071SBram Moolenaar" Tests for match() and matchstr() 166db510071SBram Moolenaarfunc Test_match() 167db510071SBram Moolenaar call assert_equal("b", matchstr("abcd", ".", 0, 2)) 168db510071SBram Moolenaar call assert_equal("bc", matchstr("abcd", "..", 0, 2)) 169db510071SBram Moolenaar call assert_equal("c", matchstr("abcd", ".", 2, 0)) 170db510071SBram Moolenaar call assert_equal("a", matchstr("abcd", ".", 0, -1)) 171db510071SBram Moolenaar call assert_equal(-1, match("abcd", ".", 0, 5)) 172db510071SBram Moolenaar call assert_equal(0 , match("abcd", ".", 0, -1)) 173db510071SBram Moolenaar call assert_equal(0 , match('abc', '.', 0, 1)) 174db510071SBram Moolenaar call assert_equal(1 , match('abc', '.', 0, 2)) 175db510071SBram Moolenaar call assert_equal(2 , match('abc', '.', 0, 3)) 176db510071SBram Moolenaar call assert_equal(-1, match('abc', '.', 0, 4)) 177db510071SBram Moolenaar call assert_equal(1 , match('abc', '.', 1, 1)) 178db510071SBram Moolenaar call assert_equal(2 , match('abc', '.', 2, 1)) 179db510071SBram Moolenaar call assert_equal(-1, match('abc', '.', 3, 1)) 180db510071SBram Moolenaar call assert_equal(3 , match('abc', '$', 0, 1)) 181db510071SBram Moolenaar call assert_equal(-1, match('abc', '$', 0, 2)) 182db510071SBram Moolenaar call assert_equal(3 , match('abc', '$', 1, 1)) 183db510071SBram Moolenaar call assert_equal(3 , match('abc', '$', 2, 1)) 184db510071SBram Moolenaar call assert_equal(3 , match('abc', '$', 3, 1)) 185db510071SBram Moolenaar call assert_equal(-1, match('abc', '$', 4, 1)) 186db510071SBram Moolenaar call assert_equal(0 , match('abc', '\zs', 0, 1)) 187db510071SBram Moolenaar call assert_equal(1 , match('abc', '\zs', 0, 2)) 188db510071SBram Moolenaar call assert_equal(2 , match('abc', '\zs', 0, 3)) 189db510071SBram Moolenaar call assert_equal(3 , match('abc', '\zs', 0, 4)) 190db510071SBram Moolenaar call assert_equal(-1, match('abc', '\zs', 0, 5)) 191db510071SBram Moolenaar call assert_equal(1 , match('abc', '\zs', 1, 1)) 192db510071SBram Moolenaar call assert_equal(2 , match('abc', '\zs', 2, 1)) 193db510071SBram Moolenaar call assert_equal(3 , match('abc', '\zs', 3, 1)) 194db510071SBram Moolenaar call assert_equal(-1, match('abc', '\zs', 4, 1)) 195db510071SBram Moolenaarendfunc 19682846a00SBram Moolenaar 19782846a00SBram Moolenaar" This was causing an illegal memory access 19882846a00SBram Moolenaarfunc Test_inner_tag() 19982846a00SBram Moolenaar new 20082846a00SBram Moolenaar norm ixxx 20182846a00SBram Moolenaar call feedkeys("v", 'xt') 20282846a00SBram Moolenaar insert 20382846a00SBram Moolenaarx 20482846a00SBram Moolenaarx 20582846a00SBram Moolenaar. 20682846a00SBram Moolenaar norm it 20782846a00SBram Moolenaar q! 20882846a00SBram Moolenaarendfunc 20985160711SBram Moolenaar 21085160711SBram Moolenaarfunc Test_sentence() 21185160711SBram Moolenaar enew! 21285160711SBram Moolenaar call setline(1, 'A sentence. A sentence? A sentence!') 21385160711SBram Moolenaar 21485160711SBram Moolenaar normal yis 21585160711SBram Moolenaar call assert_equal('A sentence.', @") 21685160711SBram Moolenaar normal yas 21785160711SBram Moolenaar call assert_equal('A sentence. ', @") 21885160711SBram Moolenaar 21985160711SBram Moolenaar normal ) 22085160711SBram Moolenaar 22185160711SBram Moolenaar normal yis 22285160711SBram Moolenaar call assert_equal('A sentence?', @") 22385160711SBram Moolenaar normal yas 22485160711SBram Moolenaar call assert_equal('A sentence? ', @") 22585160711SBram Moolenaar 22685160711SBram Moolenaar normal ) 22785160711SBram Moolenaar 22885160711SBram Moolenaar normal yis 22985160711SBram Moolenaar call assert_equal('A sentence!', @") 23085160711SBram Moolenaar normal yas 23185160711SBram Moolenaar call assert_equal(' A sentence!', @") 23285160711SBram Moolenaar 23385160711SBram Moolenaar normal 0 23485160711SBram Moolenaar normal 2yis 23585160711SBram Moolenaar call assert_equal('A sentence. ', @") 23685160711SBram Moolenaar normal 3yis 23785160711SBram Moolenaar call assert_equal('A sentence. A sentence?', @") 23885160711SBram Moolenaar normal 2yas 23985160711SBram Moolenaar call assert_equal('A sentence. A sentence? ', @") 24085160711SBram Moolenaar 24185160711SBram Moolenaar %delete _ 24285160711SBram Moolenaarendfunc 24385160711SBram Moolenaar 24485160711SBram Moolenaarfunc Test_sentence_with_quotes() 24585160711SBram Moolenaar enew! 24685160711SBram Moolenaar call setline(1, 'A "sentence." A sentence.') 24785160711SBram Moolenaar 24885160711SBram Moolenaar normal yis 24985160711SBram Moolenaar call assert_equal('A "sentence."', @") 25085160711SBram Moolenaar normal yas 25185160711SBram Moolenaar call assert_equal('A "sentence." ', @") 25285160711SBram Moolenaar 25385160711SBram Moolenaar normal ) 25485160711SBram Moolenaar 25585160711SBram Moolenaar normal yis 25685160711SBram Moolenaar call assert_equal('A sentence.', @") 25785160711SBram Moolenaar normal yas 25885160711SBram Moolenaar call assert_equal(' A sentence.', @") 25985160711SBram Moolenaar 26085160711SBram Moolenaar %delete _ 26185160711SBram Moolenaarendfunc 26285160711SBram Moolenaar 2631e115360SBram Moolenaarfunc Test_sentence_with_cursor_on_delimiter() 26485160711SBram Moolenaar enew! 26585160711SBram Moolenaar call setline(1, "A '([sentence.])' A sentence.") 26685160711SBram Moolenaar 26785160711SBram Moolenaar normal! 15|yis 26885160711SBram Moolenaar call assert_equal("A '([sentence.])'", @") 26985160711SBram Moolenaar normal! 15|yas 27085160711SBram Moolenaar call assert_equal("A '([sentence.])' ", @") 27185160711SBram Moolenaar 27285160711SBram Moolenaar normal! 16|yis 27385160711SBram Moolenaar call assert_equal("A '([sentence.])'", @") 27485160711SBram Moolenaar normal! 16|yas 27585160711SBram Moolenaar call assert_equal("A '([sentence.])' ", @") 27685160711SBram Moolenaar 27785160711SBram Moolenaar normal! 17|yis 27885160711SBram Moolenaar call assert_equal("A '([sentence.])'", @") 27985160711SBram Moolenaar normal! 17|yas 28085160711SBram Moolenaar call assert_equal("A '([sentence.])' ", @") 28185160711SBram Moolenaar 28285160711SBram Moolenaar %delete _ 28385160711SBram Moolenaarendfunc 284