127a82e31SBram Moolenaar" Tests for 'backspace' settings
227a82e31SBram Moolenaar
327a82e31SBram Moolenaarfunc Test_backspace_option()
427a82e31SBram Moolenaar  set backspace=
527a82e31SBram Moolenaar  call assert_equal('', &backspace)
627a82e31SBram Moolenaar  set backspace=indent
727a82e31SBram Moolenaar  call assert_equal('indent', &backspace)
827a82e31SBram Moolenaar  set backspace=eol
927a82e31SBram Moolenaar  call assert_equal('eol', &backspace)
1027a82e31SBram Moolenaar  set backspace=start
1127a82e31SBram Moolenaar  call assert_equal('start', &backspace)
12aa0489e1SBram Moolenaar  set backspace=nostop
13aa0489e1SBram Moolenaar  call assert_equal('nostop', &backspace)
1427a82e31SBram Moolenaar  " Add the value
1527a82e31SBram Moolenaar  set backspace=
1627a82e31SBram Moolenaar  set backspace=indent
1727a82e31SBram Moolenaar  call assert_equal('indent', &backspace)
1827a82e31SBram Moolenaar  set backspace+=eol
1927a82e31SBram Moolenaar  call assert_equal('indent,eol', &backspace)
2027a82e31SBram Moolenaar  set backspace+=start
2127a82e31SBram Moolenaar  call assert_equal('indent,eol,start', &backspace)
22aa0489e1SBram Moolenaar  set backspace+=nostop
23aa0489e1SBram Moolenaar  call assert_equal('indent,eol,start,nostop', &backspace)
2427a82e31SBram Moolenaar  " Delete the value
25aa0489e1SBram Moolenaar  set backspace-=nostop
26aa0489e1SBram Moolenaar  call assert_equal('indent,eol,start', &backspace)
2727a82e31SBram Moolenaar  set backspace-=indent
2827a82e31SBram Moolenaar  call assert_equal('eol,start', &backspace)
2927a82e31SBram Moolenaar  set backspace-=start
3027a82e31SBram Moolenaar  call assert_equal('eol', &backspace)
3127a82e31SBram Moolenaar  set backspace-=eol
3227a82e31SBram Moolenaar  call assert_equal('', &backspace)
3327a82e31SBram Moolenaar  " Check the error
34*5dc4e2f8SBram Moolenaar  call assert_fails('set backspace=ABC', 'E474:')
35*5dc4e2f8SBram Moolenaar  call assert_fails('set backspace+=def', 'E474:')
3627a82e31SBram Moolenaar  " NOTE: Vim doesn't check following error...
37*5dc4e2f8SBram Moolenaar  "call assert_fails('set backspace-=ghi', 'E474:')
3827a82e31SBram Moolenaar
3927a82e31SBram Moolenaar  " Check backwards compatibility with version 5.4 and earlier
4027a82e31SBram Moolenaar  set backspace=0
4127a82e31SBram Moolenaar  call assert_equal('0', &backspace)
4227a82e31SBram Moolenaar  set backspace=1
4327a82e31SBram Moolenaar  call assert_equal('1', &backspace)
4427a82e31SBram Moolenaar  set backspace=2
4527a82e31SBram Moolenaar  call assert_equal('2', &backspace)
46aa0489e1SBram Moolenaar  set backspace=3
47aa0489e1SBram Moolenaar  call assert_equal('3', &backspace)
48*5dc4e2f8SBram Moolenaar  call assert_fails('set backspace=4', 'E474:')
49*5dc4e2f8SBram Moolenaar  call assert_fails('set backspace=10', 'E474:')
5027a82e31SBram Moolenaar
5127a82e31SBram Moolenaar  " Cleared when 'compatible' is set
5227a82e31SBram Moolenaar  set compatible
5327a82e31SBram Moolenaar  call assert_equal('', &backspace)
54e9c07270SBram Moolenaar  set nocompatible viminfo+=nviminfo
5527a82e31SBram Moolenaarendfunc
5627a82e31SBram Moolenaar
57fb222df2SBram Moolenaar" Test with backspace set to the non-compatible setting
58fb222df2SBram Moolenaarfunc Test_backspace_ctrl_u()
59fb222df2SBram Moolenaar  new
60fb222df2SBram Moolenaar  call append(0,  [
61fb222df2SBram Moolenaar        \ "1 this shouldn't be deleted",
62fb222df2SBram Moolenaar        \ "2 this shouldn't be deleted",
63fb222df2SBram Moolenaar        \ "3 this shouldn't be deleted",
64fb222df2SBram Moolenaar        \ "4 this should be deleted",
65fb222df2SBram Moolenaar        \ "5 this shouldn't be deleted",
66fb222df2SBram Moolenaar        \ "6 this shouldn't be deleted",
67fb222df2SBram Moolenaar        \ "7 this shouldn't be deleted",
68fb222df2SBram Moolenaar        \ "8 this shouldn't be deleted (not touched yet)"])
69fb222df2SBram Moolenaar  call cursor(2, 1)
70fb222df2SBram Moolenaar
71fb222df2SBram Moolenaar  set compatible
72fb222df2SBram Moolenaar  set backspace=2
73fb222df2SBram Moolenaar
74fb222df2SBram Moolenaar  exe "normal Avim1\<C-U>\<Esc>\<CR>"
75fb222df2SBram Moolenaar  exe "normal Avim2\<C-G>u\<C-U>\<Esc>\<CR>"
76fb222df2SBram Moolenaar
77fb222df2SBram Moolenaar  set cpo-=<
78fb222df2SBram Moolenaar  inoremap <c-u> <left><c-u>
79fccd93f0SBram Moolenaar  exe "normal Avim3\<*C-U>\<Esc>\<CR>"
80fb222df2SBram Moolenaar  iunmap <c-u>
81fb222df2SBram Moolenaar  exe "normal Avim4\<C-U>\<C-U>\<Esc>\<CR>"
82fb222df2SBram Moolenaar
83fb222df2SBram Moolenaar  " Test with backspace set to the compatible setting
84fb222df2SBram Moolenaar  set backspace= visualbell
85fb222df2SBram Moolenaar  exe "normal A vim5\<Esc>A\<C-U>\<C-U>\<Esc>\<CR>"
86fb222df2SBram Moolenaar  exe "normal A vim6\<Esc>Azwei\<C-G>u\<C-U>\<Esc>\<CR>"
87fb222df2SBram Moolenaar
88fb222df2SBram Moolenaar  inoremap <c-u> <left><c-u>
89fccd93f0SBram Moolenaar  exe "normal A vim7\<*C-U>\<*C-U>\<Esc>\<CR>"
90fb222df2SBram Moolenaar
91fb222df2SBram Moolenaar  call assert_equal([
92fb222df2SBram Moolenaar        \ "1 this shouldn't be deleted",
93fb222df2SBram Moolenaar        \ "2 this shouldn't be deleted",
94fb222df2SBram Moolenaar        \ "3 this shouldn't be deleted",
95fb222df2SBram Moolenaar        \ "4 this should be deleted3",
96fb222df2SBram Moolenaar        \ "",
97fb222df2SBram Moolenaar        \ "6 this shouldn't be deleted vim5",
98fb222df2SBram Moolenaar        \ "7 this shouldn't be deleted vim6",
99fb222df2SBram Moolenaar        \ "8 this shouldn't be deleted (not touched yet) vim7",
100fb222df2SBram Moolenaar        \ ""], getline(1, '$'))
101fb222df2SBram Moolenaar
102aa0489e1SBram Moolenaar  " Reset values
103aa0489e1SBram Moolenaar  set compatible&vim
104aa0489e1SBram Moolenaar  set visualbell&vim
105aa0489e1SBram Moolenaar  set backspace&vim
106aa0489e1SBram Moolenaar
107aa0489e1SBram Moolenaar  " Test new nostop option
108aa0489e1SBram Moolenaar  %d_
109aa0489e1SBram Moolenaar  let expected = "foo bar foobar"
110aa0489e1SBram Moolenaar  call setline(1, expected)
111aa0489e1SBram Moolenaar  call cursor(1, 8)
112aa0489e1SBram Moolenaar  exe ":norm! ianotherone\<c-u>"
113aa0489e1SBram Moolenaar  call assert_equal(expected, getline(1))
114aa0489e1SBram Moolenaar  call cursor(1, 8)
115aa0489e1SBram Moolenaar  exe ":norm! ianothertwo\<c-w>"
116aa0489e1SBram Moolenaar  call assert_equal(expected, getline(1))
117aa0489e1SBram Moolenaar
118aa0489e1SBram Moolenaar  let content = getline(1)
119aa0489e1SBram Moolenaar  for value in ['indent,nostop', 'eol,nostop', 'indent,eol,nostop', 'indent,eol,start,nostop']
120aa0489e1SBram Moolenaar    exe ":set bs=".. value
121aa0489e1SBram Moolenaar    %d _
122aa0489e1SBram Moolenaar    call setline(1, content)
123aa0489e1SBram Moolenaar    let expected = " foobar"
124aa0489e1SBram Moolenaar    call cursor(1, 8)
125aa0489e1SBram Moolenaar    exe ":norm! ianotherone\<c-u>"
126aa0489e1SBram Moolenaar    call assert_equal(expected, getline(1), 'CTRL-U backspace value: '.. &bs)
127aa0489e1SBram Moolenaar    let expected = "foo  foobar"
128aa0489e1SBram Moolenaar    call setline(1, content)
129aa0489e1SBram Moolenaar    call cursor(1, 8)
130aa0489e1SBram Moolenaar    exe ":norm! ianothertwo\<c-w>"
131aa0489e1SBram Moolenaar    call assert_equal(expected, getline(1), 'CTRL-W backspace value: '.. &bs)
132aa0489e1SBram Moolenaar  endfor
133aa0489e1SBram Moolenaar
134aa0489e1SBram Moolenaar  " Reset options
135fb222df2SBram Moolenaar  set compatible&vim
136fb222df2SBram Moolenaar  set visualbell&vim
137fb222df2SBram Moolenaar  set backspace&vim
138fb222df2SBram Moolenaar  close!
139fb222df2SBram Moolenaarendfunc
140fb222df2SBram Moolenaar
1419e4d8215SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
142