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