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
55db510071SBram Moolenaar" Tests for string and html text objects
56db510071SBram Moolenaarfunc Test_string_html_objects()
57db510071SBram Moolenaar  enew!
58db510071SBram Moolenaar
59db510071SBram Moolenaar  let t = '"wo\"rd\\" foo'
60db510071SBram Moolenaar  put =t
61db510071SBram Moolenaar  normal! da"
62db510071SBram Moolenaar  call assert_equal('foo', getline('.'))
63db510071SBram Moolenaar
64db510071SBram Moolenaar  let t = "'foo' 'bar' 'piep'"
65db510071SBram Moolenaar  put =t
66db510071SBram Moolenaar  normal! 0va'a'rx
67db510071SBram Moolenaar  call assert_equal("xxxxxxxxxxxx'piep'", getline('.'))
68db510071SBram Moolenaar
69db510071SBram Moolenaar  let t = "bla bla `quote` blah"
70db510071SBram Moolenaar  put =t
71db510071SBram Moolenaar  normal! 02f`da`
72db510071SBram Moolenaar  call assert_equal("bla bla blah", getline('.'))
73db510071SBram Moolenaar
74db510071SBram Moolenaar  let t = 'out " in "noXno"'
75db510071SBram Moolenaar  put =t
76db510071SBram Moolenaar  normal! 0fXdi"
77db510071SBram Moolenaar  call assert_equal('out " in ""', getline('.'))
78db510071SBram Moolenaar
79db510071SBram Moolenaar  let t = "\"'\" 'blah' rep 'buh'"
80db510071SBram Moolenaar  put =t
81db510071SBram Moolenaar  normal! 03f'vi'ry
82db510071SBram Moolenaar  call assert_equal("\"'\" 'blah'yyyyy'buh'", getline('.'))
83db510071SBram Moolenaar
84db510071SBram Moolenaar  set quoteescape=+*-
85db510071SBram Moolenaar  let t = "bla `s*`d-`+++`l**` b`la"
86db510071SBram Moolenaar  put =t
87db510071SBram Moolenaar  normal! di`
88db510071SBram Moolenaar  call assert_equal("bla `` b`la", getline('.'))
89db510071SBram Moolenaar
90db510071SBram Moolenaar  let t = 'voo "nah" sdf " asdf" sdf " sdf" sd'
91db510071SBram Moolenaar  put =t
92db510071SBram Moolenaar  normal! $F"va"oha"i"rz
93db510071SBram Moolenaar  call assert_equal('voo "zzzzzzzzzzzzzzzzzzzzzzzzzzzzsd', getline('.'))
94db510071SBram Moolenaar
95db510071SBram Moolenaar  let t = "-<b>asdf<i>Xasdf</i>asdf</b>-"
96db510071SBram Moolenaar  put =t
97db510071SBram Moolenaar  normal! fXdit
98db510071SBram Moolenaar  call assert_equal('-<b>asdf<i></i>asdf</b>-', getline('.'))
99db510071SBram Moolenaar
100db510071SBram Moolenaar  let t = "-<b>asdX<i>a<i />sdf</i>asdf</b>-"
101db510071SBram Moolenaar  put =t
102db510071SBram Moolenaar  normal! 0fXdit
103db510071SBram Moolenaar  call assert_equal('-<b></b>-', getline('.'))
104db510071SBram Moolenaar
105db510071SBram Moolenaar  let t = "-<b>asdf<i>Xasdf</i>asdf</b>-"
106db510071SBram Moolenaar  put =t
107db510071SBram Moolenaar  normal! fXdat
108db510071SBram Moolenaar  call assert_equal('-<b>asdfasdf</b>-', getline('.'))
109db510071SBram Moolenaar
110db510071SBram Moolenaar  let t = "-<b>asdX<i>as<b />df</i>asdf</b>-"
111db510071SBram Moolenaar  put =t
112db510071SBram Moolenaar  normal! 0fXdat
113db510071SBram Moolenaar  call assert_equal('--', getline('.'))
114db510071SBram Moolenaar
115db510071SBram Moolenaar  let t = "-<b>\ninnertext object\n</b>"
116db510071SBram Moolenaar  put =t
117db510071SBram Moolenaar  normal! dit
118db510071SBram Moolenaar  call assert_equal('-<b></b>', getline('.'))
119db510071SBram Moolenaar
120db510071SBram Moolenaar  set quoteescape&
121db510071SBram Moolenaar  enew!
122db510071SBram Moolenaarendfunc
123db510071SBram Moolenaar
124*b476cb7dSBram Moolenaarfunc Test_empty_html_tag()
125*b476cb7dSBram Moolenaar  new
126*b476cb7dSBram Moolenaar  call setline(1, '<div></div>')
127*b476cb7dSBram Moolenaar  normal 0citxxx
128*b476cb7dSBram Moolenaar  call assert_equal('<div>xxx</div>', getline(1))
129*b476cb7dSBram Moolenaar
130*b476cb7dSBram Moolenaar  call setline(1, '<div></div>')
131*b476cb7dSBram Moolenaar  normal 0f<cityyy
132*b476cb7dSBram Moolenaar  call assert_equal('<div>yyy</div>', getline(1))
133*b476cb7dSBram Moolenaar
134*b476cb7dSBram Moolenaar  call setline(1, '<div></div>')
135*b476cb7dSBram Moolenaar  normal 0f<vitsaaa
136*b476cb7dSBram Moolenaar  call assert_equal('aaa', getline(1))
137*b476cb7dSBram Moolenaar
138*b476cb7dSBram Moolenaar  bwipe!
139*b476cb7dSBram Moolenaarendfunc
140*b476cb7dSBram Moolenaar
141db510071SBram Moolenaar" Tests for match() and matchstr()
142db510071SBram Moolenaarfunc Test_match()
143db510071SBram Moolenaar  call assert_equal("b", matchstr("abcd", ".", 0, 2))
144db510071SBram Moolenaar  call assert_equal("bc", matchstr("abcd", "..", 0, 2))
145db510071SBram Moolenaar  call assert_equal("c", matchstr("abcd", ".", 2, 0))
146db510071SBram Moolenaar  call assert_equal("a", matchstr("abcd", ".", 0, -1))
147db510071SBram Moolenaar  call assert_equal(-1, match("abcd", ".", 0, 5))
148db510071SBram Moolenaar  call assert_equal(0 , match("abcd", ".", 0, -1))
149db510071SBram Moolenaar  call assert_equal(0 , match('abc', '.', 0, 1))
150db510071SBram Moolenaar  call assert_equal(1 , match('abc', '.', 0, 2))
151db510071SBram Moolenaar  call assert_equal(2 , match('abc', '.', 0, 3))
152db510071SBram Moolenaar  call assert_equal(-1, match('abc', '.', 0, 4))
153db510071SBram Moolenaar  call assert_equal(1 , match('abc', '.', 1, 1))
154db510071SBram Moolenaar  call assert_equal(2 , match('abc', '.', 2, 1))
155db510071SBram Moolenaar  call assert_equal(-1, match('abc', '.', 3, 1))
156db510071SBram Moolenaar  call assert_equal(3 , match('abc', '$', 0, 1))
157db510071SBram Moolenaar  call assert_equal(-1, match('abc', '$', 0, 2))
158db510071SBram Moolenaar  call assert_equal(3 , match('abc', '$', 1, 1))
159db510071SBram Moolenaar  call assert_equal(3 , match('abc', '$', 2, 1))
160db510071SBram Moolenaar  call assert_equal(3 , match('abc', '$', 3, 1))
161db510071SBram Moolenaar  call assert_equal(-1, match('abc', '$', 4, 1))
162db510071SBram Moolenaar  call assert_equal(0 , match('abc', '\zs', 0, 1))
163db510071SBram Moolenaar  call assert_equal(1 , match('abc', '\zs', 0, 2))
164db510071SBram Moolenaar  call assert_equal(2 , match('abc', '\zs', 0, 3))
165db510071SBram Moolenaar  call assert_equal(3 , match('abc', '\zs', 0, 4))
166db510071SBram Moolenaar  call assert_equal(-1, match('abc', '\zs', 0, 5))
167db510071SBram Moolenaar  call assert_equal(1 , match('abc', '\zs', 1, 1))
168db510071SBram Moolenaar  call assert_equal(2 , match('abc', '\zs', 2, 1))
169db510071SBram Moolenaar  call assert_equal(3 , match('abc', '\zs', 3, 1))
170db510071SBram Moolenaar  call assert_equal(-1, match('abc', '\zs', 4, 1))
171db510071SBram Moolenaarendfunc
17282846a00SBram Moolenaar
17382846a00SBram Moolenaar" This was causing an illegal memory access
17482846a00SBram Moolenaarfunc Test_inner_tag()
17582846a00SBram Moolenaar  new
17682846a00SBram Moolenaar  norm ixxx
17782846a00SBram Moolenaar  call feedkeys("v", 'xt')
17882846a00SBram Moolenaar  insert
17982846a00SBram Moolenaarx
18082846a00SBram Moolenaarx
18182846a00SBram Moolenaar.
18282846a00SBram Moolenaar  norm it
18382846a00SBram Moolenaar  q!
18482846a00SBram Moolenaarendfunc
18585160711SBram Moolenaar
18685160711SBram Moolenaarfunc Test_sentence()
18785160711SBram Moolenaar  enew!
18885160711SBram Moolenaar  call setline(1, 'A sentence.  A sentence?  A sentence!')
18985160711SBram Moolenaar
19085160711SBram Moolenaar  normal yis
19185160711SBram Moolenaar  call assert_equal('A sentence.', @")
19285160711SBram Moolenaar  normal yas
19385160711SBram Moolenaar  call assert_equal('A sentence.  ', @")
19485160711SBram Moolenaar
19585160711SBram Moolenaar  normal )
19685160711SBram Moolenaar
19785160711SBram Moolenaar  normal yis
19885160711SBram Moolenaar  call assert_equal('A sentence?', @")
19985160711SBram Moolenaar  normal yas
20085160711SBram Moolenaar  call assert_equal('A sentence?  ', @")
20185160711SBram Moolenaar
20285160711SBram Moolenaar  normal )
20385160711SBram Moolenaar
20485160711SBram Moolenaar  normal yis
20585160711SBram Moolenaar  call assert_equal('A sentence!', @")
20685160711SBram Moolenaar  normal yas
20785160711SBram Moolenaar  call assert_equal('  A sentence!', @")
20885160711SBram Moolenaar
20985160711SBram Moolenaar  normal 0
21085160711SBram Moolenaar  normal 2yis
21185160711SBram Moolenaar  call assert_equal('A sentence.  ', @")
21285160711SBram Moolenaar  normal 3yis
21385160711SBram Moolenaar  call assert_equal('A sentence.  A sentence?', @")
21485160711SBram Moolenaar  normal 2yas
21585160711SBram Moolenaar  call assert_equal('A sentence.  A sentence?  ', @")
21685160711SBram Moolenaar
21785160711SBram Moolenaar  %delete _
21885160711SBram Moolenaarendfunc
21985160711SBram Moolenaar
22085160711SBram Moolenaarfunc Test_sentence_with_quotes()
22185160711SBram Moolenaar  enew!
22285160711SBram Moolenaar  call setline(1, '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  %delete _
23785160711SBram Moolenaarendfunc
23885160711SBram Moolenaar
23985160711SBram Moolenaarfunc! Test_sentence_with_cursor_on_delimiter()
24085160711SBram Moolenaar  enew!
24185160711SBram Moolenaar  call setline(1, "A '([sentence.])'  A sentence.")
24285160711SBram Moolenaar
24385160711SBram Moolenaar  normal! 15|yis
24485160711SBram Moolenaar  call assert_equal("A '([sentence.])'", @")
24585160711SBram Moolenaar  normal! 15|yas
24685160711SBram Moolenaar  call assert_equal("A '([sentence.])'  ", @")
24785160711SBram Moolenaar
24885160711SBram Moolenaar  normal! 16|yis
24985160711SBram Moolenaar  call assert_equal("A '([sentence.])'", @")
25085160711SBram Moolenaar  normal! 16|yas
25185160711SBram Moolenaar  call assert_equal("A '([sentence.])'  ", @")
25285160711SBram Moolenaar
25385160711SBram Moolenaar  normal! 17|yis
25485160711SBram Moolenaar  call assert_equal("A '([sentence.])'", @")
25585160711SBram Moolenaar  normal! 17|yas
25685160711SBram Moolenaar  call assert_equal("A '([sentence.])'  ", @")
25785160711SBram Moolenaar
25885160711SBram Moolenaar  %delete _
25985160711SBram Moolenaarendfunc
260