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