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 4894d9f4faSBram Moolenaar 49c5e2b040SBram Moolenaar exe "norm! fdvhi'y" 50c5e2b040SBram Moolenaar call assert_equal('bcde', @") 5194d9f4faSBram Moolenaar 527170b295SBram Moolenaar let @"='dummy' 537170b295SBram Moolenaar exe "norm! $gevi'y" 547170b295SBram Moolenaar call assert_equal('bcde', @") 5594d9f4faSBram Moolenaar 5694d9f4faSBram Moolenaar let @"='dummy' 5794d9f4faSBram Moolenaar exe "norm! 0fbhvi'y" 5894d9f4faSBram Moolenaar call assert_equal('bcde', @") 5994d9f4faSBram 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 154224a5f17SBram Moolenaar " copy the tag block from leading indentation before the start tag 155224a5f17SBram Moolenaar let t = " <b>\ntext\n</b>" 156224a5f17SBram Moolenaar $put =t 157224a5f17SBram Moolenaar normal! 2kvaty 158224a5f17SBram Moolenaar call assert_equal("<b>\ntext\n</b>", @") 159224a5f17SBram Moolenaar 160224a5f17SBram Moolenaar " copy the tag block from the end tag 161224a5f17SBram Moolenaar let t = "<title>\nwelcome\n</title>" 162224a5f17SBram Moolenaar $put =t 163224a5f17SBram Moolenaar normal! $vaty 164224a5f17SBram Moolenaar call assert_equal("<title>\nwelcome\n</title>", @") 165224a5f17SBram Moolenaar 166224a5f17SBram Moolenaar " copy the outer tag block from a tag without an end tag 167224a5f17SBram Moolenaar let t = "<html>\n<title>welcome\n</html>" 168224a5f17SBram Moolenaar $put =t 169224a5f17SBram Moolenaar normal! k$vaty 170224a5f17SBram Moolenaar call assert_equal("<html>\n<title>welcome\n</html>", @") 171224a5f17SBram Moolenaar 172db510071SBram Moolenaar set quoteescape& 173db510071SBram Moolenaar enew! 174db510071SBram Moolenaarendfunc 175db510071SBram Moolenaar 176b476cb7dSBram Moolenaarfunc Test_empty_html_tag() 177b476cb7dSBram Moolenaar new 178b476cb7dSBram Moolenaar call setline(1, '<div></div>') 179b476cb7dSBram Moolenaar normal 0citxxx 180b476cb7dSBram Moolenaar call assert_equal('<div>xxx</div>', getline(1)) 181b476cb7dSBram Moolenaar 182b476cb7dSBram Moolenaar call setline(1, '<div></div>') 183b476cb7dSBram Moolenaar normal 0f<cityyy 184b476cb7dSBram Moolenaar call assert_equal('<div>yyy</div>', getline(1)) 185b476cb7dSBram Moolenaar 186b476cb7dSBram Moolenaar call setline(1, '<div></div>') 187b476cb7dSBram Moolenaar normal 0f<vitsaaa 188b476cb7dSBram Moolenaar call assert_equal('aaa', getline(1)) 189b476cb7dSBram Moolenaar 190224a5f17SBram Moolenaar " selecting a tag block in an non-empty blank line should fail 191224a5f17SBram Moolenaar call setline(1, ' ') 192224a5f17SBram Moolenaar call assert_beeps('normal $vaty') 193224a5f17SBram Moolenaar 194b476cb7dSBram Moolenaar bwipe! 195b476cb7dSBram Moolenaarendfunc 196b476cb7dSBram Moolenaar 197db510071SBram Moolenaar" Tests for match() and matchstr() 198db510071SBram Moolenaarfunc Test_match() 199db510071SBram Moolenaar call assert_equal("b", matchstr("abcd", ".", 0, 2)) 200db510071SBram Moolenaar call assert_equal("bc", matchstr("abcd", "..", 0, 2)) 201db510071SBram Moolenaar call assert_equal("c", matchstr("abcd", ".", 2, 0)) 202db510071SBram Moolenaar call assert_equal("a", matchstr("abcd", ".", 0, -1)) 203db510071SBram Moolenaar call assert_equal(-1, match("abcd", ".", 0, 5)) 204db510071SBram Moolenaar call assert_equal(0 , match("abcd", ".", 0, -1)) 205db510071SBram Moolenaar call assert_equal(0 , match('abc', '.', 0, 1)) 206db510071SBram Moolenaar call assert_equal(1 , match('abc', '.', 0, 2)) 207db510071SBram Moolenaar call assert_equal(2 , match('abc', '.', 0, 3)) 208db510071SBram Moolenaar call assert_equal(-1, match('abc', '.', 0, 4)) 209db510071SBram Moolenaar call assert_equal(1 , match('abc', '.', 1, 1)) 210db510071SBram Moolenaar call assert_equal(2 , match('abc', '.', 2, 1)) 211db510071SBram Moolenaar call assert_equal(-1, match('abc', '.', 3, 1)) 212db510071SBram Moolenaar call assert_equal(3 , match('abc', '$', 0, 1)) 213db510071SBram Moolenaar call assert_equal(-1, match('abc', '$', 0, 2)) 214db510071SBram Moolenaar call assert_equal(3 , match('abc', '$', 1, 1)) 215db510071SBram Moolenaar call assert_equal(3 , match('abc', '$', 2, 1)) 216db510071SBram Moolenaar call assert_equal(3 , match('abc', '$', 3, 1)) 217db510071SBram Moolenaar call assert_equal(-1, match('abc', '$', 4, 1)) 218db510071SBram Moolenaar call assert_equal(0 , match('abc', '\zs', 0, 1)) 219db510071SBram Moolenaar call assert_equal(1 , match('abc', '\zs', 0, 2)) 220db510071SBram Moolenaar call assert_equal(2 , match('abc', '\zs', 0, 3)) 221db510071SBram Moolenaar call assert_equal(3 , match('abc', '\zs', 0, 4)) 222db510071SBram Moolenaar call assert_equal(-1, match('abc', '\zs', 0, 5)) 223db510071SBram Moolenaar call assert_equal(1 , match('abc', '\zs', 1, 1)) 224db510071SBram Moolenaar call assert_equal(2 , match('abc', '\zs', 2, 1)) 225db510071SBram Moolenaar call assert_equal(3 , match('abc', '\zs', 3, 1)) 226db510071SBram Moolenaar call assert_equal(-1, match('abc', '\zs', 4, 1)) 227db510071SBram Moolenaarendfunc 22882846a00SBram Moolenaar 22982846a00SBram Moolenaar" This was causing an illegal memory access 23082846a00SBram Moolenaarfunc Test_inner_tag() 23182846a00SBram Moolenaar new 23282846a00SBram Moolenaar norm ixxx 23382846a00SBram Moolenaar call feedkeys("v", 'xt') 23482846a00SBram Moolenaar insert 23582846a00SBram Moolenaarx 23682846a00SBram Moolenaarx 23782846a00SBram Moolenaar. 23882846a00SBram Moolenaar norm it 23982846a00SBram Moolenaar q! 24082846a00SBram Moolenaarendfunc 24185160711SBram Moolenaar 24285160711SBram Moolenaarfunc Test_sentence() 24385160711SBram Moolenaar enew! 24485160711SBram Moolenaar call setline(1, 'A sentence. A sentence? A sentence!') 24585160711SBram Moolenaar 24685160711SBram Moolenaar normal yis 24785160711SBram Moolenaar call assert_equal('A sentence.', @") 24885160711SBram Moolenaar normal yas 24985160711SBram Moolenaar call assert_equal('A sentence. ', @") 25085160711SBram Moolenaar 25185160711SBram Moolenaar normal ) 25285160711SBram Moolenaar 25385160711SBram Moolenaar normal yis 25485160711SBram Moolenaar call assert_equal('A sentence?', @") 25585160711SBram Moolenaar normal yas 25685160711SBram Moolenaar call assert_equal('A sentence? ', @") 25785160711SBram Moolenaar 25885160711SBram Moolenaar normal ) 25985160711SBram Moolenaar 26085160711SBram Moolenaar normal yis 26185160711SBram Moolenaar call assert_equal('A sentence!', @") 26285160711SBram Moolenaar normal yas 26385160711SBram Moolenaar call assert_equal(' A sentence!', @") 26485160711SBram Moolenaar 26585160711SBram Moolenaar normal 0 26685160711SBram Moolenaar normal 2yis 26785160711SBram Moolenaar call assert_equal('A sentence. ', @") 26885160711SBram Moolenaar normal 3yis 26985160711SBram Moolenaar call assert_equal('A sentence. A sentence?', @") 27085160711SBram Moolenaar normal 2yas 27185160711SBram Moolenaar call assert_equal('A sentence. A sentence? ', @") 27285160711SBram Moolenaar 27385160711SBram Moolenaar %delete _ 27485160711SBram Moolenaarendfunc 27585160711SBram Moolenaar 27685160711SBram Moolenaarfunc Test_sentence_with_quotes() 27785160711SBram Moolenaar enew! 27885160711SBram Moolenaar call setline(1, 'A "sentence." A sentence.') 27985160711SBram Moolenaar 28085160711SBram Moolenaar normal yis 28185160711SBram Moolenaar call assert_equal('A "sentence."', @") 28285160711SBram Moolenaar normal yas 28385160711SBram Moolenaar call assert_equal('A "sentence." ', @") 28485160711SBram Moolenaar 28585160711SBram Moolenaar normal ) 28685160711SBram Moolenaar 28785160711SBram Moolenaar normal yis 28885160711SBram Moolenaar call assert_equal('A sentence.', @") 28985160711SBram Moolenaar normal yas 29085160711SBram Moolenaar call assert_equal(' A sentence.', @") 29185160711SBram Moolenaar 29285160711SBram Moolenaar %delete _ 29385160711SBram Moolenaarendfunc 29485160711SBram Moolenaar 2951e115360SBram Moolenaarfunc Test_sentence_with_cursor_on_delimiter() 29685160711SBram Moolenaar enew! 29785160711SBram Moolenaar call setline(1, "A '([sentence.])' A sentence.") 29885160711SBram Moolenaar 29985160711SBram Moolenaar normal! 15|yis 30085160711SBram Moolenaar call assert_equal("A '([sentence.])'", @") 30185160711SBram Moolenaar normal! 15|yas 30285160711SBram Moolenaar call assert_equal("A '([sentence.])' ", @") 30385160711SBram Moolenaar 30485160711SBram Moolenaar normal! 16|yis 30585160711SBram Moolenaar call assert_equal("A '([sentence.])'", @") 30685160711SBram Moolenaar normal! 16|yas 30785160711SBram Moolenaar call assert_equal("A '([sentence.])' ", @") 30885160711SBram Moolenaar 30985160711SBram Moolenaar normal! 17|yis 31085160711SBram Moolenaar call assert_equal("A '([sentence.])'", @") 31185160711SBram Moolenaar normal! 17|yas 31285160711SBram Moolenaar call assert_equal("A '([sentence.])' ", @") 31385160711SBram Moolenaar 314*2f03e5a0SBram Moolenaar " don't get stuck on a quote at the start of a sentence 315*2f03e5a0SBram Moolenaar %delete _ 316*2f03e5a0SBram Moolenaar call setline(1, ['A sentence.', '"A sentence"?', 'A sentence!']) 317*2f03e5a0SBram Moolenaar normal gg)) 318*2f03e5a0SBram Moolenaar call assert_equal(3, getcurpos()[1]) 319*2f03e5a0SBram Moolenaar 320*2f03e5a0SBram Moolenaar %delete _ 321*2f03e5a0SBram Moolenaar call setline(1, ['A sentence.', "'A sentence'?", 'A sentence!']) 322*2f03e5a0SBram Moolenaar normal gg)) 323*2f03e5a0SBram Moolenaar call assert_equal(3, getcurpos()[1]) 324*2f03e5a0SBram Moolenaar 32585160711SBram Moolenaar %delete _ 32685160711SBram Moolenaarendfunc 327224a5f17SBram Moolenaar 328224a5f17SBram Moolenaar" Test for the paragraph (ap) text object 329224a5f17SBram Moolenaarfunc Test_paragraph() 330224a5f17SBram Moolenaar new 331224a5f17SBram Moolenaar call setline(1, ['First line.', 'Second line.', 'Third line.']) 332224a5f17SBram Moolenaar call cursor(2, 1) 333224a5f17SBram Moolenaar normal vapy 334224a5f17SBram Moolenaar call assert_equal("First line.\nSecond line.\nThird line.\n", @") 335224a5f17SBram Moolenaar 336224a5f17SBram Moolenaar call cursor(2, 1) 337224a5f17SBram Moolenaar call assert_beeps('normal vapapy') 338224a5f17SBram Moolenaar 339224a5f17SBram Moolenaar call setline(1, ['First line.', 'Second line.', ' ', '']) 340224a5f17SBram Moolenaar call cursor(1, 1) 341224a5f17SBram Moolenaar normal vapy 342224a5f17SBram Moolenaar call assert_equal("First line.\nSecond line.\n \n\n", @") 343224a5f17SBram Moolenaar 344224a5f17SBram Moolenaar call setline(1, ['', '', '', 'First line.', 'Second line.']) 345224a5f17SBram Moolenaar call cursor(2, 1) 346224a5f17SBram Moolenaar normal yap 347224a5f17SBram Moolenaar call assert_equal("\n\n\nFirst line.\nSecond line.\n", @") 348224a5f17SBram Moolenaar call assert_beeps('normal 3yap') 349224a5f17SBram Moolenaar exe "normal \<C-C>" 350224a5f17SBram Moolenaar 351224a5f17SBram Moolenaar %d 352224a5f17SBram Moolenaar call setline(1, [' ', ' ', ' ']) 353224a5f17SBram Moolenaar call cursor(2, 1) 354224a5f17SBram Moolenaar normal Vipy 355224a5f17SBram Moolenaar call assert_equal(" \n \n \n", @") 356224a5f17SBram Moolenaar call cursor(2, 1) 357224a5f17SBram Moolenaar call assert_beeps("normal Vipip") 358224a5f17SBram Moolenaar exe "normal \<C-C>" 359224a5f17SBram Moolenaar 360224a5f17SBram Moolenaar close! 361224a5f17SBram Moolenaarendfunc 362224a5f17SBram Moolenaar 363224a5f17SBram Moolenaar" Tests for text object aw 364224a5f17SBram Moolenaarfunc Test_textobj_a_word() 365224a5f17SBram Moolenaar new 366224a5f17SBram Moolenaar call append(0, ['foobar,eins,foobar', 'foo,zwei,foo ']) 367224a5f17SBram Moolenaar " diw 368224a5f17SBram Moolenaar norm! 1gg0diw 369224a5f17SBram Moolenaar call assert_equal([',eins,foobar', 'foo,zwei,foo ', ''], getline(1,'$')) 370224a5f17SBram Moolenaar " daw 371224a5f17SBram Moolenaar norm! 2ggEdaw 372224a5f17SBram Moolenaar call assert_equal([',eins,foobar', 'foo,zwei,', ''], getline(1, '$')) 373224a5f17SBram Moolenaar " daw the last word in a line 374224a5f17SBram Moolenaar call setline(1, ['foo bar', 'foo bar', '']) 375224a5f17SBram Moolenaar call cursor(1, 5) 376224a5f17SBram Moolenaar normal daw 377224a5f17SBram Moolenaar call assert_equal('foo', getline(1)) 378224a5f17SBram Moolenaar " aw in visual mode 379224a5f17SBram Moolenaar call cursor(2, 5) 380224a5f17SBram Moolenaar normal! vawx 381224a5f17SBram Moolenaar call assert_equal('foo', getline(2)) 382224a5f17SBram Moolenaar %d 383224a5f17SBram Moolenaar call append(0, ["foo\teins\tfoobar", "foo\tzwei\tfoo "]) 384224a5f17SBram Moolenaar " diW 385224a5f17SBram Moolenaar norm! 2ggwd2iW 386224a5f17SBram Moolenaar call assert_equal(['foo eins foobar', 'foo foo ', ''], getline(1,'$')) 387224a5f17SBram Moolenaar " daW 388224a5f17SBram Moolenaar norm! 1ggd2aW 389224a5f17SBram Moolenaar call assert_equal(['foobar', 'foo foo ', ''], getline(1,'$')) 390224a5f17SBram Moolenaar 391224a5f17SBram Moolenaar %d 392224a5f17SBram Moolenaar call append(0, ["foo\teins\tfoobar", "foo\tzwei\tfoo "]) 393224a5f17SBram Moolenaar " aw in visual line mode switches to characterwise mode 394224a5f17SBram Moolenaar norm! 2gg$Vawd 395224a5f17SBram Moolenaar call assert_equal(['foo eins foobar', 'foo zwei foo'], getline(1,'$')) 396224a5f17SBram Moolenaar norm! 1gg$Viwd 397224a5f17SBram Moolenaar call assert_equal(['foo eins ', 'foo zwei foo'], getline(1,'$')) 398224a5f17SBram Moolenaar 399224a5f17SBram Moolenaar " visually selecting a tab before a word with 'selection' set to 'exclusive' 400224a5f17SBram Moolenaar set selection=exclusive 401224a5f17SBram Moolenaar normal gg3lvlawy 402224a5f17SBram Moolenaar call assert_equal("\teins", @") 403224a5f17SBram Moolenaar " visually selecting a tab before a word with 'selection' set to 'inclusive' 404224a5f17SBram Moolenaar set selection=inclusive 405224a5f17SBram Moolenaar normal gg3lvlawy 406224a5f17SBram Moolenaar call assert_equal("\teins\t", @") 407224a5f17SBram Moolenaar set selection& 408224a5f17SBram Moolenaar 409224a5f17SBram Moolenaar " selecting a word with no non-space characters in a buffer fails 410224a5f17SBram Moolenaar %d 411224a5f17SBram Moolenaar call setline(1, ' ') 412224a5f17SBram Moolenaar call assert_beeps('normal 3lyaw') 413224a5f17SBram Moolenaar 414224a5f17SBram Moolenaar " visually selecting words backwards with no more words to select 415224a5f17SBram Moolenaar call setline(1, 'one two') 416224a5f17SBram Moolenaar call assert_beeps('normal 2lvh2aw') 417224a5f17SBram Moolenaar exe "normal \<C-C>" 418224a5f17SBram Moolenaar call assert_beeps('normal $vh3aw') 419224a5f17SBram Moolenaar exe "normal \<C-C>" 420224a5f17SBram Moolenaar call setline(1, ['', 'one two']) 421224a5f17SBram Moolenaar call assert_beeps('normal 2G2lvh3aw') 422224a5f17SBram Moolenaar exe "normal \<C-C>" 423224a5f17SBram Moolenaar 424224a5f17SBram Moolenaar " selecting words forward with no more words to select 425224a5f17SBram Moolenaar %d 426224a5f17SBram Moolenaar call setline(1, 'one a') 427224a5f17SBram Moolenaar call assert_beeps('normal 0y3aw') 428224a5f17SBram Moolenaar call setline(1, 'one two ') 429224a5f17SBram Moolenaar call assert_beeps('normal 0y3aw') 430224a5f17SBram Moolenaar call assert_beeps('normal 03ly2aw') 431224a5f17SBram Moolenaar 432224a5f17SBram Moolenaar " clean up 433224a5f17SBram Moolenaar bw! 434224a5f17SBram Moolenaarendfunc 435224a5f17SBram Moolenaar 436224a5f17SBram Moolenaar" Test for is and as text objects 437224a5f17SBram Moolenaarfunc Test_textobj_sentence() 438224a5f17SBram Moolenaar new 439224a5f17SBram Moolenaar call append(0, ['This is a test. With some sentences!', '', 440224a5f17SBram Moolenaar \ 'Even with a question? And one more. And no sentence here']) 441224a5f17SBram Moolenaar " Test for dis - does not remove trailing whitespace 442224a5f17SBram Moolenaar norm! 1gg0dis 443224a5f17SBram Moolenaar call assert_equal([' With some sentences!', '', 444224a5f17SBram Moolenaar \ 'Even with a question? And one more. And no sentence here', ''], 445224a5f17SBram Moolenaar \ getline(1,'$')) 446224a5f17SBram Moolenaar " Test for das - removes leading whitespace 447224a5f17SBram Moolenaar norm! 3ggf?ldas 448224a5f17SBram Moolenaar call assert_equal([' With some sentences!', '', 449224a5f17SBram Moolenaar \ 'Even with a question? And no sentence here', ''], getline(1,'$')) 450224a5f17SBram Moolenaar " when used in visual mode, is made characterwise 451224a5f17SBram Moolenaar norm! 3gg$Visy 452224a5f17SBram Moolenaar call assert_equal('v', visualmode()) 453224a5f17SBram Moolenaar " reset visualmode() 454224a5f17SBram Moolenaar norm! 3ggVy 455224a5f17SBram Moolenaar norm! 3gg$Vasy 456224a5f17SBram Moolenaar call assert_equal('v', visualmode()) 457224a5f17SBram Moolenaar " basic testing for textobjects a< and at 458224a5f17SBram Moolenaar %d 459224a5f17SBram Moolenaar call setline(1, ['<div> ','<a href="foobar" class="foo">xyz</a>',' </div>', ' ']) 460224a5f17SBram Moolenaar " a< 461224a5f17SBram Moolenaar norm! 1gg0da< 462224a5f17SBram Moolenaar call assert_equal([' ', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 463224a5f17SBram Moolenaar norm! 1pj 464224a5f17SBram Moolenaar call assert_equal([' <div>', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 465224a5f17SBram Moolenaar " at 466224a5f17SBram Moolenaar norm! d2at 467224a5f17SBram Moolenaar call assert_equal([' '], getline(1,'$')) 468224a5f17SBram Moolenaar %d 469224a5f17SBram Moolenaar call setline(1, ['<div> ','<a href="foobar" class="foo">xyz</a>',' </div>', ' ']) 470224a5f17SBram Moolenaar " i< 471224a5f17SBram Moolenaar norm! 1gg0di< 472224a5f17SBram Moolenaar call assert_equal(['<> ', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 473224a5f17SBram Moolenaar norm! 1Pj 474224a5f17SBram Moolenaar call assert_equal(['<div> ', '<a href="foobar" class="foo">xyz</a>', ' </div>', ' '], getline(1,'$')) 475224a5f17SBram Moolenaar norm! d2it 476224a5f17SBram Moolenaar call assert_equal(['<div></div>',' '], getline(1,'$')) 477224a5f17SBram Moolenaar " basic testing for a[ and i[ text object 478224a5f17SBram Moolenaar %d 479224a5f17SBram Moolenaar call setline(1, [' ', '[', 'one [two]', 'thre', ']']) 480224a5f17SBram Moolenaar norm! 3gg0di[ 481224a5f17SBram Moolenaar call assert_equal([' ', '[', ']'], getline(1,'$')) 482224a5f17SBram Moolenaar call setline(1, [' ', '[', 'one [two]', 'thre', ']']) 483224a5f17SBram Moolenaar norm! 3gg0ftd2a[ 484224a5f17SBram Moolenaar call assert_equal([' '], getline(1,'$')) 485224a5f17SBram Moolenaar 486224a5f17SBram Moolenaar " clean up 487224a5f17SBram Moolenaar bw! 488224a5f17SBram Moolenaarendfunc 489224a5f17SBram Moolenaar 490224a5f17SBram Moolenaar" Test for quote (', " and `) textobjects 491224a5f17SBram Moolenaarfunc Test_textobj_quote() 492224a5f17SBram Moolenaar new 493224a5f17SBram Moolenaar 494224a5f17SBram Moolenaar " Test for i" when cursor is in front of a quoted object 495224a5f17SBram Moolenaar call append(0, 'foo "bar"') 496224a5f17SBram Moolenaar norm! 1gg0di" 497224a5f17SBram Moolenaar call assert_equal(['foo ""', ''], getline(1,'$')) 498224a5f17SBram Moolenaar 499224a5f17SBram Moolenaar " Test for visually selecting an inner quote 500224a5f17SBram Moolenaar %d 501224a5f17SBram Moolenaar " extend visual selection from one quote to the next 502224a5f17SBram Moolenaar call setline(1, 'color "red" color "blue"') 503224a5f17SBram Moolenaar call cursor(1, 7) 504224a5f17SBram Moolenaar normal v4li"y 505224a5f17SBram Moolenaar call assert_equal('"red" color "blue', @") 506224a5f17SBram Moolenaar 507224a5f17SBram Moolenaar " try to extend visual selection from one quote to a non-existing quote 508224a5f17SBram Moolenaar call setline(1, 'color "red" color blue') 509224a5f17SBram Moolenaar call cursor(1, 7) 510224a5f17SBram Moolenaar call feedkeys('v4li"y', 'xt') 511224a5f17SBram Moolenaar call assert_equal('"red"', @") 512224a5f17SBram Moolenaar 513224a5f17SBram Moolenaar " try to extend visual selection from one quote to a next partial quote 514224a5f17SBram Moolenaar call setline(1, 'color "red" color "blue') 515224a5f17SBram Moolenaar call cursor(1, 7) 516224a5f17SBram Moolenaar normal v4li"y 517224a5f17SBram Moolenaar call assert_equal('"red" color ', @") 518224a5f17SBram Moolenaar 519224a5f17SBram Moolenaar " select a quote backwards in visual mode 520224a5f17SBram Moolenaar call cursor(1, 12) 521224a5f17SBram Moolenaar normal vhi"y 522224a5f17SBram Moolenaar call assert_equal('red" ', @") 523224a5f17SBram Moolenaar call assert_equal(8, col('.')) 524224a5f17SBram Moolenaar 525224a5f17SBram Moolenaar " select a quote backwards in visual mode from outside the quote 526224a5f17SBram Moolenaar call cursor(1, 17) 527224a5f17SBram Moolenaar normal v2hi"y 528224a5f17SBram Moolenaar call assert_equal('red', @") 529224a5f17SBram Moolenaar call assert_equal(8, col('.')) 530224a5f17SBram Moolenaar 531224a5f17SBram Moolenaar " visually selecting a quote with 'selection' set to 'exclusive' 532224a5f17SBram Moolenaar call setline(1, 'He said "How are you?"') 533224a5f17SBram Moolenaar set selection=exclusive 534224a5f17SBram Moolenaar normal 012lv2li"y 535224a5f17SBram Moolenaar call assert_equal('How are you?', @") 536224a5f17SBram Moolenaar set selection& 537224a5f17SBram Moolenaar 538224a5f17SBram Moolenaar " try copy a quote object with a single quote in the line 539224a5f17SBram Moolenaar call setline(1, "Smith's car") 540224a5f17SBram Moolenaar call cursor(1, 6) 541224a5f17SBram Moolenaar call assert_beeps("normal yi'") 542224a5f17SBram Moolenaar call assert_beeps("normal 2lyi'") 543224a5f17SBram Moolenaar 544224a5f17SBram Moolenaar " selecting space before and after a quoted string 545224a5f17SBram Moolenaar call setline(1, "some 'special' string") 546224a5f17SBram Moolenaar normal 0ya' 547224a5f17SBram Moolenaar call assert_equal("'special' ", @") 548224a5f17SBram Moolenaar call setline(1, "some 'special'string") 549224a5f17SBram Moolenaar normal 0ya' 550224a5f17SBram Moolenaar call assert_equal(" 'special'", @") 551224a5f17SBram Moolenaar 552224a5f17SBram Moolenaar close! 553224a5f17SBram Moolenaarendfunc 554224a5f17SBram Moolenaar 555224a5f17SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 556