| " Tests for 'backspace' settings |
| |
| func Test_backspace_option() |
| set backspace= |
| call assert_equal('', &backspace) |
| set backspace=indent |
| call assert_equal('indent', &backspace) |
| set backspace=eol |
| call assert_equal('eol', &backspace) |
| set backspace=start |
| call assert_equal('start', &backspace) |
| set backspace=nostop |
| call assert_equal('nostop', &backspace) |
| " Add the value |
| set backspace= |
| set backspace=indent |
| call assert_equal('indent', &backspace) |
| set backspace+=eol |
| call assert_equal('indent,eol', &backspace) |
| set backspace+=start |
| call assert_equal('indent,eol,start', &backspace) |
| set backspace+=nostop |
| call assert_equal('indent,eol,start,nostop', &backspace) |
| " Delete the value |
| set backspace-=nostop |
| call assert_equal('indent,eol,start', &backspace) |
| set backspace-=indent |
| call assert_equal('eol,start', &backspace) |
| set backspace-=start |
| call assert_equal('eol', &backspace) |
| set backspace-=eol |
| call assert_equal('', &backspace) |
| " Check the error |
| call assert_fails('set backspace=ABC', 'E474:') |
| call assert_fails('set backspace+=def', 'E474:') |
| " NOTE: Vim doesn't check following error... |
| "call assert_fails('set backspace-=ghi', 'E474:') |
| |
| " Check backwards compatibility with version 5.4 and earlier |
| set backspace=0 |
| call assert_equal('0', &backspace) |
| set backspace=1 |
| call assert_equal('1', &backspace) |
| set backspace=2 |
| call assert_equal('2', &backspace) |
| set backspace=3 |
| call assert_equal('3', &backspace) |
| call assert_fails('set backspace=4', 'E474:') |
| call assert_fails('set backspace=10', 'E474:') |
| |
| " Cleared when 'compatible' is set |
| set compatible |
| call assert_equal('', &backspace) |
| set nocompatible viminfo+=nviminfo |
| endfunc |
| |
| " Test with backspace set to the non-compatible setting |
| func Test_backspace_ctrl_u() |
| new |
| call append(0, [ |
| \ "1 this shouldn't be deleted", |
| \ "2 this shouldn't be deleted", |
| \ "3 this shouldn't be deleted", |
| \ "4 this should be deleted", |
| \ "5 this shouldn't be deleted", |
| \ "6 this shouldn't be deleted", |
| \ "7 this shouldn't be deleted", |
| \ "8 this shouldn't be deleted (not touched yet)"]) |
| call cursor(2, 1) |
| |
| set compatible |
| set backspace=2 |
| |
| exe "normal Avim1\<C-U>\<Esc>\<CR>" |
| exe "normal Avim2\<C-G>u\<C-U>\<Esc>\<CR>" |
| |
| set cpo-=< |
| inoremap <c-u> <left><c-u> |
| exe "normal Avim3\<*C-U>\<Esc>\<CR>" |
| iunmap <c-u> |
| exe "normal Avim4\<C-U>\<C-U>\<Esc>\<CR>" |
| |
| " Test with backspace set to the compatible setting |
| set backspace= visualbell |
| exe "normal A vim5\<Esc>A\<C-U>\<C-U>\<Esc>\<CR>" |
| exe "normal A vim6\<Esc>Azwei\<C-G>u\<C-U>\<Esc>\<CR>" |
| |
| inoremap <c-u> <left><c-u> |
| exe "normal A vim7\<*C-U>\<*C-U>\<Esc>\<CR>" |
| |
| call assert_equal([ |
| \ "1 this shouldn't be deleted", |
| \ "2 this shouldn't be deleted", |
| \ "3 this shouldn't be deleted", |
| \ "4 this should be deleted3", |
| \ "", |
| \ "6 this shouldn't be deleted vim5", |
| \ "7 this shouldn't be deleted vim6", |
| \ "8 this shouldn't be deleted (not touched yet) vim7", |
| \ ""], getline(1, '$')) |
| |
| " Reset values |
| set compatible&vim |
| set visualbell&vim |
| set backspace&vim |
| |
| " Test new nostop option |
| %d_ |
| let expected = "foo bar foobar" |
| call setline(1, expected) |
| call cursor(1, 8) |
| exe ":norm! ianotherone\<c-u>" |
| call assert_equal(expected, getline(1)) |
| call cursor(1, 8) |
| exe ":norm! ianothertwo\<c-w>" |
| call assert_equal(expected, getline(1)) |
| |
| let content = getline(1) |
| for value in ['indent,nostop', 'eol,nostop', 'indent,eol,nostop', 'indent,eol,start,nostop'] |
| exe ":set bs=".. value |
| %d _ |
| call setline(1, content) |
| let expected = " foobar" |
| call cursor(1, 8) |
| exe ":norm! ianotherone\<c-u>" |
| call assert_equal(expected, getline(1), 'CTRL-U backspace value: '.. &bs) |
| let expected = "foo foobar" |
| call setline(1, content) |
| call cursor(1, 8) |
| exe ":norm! ianothertwo\<c-w>" |
| call assert_equal(expected, getline(1), 'CTRL-W backspace value: '.. &bs) |
| endfor |
| |
| " Reset options |
| set compatible&vim |
| set visualbell&vim |
| set backspace&vim |
| close! |
| endfunc |
| |
| " Test for setting 'backspace' to a number value (for backward compatibility) |
| func Test_backspace_number_value() |
| new |
| |
| set backspace=0 |
| call setline(1, ['one two', 'three four']) |
| call cursor(2, 1) |
| exe "normal! A\<C-W>\<C-U>" |
| call assert_equal('three four', getline(2)) |
| |
| set backspace=1 |
| exe "normal! A\<CR>five\<C-W>\<C-U>\<C-W>\<C-U>" |
| call assert_equal(['one two', 'three four'], getline(1, '$')) |
| |
| set backspace=2 |
| call cursor(2, 7) |
| exe "normal! ihalf\<C-U>" |
| call assert_equal('three four', getline(2)) |
| |
| set backspace=3 |
| call cursor(2, 7) |
| exe "normal! ihalf\<C-U>" |
| call assert_equal('four', getline(2)) |
| |
| bw! |
| set backspace& |
| endfunc |
| |
| " vim: shiftwidth=2 sts=2 expandtab |