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