" Test for the various 'cpoptions' (cpo) flags

source check.vim
source shared.vim
source view_util.vim

" Test for the 'a' flag in 'cpo'. Reading a file should set the alternate
" file name.
func Test_cpo_a()
  let save_cpo = &cpo
  call writefile(['one'], 'XfileCpoA', 'D')
  " Wipe out all the buffers, so that the alternate file is empty
  edit Xfoo | %bw
  set cpo-=a
  new
  read XfileCpoA
  call assert_equal('', @#)
  %d
  set cpo+=a
  read XfileCpoA
  call assert_equal('XfileCpoA', @#)
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'A' flag in 'cpo'. Writing a file should set the alternate
" file name.
func Test_cpo_A()
  let save_cpo = &cpo
  " Wipe out all the buffers, so that the alternate file is empty
  edit Xfoo | %bw
  set cpo-=A
  new XcpoAfile1
  write XcpoAfile2
  call assert_equal('', @#)
  %bw
  call delete('XcpoAfile2')
  new XcpoAfile1
  set cpo+=A
  write XcpoAfile2
  call assert_equal('XcpoAfile2', @#)
  close!
  call delete('XcpoAfile2')
  let &cpo = save_cpo
endfunc

" Test for the 'b' flag in 'cpo'. "\|" at the end of a map command is
" recognized as the end of the map.
func Test_cpo_b()
  let save_cpo = &cpo
  set cpo+=b
  nnoremap <F5> :pwd\<CR>\|let i = 1
  call assert_equal(':pwd\<CR>\', maparg('<F5>'))
  nunmap <F5>
  exe "nnoremap <F5> :pwd\<C-V>|let i = 1"
  call assert_equal(':pwd|let i = 1', maparg('<F5>'))
  nunmap <F5>
  set cpo-=b
  nnoremap <F5> :pwd\<CR>\|let i = 1
  call assert_equal(':pwd\<CR>|let i = 1', maparg('<F5>'))
  let &cpo = save_cpo
  nunmap <F5>
endfunc

" Test for the 'B' flag in 'cpo'. A backslash in mappings, abbreviations, user
" commands and menu commands has no special meaning.
func Test_cpo_B()
  let save_cpo = &cpo
  new
  set cpo-=B
  iabbr <buffer> abc ab\<BS>d
  exe "normal iabc "
  call assert_equal('ab<BS>d ', getline(1))
  %d
  set cpo+=B
  iabbr <buffer> abc ab\<BS>d
  exe "normal iabc "
  call assert_equal('abd ', getline(1))
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'c' flag in 'cpo'.
func Test_cpo_c()
  let save_cpo = &cpo
  set cpo+=c
  new
  call setline(1, ' abababababab')
  exe "normal gg/abab\<CR>"
  call assert_equal(3, searchcount().total)
  set cpo-=c
  exe "normal gg/abab\<CR>"
  call assert_equal(5, searchcount().total)
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'C' flag in 'cpo' (line continuation)
func Test_cpo_C()
  let save_cpo = &cpo
  call writefile(['let l = [', '\ 1,', '\ 2]'], 'XfileCpoC', 'D')
  set cpo-=C
  source XfileCpoC
  call assert_equal([1, 2], g:l)
  set cpo+=C
  call assert_fails('source XfileCpoC', ['E697:', 'E10:'])
  let &cpo = save_cpo
endfunc

" Test for the 'd' flag in 'cpo' (tags relative to the current file)
func Test_cpo_d()
  let save_cpo = &cpo
  call mkdir('XdirCpoD', 'R')
  call writefile(["one\tXfile1\t/^one$/"], 'tags', 'D')
  call writefile(["two\tXfile2\t/^two$/"], 'XdirCpoD/tags')
  set tags=./tags
  set cpo-=d
  edit XdirCpoD/Xfile
  call assert_equal('two', taglist('.*')[0].name)
  set cpo+=d
  call assert_equal('one', taglist('.*')[0].name)

  %bw!
  set tags&
  let &cpo = save_cpo
endfunc

" Test for the 'D' flag in 'cpo' (digraph after a r, f or t)
func Test_cpo_D()
  CheckFeature digraphs
  let save_cpo = &cpo
  new
  set cpo-=D
  call setline(1, 'abcdefgh|')
  exe "norm! 1gg0f\<c-k>!!"
  call assert_equal(9, col('.'))
  set cpo+=D
  exe "norm! 1gg0f\<c-k>!!"
  call assert_equal(1, col('.'))
  set cpo-=D
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'e' flag in 'cpo'
func Test_cpo_e()
  let save_cpo = &cpo
  let @a='let i = 45'
  set cpo+=e
  call feedkeys(":@a\<CR>", 'xt')
  call assert_equal(45, i)
  set cpo-=e
  call feedkeys(":@a\<CR>6\<CR>", 'xt')
  call assert_equal(456, i)
  let &cpo = save_cpo
endfunc

" Test for the 'E' flag in 'cpo' with yank, change, delete, etc. operators
func Test_cpo_E()
  new
  call setline(1, '')
  set cpo+=E
  " yank an empty line
  call assert_beeps('normal "ayl')
  " change an empty line
  call assert_beeps('normal lcTa')
  call assert_beeps('normal 0c0')
  " delete an empty line
  call assert_beeps('normal D')
  call assert_beeps('normal dl')
  call assert_equal('', getline(1))
  " change case of an empty line
  call assert_beeps('normal gul')
  call assert_beeps('normal gUl')
  " replace a character
  call assert_beeps('normal vrx')
  " increment and decrement
  call assert_beeps('exe "normal v\<C-A>"')
  call assert_beeps('exe "normal v\<C-X>"')
  set cpo-=E
  close!
endfunc

" Test for the 'f' flag in 'cpo' (read in an empty buffer sets the file name)
func Test_cpo_f()
  let save_cpo = &cpo
  new
  set cpo-=f
  read test_cpoptions.vim
  call assert_equal('', @%)
  %d
  set cpo+=f
  read test_cpoptions.vim
  call assert_equal('test_cpoptions.vim', @%)
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'F' flag in 'cpo' (write in an empty buffer sets the file name)
func Test_cpo_F()
  let save_cpo = &cpo
  new
  set cpo-=F
  write XfileCpoF
  call assert_equal('', @%)
  call delete('XfileCpoF')
  set cpo+=F
  write XfileCpoF
  call assert_equal('XfileCpoF', @%)
  close!
  call delete('XfileCpoF')
  let &cpo = save_cpo
endfunc

" Test for the 'g' flag in 'cpo' (jump to line 1 when re-editing a file)
func Test_cpo_g()
  let save_cpo = &cpo
  new test_cpoptions.vim
  set cpo-=g
  normal 20G
  edit
  call assert_equal(20, line('.'))
  set cpo+=g
  edit
  call assert_equal(1, line('.'))
  close!
  let &cpo = save_cpo
endfunc

" Test for inserting text in a line with only spaces ('H' flag in 'cpoptions')
func Test_cpo_H()
  let save_cpo = &cpo
  new
  set cpo-=H
  call setline(1, '    ')
  normal! Ia
  call assert_equal('    a', getline(1))
  set cpo+=H
  call setline(1, '    ')
  normal! Ia
  call assert_equal('   a ', getline(1))
  close!
  let &cpo = save_cpo
endfunc

" TODO: Add a test for the 'i' flag in 'cpo'
" Interrupting the reading of a file will leave it modified.

" Test for the 'I' flag in 'cpo' (deleting autoindent when using arrow keys)
func Test_cpo_I()
  let save_cpo = &cpo
  new
  setlocal autoindent
  set cpo+=I
  exe "normal i    one\<CR>\<Up>"
  call assert_equal('    ', getline(2))
  set cpo-=I
  %d
  exe "normal i    one\<CR>\<Up>"
  call assert_equal('', getline(2))
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'j' flag in 'cpo' is in the test_join.vim file.

" Test for the 'J' flag in 'cpo' (two spaces after a sentence)
func Test_cpo_J()
  let save_cpo = &cpo
  new
  set cpo-=J
  call setline(1, 'one. two!  three? four."''  five.)]')
  normal 0
  for colnr in [6, 12, 19, 28, 34]
    normal )
    call assert_equal(colnr, col('.'))
  endfor
  for colnr in [28, 19, 12, 6, 1]
    normal (
    call assert_equal(colnr, col('.'))
  endfor
  set cpo+=J
  normal 0
  for colnr in [12, 28, 34]
    normal )
    call assert_equal(colnr, col('.'))
  endfor
  for colnr in [28, 12, 1]
    normal (
    call assert_equal(colnr, col('.'))
  endfor
  close!
  let &cpo = save_cpo
endfunc

" TODO: Add a test for the 'k' flag in 'cpo'.
" Disable the recognition of raw key codes in mappings, abbreviations, and the
" "to" part of menu commands.

" TODO: Add a test for the 'K' flag in 'cpo'.
" Don't wait for a key code to complete when it is halfway a mapping.

" Test for the 'l' flag in 'cpo' (backslash in a [] range)
func Test_cpo_l()
  let save_cpo = &cpo
  new
  call setline(1, ['', "a\tc" .. '\t'])
  set cpo-=l
  exe 'normal gg/[\t]' .. "\<CR>"
  call assert_equal([2, 8], [col('.'), virtcol('.')])
  set cpo+=l
  exe 'normal gg/[\t]' .. "\<CR>"
  call assert_equal([4, 10], [col('.'), virtcol('.')])
  close!
  let &cpo = save_cpo
endfunc

" Test for inserting tab in virtual replace mode ('L' flag in 'cpoptions')
func Test_cpo_L()
  let save_cpo = &cpo
  new
  set cpo-=L
  call setline(1, 'abcdefghijklmnopqr')
  exe "normal 0gR\<Tab>"
  call assert_equal("\<Tab>ijklmnopqr", getline(1))
  set cpo+=L
  set list
  call setline(1, 'abcdefghijklmnopqr')
  exe "normal 0gR\<Tab>"
  call assert_equal("\<Tab>cdefghijklmnopqr", getline(1))
  set nolist
  call setline(1, 'abcdefghijklmnopqr')
  exe "normal 0gR\<Tab>"
  call assert_equal("\<Tab>ijklmnopqr", getline(1))
  close!
  let &cpo = save_cpo
endfunc

" TODO: Add a test for the 'm' flag in 'cpo'.
" When included, a showmatch will always wait half a second.  When not
" included, a showmatch will wait half a second or until a character is typed.

" Test for the 'M' flag in 'cpo' (% with escape parenthesis)
func Test_cpo_M()
  let save_cpo = &cpo
  new
  call setline(1, ['( \( )', '\( ( \)'])

  set cpo-=M
  call cursor(1, 1)
  normal %
  call assert_equal(6, col('.'))
  call cursor(1, 4)
  call assert_beeps('normal %')
  call cursor(2, 2)
  normal %
  call assert_equal(7, col('.'))
  call cursor(2, 4)
  call assert_beeps('normal %')

  set cpo+=M
  call cursor(1, 4)
  normal %
  call assert_equal(6, col('.'))
  call cursor(1, 1)
  call assert_beeps('normal %')
  call cursor(2, 4)
  normal %
  call assert_equal(7, col('.'))
  call cursor(2, 1)
  call assert_beeps('normal %')

  close!
  let &cpo = save_cpo
endfunc

" Test for the 'n' flag in 'cpo' (using number column for wrapped lines)
func Test_cpo_n()
  let save_cpo = &cpo
  new
  call setline(1, repeat('a', &columns))
  setlocal number
  set cpo-=n
  redraw!
  call assert_equal('    aaaa', Screenline(2))
  set cpo+=n
  redraw!
  call assert_equal('aaaa', Screenline(2))
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'o' flag in 'cpo' (line offset to search command)
func Test_cpo_o()
  let save_cpo = &cpo
  new
  call setline(1, ['', 'one', 'two', 'three', 'one', 'two', 'three'])
  set cpo-=o
  exe "normal /one/+2\<CR>"
  normal n
  call assert_equal(7, line('.'))
  set cpo+=o
  exe "normal /one/+2\<CR>"
  normal n
  call assert_equal(5, line('.'))
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'O' flag in 'cpo' (overwriting an existing file)
func Test_cpo_O()
  let save_cpo = &cpo
  new XfileCpoO
  call setline(1, 'one')
  call writefile(['two'], 'XfileCpoO', 'D')
  set cpo-=O
  call assert_fails('write', 'E13:')
  set cpo+=O
  write
  call assert_equal(['one'], readfile('XfileCpoO'))
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'p' flag in 'cpo' is in the test_lispwords.vim file.

" Test for the 'P' flag in 'cpo' (appending to a file sets the current file
" name)
func Test_cpo_P()
  let save_cpo = &cpo
  call writefile([], 'XfileCpoP', 'D')
  new
  call setline(1, 'one')
  set cpo+=F
  set cpo-=P
  write >> XfileCpoP
  call assert_equal('', @%)
  set cpo+=P
  write >> XfileCpoP
  call assert_equal('XfileCpoP', @%)
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'q' flag in 'cpo' (joining multiple lines)
func Test_cpo_q()
  let save_cpo = &cpo
  new
  call setline(1, ['one', 'two', 'three', 'four', 'five'])
  set cpo-=q
  normal gg4J
  call assert_equal(14, col('.'))
  %d
  call setline(1, ['one', 'two', 'three', 'four', 'five'])
  set cpo+=q
  normal gg4J
  call assert_equal(4, col('.'))
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'r' flag in 'cpo' (redo command with a search motion)
func Test_cpo_r()
  let save_cpo = &cpo
  new
  call setline(1, repeat(['one two three four'], 2))
  set cpo-=r
  exe "normal ggc/two\<CR>abc "
  let @/ = 'three'
  normal 2G.
  call assert_equal('abc two three four', getline(2))
  %d
  call setline(1, repeat(['one two three four'], 2))
  set cpo+=r
  exe "normal ggc/two\<CR>abc "
  let @/ = 'three'
  normal 2G.
  call assert_equal('abc three four', getline(2))
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'R' flag in 'cpo' (clear marks after a filter command)
func Test_cpo_R()
  CheckUnix
  let save_cpo = &cpo
  new
  call setline(1, ['three', 'one', 'two'])
  set cpo-=R
  3mark r
  %!sort
  call assert_equal(3, line("'r"))
  %d
  call setline(1, ['three', 'one', 'two'])
  set cpo+=R
  3mark r
  %!sort
  call assert_equal(0, line("'r"))
  close!
  let &cpo = save_cpo
endfunc

" TODO: Add a test for the 's' flag in 'cpo'.
" Set buffer options when entering the buffer for the first time.  If not
" present the options are set when the buffer is created.

" Test for the 'S' flag in 'cpo' (copying buffer options)
func Test_cpo_S()
  let save_cpo = &cpo
  new Xfile1
  set noautoindent
  new Xfile2
  set cpo-=S
  set autoindent
  wincmd p
  call assert_equal(0, &autoindent)
  wincmd p
  call assert_equal(1, &autoindent)
  set cpo+=S
  wincmd p
  call assert_equal(1, &autoindent)
  set noautoindent
  wincmd p
  call assert_equal(0, &autoindent)
  wincmd t
  close!
  close!
  let &cpo = save_cpo
endfunc

" Test for the 't' flag in 'cpo' is in the test_tagjump.vim file.

" Test for the 'u' flag in 'cpo' (Vi-compatible undo)
func Test_cpo_u()
  let save_cpo = &cpo
  new
  set cpo-=u
  exe "normal iabc\<C-G>udef\<C-G>ughi"
  normal uu
  call assert_equal('abc', getline(1))
  %d
  set cpo+=u
  exe "normal iabc\<C-G>udef\<C-G>ughi"
  normal uu
  call assert_equal('abcdefghi', getline(1))
  close!
  let &cpo = save_cpo
endfunc

" TODO: Add a test for the 'v' flag in 'cpo'.
" Backspaced characters remain visible on the screen in Insert mode.

" Test for the 'w' flag in 'cpo' ('cw' on a blank character changes only one
" character)
func Test_cpo_w()
  let save_cpo = &cpo
  new
  set cpo+=w
  call setline(1, 'here      are   some words')
  norm! 1gg0elcwZZZ
  call assert_equal('hereZZZ     are   some words', getline('.'))
  norm! 1gg2elcWYYY
  call assert_equal('hereZZZ     areYYY  some words', getline('.'))
  set cpo-=w
  call setline(1, 'here      are   some words')
  norm! 1gg0elcwZZZ
  call assert_equal('hereZZZare   some words', getline('.'))
  norm! 1gg2elcWYYY
  call assert_equal('hereZZZare   someYYYwords', getline('.'))
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'W' flag in 'cpo' is in the test_writefile.vim file

" Test for the 'x' flag in 'cpo' (Esc on command-line executes command)
func Test_cpo_x()
  let save_cpo = &cpo
  set cpo-=x
  let i = 1
  call feedkeys(":let i=10\<Esc>", 'xt')
  call assert_equal(1, i)
  set cpo+=x
  call feedkeys(":let i=10\<Esc>", 'xt')
  call assert_equal(10, i)
  let &cpo = save_cpo
endfunc

" Test for the 'X' flag in 'cpo' ('R' with a count)
func Test_cpo_X()
  let save_cpo = &cpo
  new
  call setline(1, 'aaaaaa')
  set cpo-=X
  normal gg4Rx
  call assert_equal('xxxxaa', getline(1))
  normal ggRy
  normal 4.
  call assert_equal('yyyyaa', getline(1))
  call setline(1, 'aaaaaa')
  set cpo+=X
  normal gg4Rx
  call assert_equal('xxxxaaaaa', getline(1))
  normal ggRy
  normal 4.
  call assert_equal('yyyyxxxaaaaa', getline(1))
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'y' flag in 'cpo' (repeating a yank command)
func Test_cpo_y()
  let save_cpo = &cpo
  new
  call setline(1, ['one', 'two'])
  set cpo-=y
  normal ggyy
  normal 2G.
  call assert_equal("one\n", @")
  %d
  call setline(1, ['one', 'two'])
  set cpo+=y
  normal ggyy
  normal 2G.
  call assert_equal("two\n", @")
  close!
  let &cpo = save_cpo
endfunc

" Test for the 'Z' flag in 'cpo' (write! resets 'readonly')
func Test_cpo_Z()
  let save_cpo = &cpo
  call writefile([], 'XfileCpoZ', 'D')
  new XfileCpoZ
  setlocal readonly
  set cpo-=Z
  write!
  call assert_equal(0, &readonly)
  set cpo+=Z
  setlocal readonly
  write!
  call assert_equal(1, &readonly)
  close!
  let &cpo = save_cpo
endfunc

" Test for the '!' flag in 'cpo' is in the test_normal.vim file

" Test for displaying dollar when changing text ('$' flag in 'cpoptions')
func Test_cpo_dollar()
  new
  let g:Line = ''
  func SaveFirstLine()
    let g:Line = Screenline(1)
    return ''
  endfunc
  inoremap <expr> <buffer> <F2> SaveFirstLine()
  call test_override('redraw_flag', 1)
  set cpo+=$
  call setline(1, 'one two three')
  redraw!
  exe "normal c2w\<F2>vim"
  call assert_equal('one tw$ three', g:Line)
  call assert_equal('vim three', getline(1))
  set cpo-=$
  call test_override('ALL', 0)
  delfunc SaveFirstLine
  %bw!
endfunc

" Test for the '%' flag in 'cpo' (parenthesis matching inside strings)
func Test_cpo_percent()
  let save_cpo = &cpo
  new
  call setline(1, '    if (strcmp("ab)cd(", s))')
  set cpo-=%
  normal 8|%
  call assert_equal(28, col('.'))
  normal 15|%
  call assert_equal(27, col('.'))
  normal 27|%
  call assert_equal(15, col('.'))
  call assert_beeps("normal 19|%")
  call assert_beeps("normal 22|%")
  set cpo+=%
  normal 8|%
  call assert_equal(28, col('.'))
  normal 15|%
  call assert_equal(19, col('.'))
  normal 27|%
  call assert_equal(22, col('.'))
  normal 19|%
  call assert_equal(15, col('.'))
  normal 22|%
  call assert_equal(27, col('.'))
  close!
  let &cpo = save_cpo
endfunc

" Test for cursor movement with '-' in 'cpoptions'
func Test_cpo_minus()
  new
  call setline(1, ['foo', 'bar', 'baz'])
  let save_cpo = &cpo
  set cpo+=-
  call assert_beeps('normal 10j')
  call assert_equal(1, line('.'))
  normal G
  call assert_beeps('normal 10k')
  call assert_equal(3, line('.'))
  call assert_fails(10, 'E16:')
  close!
  let &cpo = save_cpo
endfunc

" Test for the '+' flag in 'cpo' ('write file' command resets the 'modified'
" flag)
func Test_cpo_plus()
  let save_cpo = &cpo
  call writefile([], 'XfileCpoPlus', 'D')
  new XfileCpoPlus
  call setline(1, 'foo')
  write X1
  call assert_equal(1, &modified)
  set cpo+=+
  write X2
  call assert_equal(0, &modified)
  close!
  call delete('X1')
  call delete('X2')
  let &cpo = save_cpo
endfunc

" Test for the '*' flag in 'cpo' (':*' is same as ':@')
func Test_cpo_star()
  let save_cpo = &cpo
  let x = 0
  new
  set cpo-=*
  let @a = 'let x += 1'
  call assert_fails('*a', 'E20:')
  set cpo+=*
  *a
  call assert_equal(1, x)
  close!
  let &cpo = save_cpo
endfunc

" Test for the '<' flag in 'cpo' is in the test_mapping.vim file

" Test for the '>' flag in 'cpo' (use a new line when appending to a register)
func Test_cpo_gt()
  let save_cpo = &cpo
  new
  call setline(1, 'one two')
  set cpo-=>
  let @r = ''
  normal gg"Rye
  normal "Rye
  call assert_equal("oneone", @r)
  set cpo+=>
  let @r = ''
  normal gg"Rye
  normal "Rye
  call assert_equal("\none\none", @r)
  close!
  let &cpo = save_cpo
endfunc

" Test for the ';' flag in 'cpo'
" Test for t,f,F,T movement commands and 'cpo-;' setting
func Test_cpo_semicolon()
  let save_cpo = &cpo
  new
  call append(0, ["aaa two three four", "    zzz", "yyy   ",
	      \ "bbb yee yoo four", "ccc two three four",
	      \ "ddd yee yoo four"])
  set cpo-=;
  1
  normal! 0tt;D
  2
  normal! 0fz;D
  3
  normal! $Fy;D
  4
  normal! $Ty;D
  set cpo+=;
  5
  normal! 0tt;;D
  6
  normal! $Ty;;D

  call assert_equal('aaa two', getline(1))
  call assert_equal('    z', getline(2))
  call assert_equal('y', getline(3))
  call assert_equal('bbb y', getline(4))
  call assert_equal('ccc', getline(5))
  call assert_equal('ddd yee y', getline(6))
  close!
  let &cpo = save_cpo
endfunc

" Test for the '#' flag in 'cpo' (count before 'D', 'o' and 'O' operators)
func Test_cpo_hash()
  let save_cpo = &cpo
  new
  set cpo-=#
  call setline(1, ['one', 'two', 'three'])
  normal gg2D
  call assert_equal(['three'], getline(1, '$'))
  normal gg2ofour
  call assert_equal(['three', 'four', 'four'], getline(1, '$'))
  normal gg2Otwo
  call assert_equal(['two', 'two', 'three', 'four', 'four'], getline(1, '$'))
  %d
  set cpo+=#
  call setline(1, ['one', 'two', 'three'])
  normal gg2D
  call assert_equal(['', 'two', 'three'], getline(1, '$'))
  normal gg2oone
  call assert_equal(['', 'one', 'two', 'three'], getline(1, '$'))
  normal gg2Ozero
  call assert_equal(['zero', '', 'one', 'two', 'three'], getline(1, '$'))
  close!
  let &cpo = save_cpo
endfunc

" Test for the '&' flag in 'cpo'. The swap file is kept when a buffer is still
" loaded and ':preserve' is used.
func Test_cpo_ampersand()
  call writefile(['one'], 'XfileCpoAmp', 'D')
  let after =<< trim [CODE]
    set cpo+=&
    preserve
    qall
  [CODE]
  if RunVim([], after, 'XfileCpoAmp')
    call assert_equal(1, filereadable('.XfileCpoAmp.swp'))
    call delete('.XfileCpoAmp.swp')
  endif
endfunc

" Test for the '\' flag in 'cpo' (backslash in a [] range in a search pattern)
func Test_cpo_backslash()
  let save_cpo = &cpo
  new
  call setline(1, ['', " \\-string"])
  set cpo-=\
  exe 'normal gg/[ \-]' .. "\<CR>n"
  call assert_equal(3, col('.'))
  set cpo+=\
  exe 'normal gg/[ \-]' .. "\<CR>n"
  call assert_equal(2, col('.'))
  close!
  let &cpo = save_cpo
endfunc

" Test for the '/' flag in 'cpo' is in the test_substitute.vim file

" Test for the '{' flag in 'cpo' (the "{" and "}" commands stop at a {
" character at the start of a line)
func Test_cpo_brace()
  let save_cpo = &cpo
  new
  call setline(1, ['', '{', '    int i;', '}', ''])
  set cpo-={
  normal gg}
  call assert_equal(5, line('.'))
  normal G{
  call assert_equal(1, line('.'))
  set cpo+={
  normal gg}
  call assert_equal(2, line('.'))
  normal G{
  call assert_equal(2, line('.'))
  close!
  let &cpo = save_cpo
endfunc

" Test for the '.' flag in 'cpo' (:cd command fails if the current buffer is
" modified)
func Test_cpo_dot()
  let save_cpo = &cpo
  new Xfoo
  call setline(1, 'foo')
  let save_dir = getcwd()
  set cpo+=.

  " :cd should fail when buffer is modified and 'cpo' contains dot.
  call assert_fails('cd ..', 'E747:')
  call assert_equal(save_dir, getcwd())

  " :cd with exclamation mark should succeed.
  cd! ..
  call assert_notequal(save_dir, getcwd())

  " :cd should succeed when buffer has been written.
  w!
  exe 'cd ' .. fnameescape(save_dir)
  call assert_equal(save_dir, getcwd())

  call delete('Xfoo')
  set cpo&
  close!
  let &cpo = save_cpo
endfunc

" vim: shiftwidth=2 sts=2 expandtab
