1" Tests for 'backspace' settings 2 3func Exec(expr) 4 let str='' 5 try 6 exec a:expr 7 catch /.*/ 8 let str=v:exception 9 endtry 10 return str 11endfunc 12 13func Test_backspace_option() 14 set backspace= 15 call assert_equal('', &backspace) 16 set backspace=indent 17 call assert_equal('indent', &backspace) 18 set backspace=eol 19 call assert_equal('eol', &backspace) 20 set backspace=start 21 call assert_equal('start', &backspace) 22 set backspace=nostop 23 call assert_equal('nostop', &backspace) 24 " Add the value 25 set backspace= 26 set backspace=indent 27 call assert_equal('indent', &backspace) 28 set backspace+=eol 29 call assert_equal('indent,eol', &backspace) 30 set backspace+=start 31 call assert_equal('indent,eol,start', &backspace) 32 set backspace+=nostop 33 call assert_equal('indent,eol,start,nostop', &backspace) 34 " Delete the value 35 set backspace-=nostop 36 call assert_equal('indent,eol,start', &backspace) 37 set backspace-=indent 38 call assert_equal('eol,start', &backspace) 39 set backspace-=start 40 call assert_equal('eol', &backspace) 41 set backspace-=eol 42 call assert_equal('', &backspace) 43 " Check the error 44 call assert_equal(0, match(Exec('set backspace=ABC'), '.*E474')) 45 call assert_equal(0, match(Exec('set backspace+=def'), '.*E474')) 46 " NOTE: Vim doesn't check following error... 47 "call assert_equal(0, match(Exec('set backspace-=ghi'), '.*E474')) 48 49 " Check backwards compatibility with version 5.4 and earlier 50 set backspace=0 51 call assert_equal('0', &backspace) 52 set backspace=1 53 call assert_equal('1', &backspace) 54 set backspace=2 55 call assert_equal('2', &backspace) 56 set backspace=3 57 call assert_equal('3', &backspace) 58 call assert_false(match(Exec('set backspace=4'), '.*E474')) 59 call assert_false(match(Exec('set backspace=10'), '.*E474')) 60 61 " Cleared when 'compatible' is set 62 set compatible 63 call assert_equal('', &backspace) 64 set nocompatible viminfo+=nviminfo 65endfunc 66 67" Test with backspace set to the non-compatible setting 68func Test_backspace_ctrl_u() 69 new 70 call append(0, [ 71 \ "1 this shouldn't be deleted", 72 \ "2 this shouldn't be deleted", 73 \ "3 this shouldn't be deleted", 74 \ "4 this should be deleted", 75 \ "5 this shouldn't be deleted", 76 \ "6 this shouldn't be deleted", 77 \ "7 this shouldn't be deleted", 78 \ "8 this shouldn't be deleted (not touched yet)"]) 79 call cursor(2, 1) 80 81 set compatible 82 set backspace=2 83 84 exe "normal Avim1\<C-U>\<Esc>\<CR>" 85 exe "normal Avim2\<C-G>u\<C-U>\<Esc>\<CR>" 86 87 set cpo-=< 88 inoremap <c-u> <left><c-u> 89 exe "normal Avim3\<*C-U>\<Esc>\<CR>" 90 iunmap <c-u> 91 exe "normal Avim4\<C-U>\<C-U>\<Esc>\<CR>" 92 93 " Test with backspace set to the compatible setting 94 set backspace= visualbell 95 exe "normal A vim5\<Esc>A\<C-U>\<C-U>\<Esc>\<CR>" 96 exe "normal A vim6\<Esc>Azwei\<C-G>u\<C-U>\<Esc>\<CR>" 97 98 inoremap <c-u> <left><c-u> 99 exe "normal A vim7\<*C-U>\<*C-U>\<Esc>\<CR>" 100 101 call assert_equal([ 102 \ "1 this shouldn't be deleted", 103 \ "2 this shouldn't be deleted", 104 \ "3 this shouldn't be deleted", 105 \ "4 this should be deleted3", 106 \ "", 107 \ "6 this shouldn't be deleted vim5", 108 \ "7 this shouldn't be deleted vim6", 109 \ "8 this shouldn't be deleted (not touched yet) vim7", 110 \ ""], getline(1, '$')) 111 112 " Reset values 113 set compatible&vim 114 set visualbell&vim 115 set backspace&vim 116 117 " Test new nostop option 118 %d_ 119 let expected = "foo bar foobar" 120 call setline(1, expected) 121 call cursor(1, 8) 122 exe ":norm! ianotherone\<c-u>" 123 call assert_equal(expected, getline(1)) 124 call cursor(1, 8) 125 exe ":norm! ianothertwo\<c-w>" 126 call assert_equal(expected, getline(1)) 127 128 let content = getline(1) 129 for value in ['indent,nostop', 'eol,nostop', 'indent,eol,nostop', 'indent,eol,start,nostop'] 130 exe ":set bs=".. value 131 %d _ 132 call setline(1, content) 133 let expected = " foobar" 134 call cursor(1, 8) 135 exe ":norm! ianotherone\<c-u>" 136 call assert_equal(expected, getline(1), 'CTRL-U backspace value: '.. &bs) 137 let expected = "foo foobar" 138 call setline(1, content) 139 call cursor(1, 8) 140 exe ":norm! ianothertwo\<c-w>" 141 call assert_equal(expected, getline(1), 'CTRL-W backspace value: '.. &bs) 142 endfor 143 144 " Reset options 145 set compatible&vim 146 set visualbell&vim 147 set backspace&vim 148 close! 149endfunc 150 151" vim: shiftwidth=2 sts=2 expandtab 152