Bram Moolenaar | 5a50c22 | 2014-04-02 22:17:10 +0200 | [diff] [blame] | 1 | Test for various eval features. vim: set ft=vim : |
| 2 | |
Bram Moolenaar | 5c27fd1 | 2015-01-27 14:09:37 +0100 | [diff] [blame] | 3 | Note: system clipboard is saved, changed and restored. |
Bram Moolenaar | b7cb42b | 2014-04-02 19:55:10 +0200 | [diff] [blame] | 4 | |
| 5 | STARTTEST |
| 6 | :so small.vim |
Bram Moolenaar | 5a50c22 | 2014-04-02 22:17:10 +0200 | [diff] [blame] | 7 | :set encoding=latin1 |
| 8 | :set noswapfile |
| 9 | :lang C |
| 10 | :fun AppendRegContents(reg) |
| 11 | call append('$', printf('%s: type %s; value: %s (%s), expr: %s (%s)', a:reg, getregtype(a:reg), getreg(a:reg), string(getreg(a:reg, 0, 1)), getreg(a:reg, 1), string(getreg(a:reg, 1, 1)))) |
| 12 | endfun |
| 13 | :command -nargs=? AR :call AppendRegContents(<q-args>) |
| 14 | :fun SetReg(...) |
| 15 | call call('setreg', a:000) |
| 16 | call append('$', printf('{{{2 setreg(%s)', string(a:000)[1:-2])) |
| 17 | call AppendRegContents(a:1) |
| 18 | if a:1 isnot# '=' |
| 19 | execute "silent normal! Go==\n==\e\"".a:1."P" |
| 20 | endif |
| 21 | endfun |
| 22 | :fun ErrExe(str) |
| 23 | call append('$', 'Executing '.a:str) |
| 24 | try |
| 25 | execute a:str |
| 26 | catch |
| 27 | $put =v:exception |
| 28 | endtry |
| 29 | endfun |
| 30 | :fun Test() |
| 31 | $put ='{{{1 let tests' |
| 32 | let @" = 'abc' |
| 33 | AR " |
| 34 | let @" = "abc\n" |
| 35 | AR " |
| 36 | let @" = "abc\<C-m>" |
| 37 | AR " |
| 38 | let @= = '"abc"' |
| 39 | AR = |
| 40 | |
| 41 | $put ='{{{1 Basic setreg tests' |
| 42 | call SetReg('a', 'abcA', 'c') |
| 43 | call SetReg('b', 'abcB', 'v') |
| 44 | call SetReg('c', 'abcC', 'l') |
| 45 | call SetReg('d', 'abcD', 'V') |
| 46 | call SetReg('e', 'abcE', 'b') |
| 47 | call SetReg('f', 'abcF', "\<C-v>") |
| 48 | call SetReg('g', 'abcG', 'b10') |
| 49 | call SetReg('h', 'abcH', "\<C-v>10") |
| 50 | call SetReg('I', 'abcI') |
| 51 | |
| 52 | $put ='{{{1 Appending single lines with setreg()' |
| 53 | call SetReg('A', 'abcAc', 'c') |
| 54 | call SetReg('A', 'abcAl', 'l') |
| 55 | call SetReg('A', 'abcAc2','c') |
| 56 | call SetReg('b', 'abcBc', 'ca') |
| 57 | call SetReg('b', 'abcBb', 'ba') |
| 58 | call SetReg('b', 'abcBc2','ca') |
| 59 | call SetReg('b', 'abcBb2','b50a') |
| 60 | |
| 61 | call SetReg('C', 'abcCl', 'l') |
| 62 | call SetReg('C', 'abcCc', 'c') |
| 63 | call SetReg('D', 'abcDb', 'b') |
| 64 | |
| 65 | call SetReg('E', 'abcEb', 'b') |
| 66 | call SetReg('E', 'abcEl', 'l') |
| 67 | call SetReg('F', 'abcFc', 'c') |
| 68 | |
| 69 | $put ='{{{1 Appending NL with setreg()' |
| 70 | call setreg('a', 'abcA2', 'c') |
| 71 | call setreg('b', 'abcB2', 'v') |
| 72 | call setreg('c', 'abcC2', 'l') |
| 73 | call setreg('d', 'abcD2', 'V') |
| 74 | call setreg('e', 'abcE2', 'b') |
| 75 | call setreg('f', 'abcF2', "\<C-v>") |
| 76 | call setreg('g', 'abcG2', 'b10') |
| 77 | call setreg('h', 'abcH2', "\<C-v>10") |
| 78 | call setreg('I', 'abcI2') |
| 79 | |
| 80 | call SetReg('A', "\n") |
| 81 | call SetReg('B', "\n", 'c') |
| 82 | call SetReg('C', "\n") |
| 83 | call SetReg('D', "\n", 'l') |
| 84 | call SetReg('E', "\n") |
| 85 | call SetReg('F', "\n", 'b') |
| 86 | |
| 87 | $put ='{{{1 Setting lists with setreg()' |
| 88 | call SetReg('a', ['abcA3'], 'c') |
| 89 | call SetReg('b', ['abcB3'], 'l') |
| 90 | call SetReg('c', ['abcC3'], 'b') |
| 91 | call SetReg('d', ['abcD3']) |
Bram Moolenaar | 7d64782 | 2014-04-05 21:28:56 +0200 | [diff] [blame] | 92 | call SetReg('e', [1, 2, 'abc', 3]) |
| 93 | call SetReg('f', [1, 2, 3]) |
Bram Moolenaar | 5a50c22 | 2014-04-02 22:17:10 +0200 | [diff] [blame] | 94 | |
| 95 | $put ='{{{1 Appending lists with setreg()' |
| 96 | call SetReg('A', ['abcA3c'], 'c') |
| 97 | call SetReg('b', ['abcB3l'], 'la') |
| 98 | call SetReg('C', ['abcC3b'], 'lb') |
| 99 | call SetReg('D', ['abcD32']) |
| 100 | |
| 101 | call SetReg('A', ['abcA32']) |
| 102 | call SetReg('B', ['abcB3c'], 'c') |
| 103 | call SetReg('C', ['abcC3l'], 'l') |
| 104 | call SetReg('D', ['abcD3b'], 'b') |
| 105 | |
| 106 | $put ='{{{1 Appending lists with NL with setreg()' |
| 107 | call SetReg('A', ["\n", 'abcA3l2'], 'l') |
| 108 | call SetReg('B', ["\n", 'abcB3c2'], 'c') |
| 109 | call SetReg('C', ["\n", 'abcC3b2'], 'b') |
| 110 | call SetReg('D', ["\n", 'abcD3b50'],'b50') |
| 111 | |
| 112 | $put ='{{{1 Setting lists with NLs with setreg()' |
| 113 | call SetReg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"]) |
| 114 | call SetReg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c') |
| 115 | call SetReg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l') |
| 116 | call SetReg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b') |
| 117 | call SetReg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10') |
| 118 | |
| 119 | $put ='{{{1 Search and expressions' |
| 120 | call SetReg('/', ['abc/']) |
| 121 | call SetReg('/', ["abc/\n"]) |
| 122 | call SetReg('=', ['"abc/"']) |
| 123 | call SetReg('=', ["\"abc/\n\""]) |
Bram Moolenaar | 5c27fd1 | 2015-01-27 14:09:37 +0100 | [diff] [blame] | 124 | $put ='{{{1 System clipboard' |
| 125 | " Save and restore system clipboard. |
| 126 | " If no connection to X-Server is possible, test should succeed. |
| 127 | :let _clipreg = ['+', getreg('+'), getregtype('+')] |
| 128 | :let _clipopt = &cb |
| 129 | :let &cb='unnamedplus' |
| 130 | :1y |
| 131 | :AR + |
| 132 | :tabdo :windo :echo "hi" |
| 133 | :3y |
| 134 | :AR + |
| 135 | :let &cb=_clipopt |
| 136 | :call call('setreg', _clipreg) |
Bram Moolenaar | 5a50c22 | 2014-04-02 22:17:10 +0200 | [diff] [blame] | 137 | $put ='{{{1 Errors' |
| 138 | call ErrExe('call setreg()') |
| 139 | call ErrExe('call setreg(1)') |
| 140 | call ErrExe('call setreg(1, 2, 3, 4)') |
| 141 | call ErrExe('call setreg([], 2)') |
| 142 | call ErrExe('call setreg(1, {})') |
| 143 | call ErrExe('call setreg(1, 2, [])') |
Bram Moolenaar | 7d64782 | 2014-04-05 21:28:56 +0200 | [diff] [blame] | 144 | call ErrExe('call setreg("/", ["1", "2"])') |
| 145 | call ErrExe('call setreg("=", ["1", "2"])') |
Bram Moolenaar | 5a50c22 | 2014-04-02 22:17:10 +0200 | [diff] [blame] | 146 | call ErrExe('call setreg(1, ["", "", [], ""])') |
| 147 | endfun |
Bram Moolenaar | b7cb42b | 2014-04-02 19:55:10 +0200 | [diff] [blame] | 148 | :" |
Bram Moolenaar | 5a50c22 | 2014-04-02 22:17:10 +0200 | [diff] [blame] | 149 | :call Test() |
Bram Moolenaar | b7cb42b | 2014-04-02 19:55:10 +0200 | [diff] [blame] | 150 | :" |
Bram Moolenaar | 5a50c22 | 2014-04-02 22:17:10 +0200 | [diff] [blame] | 151 | :delfunction SetReg |
| 152 | :delfunction AppendRegContents |
| 153 | :delfunction ErrExe |
| 154 | :delfunction Test |
| 155 | :delcommand AR |
| 156 | :call garbagecollect(1) |
| 157 | :" |
Bram Moolenaar | eccb7fc | 2014-04-23 20:43:41 +0200 | [diff] [blame] | 158 | :" function name not starting with capital |
Bram Moolenaar | 9bdfb00 | 2014-04-23 17:43:42 +0200 | [diff] [blame] | 159 | :try |
| 160 | :func! g:test() |
| 161 | :echo "test" |
| 162 | :endfunc |
| 163 | :catch |
| 164 | :$put =v:exception |
| 165 | :endtry |
| 166 | :" |
Bram Moolenaar | eccb7fc | 2014-04-23 20:43:41 +0200 | [diff] [blame] | 167 | :" function name includes a colon |
| 168 | :try |
| 169 | :func! b:test() |
| 170 | :echo "test" |
| 171 | :endfunc |
| 172 | :catch |
| 173 | :$put =v:exception |
| 174 | :endtry |
| 175 | :" |
Bram Moolenaar | 9bdfb00 | 2014-04-23 17:43:42 +0200 | [diff] [blame] | 176 | :" function name folowed by # |
| 177 | :try |
| 178 | :func! test2() "# |
| 179 | :echo "test2" |
| 180 | :endfunc |
| 181 | :catch |
| 182 | :$put =v:exception |
| 183 | :endtry |
| 184 | :" |
Bram Moolenaar | eccb7fc | 2014-04-23 20:43:41 +0200 | [diff] [blame] | 185 | :" function name starting with/without "g:", buffer-local funcref. |
Bram Moolenaar | a4f317d | 2014-04-24 17:12:33 +0200 | [diff] [blame] | 186 | :function! g:Foo(n) |
| 187 | : $put ='called Foo(' . a:n . ')' |
Bram Moolenaar | eccb7fc | 2014-04-23 20:43:41 +0200 | [diff] [blame] | 188 | :endfunction |
| 189 | :let b:my_func = function('Foo') |
Bram Moolenaar | a4f317d | 2014-04-24 17:12:33 +0200 | [diff] [blame] | 190 | :call b:my_func(1) |
| 191 | :echo g:Foo(2) |
| 192 | :echo Foo(3) |
Bram Moolenaar | eccb7fc | 2014-04-23 20:43:41 +0200 | [diff] [blame] | 193 | :" |
Bram Moolenaar | 355a95a | 2014-04-29 14:03:02 +0200 | [diff] [blame] | 194 | :" script-local function used in Funcref must exist. |
| 195 | :so test_eval_func.vim |
| 196 | :" |
Bram Moolenaar | e512c8c | 2014-04-29 17:41:22 +0200 | [diff] [blame] | 197 | :" Using $ instead of '$' must give an error |
| 198 | :try |
| 199 | : call append($, 'foobar') |
| 200 | :catch |
| 201 | :$put =v:exception |
| 202 | :endtry |
| 203 | :" |
Bram Moolenaar | 6f6c0f8 | 2014-05-28 20:31:42 +0200 | [diff] [blame] | 204 | :$put ='{{{1 getcurpos/setpos' |
Bram Moolenaar | 493c178 | 2014-05-28 14:34:46 +0200 | [diff] [blame] | 205 | /^012345678 |
Bram Moolenaar | 6f6c0f8 | 2014-05-28 20:31:42 +0200 | [diff] [blame] | 206 | 6l:let sp = getcurpos() |
Bram Moolenaar | 493c178 | 2014-05-28 14:34:46 +0200 | [diff] [blame] | 207 | 0:call setpos('.', sp) |
| 208 | jyl:$put |
| 209 | :" |
Bram Moolenaar | 5a50c22 | 2014-04-02 22:17:10 +0200 | [diff] [blame] | 210 | :/^start:/+1,$wq! test.out |
| 211 | :" vim: et ts=4 isk-=\: fmr=???,??? |
| 212 | :call getchar() |
Bram Moolenaar | b7cb42b | 2014-04-02 19:55:10 +0200 | [diff] [blame] | 213 | ENDTEST |
| 214 | |
Bram Moolenaar | 493c178 | 2014-05-28 14:34:46 +0200 | [diff] [blame] | 215 | 012345678 |
| 216 | 012345678 |
| 217 | |
Bram Moolenaar | 5a50c22 | 2014-04-02 22:17:10 +0200 | [diff] [blame] | 218 | start: |