100b24be4SBram Moolenaar" Test for textobjects 200b24be4SBram Moolenaar 3b46fecd3SBram Moolenaarsource check.vim 4b46fecd3SBram 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 48*94d9f4faSBram Moolenaar 49c5e2b040SBram Moolenaar exe "norm! fdvhi'y" 50c5e2b040SBram Moolenaar call assert_equal('bcde', @") 51*94d9f4faSBram Moolenaar 527170b295SBram Moolenaar let @"='dummy' 537170b295SBram Moolenaar exe "norm! $gevi'y" 547170b295SBram Moolenaar call assert_equal('bcde', @") 55*94d9f4faSBram Moolenaar 56*94d9f4faSBram Moolenaar let @"='dummy' 57*94d9f4faSBram Moolenaar exe "norm! 0fbhvi'y" 58*94d9f4faSBram Moolenaar call assert_equal('bcde', @") 59*94d9f4faSBram Moolenaar 60c5e2b040SBram Moolenaar set selection&vim 61c5e2b040SBram Moolenaar bw! 62c5e2b040SBram Moolenaarendfunc 63db510071SBram Moolenaar 6455d3bdbbSBram Moolenaarfunc Test_quote_selection_selection_exclusive_abort() 6555d3bdbbSBram Moolenaar new 6655d3bdbbSBram Moolenaar set selection=exclusive 6755d3bdbbSBram Moolenaar call setline(1, "'abzzc'") 6855d3bdbbSBram Moolenaar let exp_curs = [0, 1, 6, 0] 6955d3bdbbSBram Moolenaar call cursor(1,1) 7055d3bdbbSBram Moolenaar exe 'norm! fcdvi"' 7155d3bdbbSBram Moolenaar " make sure to end visual mode to have a clear state 7255d3bdbbSBram Moolenaar exe "norm! \<esc>" 7355d3bdbbSBram Moolenaar call assert_equal(exp_curs, getpos('.')) 7455d3bdbbSBram Moolenaar call cursor(1,1) 7555d3bdbbSBram Moolenaar exe 'norm! fcvi"' 7655d3bdbbSBram Moolenaar exe "norm! \<esc>" 7755d3bdbbSBram Moolenaar call assert_equal(exp_curs, getpos('.')) 7855d3bdbbSBram Moolenaar call cursor(1,2) 7955d3bdbbSBram Moolenaar exe 'norm! vfcoi"' 8055d3bdbbSBram Moolenaar exe "norm! \<esc>" 8155d3bdbbSBram Moolenaar let exp_curs = [0, 1, 2, 0] 8255d3bdbbSBram Moolenaar let exp_visu = [0, 1, 7, 0] 8355d3bdbbSBram Moolenaar call assert_equal(exp_curs, getpos('.')) 8455d3bdbbSBram Moolenaar call assert_equal(exp_visu, getpos("'>")) 8555d3bdbbSBram Moolenaar set selection&vim 8655d3bdbbSBram Moolenaar bw! 8755d3bdbbSBram Moolenaarendfunc 8855d3bdbbSBram Moolenaar 89db510071SBram Moolenaar" Tests for string and html text objects 90db510071SBram Moolenaarfunc Test_string_html_objects() 91db510071SBram Moolenaar enew! 92db510071SBram Moolenaar 93db510071SBram Moolenaar let t = '"wo\"rd\\" foo' 94db510071SBram Moolenaar put =t 95db510071SBram Moolenaar normal! da" 96db510071SBram Moolenaar call assert_equal('foo', getline('.')) 97db510071SBram Moolenaar 98db510071SBram Moolenaar let t = "'foo' 'bar' 'piep'" 99db510071SBram Moolenaar put =t 100db510071SBram Moolenaar normal! 0va'a'rx 101db510071SBram Moolenaar call assert_equal("xxxxxxxxxxxx'piep'", getline('.')) 102db510071SBram Moolenaar 103db510071SBram Moolenaar let t = "bla bla `quote` blah" 104db510071SBram Moolenaar put =t 105db510071SBram Moolenaar normal! 02f`da` 106db510071SBram Moolenaar call assert_equal("bla bla blah", getline('.')) 107db510071SBram Moolenaar 108db510071SBram Moolenaar let t = 'out " in "noXno"' 109db510071SBram Moolenaar put =t 110db510071SBram Moolenaar normal! 0fXdi" 111db510071SBram Moolenaar call assert_equal('out " in ""', getline('.')) 112db510071SBram Moolenaar 113db510071SBram Moolenaar let t = "\"'\" 'blah' rep 'buh'" 114db510071SBram Moolenaar put =t 115db510071SBram Moolenaar normal! 03f'vi'ry 116db510071SBram Moolenaar call assert_equal("\"'\" 'blah'yyyyy'buh'", getline('.')) 117db510071SBram Moolenaar 118db510071SBram Moolenaar set quoteescape=+*- 119db510071SBram Moolenaar let t = "bla `s*`d-`+++`l**` b`la" 120db510071SBram Moolenaar put =t 121db510071SBram Moolenaar normal! di` 122db510071SBram Moolenaar call assert_equal("bla `` b`la", getline('.')) 123db510071SBram Moolenaar 124db510071SBram Moolenaar let t = 'voo "nah" sdf " asdf" sdf " sdf" sd' 125db510071SBram Moolenaar put =t 126db510071SBram Moolenaar normal! $F"va"oha"i"rz 127db510071SBram Moolenaar call assert_equal('voo "zzzzzzzzzzzzzzzzzzzzzzzzzzzzsd', getline('.')) 128db510071SBram Moolenaar 129db510071SBram Moolenaar let t = "-<b>asdf<i>Xasdf</i>asdf</b>-" 130db510071SBram Moolenaar put =t 131db510071SBram Moolenaar normal! fXdit 132db510071SBram Moolenaar call assert_equal('-<b>asdf<i></i>asdf</b>-', getline('.')) 133db510071SBram Moolenaar 134db510071SBram Moolenaar let t = "-<b>asdX<i>a<i />sdf</i>asdf</b>-" 135db510071SBram Moolenaar put =t 136db510071SBram Moolenaar normal! 0fXdit 137db510071SBram Moolenaar call assert_equal('-<b></b>-', getline('.')) 138db510071SBram Moolenaar 139db510071SBram Moolenaar let t = "-<b>asdf<i>Xasdf</i>asdf</b>-" 140db510071SBram Moolenaar put =t 141db510071SBram Moolenaar normal! fXdat 142db510071SBram Moolenaar call assert_equal('-<b>asdfasdf</b>-', getline('.')) 143db510071SBram Moolenaar 144db510071SBram Moolenaar let t = "-<b>asdX<i>as<b />df</i>asdf</b>-" 145db510071SBram Moolenaar put =t 146db510071SBram Moolenaar normal! 0fXdat 147db510071SBram Moolenaar call assert_equal('--', getline('.')) 148db510071SBram Moolenaar 149db510071SBram Moolenaar let t = "-<b>\ninnertext object\n</b>" 150db510071SBram Moolenaar put =t 151db510071SBram Moolenaar normal! dit 152db510071SBram Moolenaar call assert_equal('-<b></b>', getline('.')) 153db510071SBram Moolenaar 154db510071SBram Moolenaar set quoteescape& 155db510071SBram Moolenaar enew! 156db510071SBram Moolenaarendfunc 157db510071SBram Moolenaar 158b476cb7dSBram Moolenaarfunc Test_empty_html_tag() 159b476cb7dSBram Moolenaar new 160b476cb7dSBram Moolenaar call setline(1, '<div></div>') 161b476cb7dSBram Moolenaar normal 0citxxx 162b476cb7dSBram Moolenaar call assert_equal('<div>xxx</div>', getline(1)) 163b476cb7dSBram Moolenaar 164b476cb7dSBram Moolenaar call setline(1, '<div></div>') 165b476cb7dSBram Moolenaar normal 0f<cityyy 166b476cb7dSBram Moolenaar call assert_equal('<div>yyy</div>', getline(1)) 167b476cb7dSBram Moolenaar 168b476cb7dSBram Moolenaar call setline(1, '<div></div>') 169b476cb7dSBram Moolenaar normal 0f<vitsaaa 170b476cb7dSBram Moolenaar call assert_equal('aaa', getline(1)) 171b476cb7dSBram Moolenaar 172b476cb7dSBram Moolenaar bwipe! 173b476cb7dSBram Moolenaarendfunc 174b476cb7dSBram Moolenaar 175db510071SBram Moolenaar" Tests for match() and matchstr() 176db510071SBram Moolenaarfunc Test_match() 177db510071SBram Moolenaar call assert_equal("b", matchstr("abcd", ".", 0, 2)) 178db510071SBram Moolenaar call assert_equal("bc", matchstr("abcd", "..", 0, 2)) 179db510071SBram Moolenaar call assert_equal("c", matchstr("abcd", ".", 2, 0)) 180db510071SBram Moolenaar call assert_equal("a", matchstr("abcd", ".", 0, -1)) 181db510071SBram Moolenaar call assert_equal(-1, match("abcd", ".", 0, 5)) 182db510071SBram Moolenaar call assert_equal(0 , match("abcd", ".", 0, -1)) 183db510071SBram Moolenaar call assert_equal(0 , match('abc', '.', 0, 1)) 184db510071SBram Moolenaar call assert_equal(1 , match('abc', '.', 0, 2)) 185db510071SBram Moolenaar call assert_equal(2 , match('abc', '.', 0, 3)) 186db510071SBram Moolenaar call assert_equal(-1, match('abc', '.', 0, 4)) 187db510071SBram Moolenaar call assert_equal(1 , match('abc', '.', 1, 1)) 188db510071SBram Moolenaar call assert_equal(2 , match('abc', '.', 2, 1)) 189db510071SBram Moolenaar call assert_equal(-1, match('abc', '.', 3, 1)) 190db510071SBram Moolenaar call assert_equal(3 , match('abc', '$', 0, 1)) 191db510071SBram Moolenaar call assert_equal(-1, match('abc', '$', 0, 2)) 192db510071SBram Moolenaar call assert_equal(3 , match('abc', '$', 1, 1)) 193db510071SBram Moolenaar call assert_equal(3 , match('abc', '$', 2, 1)) 194db510071SBram Moolenaar call assert_equal(3 , match('abc', '$', 3, 1)) 195db510071SBram Moolenaar call assert_equal(-1, match('abc', '$', 4, 1)) 196db510071SBram Moolenaar call assert_equal(0 , match('abc', '\zs', 0, 1)) 197db510071SBram Moolenaar call assert_equal(1 , match('abc', '\zs', 0, 2)) 198db510071SBram Moolenaar call assert_equal(2 , match('abc', '\zs', 0, 3)) 199db510071SBram Moolenaar call assert_equal(3 , match('abc', '\zs', 0, 4)) 200db510071SBram Moolenaar call assert_equal(-1, match('abc', '\zs', 0, 5)) 201db510071SBram Moolenaar call assert_equal(1 , match('abc', '\zs', 1, 1)) 202db510071SBram Moolenaar call assert_equal(2 , match('abc', '\zs', 2, 1)) 203db510071SBram Moolenaar call assert_equal(3 , match('abc', '\zs', 3, 1)) 204db510071SBram Moolenaar call assert_equal(-1, match('abc', '\zs', 4, 1)) 205db510071SBram Moolenaarendfunc 20682846a00SBram Moolenaar 20782846a00SBram Moolenaar" This was causing an illegal memory access 20882846a00SBram Moolenaarfunc Test_inner_tag() 20982846a00SBram Moolenaar new 21082846a00SBram Moolenaar norm ixxx 21182846a00SBram Moolenaar call feedkeys("v", 'xt') 21282846a00SBram Moolenaar insert 21382846a00SBram Moolenaarx 21482846a00SBram Moolenaarx 21582846a00SBram Moolenaar. 21682846a00SBram Moolenaar norm it 21782846a00SBram Moolenaar q! 21882846a00SBram Moolenaarendfunc 21985160711SBram Moolenaar 22085160711SBram Moolenaarfunc Test_sentence() 22185160711SBram Moolenaar enew! 22285160711SBram Moolenaar call setline(1, 'A sentence. A sentence? A sentence!') 22385160711SBram Moolenaar 22485160711SBram Moolenaar normal yis 22585160711SBram Moolenaar call assert_equal('A sentence.', @") 22685160711SBram Moolenaar normal yas 22785160711SBram Moolenaar call assert_equal('A sentence. ', @") 22885160711SBram Moolenaar 22985160711SBram Moolenaar normal ) 23085160711SBram Moolenaar 23185160711SBram Moolenaar normal yis 23285160711SBram Moolenaar call assert_equal('A sentence?', @") 23385160711SBram Moolenaar normal yas 23485160711SBram Moolenaar call assert_equal('A sentence? ', @") 23585160711SBram Moolenaar 23685160711SBram Moolenaar normal ) 23785160711SBram Moolenaar 23885160711SBram Moolenaar normal yis 23985160711SBram Moolenaar call assert_equal('A sentence!', @") 24085160711SBram Moolenaar normal yas 24185160711SBram Moolenaar call assert_equal(' A sentence!', @") 24285160711SBram Moolenaar 24385160711SBram Moolenaar normal 0 24485160711SBram Moolenaar normal 2yis 24585160711SBram Moolenaar call assert_equal('A sentence. ', @") 24685160711SBram Moolenaar normal 3yis 24785160711SBram Moolenaar call assert_equal('A sentence. A sentence?', @") 24885160711SBram Moolenaar normal 2yas 24985160711SBram Moolenaar call assert_equal('A sentence. A sentence? ', @") 25085160711SBram Moolenaar 25185160711SBram Moolenaar %delete _ 25285160711SBram Moolenaarendfunc 25385160711SBram Moolenaar 25485160711SBram Moolenaarfunc Test_sentence_with_quotes() 25585160711SBram Moolenaar enew! 25685160711SBram Moolenaar call setline(1, 'A "sentence." A sentence.') 25785160711SBram Moolenaar 25885160711SBram Moolenaar normal yis 25985160711SBram Moolenaar call assert_equal('A "sentence."', @") 26085160711SBram Moolenaar normal yas 26185160711SBram Moolenaar call assert_equal('A "sentence." ', @") 26285160711SBram Moolenaar 26385160711SBram Moolenaar normal ) 26485160711SBram Moolenaar 26585160711SBram Moolenaar normal yis 26685160711SBram Moolenaar call assert_equal('A sentence.', @") 26785160711SBram Moolenaar normal yas 26885160711SBram Moolenaar call assert_equal(' A sentence.', @") 26985160711SBram Moolenaar 27085160711SBram Moolenaar %delete _ 27185160711SBram Moolenaarendfunc 27285160711SBram Moolenaar 2731e115360SBram Moolenaarfunc Test_sentence_with_cursor_on_delimiter() 27485160711SBram Moolenaar enew! 27585160711SBram Moolenaar call setline(1, "A '([sentence.])' A sentence.") 27685160711SBram Moolenaar 27785160711SBram Moolenaar normal! 15|yis 27885160711SBram Moolenaar call assert_equal("A '([sentence.])'", @") 27985160711SBram Moolenaar normal! 15|yas 28085160711SBram Moolenaar call assert_equal("A '([sentence.])' ", @") 28185160711SBram Moolenaar 28285160711SBram Moolenaar normal! 16|yis 28385160711SBram Moolenaar call assert_equal("A '([sentence.])'", @") 28485160711SBram Moolenaar normal! 16|yas 28585160711SBram Moolenaar call assert_equal("A '([sentence.])' ", @") 28685160711SBram Moolenaar 28785160711SBram Moolenaar normal! 17|yis 28885160711SBram Moolenaar call assert_equal("A '([sentence.])'", @") 28985160711SBram Moolenaar normal! 17|yas 29085160711SBram Moolenaar call assert_equal("A '([sentence.])' ", @") 29185160711SBram Moolenaar 29285160711SBram Moolenaar %delete _ 29385160711SBram Moolenaarendfunc 294