blob: ea28803e74b983266734c1945f930f182e525981 [file] [log] [blame]
Bram Moolenaar27a82e32016-01-02 21:39:09 +01001" Tests for 'backspace' settings
2
Bram Moolenaar27a82e32016-01-02 21:39:09 +01003func Test_backspace_option()
4 set backspace=
5 call assert_equal('', &backspace)
6 set backspace=indent
7 call assert_equal('indent', &backspace)
8 set backspace=eol
9 call assert_equal('eol', &backspace)
10 set backspace=start
11 call assert_equal('start', &backspace)
Bram Moolenaaraa0489e2020-04-17 19:41:21 +020012 set backspace=nostop
13 call assert_equal('nostop', &backspace)
Bram Moolenaar27a82e32016-01-02 21:39:09 +010014 " Add the value
15 set backspace=
16 set backspace=indent
17 call assert_equal('indent', &backspace)
18 set backspace+=eol
19 call assert_equal('indent,eol', &backspace)
20 set backspace+=start
21 call assert_equal('indent,eol,start', &backspace)
Bram Moolenaaraa0489e2020-04-17 19:41:21 +020022 set backspace+=nostop
23 call assert_equal('indent,eol,start,nostop', &backspace)
Bram Moolenaar27a82e32016-01-02 21:39:09 +010024 " Delete the value
Bram Moolenaaraa0489e2020-04-17 19:41:21 +020025 set backspace-=nostop
26 call assert_equal('indent,eol,start', &backspace)
Bram Moolenaar27a82e32016-01-02 21:39:09 +010027 set backspace-=indent
28 call assert_equal('eol,start', &backspace)
29 set backspace-=start
30 call assert_equal('eol', &backspace)
31 set backspace-=eol
32 call assert_equal('', &backspace)
33 " Check the error
Bram Moolenaar5dc4e2f2020-11-25 14:15:12 +010034 call assert_fails('set backspace=ABC', 'E474:')
35 call assert_fails('set backspace+=def', 'E474:')
Bram Moolenaar27a82e32016-01-02 21:39:09 +010036 " NOTE: Vim doesn't check following error...
Bram Moolenaar5dc4e2f2020-11-25 14:15:12 +010037 "call assert_fails('set backspace-=ghi', 'E474:')
Bram Moolenaar27a82e32016-01-02 21:39:09 +010038
39 " Check backwards compatibility with version 5.4 and earlier
40 set backspace=0
41 call assert_equal('0', &backspace)
42 set backspace=1
43 call assert_equal('1', &backspace)
44 set backspace=2
45 call assert_equal('2', &backspace)
Bram Moolenaaraa0489e2020-04-17 19:41:21 +020046 set backspace=3
47 call assert_equal('3', &backspace)
Bram Moolenaar5dc4e2f2020-11-25 14:15:12 +010048 call assert_fails('set backspace=4', 'E474:')
49 call assert_fails('set backspace=10', 'E474:')
Bram Moolenaar27a82e32016-01-02 21:39:09 +010050
51 " Cleared when 'compatible' is set
52 set compatible
53 call assert_equal('', &backspace)
Bram Moolenaare9c07272016-03-30 20:50:46 +020054 set nocompatible viminfo+=nviminfo
Bram Moolenaar27a82e32016-01-02 21:39:09 +010055endfunc
56
Bram Moolenaarfb222df2019-05-14 17:57:19 +020057" Test with backspace set to the non-compatible setting
58func Test_backspace_ctrl_u()
59 new
60 call append(0, [
61 \ "1 this shouldn't be deleted",
62 \ "2 this shouldn't be deleted",
63 \ "3 this shouldn't be deleted",
64 \ "4 this should be deleted",
65 \ "5 this shouldn't be deleted",
66 \ "6 this shouldn't be deleted",
67 \ "7 this shouldn't be deleted",
68 \ "8 this shouldn't be deleted (not touched yet)"])
69 call cursor(2, 1)
70
71 set compatible
72 set backspace=2
73
74 exe "normal Avim1\<C-U>\<Esc>\<CR>"
75 exe "normal Avim2\<C-G>u\<C-U>\<Esc>\<CR>"
76
77 set cpo-=<
78 inoremap <c-u> <left><c-u>
Bram Moolenaarfccd93f2020-05-31 22:06:51 +020079 exe "normal Avim3\<*C-U>\<Esc>\<CR>"
Bram Moolenaarfb222df2019-05-14 17:57:19 +020080 iunmap <c-u>
81 exe "normal Avim4\<C-U>\<C-U>\<Esc>\<CR>"
82
83 " Test with backspace set to the compatible setting
84 set backspace= visualbell
85 exe "normal A vim5\<Esc>A\<C-U>\<C-U>\<Esc>\<CR>"
86 exe "normal A vim6\<Esc>Azwei\<C-G>u\<C-U>\<Esc>\<CR>"
87
88 inoremap <c-u> <left><c-u>
Bram Moolenaarfccd93f2020-05-31 22:06:51 +020089 exe "normal A vim7\<*C-U>\<*C-U>\<Esc>\<CR>"
Bram Moolenaarfb222df2019-05-14 17:57:19 +020090
91 call assert_equal([
92 \ "1 this shouldn't be deleted",
93 \ "2 this shouldn't be deleted",
94 \ "3 this shouldn't be deleted",
95 \ "4 this should be deleted3",
96 \ "",
97 \ "6 this shouldn't be deleted vim5",
98 \ "7 this shouldn't be deleted vim6",
99 \ "8 this shouldn't be deleted (not touched yet) vim7",
100 \ ""], getline(1, '$'))
101
Bram Moolenaaraa0489e2020-04-17 19:41:21 +0200102 " Reset values
103 set compatible&vim
104 set visualbell&vim
105 set backspace&vim
106
107 " Test new nostop option
108 %d_
109 let expected = "foo bar foobar"
110 call setline(1, expected)
111 call cursor(1, 8)
112 exe ":norm! ianotherone\<c-u>"
113 call assert_equal(expected, getline(1))
114 call cursor(1, 8)
115 exe ":norm! ianothertwo\<c-w>"
116 call assert_equal(expected, getline(1))
117
118 let content = getline(1)
119 for value in ['indent,nostop', 'eol,nostop', 'indent,eol,nostop', 'indent,eol,start,nostop']
120 exe ":set bs=".. value
121 %d _
122 call setline(1, content)
123 let expected = " foobar"
124 call cursor(1, 8)
125 exe ":norm! ianotherone\<c-u>"
126 call assert_equal(expected, getline(1), 'CTRL-U backspace value: '.. &bs)
127 let expected = "foo foobar"
128 call setline(1, content)
129 call cursor(1, 8)
130 exe ":norm! ianothertwo\<c-w>"
131 call assert_equal(expected, getline(1), 'CTRL-W backspace value: '.. &bs)
132 endfor
133
134 " Reset options
Bram Moolenaarfb222df2019-05-14 17:57:19 +0200135 set compatible&vim
136 set visualbell&vim
137 set backspace&vim
138 close!
139endfunc
140
Yegappan Lakshmanan5284b232023-03-04 19:57:32 +0000141" Test for setting 'backspace' to a number value (for backward compatibility)
142func Test_backspace_number_value()
143 new
144
145 set backspace=0
146 call setline(1, ['one two', 'three four'])
147 call cursor(2, 1)
148 exe "normal! A\<C-W>\<C-U>"
149 call assert_equal('three four', getline(2))
150
151 set backspace=1
152 exe "normal! A\<CR>five\<C-W>\<C-U>\<C-W>\<C-U>"
153 call assert_equal(['one two', 'three four'], getline(1, '$'))
154
155 set backspace=2
156 call cursor(2, 7)
157 exe "normal! ihalf\<C-U>"
158 call assert_equal('three four', getline(2))
159
160 set backspace=3
161 call cursor(2, 7)
162 exe "normal! ihalf\<C-U>"
163 call assert_equal('four', getline(2))
164
165 bw!
166 set backspace&
167endfunc
168
Bram Moolenaar9e4d8212016-08-18 23:04:48 +0200169" vim: shiftwidth=2 sts=2 expandtab