1df7df59dSBram Moolenaar" Test for the various 'cpoptions' (cpo) flags
2c9630d26SBram Moolenaar
3c9630d26SBram Moolenaarsource check.vim
4df7df59dSBram Moolenaarsource shared.vim
5c9630d26SBram Moolenaarsource view_util.vim
6c9630d26SBram Moolenaar
7c9630d26SBram Moolenaar" Test for the 'a' flag in 'cpo'. Reading a file should set the alternate
8c9630d26SBram Moolenaar" file name.
9c9630d26SBram Moolenaarfunc Test_cpo_a()
10c9630d26SBram Moolenaar  let save_cpo = &cpo
11c9630d26SBram Moolenaar  call writefile(['one'], 'Xfile')
12c9630d26SBram Moolenaar  " Wipe out all the buffers, so that the alternate file is empty
13c9630d26SBram Moolenaar  edit Xfoo | %bw
14c9630d26SBram Moolenaar  set cpo-=a
15c9630d26SBram Moolenaar  new
16c9630d26SBram Moolenaar  read Xfile
17c9630d26SBram Moolenaar  call assert_equal('', @#)
18c9630d26SBram Moolenaar  %d
19c9630d26SBram Moolenaar  set cpo+=a
20c9630d26SBram Moolenaar  read Xfile
21c9630d26SBram Moolenaar  call assert_equal('Xfile', @#)
22c9630d26SBram Moolenaar  close!
23c9630d26SBram Moolenaar  call delete('Xfile')
24c9630d26SBram Moolenaar  let &cpo = save_cpo
25c9630d26SBram Moolenaarendfunc
26c9630d26SBram Moolenaar
27c9630d26SBram Moolenaar" Test for the 'A' flag in 'cpo'. Writing a file should set the alternate
28c9630d26SBram Moolenaar" file name.
29c9630d26SBram Moolenaarfunc Test_cpo_A()
30c9630d26SBram Moolenaar  let save_cpo = &cpo
31c9630d26SBram Moolenaar  " Wipe out all the buffers, so that the alternate file is empty
32c9630d26SBram Moolenaar  edit Xfoo | %bw
33c9630d26SBram Moolenaar  set cpo-=A
34c9630d26SBram Moolenaar  new Xfile1
35c9630d26SBram Moolenaar  write Xfile2
36c9630d26SBram Moolenaar  call assert_equal('', @#)
37c9630d26SBram Moolenaar  %bw
38c9630d26SBram Moolenaar  call delete('Xfile2')
39c9630d26SBram Moolenaar  new Xfile1
40c9630d26SBram Moolenaar  set cpo+=A
41c9630d26SBram Moolenaar  write Xfile2
42c9630d26SBram Moolenaar  call assert_equal('Xfile2', @#)
43c9630d26SBram Moolenaar  close!
44c9630d26SBram Moolenaar  call delete('Xfile2')
45c9630d26SBram Moolenaar  let &cpo = save_cpo
46c9630d26SBram Moolenaarendfunc
47c9630d26SBram Moolenaar
48c9630d26SBram Moolenaar" Test for the 'b' flag in 'cpo'. "\|" at the end of a map command is
49c9630d26SBram Moolenaar" recognized as the end of the map.
50c9630d26SBram Moolenaarfunc Test_cpo_b()
51c9630d26SBram Moolenaar  let save_cpo = &cpo
52c9630d26SBram Moolenaar  set cpo+=b
53c9630d26SBram Moolenaar  nnoremap <F5> :pwd\<CR>\|let i = 1
54c9630d26SBram Moolenaar  call assert_equal(':pwd\<CR>\', maparg('<F5>'))
55c9630d26SBram Moolenaar  nunmap <F5>
56c9630d26SBram Moolenaar  exe "nnoremap <F5> :pwd\<C-V>|let i = 1"
57c9630d26SBram Moolenaar  call assert_equal(':pwd|let i = 1', maparg('<F5>'))
58c9630d26SBram Moolenaar  nunmap <F5>
59c9630d26SBram Moolenaar  set cpo-=b
60c9630d26SBram Moolenaar  nnoremap <F5> :pwd\<CR>\|let i = 1
61c9630d26SBram Moolenaar  call assert_equal(':pwd\<CR>|let i = 1', maparg('<F5>'))
62c9630d26SBram Moolenaar  let &cpo = save_cpo
63c9630d26SBram Moolenaar  nunmap <F5>
64c9630d26SBram Moolenaarendfunc
65c9630d26SBram Moolenaar
66df7df59dSBram Moolenaar" Test for the 'B' flag in 'cpo'. A backslash in mappings, abbreviations, user
67df7df59dSBram Moolenaar" commands and menu commands has no special meaning.
68df7df59dSBram Moolenaarfunc Test_cpo_B()
69df7df59dSBram Moolenaar  let save_cpo = &cpo
70df7df59dSBram Moolenaar  new
71df7df59dSBram Moolenaar  set cpo-=B
72df7df59dSBram Moolenaar  iabbr <buffer> abc ab\<BS>d
73df7df59dSBram Moolenaar  exe "normal iabc "
74df7df59dSBram Moolenaar  call assert_equal('ab<BS>d ', getline(1))
75df7df59dSBram Moolenaar  %d
76df7df59dSBram Moolenaar  set cpo+=B
77df7df59dSBram Moolenaar  iabbr <buffer> abc ab\<BS>d
78df7df59dSBram Moolenaar  exe "normal iabc "
79df7df59dSBram Moolenaar  call assert_equal('abd ', getline(1))
80df7df59dSBram Moolenaar  close!
81df7df59dSBram Moolenaar  let &cpo = save_cpo
82df7df59dSBram Moolenaarendfunc
83df7df59dSBram Moolenaar
84c9630d26SBram Moolenaar" Test for the 'c' flag in 'cpo'.
85c9630d26SBram Moolenaarfunc Test_cpo_c()
86c9630d26SBram Moolenaar  let save_cpo = &cpo
87c9630d26SBram Moolenaar  set cpo+=c
88c9630d26SBram Moolenaar  new
89c9630d26SBram Moolenaar  call setline(1, ' abababababab')
90c9630d26SBram Moolenaar  exe "normal gg/abab\<CR>"
91c9630d26SBram Moolenaar  call assert_equal(3, searchcount().total)
92c9630d26SBram Moolenaar  set cpo-=c
93c9630d26SBram Moolenaar  exe "normal gg/abab\<CR>"
94c9630d26SBram Moolenaar  call assert_equal(5, searchcount().total)
95c9630d26SBram Moolenaar  close!
96c9630d26SBram Moolenaar  let &cpo = save_cpo
97c9630d26SBram Moolenaarendfunc
98c9630d26SBram Moolenaar
99c9630d26SBram Moolenaar" Test for the 'C' flag in 'cpo' (line continuation)
100c9630d26SBram Moolenaarfunc Test_cpo_C()
101c9630d26SBram Moolenaar  let save_cpo = &cpo
102c9630d26SBram Moolenaar  call writefile(['let l = [', '\ 1,', '\ 2]'], 'Xfile')
103c9630d26SBram Moolenaar  set cpo-=C
104c9630d26SBram Moolenaar  source Xfile
105c9630d26SBram Moolenaar  call assert_equal([1, 2], g:l)
106c9630d26SBram Moolenaar  set cpo+=C
1079b7bf9e9SBram Moolenaar  call assert_fails('source Xfile', ['E697:', 'E10:'])
108c9630d26SBram Moolenaar  call delete('Xfile')
109c9630d26SBram Moolenaar  let &cpo = save_cpo
110c9630d26SBram Moolenaarendfunc
111c9630d26SBram Moolenaar
112c9630d26SBram Moolenaar" Test for the 'd' flag in 'cpo' (tags relative to the current file)
113c9630d26SBram Moolenaarfunc Test_cpo_d()
114c9630d26SBram Moolenaar  let save_cpo = &cpo
115c9630d26SBram Moolenaar  call mkdir('Xdir')
116c9630d26SBram Moolenaar  call writefile(["one\tXfile1\t/^one$/"], 'tags')
117c9630d26SBram Moolenaar  call writefile(["two\tXfile2\t/^two$/"], 'Xdir/tags')
118c9630d26SBram Moolenaar  set tags=./tags
119c9630d26SBram Moolenaar  set cpo-=d
120c9630d26SBram Moolenaar  edit Xdir/Xfile
121c9630d26SBram Moolenaar  call assert_equal('two', taglist('.*')[0].name)
122c9630d26SBram Moolenaar  set cpo+=d
123c9630d26SBram Moolenaar  call assert_equal('one', taglist('.*')[0].name)
124c9630d26SBram Moolenaar  %bw!
125c9630d26SBram Moolenaar  call delete('tags')
126c9630d26SBram Moolenaar  call delete('Xdir', 'rf')
127c9630d26SBram Moolenaar  set tags&
128c9630d26SBram Moolenaar  let &cpo = save_cpo
129c9630d26SBram Moolenaarendfunc
130c9630d26SBram Moolenaar
131c9630d26SBram Moolenaar" Test for the 'D' flag in 'cpo' (digraph after a r, f or t)
132c9630d26SBram Moolenaarfunc Test_cpo_D()
133c9630d26SBram Moolenaar  CheckFeature digraphs
134c9630d26SBram Moolenaar  let save_cpo = &cpo
135c9630d26SBram Moolenaar  new
136c9630d26SBram Moolenaar  set cpo-=D
137c9630d26SBram Moolenaar  call setline(1, 'abcdefgh|')
138c9630d26SBram Moolenaar  exe "norm! 1gg0f\<c-k>!!"
139c9630d26SBram Moolenaar  call assert_equal(9, col('.'))
140c9630d26SBram Moolenaar  set cpo+=D
141c9630d26SBram Moolenaar  exe "norm! 1gg0f\<c-k>!!"
142c9630d26SBram Moolenaar  call assert_equal(1, col('.'))
143c9630d26SBram Moolenaar  set cpo-=D
144c9630d26SBram Moolenaar  close!
145c9630d26SBram Moolenaar  let &cpo = save_cpo
146c9630d26SBram Moolenaarendfunc
147c9630d26SBram Moolenaar
148c9630d26SBram Moolenaar" Test for the 'e' flag in 'cpo'
149c9630d26SBram Moolenaarfunc Test_cpo_e()
150c9630d26SBram Moolenaar  let save_cpo = &cpo
151c9630d26SBram Moolenaar  let @a='let i = 45'
152c9630d26SBram Moolenaar  set cpo+=e
153c9630d26SBram Moolenaar  call feedkeys(":@a\<CR>", 'xt')
154c9630d26SBram Moolenaar  call assert_equal(45, i)
155c9630d26SBram Moolenaar  set cpo-=e
156c9630d26SBram Moolenaar  call feedkeys(":@a\<CR>6\<CR>", 'xt')
157c9630d26SBram Moolenaar  call assert_equal(456, i)
158c9630d26SBram Moolenaar  let &cpo = save_cpo
159c9630d26SBram Moolenaarendfunc
160c9630d26SBram Moolenaar
161c9630d26SBram Moolenaar" Test for the 'E' flag in 'cpo' with yank, change, delete, etc. operators
162c9630d26SBram Moolenaarfunc Test_cpo_E()
163c9630d26SBram Moolenaar  new
164c9630d26SBram Moolenaar  call setline(1, '')
165c9630d26SBram Moolenaar  set cpo+=E
166c9630d26SBram Moolenaar  " yank an empty line
167c9630d26SBram Moolenaar  call assert_beeps('normal "ayl')
168c9630d26SBram Moolenaar  " change an empty line
169c9630d26SBram Moolenaar  call assert_beeps('normal lcTa')
170*3e72dcadSBram Moolenaar  call assert_beeps('normal 0c0')
171c9630d26SBram Moolenaar  " delete an empty line
172c9630d26SBram Moolenaar  call assert_beeps('normal D')
173c9630d26SBram Moolenaar  call assert_beeps('normal dl')
174c9630d26SBram Moolenaar  call assert_equal('', getline(1))
175c9630d26SBram Moolenaar  " change case of an empty line
176c9630d26SBram Moolenaar  call assert_beeps('normal gul')
177c9630d26SBram Moolenaar  call assert_beeps('normal gUl')
178c9630d26SBram Moolenaar  " replace a character
179c9630d26SBram Moolenaar  call assert_beeps('normal vrx')
180c9630d26SBram Moolenaar  " increment and decrement
181c9630d26SBram Moolenaar  call assert_beeps('exe "normal v\<C-A>"')
182c9630d26SBram Moolenaar  call assert_beeps('exe "normal v\<C-X>"')
183c9630d26SBram Moolenaar  set cpo-=E
184c9630d26SBram Moolenaar  close!
185c9630d26SBram Moolenaarendfunc
186c9630d26SBram Moolenaar
187c9630d26SBram Moolenaar" Test for the 'f' flag in 'cpo' (read in an empty buffer sets the file name)
188c9630d26SBram Moolenaarfunc Test_cpo_f()
189c9630d26SBram Moolenaar  let save_cpo = &cpo
190c9630d26SBram Moolenaar  new
191c9630d26SBram Moolenaar  set cpo-=f
192c9630d26SBram Moolenaar  read test_cpoptions.vim
193c9630d26SBram Moolenaar  call assert_equal('', @%)
194c9630d26SBram Moolenaar  %d
195c9630d26SBram Moolenaar  set cpo+=f
196c9630d26SBram Moolenaar  read test_cpoptions.vim
197c9630d26SBram Moolenaar  call assert_equal('test_cpoptions.vim', @%)
198c9630d26SBram Moolenaar  close!
199c9630d26SBram Moolenaar  let &cpo = save_cpo
200c9630d26SBram Moolenaarendfunc
201c9630d26SBram Moolenaar
202c9630d26SBram Moolenaar" Test for the 'F' flag in 'cpo' (write in an empty buffer sets the file name)
203c9630d26SBram Moolenaarfunc Test_cpo_F()
204c9630d26SBram Moolenaar  let save_cpo = &cpo
205c9630d26SBram Moolenaar  new
206c9630d26SBram Moolenaar  set cpo-=F
207c9630d26SBram Moolenaar  write Xfile
208c9630d26SBram Moolenaar  call assert_equal('', @%)
209c9630d26SBram Moolenaar  call delete('Xfile')
210c9630d26SBram Moolenaar  set cpo+=F
211c9630d26SBram Moolenaar  write Xfile
212c9630d26SBram Moolenaar  call assert_equal('Xfile', @%)
213c9630d26SBram Moolenaar  close!
214c9630d26SBram Moolenaar  call delete('Xfile')
215c9630d26SBram Moolenaar  let &cpo = save_cpo
216c9630d26SBram Moolenaarendfunc
217c9630d26SBram Moolenaar
218c9630d26SBram Moolenaar" Test for the 'g' flag in 'cpo' (jump to line 1 when re-editing a file)
219c9630d26SBram Moolenaarfunc Test_cpo_g()
220c9630d26SBram Moolenaar  let save_cpo = &cpo
221c9630d26SBram Moolenaar  new test_cpoptions.vim
222c9630d26SBram Moolenaar  set cpo-=g
223c9630d26SBram Moolenaar  normal 20G
224c9630d26SBram Moolenaar  edit
225c9630d26SBram Moolenaar  call assert_equal(20, line('.'))
226c9630d26SBram Moolenaar  set cpo+=g
227c9630d26SBram Moolenaar  edit
228c9630d26SBram Moolenaar  call assert_equal(1, line('.'))
229c9630d26SBram Moolenaar  close!
230c9630d26SBram Moolenaar  let &cpo = save_cpo
231c9630d26SBram Moolenaarendfunc
232c9630d26SBram Moolenaar
233c9630d26SBram Moolenaar" Test for inserting text in a line with only spaces ('H' flag in 'cpoptions')
234c9630d26SBram Moolenaarfunc Test_cpo_H()
235c9630d26SBram Moolenaar  let save_cpo = &cpo
236c9630d26SBram Moolenaar  new
237c9630d26SBram Moolenaar  set cpo-=H
238c9630d26SBram Moolenaar  call setline(1, '    ')
239c9630d26SBram Moolenaar  normal! Ia
240c9630d26SBram Moolenaar  call assert_equal('    a', getline(1))
241c9630d26SBram Moolenaar  set cpo+=H
242c9630d26SBram Moolenaar  call setline(1, '    ')
243c9630d26SBram Moolenaar  normal! Ia
244c9630d26SBram Moolenaar  call assert_equal('   a ', getline(1))
245c9630d26SBram Moolenaar  close!
246c9630d26SBram Moolenaar  let &cpo = save_cpo
247c9630d26SBram Moolenaarendfunc
248c9630d26SBram Moolenaar
249df7df59dSBram Moolenaar" TODO: Add a test for the 'i' flag in 'cpo'
250845e0ee5SBram Moolenaar" Interrupting the reading of a file will leave it modified.
251df7df59dSBram Moolenaar
252c9630d26SBram Moolenaar" Test for the 'I' flag in 'cpo' (deleting autoindent when using arrow keys)
253c9630d26SBram Moolenaarfunc Test_cpo_I()
254c9630d26SBram Moolenaar  let save_cpo = &cpo
255c9630d26SBram Moolenaar  new
256c9630d26SBram Moolenaar  setlocal autoindent
257c9630d26SBram Moolenaar  set cpo+=I
258c9630d26SBram Moolenaar  exe "normal i    one\<CR>\<Up>"
259c9630d26SBram Moolenaar  call assert_equal('    ', getline(2))
260c9630d26SBram Moolenaar  set cpo-=I
261c9630d26SBram Moolenaar  %d
262c9630d26SBram Moolenaar  exe "normal i    one\<CR>\<Up>"
263c9630d26SBram Moolenaar  call assert_equal('', getline(2))
264c9630d26SBram Moolenaar  close!
265c9630d26SBram Moolenaar  let &cpo = save_cpo
266c9630d26SBram Moolenaarendfunc
267c9630d26SBram Moolenaar
268df7df59dSBram Moolenaar" Test for the 'j' flag in 'cpo' is in the test_join.vim file.
269df7df59dSBram Moolenaar
270c9630d26SBram Moolenaar" Test for the 'J' flag in 'cpo' (two spaces after a sentence)
271c9630d26SBram Moolenaarfunc Test_cpo_J()
272c9630d26SBram Moolenaar  let save_cpo = &cpo
273c9630d26SBram Moolenaar  new
274c9630d26SBram Moolenaar  set cpo-=J
275c9630d26SBram Moolenaar  call setline(1, 'one. two!  three? four."''  five.)]')
276c9630d26SBram Moolenaar  normal 0
277c9630d26SBram Moolenaar  for colnr in [6, 12, 19, 28, 34]
278c9630d26SBram Moolenaar    normal )
279c9630d26SBram Moolenaar    call assert_equal(colnr, col('.'))
280c9630d26SBram Moolenaar  endfor
281c9630d26SBram Moolenaar  for colnr in [28, 19, 12, 6, 1]
282c9630d26SBram Moolenaar    normal (
283c9630d26SBram Moolenaar    call assert_equal(colnr, col('.'))
284c9630d26SBram Moolenaar  endfor
285c9630d26SBram Moolenaar  set cpo+=J
286c9630d26SBram Moolenaar  normal 0
287c9630d26SBram Moolenaar  for colnr in [12, 28, 34]
288c9630d26SBram Moolenaar    normal )
289c9630d26SBram Moolenaar    call assert_equal(colnr, col('.'))
290c9630d26SBram Moolenaar  endfor
291c9630d26SBram Moolenaar  for colnr in [28, 12, 1]
292c9630d26SBram Moolenaar    normal (
293c9630d26SBram Moolenaar    call assert_equal(colnr, col('.'))
294c9630d26SBram Moolenaar  endfor
295c9630d26SBram Moolenaar  close!
296c9630d26SBram Moolenaar  let &cpo = save_cpo
297c9630d26SBram Moolenaarendfunc
298c9630d26SBram Moolenaar
299845e0ee5SBram Moolenaar" TODO: Add a test for the 'k' flag in 'cpo'.
300845e0ee5SBram Moolenaar" Disable the recognition of raw key codes in mappings, abbreviations, and the
301845e0ee5SBram Moolenaar" "to" part of menu commands.
302c9630d26SBram Moolenaar
303845e0ee5SBram Moolenaar" TODO: Add a test for the 'K' flag in 'cpo'.
304845e0ee5SBram Moolenaar" Don't wait for a key code to complete when it is halfway a mapping.
305c9630d26SBram Moolenaar
306c9630d26SBram Moolenaar" Test for the 'l' flag in 'cpo' (backslash in a [] range)
307c9630d26SBram Moolenaarfunc Test_cpo_l()
308c9630d26SBram Moolenaar  let save_cpo = &cpo
309c9630d26SBram Moolenaar  new
310c9630d26SBram Moolenaar  call setline(1, ['', "a\tc" .. '\t'])
311c9630d26SBram Moolenaar  set cpo-=l
312c9630d26SBram Moolenaar  exe 'normal gg/[\t]' .. "\<CR>"
313c9630d26SBram Moolenaar  call assert_equal([2, 8], [col('.'), virtcol('.')])
314c9630d26SBram Moolenaar  set cpo+=l
315c9630d26SBram Moolenaar  exe 'normal gg/[\t]' .. "\<CR>"
316c9630d26SBram Moolenaar  call assert_equal([4, 10], [col('.'), virtcol('.')])
317c9630d26SBram Moolenaar  close!
318c9630d26SBram Moolenaar  let &cpo = save_cpo
319c9630d26SBram Moolenaarendfunc
320c9630d26SBram Moolenaar
321c9630d26SBram Moolenaar" Test for inserting tab in virtual replace mode ('L' flag in 'cpoptions')
322c9630d26SBram Moolenaarfunc Test_cpo_L()
323c9630d26SBram Moolenaar  let save_cpo = &cpo
324c9630d26SBram Moolenaar  new
325c9630d26SBram Moolenaar  set cpo-=L
326c9630d26SBram Moolenaar  call setline(1, 'abcdefghijklmnopqr')
327c9630d26SBram Moolenaar  exe "normal 0gR\<Tab>"
328c9630d26SBram Moolenaar  call assert_equal("\<Tab>ijklmnopqr", getline(1))
329c9630d26SBram Moolenaar  set cpo+=L
330c9630d26SBram Moolenaar  set list
331c9630d26SBram Moolenaar  call setline(1, 'abcdefghijklmnopqr')
332c9630d26SBram Moolenaar  exe "normal 0gR\<Tab>"
333c9630d26SBram Moolenaar  call assert_equal("\<Tab>cdefghijklmnopqr", getline(1))
334c9630d26SBram Moolenaar  set nolist
335c9630d26SBram Moolenaar  call setline(1, 'abcdefghijklmnopqr')
336c9630d26SBram Moolenaar  exe "normal 0gR\<Tab>"
337c9630d26SBram Moolenaar  call assert_equal("\<Tab>ijklmnopqr", getline(1))
338c9630d26SBram Moolenaar  close!
339c9630d26SBram Moolenaar  let &cpo = save_cpo
340c9630d26SBram Moolenaarendfunc
341c9630d26SBram Moolenaar
342845e0ee5SBram Moolenaar" TODO: Add a test for the 'm' flag in 'cpo'.
343845e0ee5SBram Moolenaar" When included, a showmatch will always wait half a second.  When not
344845e0ee5SBram Moolenaar" included, a showmatch will wait half a second or until a character is typed.
345c9630d26SBram Moolenaar
346c9630d26SBram Moolenaar" Test for the 'M' flag in 'cpo' (% with escape parenthesis)
347c9630d26SBram Moolenaarfunc Test_cpo_M()
348c9630d26SBram Moolenaar  let save_cpo = &cpo
349c9630d26SBram Moolenaar  new
350c9630d26SBram Moolenaar  call setline(1, ['( \( )', '\( ( \)'])
351c9630d26SBram Moolenaar
352c9630d26SBram Moolenaar  set cpo-=M
353c9630d26SBram Moolenaar  call cursor(1, 1)
354c9630d26SBram Moolenaar  normal %
355c9630d26SBram Moolenaar  call assert_equal(6, col('.'))
356c9630d26SBram Moolenaar  call cursor(1, 4)
357c9630d26SBram Moolenaar  call assert_beeps('normal %')
358c9630d26SBram Moolenaar  call cursor(2, 2)
359c9630d26SBram Moolenaar  normal %
360c9630d26SBram Moolenaar  call assert_equal(7, col('.'))
361c9630d26SBram Moolenaar  call cursor(2, 4)
362c9630d26SBram Moolenaar  call assert_beeps('normal %')
363c9630d26SBram Moolenaar
364c9630d26SBram Moolenaar  set cpo+=M
365c9630d26SBram Moolenaar  call cursor(1, 4)
366c9630d26SBram Moolenaar  normal %
367c9630d26SBram Moolenaar  call assert_equal(6, col('.'))
368c9630d26SBram Moolenaar  call cursor(1, 1)
369c9630d26SBram Moolenaar  call assert_beeps('normal %')
370c9630d26SBram Moolenaar  call cursor(2, 4)
371c9630d26SBram Moolenaar  normal %
372c9630d26SBram Moolenaar  call assert_equal(7, col('.'))
373c9630d26SBram Moolenaar  call cursor(2, 1)
374c9630d26SBram Moolenaar  call assert_beeps('normal %')
375c9630d26SBram Moolenaar
376c9630d26SBram Moolenaar  close!
377c9630d26SBram Moolenaar  let &cpo = save_cpo
378c9630d26SBram Moolenaarendfunc
379c9630d26SBram Moolenaar
380c9630d26SBram Moolenaar" Test for the 'n' flag in 'cpo' (using number column for wrapped lines)
381c9630d26SBram Moolenaarfunc Test_cpo_n()
382c9630d26SBram Moolenaar  let save_cpo = &cpo
383c9630d26SBram Moolenaar  new
384c9630d26SBram Moolenaar  call setline(1, repeat('a', &columns))
385c9630d26SBram Moolenaar  setlocal number
386c9630d26SBram Moolenaar  set cpo-=n
387c9630d26SBram Moolenaar  redraw!
388c9630d26SBram Moolenaar  call assert_equal('    aaaa', Screenline(2))
389c9630d26SBram Moolenaar  set cpo+=n
390c9630d26SBram Moolenaar  redraw!
391c9630d26SBram Moolenaar  call assert_equal('aaaa', Screenline(2))
392c9630d26SBram Moolenaar  close!
393c9630d26SBram Moolenaar  let &cpo = save_cpo
394c9630d26SBram Moolenaarendfunc
395c9630d26SBram Moolenaar
396c9630d26SBram Moolenaar" Test for the 'o' flag in 'cpo' (line offset to search command)
397c9630d26SBram Moolenaarfunc Test_cpo_o()
398c9630d26SBram Moolenaar  let save_cpo = &cpo
399c9630d26SBram Moolenaar  new
400c9630d26SBram Moolenaar  call setline(1, ['', 'one', 'two', 'three', 'one', 'two', 'three'])
401c9630d26SBram Moolenaar  set cpo-=o
402c9630d26SBram Moolenaar  exe "normal /one/+2\<CR>"
403c9630d26SBram Moolenaar  normal n
404c9630d26SBram Moolenaar  call assert_equal(7, line('.'))
405c9630d26SBram Moolenaar  set cpo+=o
406c9630d26SBram Moolenaar  exe "normal /one/+2\<CR>"
407c9630d26SBram Moolenaar  normal n
408c9630d26SBram Moolenaar  call assert_equal(5, line('.'))
409c9630d26SBram Moolenaar  close!
410c9630d26SBram Moolenaar  let &cpo = save_cpo
411c9630d26SBram Moolenaarendfunc
412c9630d26SBram Moolenaar
413c9630d26SBram Moolenaar" Test for the 'O' flag in 'cpo' (overwriting an existing file)
414c9630d26SBram Moolenaarfunc Test_cpo_O()
415c9630d26SBram Moolenaar  let save_cpo = &cpo
416c9630d26SBram Moolenaar  new Xfile
417c9630d26SBram Moolenaar  call setline(1, 'one')
418c9630d26SBram Moolenaar  call writefile(['two'], 'Xfile')
419c9630d26SBram Moolenaar  set cpo-=O
420c9630d26SBram Moolenaar  call assert_fails('write', 'E13:')
421c9630d26SBram Moolenaar  set cpo+=O
422c9630d26SBram Moolenaar  write
423c9630d26SBram Moolenaar  call assert_equal(['one'], readfile('Xfile'))
424c9630d26SBram Moolenaar  close!
425c9630d26SBram Moolenaar  call delete('Xfile')
426c9630d26SBram Moolenaar  let &cpo = save_cpo
427c9630d26SBram Moolenaarendfunc
428c9630d26SBram Moolenaar
429df7df59dSBram Moolenaar" Test for the 'p' flag in 'cpo' is in the test_lispwords.vim file.
430df7df59dSBram Moolenaar
431c9630d26SBram Moolenaar" Test for the 'P' flag in 'cpo' (appending to a file sets the current file
432c9630d26SBram Moolenaar" name)
433c9630d26SBram Moolenaarfunc Test_cpo_P()
434c9630d26SBram Moolenaar  let save_cpo = &cpo
435c9630d26SBram Moolenaar  call writefile([], 'Xfile')
436c9630d26SBram Moolenaar  new
437c9630d26SBram Moolenaar  call setline(1, 'one')
438c9630d26SBram Moolenaar  set cpo+=F
439c9630d26SBram Moolenaar  set cpo-=P
440c9630d26SBram Moolenaar  write >> Xfile
441c9630d26SBram Moolenaar  call assert_equal('', @%)
442c9630d26SBram Moolenaar  set cpo+=P
443c9630d26SBram Moolenaar  write >> Xfile
444c9630d26SBram Moolenaar  call assert_equal('Xfile', @%)
445c9630d26SBram Moolenaar  close!
446c9630d26SBram Moolenaar  call delete('Xfile')
447c9630d26SBram Moolenaar  let &cpo = save_cpo
448c9630d26SBram Moolenaarendfunc
449c9630d26SBram Moolenaar
450c9630d26SBram Moolenaar" Test for the 'q' flag in 'cpo' (joining multiple lines)
451c9630d26SBram Moolenaarfunc Test_cpo_q()
452c9630d26SBram Moolenaar  let save_cpo = &cpo
453c9630d26SBram Moolenaar  new
454c9630d26SBram Moolenaar  call setline(1, ['one', 'two', 'three', 'four', 'five'])
455c9630d26SBram Moolenaar  set cpo-=q
456c9630d26SBram Moolenaar  normal gg4J
457c9630d26SBram Moolenaar  call assert_equal(14, col('.'))
458c9630d26SBram Moolenaar  %d
459c9630d26SBram Moolenaar  call setline(1, ['one', 'two', 'three', 'four', 'five'])
460c9630d26SBram Moolenaar  set cpo+=q
461c9630d26SBram Moolenaar  normal gg4J
462c9630d26SBram Moolenaar  call assert_equal(4, col('.'))
463c9630d26SBram Moolenaar  close!
464c9630d26SBram Moolenaar  let &cpo = save_cpo
465c9630d26SBram Moolenaarendfunc
466c9630d26SBram Moolenaar
467c9630d26SBram Moolenaar" Test for the 'r' flag in 'cpo' (redo command with a search motion)
468c9630d26SBram Moolenaarfunc Test_cpo_r()
469c9630d26SBram Moolenaar  let save_cpo = &cpo
470c9630d26SBram Moolenaar  new
471c9630d26SBram Moolenaar  call setline(1, repeat(['one two three four'], 2))
472c9630d26SBram Moolenaar  set cpo-=r
473c9630d26SBram Moolenaar  exe "normal ggc/two\<CR>abc "
474c9630d26SBram Moolenaar  let @/ = 'three'
475c9630d26SBram Moolenaar  normal 2G.
476c9630d26SBram Moolenaar  call assert_equal('abc two three four', getline(2))
477c9630d26SBram Moolenaar  %d
478c9630d26SBram Moolenaar  call setline(1, repeat(['one two three four'], 2))
479c9630d26SBram Moolenaar  set cpo+=r
480c9630d26SBram Moolenaar  exe "normal ggc/two\<CR>abc "
481c9630d26SBram Moolenaar  let @/ = 'three'
482c9630d26SBram Moolenaar  normal 2G.
483c9630d26SBram Moolenaar  call assert_equal('abc three four', getline(2))
484c9630d26SBram Moolenaar  close!
485c9630d26SBram Moolenaar  let &cpo = save_cpo
486c9630d26SBram Moolenaarendfunc
487c9630d26SBram Moolenaar
488c9630d26SBram Moolenaar" Test for the 'R' flag in 'cpo' (clear marks after a filter command)
489c9630d26SBram Moolenaarfunc Test_cpo_R()
490c9630d26SBram Moolenaar  CheckUnix
491c9630d26SBram Moolenaar  let save_cpo = &cpo
492c9630d26SBram Moolenaar  new
493c9630d26SBram Moolenaar  call setline(1, ['three', 'one', 'two'])
494c9630d26SBram Moolenaar  set cpo-=R
495c9630d26SBram Moolenaar  3mark r
496c9630d26SBram Moolenaar  %!sort
497c9630d26SBram Moolenaar  call assert_equal(3, line("'r"))
498c9630d26SBram Moolenaar  %d
499c9630d26SBram Moolenaar  call setline(1, ['three', 'one', 'two'])
500c9630d26SBram Moolenaar  set cpo+=R
501c9630d26SBram Moolenaar  3mark r
502c9630d26SBram Moolenaar  %!sort
503c9630d26SBram Moolenaar  call assert_equal(0, line("'r"))
504c9630d26SBram Moolenaar  close!
505c9630d26SBram Moolenaar  let &cpo = save_cpo
506c9630d26SBram Moolenaarendfunc
507c9630d26SBram Moolenaar
508845e0ee5SBram Moolenaar" TODO: Add a test for the 's' flag in 'cpo'.
509845e0ee5SBram Moolenaar" Set buffer options when entering the buffer for the first time.  If not
510845e0ee5SBram Moolenaar" present the options are set when the buffer is created.
511df7df59dSBram Moolenaar
512c9630d26SBram Moolenaar" Test for the 'S' flag in 'cpo' (copying buffer options)
513c9630d26SBram Moolenaarfunc Test_cpo_S()
514c9630d26SBram Moolenaar  let save_cpo = &cpo
515c9630d26SBram Moolenaar  new Xfile1
516c9630d26SBram Moolenaar  set noautoindent
517c9630d26SBram Moolenaar  new Xfile2
518c9630d26SBram Moolenaar  set cpo-=S
519c9630d26SBram Moolenaar  set autoindent
520c9630d26SBram Moolenaar  wincmd p
521c9630d26SBram Moolenaar  call assert_equal(0, &autoindent)
522c9630d26SBram Moolenaar  wincmd p
523c9630d26SBram Moolenaar  call assert_equal(1, &autoindent)
524c9630d26SBram Moolenaar  set cpo+=S
525c9630d26SBram Moolenaar  wincmd p
526c9630d26SBram Moolenaar  call assert_equal(1, &autoindent)
527c9630d26SBram Moolenaar  set noautoindent
528c9630d26SBram Moolenaar  wincmd p
529c9630d26SBram Moolenaar  call assert_equal(0, &autoindent)
530c9630d26SBram Moolenaar  wincmd t
531c9630d26SBram Moolenaar  close!
532c9630d26SBram Moolenaar  close!
533c9630d26SBram Moolenaar  let &cpo = save_cpo
534c9630d26SBram Moolenaarendfunc
535c9630d26SBram Moolenaar
536df7df59dSBram Moolenaar" Test for the 't' flag in 'cpo' is in the test_tagjump.vim file.
537df7df59dSBram Moolenaar
538c9630d26SBram Moolenaar" Test for the 'u' flag in 'cpo' (Vi-compatible undo)
539c9630d26SBram Moolenaarfunc Test_cpo_u()
540c9630d26SBram Moolenaar  let save_cpo = &cpo
541c9630d26SBram Moolenaar  new
542c9630d26SBram Moolenaar  set cpo-=u
543c9630d26SBram Moolenaar  exe "normal iabc\<C-G>udef\<C-G>ughi"
544c9630d26SBram Moolenaar  normal uu
545c9630d26SBram Moolenaar  call assert_equal('abc', getline(1))
546c9630d26SBram Moolenaar  %d
547c9630d26SBram Moolenaar  set cpo+=u
548c9630d26SBram Moolenaar  exe "normal iabc\<C-G>udef\<C-G>ughi"
549c9630d26SBram Moolenaar  normal uu
550c9630d26SBram Moolenaar  call assert_equal('abcdefghi', getline(1))
551c9630d26SBram Moolenaar  close!
552c9630d26SBram Moolenaar  let &cpo = save_cpo
553c9630d26SBram Moolenaarendfunc
554c9630d26SBram Moolenaar
555845e0ee5SBram Moolenaar" TODO: Add a test for the 'v' flag in 'cpo'.
556845e0ee5SBram Moolenaar" Backspaced characters remain visible on the screen in Insert mode.
557df7df59dSBram Moolenaar
558df7df59dSBram Moolenaar" Test for the 'w' flag in 'cpo' ('cw' on a blank character changes only one
559df7df59dSBram Moolenaar" character)
560df7df59dSBram Moolenaarfunc Test_cpo_w()
561df7df59dSBram Moolenaar  let save_cpo = &cpo
562df7df59dSBram Moolenaar  new
563df7df59dSBram Moolenaar  set cpo+=w
564df7df59dSBram Moolenaar  call setline(1, 'here      are   some words')
565df7df59dSBram Moolenaar  norm! 1gg0elcwZZZ
566df7df59dSBram Moolenaar  call assert_equal('hereZZZ     are   some words', getline('.'))
567df7df59dSBram Moolenaar  norm! 1gg2elcWYYY
568df7df59dSBram Moolenaar  call assert_equal('hereZZZ     areYYY  some words', getline('.'))
569df7df59dSBram Moolenaar  set cpo-=w
570df7df59dSBram Moolenaar  call setline(1, 'here      are   some words')
571df7df59dSBram Moolenaar  norm! 1gg0elcwZZZ
572df7df59dSBram Moolenaar  call assert_equal('hereZZZare   some words', getline('.'))
573df7df59dSBram Moolenaar  norm! 1gg2elcWYYY
574df7df59dSBram Moolenaar  call assert_equal('hereZZZare   someYYYwords', getline('.'))
575df7df59dSBram Moolenaar  close!
576df7df59dSBram Moolenaar  let &cpo = save_cpo
577df7df59dSBram Moolenaarendfunc
578df7df59dSBram Moolenaar
579df7df59dSBram Moolenaar" Test for the 'W' flag in 'cpo' is in the test_writefile.vim file
580df7df59dSBram Moolenaar
581c9630d26SBram Moolenaar" Test for the 'x' flag in 'cpo' (Esc on command-line executes command)
582c9630d26SBram Moolenaarfunc Test_cpo_x()
583c9630d26SBram Moolenaar  let save_cpo = &cpo
584c9630d26SBram Moolenaar  set cpo-=x
585c9630d26SBram Moolenaar  let i = 1
586c9630d26SBram Moolenaar  call feedkeys(":let i=10\<Esc>", 'xt')
587c9630d26SBram Moolenaar  call assert_equal(1, i)
588c9630d26SBram Moolenaar  set cpo+=x
589c9630d26SBram Moolenaar  call feedkeys(":let i=10\<Esc>", 'xt')
590c9630d26SBram Moolenaar  call assert_equal(10, i)
591c9630d26SBram Moolenaar  let &cpo = save_cpo
592c9630d26SBram Moolenaarendfunc
593c9630d26SBram Moolenaar
594c9630d26SBram Moolenaar" Test for the 'X' flag in 'cpo' ('R' with a count)
595c9630d26SBram Moolenaarfunc Test_cpo_X()
596c9630d26SBram Moolenaar  let save_cpo = &cpo
597c9630d26SBram Moolenaar  new
598c9630d26SBram Moolenaar  call setline(1, 'aaaaaa')
599c9630d26SBram Moolenaar  set cpo-=X
600c9630d26SBram Moolenaar  normal gg4Rx
601c9630d26SBram Moolenaar  call assert_equal('xxxxaa', getline(1))
602c9630d26SBram Moolenaar  normal ggRy
603c9630d26SBram Moolenaar  normal 4.
604c9630d26SBram Moolenaar  call assert_equal('yyyyaa', getline(1))
605c9630d26SBram Moolenaar  call setline(1, 'aaaaaa')
606c9630d26SBram Moolenaar  set cpo+=X
607c9630d26SBram Moolenaar  normal gg4Rx
608c9630d26SBram Moolenaar  call assert_equal('xxxxaaaaa', getline(1))
609c9630d26SBram Moolenaar  normal ggRy
610c9630d26SBram Moolenaar  normal 4.
611c9630d26SBram Moolenaar  call assert_equal('yyyyxxxaaaaa', getline(1))
612c9630d26SBram Moolenaar  close!
613c9630d26SBram Moolenaar  let &cpo = save_cpo
614c9630d26SBram Moolenaarendfunc
615c9630d26SBram Moolenaar
616c9630d26SBram Moolenaar" Test for the 'y' flag in 'cpo' (repeating a yank command)
617c9630d26SBram Moolenaarfunc Test_cpo_y()
618c9630d26SBram Moolenaar  let save_cpo = &cpo
619c9630d26SBram Moolenaar  new
620c9630d26SBram Moolenaar  call setline(1, ['one', 'two'])
621c9630d26SBram Moolenaar  set cpo-=y
622c9630d26SBram Moolenaar  normal ggyy
623c9630d26SBram Moolenaar  normal 2G.
624c9630d26SBram Moolenaar  call assert_equal("one\n", @")
625c9630d26SBram Moolenaar  %d
626c9630d26SBram Moolenaar  call setline(1, ['one', 'two'])
627c9630d26SBram Moolenaar  set cpo+=y
628c9630d26SBram Moolenaar  normal ggyy
629c9630d26SBram Moolenaar  normal 2G.
630c9630d26SBram Moolenaar  call assert_equal("two\n", @")
631c9630d26SBram Moolenaar  close!
632c9630d26SBram Moolenaar  let &cpo = save_cpo
633c9630d26SBram Moolenaarendfunc
634c9630d26SBram Moolenaar
635c9630d26SBram Moolenaar" Test for the 'Z' flag in 'cpo' (write! resets 'readonly')
636c9630d26SBram Moolenaarfunc Test_cpo_Z()
637c9630d26SBram Moolenaar  let save_cpo = &cpo
638c9630d26SBram Moolenaar  call writefile([], 'Xfile')
639c9630d26SBram Moolenaar  new Xfile
640c9630d26SBram Moolenaar  setlocal readonly
641c9630d26SBram Moolenaar  set cpo-=Z
642c9630d26SBram Moolenaar  write!
643c9630d26SBram Moolenaar  call assert_equal(0, &readonly)
644c9630d26SBram Moolenaar  set cpo+=Z
645c9630d26SBram Moolenaar  setlocal readonly
646c9630d26SBram Moolenaar  write!
647c9630d26SBram Moolenaar  call assert_equal(1, &readonly)
648c9630d26SBram Moolenaar  close!
649c9630d26SBram Moolenaar  call delete('Xfile')
650c9630d26SBram Moolenaar  let &cpo = save_cpo
651c9630d26SBram Moolenaarendfunc
652c9630d26SBram Moolenaar
653df7df59dSBram Moolenaar" Test for the '!' flag in 'cpo' is in the test_normal.vim file
654c9630d26SBram Moolenaar
655c9630d26SBram Moolenaar" Test for displaying dollar when changing text ('$' flag in 'cpoptions')
656c9630d26SBram Moolenaarfunc Test_cpo_dollar()
657c9630d26SBram Moolenaar  new
658c9630d26SBram Moolenaar  let g:Line = ''
659c9630d26SBram Moolenaar  func SaveFirstLine()
660c9630d26SBram Moolenaar    let g:Line = Screenline(1)
661c9630d26SBram Moolenaar    return ''
662c9630d26SBram Moolenaar  endfunc
663c9630d26SBram Moolenaar  inoremap <expr> <buffer> <F2> SaveFirstLine()
664c9630d26SBram Moolenaar  call test_override('redraw_flag', 1)
665c9630d26SBram Moolenaar  set cpo+=$
666c9630d26SBram Moolenaar  call setline(1, 'one two three')
667c9630d26SBram Moolenaar  redraw!
668c9630d26SBram Moolenaar  exe "normal c2w\<F2>vim"
669c9630d26SBram Moolenaar  call assert_equal('one tw$ three', g:Line)
670c9630d26SBram Moolenaar  call assert_equal('vim three', getline(1))
671c9630d26SBram Moolenaar  set cpo-=$
672c9630d26SBram Moolenaar  call test_override('ALL', 0)
673c9630d26SBram Moolenaar  delfunc SaveFirstLine
674c9630d26SBram Moolenaar  %bw!
675c9630d26SBram Moolenaarendfunc
676c9630d26SBram Moolenaar
677df7df59dSBram Moolenaar" Test for the '%' flag in 'cpo' (parenthesis matching inside strings)
678df7df59dSBram Moolenaarfunc Test_cpo_percent()
679df7df59dSBram Moolenaar  let save_cpo = &cpo
680df7df59dSBram Moolenaar  new
681df7df59dSBram Moolenaar  call setline(1, '    if (strcmp("ab)cd(", s))')
682df7df59dSBram Moolenaar  set cpo-=%
683df7df59dSBram Moolenaar  normal 8|%
684df7df59dSBram Moolenaar  call assert_equal(28, col('.'))
685df7df59dSBram Moolenaar  normal 15|%
686df7df59dSBram Moolenaar  call assert_equal(27, col('.'))
687df7df59dSBram Moolenaar  normal 27|%
688df7df59dSBram Moolenaar  call assert_equal(15, col('.'))
689df7df59dSBram Moolenaar  call assert_beeps("normal 19|%")
690df7df59dSBram Moolenaar  call assert_beeps("normal 22|%")
691df7df59dSBram Moolenaar  set cpo+=%
692df7df59dSBram Moolenaar  normal 8|%
693df7df59dSBram Moolenaar  call assert_equal(28, col('.'))
694df7df59dSBram Moolenaar  normal 15|%
695df7df59dSBram Moolenaar  call assert_equal(19, col('.'))
696df7df59dSBram Moolenaar  normal 27|%
697df7df59dSBram Moolenaar  call assert_equal(22, col('.'))
698df7df59dSBram Moolenaar  normal 19|%
699df7df59dSBram Moolenaar  call assert_equal(15, col('.'))
700df7df59dSBram Moolenaar  normal 22|%
701df7df59dSBram Moolenaar  call assert_equal(27, col('.'))
702df7df59dSBram Moolenaar  close!
703df7df59dSBram Moolenaar  let &cpo = save_cpo
704df7df59dSBram Moolenaarendfunc
705df7df59dSBram Moolenaar
706df7df59dSBram Moolenaar" Test for cursor movement with '-' in 'cpoptions'
707df7df59dSBram Moolenaarfunc Test_cpo_minus()
708df7df59dSBram Moolenaar  new
709df7df59dSBram Moolenaar  call setline(1, ['foo', 'bar', 'baz'])
710df7df59dSBram Moolenaar  let save_cpo = &cpo
711df7df59dSBram Moolenaar  set cpo+=-
712df7df59dSBram Moolenaar  call assert_beeps('normal 10j')
713df7df59dSBram Moolenaar  call assert_equal(1, line('.'))
714df7df59dSBram Moolenaar  normal G
715df7df59dSBram Moolenaar  call assert_beeps('normal 10k')
716df7df59dSBram Moolenaar  call assert_equal(3, line('.'))
717df7df59dSBram Moolenaar  call assert_fails(10, 'E16:')
718df7df59dSBram Moolenaar  close!
719df7df59dSBram Moolenaar  let &cpo = save_cpo
720df7df59dSBram Moolenaarendfunc
721df7df59dSBram Moolenaar
722df7df59dSBram Moolenaar" Test for the '+' flag in 'cpo' ('write file' command resets the 'modified'
723df7df59dSBram Moolenaar" flag)
724df7df59dSBram Moolenaarfunc Test_cpo_plus()
725df7df59dSBram Moolenaar  let save_cpo = &cpo
726df7df59dSBram Moolenaar  call writefile([], 'Xfile')
727df7df59dSBram Moolenaar  new Xfile
728df7df59dSBram Moolenaar  call setline(1, 'foo')
729df7df59dSBram Moolenaar  write X1
730df7df59dSBram Moolenaar  call assert_equal(1, &modified)
731df7df59dSBram Moolenaar  set cpo+=+
732df7df59dSBram Moolenaar  write X2
733df7df59dSBram Moolenaar  call assert_equal(0, &modified)
734df7df59dSBram Moolenaar  close!
735df7df59dSBram Moolenaar  call delete('Xfile')
736df7df59dSBram Moolenaar  call delete('X1')
737df7df59dSBram Moolenaar  call delete('X2')
738df7df59dSBram Moolenaar  let &cpo = save_cpo
739df7df59dSBram Moolenaarendfunc
740df7df59dSBram Moolenaar
741df7df59dSBram Moolenaar" Test for the '*' flag in 'cpo' (':*' is same as ':@')
742df7df59dSBram Moolenaarfunc Test_cpo_star()
743df7df59dSBram Moolenaar  let save_cpo = &cpo
744df7df59dSBram Moolenaar  let x = 0
745df7df59dSBram Moolenaar  new
746df7df59dSBram Moolenaar  set cpo-=*
747df7df59dSBram Moolenaar  let @a = 'let x += 1'
748df7df59dSBram Moolenaar  call assert_fails('*a', 'E20:')
749df7df59dSBram Moolenaar  set cpo+=*
750df7df59dSBram Moolenaar  *a
751df7df59dSBram Moolenaar  call assert_equal(1, x)
752df7df59dSBram Moolenaar  close!
753df7df59dSBram Moolenaar  let &cpo = save_cpo
754df7df59dSBram Moolenaarendfunc
755df7df59dSBram Moolenaar
756df7df59dSBram Moolenaar" Test for the '<' flag in 'cpo' is in the test_mapping.vim file
757df7df59dSBram Moolenaar
758df7df59dSBram Moolenaar" Test for the '>' flag in 'cpo' (use a new line when appending to a register)
759df7df59dSBram Moolenaarfunc Test_cpo_gt()
760df7df59dSBram Moolenaar  let save_cpo = &cpo
761df7df59dSBram Moolenaar  new
762df7df59dSBram Moolenaar  call setline(1, 'one two')
763df7df59dSBram Moolenaar  set cpo-=>
764df7df59dSBram Moolenaar  let @r = ''
765df7df59dSBram Moolenaar  normal gg"Rye
766df7df59dSBram Moolenaar  normal "Rye
767df7df59dSBram Moolenaar  call assert_equal("oneone", @r)
768df7df59dSBram Moolenaar  set cpo+=>
769df7df59dSBram Moolenaar  let @r = ''
770df7df59dSBram Moolenaar  normal gg"Rye
771df7df59dSBram Moolenaar  normal "Rye
772df7df59dSBram Moolenaar  call assert_equal("\none\none", @r)
773df7df59dSBram Moolenaar  close!
774df7df59dSBram Moolenaar  let &cpo = save_cpo
775df7df59dSBram Moolenaarendfunc
776df7df59dSBram Moolenaar
777df7df59dSBram Moolenaar" Test for the ';' flag in 'cpo'
778df7df59dSBram Moolenaar" Test for t,f,F,T movement commands and 'cpo-;' setting
779df7df59dSBram Moolenaarfunc Test_cpo_semicolon()
780df7df59dSBram Moolenaar  let save_cpo = &cpo
781df7df59dSBram Moolenaar  new
782df7df59dSBram Moolenaar  call append(0, ["aaa two three four", "    zzz", "yyy   ",
783df7df59dSBram Moolenaar	      \ "bbb yee yoo four", "ccc two three four",
784df7df59dSBram Moolenaar	      \ "ddd yee yoo four"])
785df7df59dSBram Moolenaar  set cpo-=;
786df7df59dSBram Moolenaar  1
787df7df59dSBram Moolenaar  normal! 0tt;D
788df7df59dSBram Moolenaar  2
789df7df59dSBram Moolenaar  normal! 0fz;D
790df7df59dSBram Moolenaar  3
791df7df59dSBram Moolenaar  normal! $Fy;D
792df7df59dSBram Moolenaar  4
793df7df59dSBram Moolenaar  normal! $Ty;D
794df7df59dSBram Moolenaar  set cpo+=;
795df7df59dSBram Moolenaar  5
796df7df59dSBram Moolenaar  normal! 0tt;;D
797df7df59dSBram Moolenaar  6
798df7df59dSBram Moolenaar  normal! $Ty;;D
799df7df59dSBram Moolenaar
800df7df59dSBram Moolenaar  call assert_equal('aaa two', getline(1))
801df7df59dSBram Moolenaar  call assert_equal('    z', getline(2))
802df7df59dSBram Moolenaar  call assert_equal('y', getline(3))
803df7df59dSBram Moolenaar  call assert_equal('bbb y', getline(4))
804df7df59dSBram Moolenaar  call assert_equal('ccc', getline(5))
805df7df59dSBram Moolenaar  call assert_equal('ddd yee y', getline(6))
806df7df59dSBram Moolenaar  close!
807df7df59dSBram Moolenaar  let &cpo = save_cpo
808df7df59dSBram Moolenaarendfunc
809df7df59dSBram Moolenaar
810df7df59dSBram Moolenaar" Test for the '#' flag in 'cpo' (count before 'D', 'o' and 'O' operators)
811df7df59dSBram Moolenaarfunc Test_cpo_hash()
812df7df59dSBram Moolenaar  let save_cpo = &cpo
813df7df59dSBram Moolenaar  new
814df7df59dSBram Moolenaar  set cpo-=#
815df7df59dSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
816df7df59dSBram Moolenaar  normal gg2D
817df7df59dSBram Moolenaar  call assert_equal(['three'], getline(1, '$'))
818df7df59dSBram Moolenaar  normal gg2ofour
819df7df59dSBram Moolenaar  call assert_equal(['three', 'four', 'four'], getline(1, '$'))
820df7df59dSBram Moolenaar  normal gg2Otwo
821df7df59dSBram Moolenaar  call assert_equal(['two', 'two', 'three', 'four', 'four'], getline(1, '$'))
822df7df59dSBram Moolenaar  %d
823df7df59dSBram Moolenaar  set cpo+=#
824df7df59dSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
825df7df59dSBram Moolenaar  normal gg2D
826df7df59dSBram Moolenaar  call assert_equal(['', 'two', 'three'], getline(1, '$'))
827df7df59dSBram Moolenaar  normal gg2oone
828df7df59dSBram Moolenaar  call assert_equal(['', 'one', 'two', 'three'], getline(1, '$'))
829df7df59dSBram Moolenaar  normal gg2Ozero
830df7df59dSBram Moolenaar  call assert_equal(['zero', '', 'one', 'two', 'three'], getline(1, '$'))
831df7df59dSBram Moolenaar  close!
832df7df59dSBram Moolenaar  let &cpo = save_cpo
833df7df59dSBram Moolenaarendfunc
834df7df59dSBram Moolenaar
835df7df59dSBram Moolenaar" Test for the '&' flag in 'cpo'. The swap file is kept when a buffer is still
836df7df59dSBram Moolenaar" loaded and ':preserve' is used.
837df7df59dSBram Moolenaarfunc Test_cpo_ampersand()
838df7df59dSBram Moolenaar  call writefile(['one'], 'Xfile')
839df7df59dSBram Moolenaar  let after =<< trim [CODE]
840df7df59dSBram Moolenaar    set cpo+=&
841df7df59dSBram Moolenaar    preserve
842df7df59dSBram Moolenaar    qall
843df7df59dSBram Moolenaar  [CODE]
844df7df59dSBram Moolenaar  if RunVim([], after, 'Xfile')
845df7df59dSBram Moolenaar    call assert_equal(1, filereadable('.Xfile.swp'))
846df7df59dSBram Moolenaar    call delete('.Xfile.swp')
847df7df59dSBram Moolenaar  endif
848df7df59dSBram Moolenaar  call delete('Xfile')
849df7df59dSBram Moolenaarendfunc
850df7df59dSBram Moolenaar
851df7df59dSBram Moolenaar" Test for the '\' flag in 'cpo' (backslash in a [] range in a search pattern)
852df7df59dSBram Moolenaarfunc Test_cpo_backslash()
853df7df59dSBram Moolenaar  let save_cpo = &cpo
854df7df59dSBram Moolenaar  new
855df7df59dSBram Moolenaar  call setline(1, ['', " \\-string"])
856df7df59dSBram Moolenaar  set cpo-=\
857df7df59dSBram Moolenaar  exe 'normal gg/[ \-]' .. "\<CR>n"
858df7df59dSBram Moolenaar  call assert_equal(3, col('.'))
859df7df59dSBram Moolenaar  set cpo+=\
860df7df59dSBram Moolenaar  exe 'normal gg/[ \-]' .. "\<CR>n"
861df7df59dSBram Moolenaar  call assert_equal(2, col('.'))
862df7df59dSBram Moolenaar  close!
863df7df59dSBram Moolenaar  let &cpo = save_cpo
864df7df59dSBram Moolenaarendfunc
865df7df59dSBram Moolenaar
866df7df59dSBram Moolenaar" Test for the '/' flag in 'cpo' is in the test_substitute.vim file
867df7df59dSBram Moolenaar
868df7df59dSBram Moolenaar" Test for the '{' flag in 'cpo' (the "{" and "}" commands stop at a {
869df7df59dSBram Moolenaar" character at the start of a line)
870df7df59dSBram Moolenaarfunc Test_cpo_brace()
871df7df59dSBram Moolenaar  let save_cpo = &cpo
872df7df59dSBram Moolenaar  new
873df7df59dSBram Moolenaar  call setline(1, ['', '{', '    int i;', '}', ''])
874df7df59dSBram Moolenaar  set cpo-={
875df7df59dSBram Moolenaar  normal gg}
876df7df59dSBram Moolenaar  call assert_equal(5, line('.'))
877df7df59dSBram Moolenaar  normal G{
878df7df59dSBram Moolenaar  call assert_equal(1, line('.'))
879df7df59dSBram Moolenaar  set cpo+={
880df7df59dSBram Moolenaar  normal gg}
881df7df59dSBram Moolenaar  call assert_equal(2, line('.'))
882df7df59dSBram Moolenaar  normal G{
883df7df59dSBram Moolenaar  call assert_equal(2, line('.'))
884df7df59dSBram Moolenaar  close!
885df7df59dSBram Moolenaar  let &cpo = save_cpo
886df7df59dSBram Moolenaarendfunc
887df7df59dSBram Moolenaar
888df7df59dSBram Moolenaar" Test for the '.' flag in 'cpo' (:cd command fails if the current buffer is
889df7df59dSBram Moolenaar" modified)
890df7df59dSBram Moolenaarfunc Test_cpo_dot()
891df7df59dSBram Moolenaar  let save_cpo = &cpo
892df7df59dSBram Moolenaar  new Xfoo
893df7df59dSBram Moolenaar  call setline(1, 'foo')
894df7df59dSBram Moolenaar  let save_dir = getcwd()
895df7df59dSBram Moolenaar  set cpo+=.
896df7df59dSBram Moolenaar
897df7df59dSBram Moolenaar  " :cd should fail when buffer is modified and 'cpo' contains dot.
898df7df59dSBram Moolenaar  call assert_fails('cd ..', 'E747:')
899df7df59dSBram Moolenaar  call assert_equal(save_dir, getcwd())
900df7df59dSBram Moolenaar
901df7df59dSBram Moolenaar  " :cd with exclamation mark should succeed.
902df7df59dSBram Moolenaar  cd! ..
903df7df59dSBram Moolenaar  call assert_notequal(save_dir, getcwd())
904df7df59dSBram Moolenaar
905df7df59dSBram Moolenaar  " :cd should succeed when buffer has been written.
906df7df59dSBram Moolenaar  w!
907df7df59dSBram Moolenaar  exe 'cd ' .. fnameescape(save_dir)
908df7df59dSBram Moolenaar  call assert_equal(save_dir, getcwd())
909df7df59dSBram Moolenaar
910df7df59dSBram Moolenaar  call delete('Xfoo')
911df7df59dSBram Moolenaar  set cpo&
912df7df59dSBram Moolenaar  close!
913df7df59dSBram Moolenaar  let &cpo = save_cpo
914df7df59dSBram Moolenaarendfunc
915df7df59dSBram Moolenaar
916c9630d26SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
917