Mercurial > vim
annotate src/testdir/test87.in @ 4629:e4e48d4ee040 v7.3.1062
updated for version 7.3.1062
Problem: Python: List is not standard.
Solution: Python patch 21: Add standard methods and fields. (ZyX)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Thu, 30 May 2013 13:05:58 +0200 |
parents | 18ba89e06fab |
children | 4157fef7b950 |
rev | line source |
---|---|
3618 | 1 Tests for various python features. vim: set ft=vim : |
2 | |
3 STARTTEST | |
4 :so small.vim | |
5 :if !has('python3') | e! test.ok | wq! test.out | endif | |
4425 | 6 :lang C |
3618 | 7 :py3 import vim |
8 :fun Test() | |
9 :let l = [] | |
10 :py3 l=vim.bindeval('l') | |
11 :py3 f=vim.bindeval('function("strlen")') | |
12 :" Extending List directly with different types | |
13 :py3 l+=[1, "as'd", [1, 2, f, {'a': 1}]] | |
14 :$put =string(l) | |
15 :$put =string(l[-1]) | |
16 :try | |
17 : $put =string(l[-4]) | |
18 :catch | |
19 : $put =v:exception[:13] | |
20 :endtry | |
21 :" List assignment | |
22 :py3 l[0]=0 | |
23 :$put =string(l) | |
24 :py3 l[-2]=f | |
25 :$put =string(l) | |
26 :" | |
27 :" Extending Dictionary directly with different types | |
28 :let d = {} | |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
29 py3 << EOF |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
30 d=vim.bindeval('d') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
31 d['1']='asd' |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
32 d.update(b=[1, 2, f]) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
33 d.update((('-1', {'a': 1}),)) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
34 d.update({'0': -1}) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
35 dk = d.keys() |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
36 dv = d.values() |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
37 di = d.items() |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
38 dk.sort(key=repr) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
39 dv.sort(key=repr) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
40 di.sort(key=repr) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
41 EOF |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
42 :$put =py3eval('repr(dk)') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
43 :$put =substitute(py3eval('repr(dv)'),'0x\x\+','','g') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
44 :$put =substitute(py3eval('repr(di)'),'0x\x\+','','g') |
3618 | 45 :for [key, val] in sort(items(d)) |
46 : $put =string(key) . ' : ' . string(val) | |
47 : unlet key val | |
48 :endfor | |
49 :" | |
50 :" removing items with del | |
51 :py3 del l[2] | |
52 :$put =string(l) | |
53 :let l = range(8) | |
54 :py3 l=vim.bindeval('l') | |
55 :try | |
56 : py3 del l[:3] | |
57 : py3 del l[1:] | |
58 :catch | |
59 : $put =v:exception | |
60 :endtry | |
61 :$put =string(l) | |
62 :" | |
63 :py3 del d['-1'] | |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
64 :$put =string(py3eval('d.get(''b'', 1)')) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
65 :$put =string(py3eval('d.pop(''b'')')) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
66 :$put =string(py3eval('d.get(''b'', 1)')) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
67 :$put =string(py3eval('d.pop(''1'', 2)')) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
68 :$put =string(py3eval('d.pop(''1'', 2)')) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
69 :$put =py3eval('repr(d.has_key(''0''))') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
70 :$put =py3eval('repr(d.has_key(''1''))') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
71 :$put =py3eval('repr(''0'' in d)') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
72 :$put =py3eval('repr(''1'' in d)') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
73 :$put =py3eval('repr(list(iter(d)))') |
3618 | 74 :$put =string(d) |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
75 :$put =py3eval('repr(d.popitem(''0''))') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
76 :$put =py3eval('repr(d.get(''0''))') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
77 :$put =py3eval('repr(list(iter(d)))') |
3618 | 78 :" |
79 :" removing items out of range: silently skip items that don't exist | |
80 :let l = [0, 1, 2, 3] | |
81 :py3 l=vim.bindeval('l') | |
82 :" The following two ranges delete nothing as they match empty list: | |
83 :py3 del l[2:1] | |
84 :$put =string(l) | |
85 :py3 del l[2:2] | |
86 :$put =string(l) | |
87 :py3 del l[2:3] | |
88 :$put =string(l) | |
89 :let l = [0, 1, 2, 3] | |
90 :py3 l=vim.bindeval('l') | |
91 :py3 del l[2:4] | |
92 :$put =string(l) | |
93 :let l = [0, 1, 2, 3] | |
94 :py3 l=vim.bindeval('l') | |
95 :py3 del l[2:5] | |
96 :$put =string(l) | |
97 :let l = [0, 1, 2, 3] | |
98 :py3 l=vim.bindeval('l') | |
99 :py3 del l[2:6] | |
100 :$put =string(l) | |
101 :let l = [0, 1, 2, 3] | |
102 :py3 l=vim.bindeval('l') | |
103 :" The following two ranges delete nothing as they match empty list: | |
104 :py3 del l[-1:2] | |
105 :$put =string(l) | |
106 :py3 del l[-2:2] | |
107 :$put =string(l) | |
108 :py3 del l[-3:2] | |
109 :$put =string(l) | |
110 :let l = [0, 1, 2, 3] | |
111 :py3 l=vim.bindeval('l') | |
112 :py3 del l[-4:2] | |
113 :$put =string(l) | |
114 :let l = [0, 1, 2, 3] | |
115 :py3 l=vim.bindeval('l') | |
116 :py3 del l[-5:2] | |
117 :$put =string(l) | |
118 :let l = [0, 1, 2, 3] | |
119 :py3 l=vim.bindeval('l') | |
120 :py3 del l[-6:2] | |
121 :$put =string(l) | |
122 :" | |
123 :" Slice assignment to a list | |
124 :let l = [0, 1, 2, 3] | |
125 :py3 l=vim.bindeval('l') | |
126 :py3 l[0:0]=['a'] | |
127 :$put =string(l) | |
128 :let l = [0, 1, 2, 3] | |
129 :py3 l=vim.bindeval('l') | |
130 :py3 l[1:2]=['b'] | |
131 :$put =string(l) | |
132 :let l = [0, 1, 2, 3] | |
133 :py3 l=vim.bindeval('l') | |
134 :py3 l[2:4]=['c'] | |
135 :$put =string(l) | |
136 :let l = [0, 1, 2, 3] | |
137 :py3 l=vim.bindeval('l') | |
138 :py3 l[4:4]=['d'] | |
139 :$put =string(l) | |
140 :let l = [0, 1, 2, 3] | |
141 :py3 l=vim.bindeval('l') | |
142 :py3 l[-1:2]=['e'] | |
143 :$put =string(l) | |
144 :let l = [0, 1, 2, 3] | |
145 :py3 l=vim.bindeval('l') | |
146 :py3 l[-10:2]=['f'] | |
147 :$put =string(l) | |
148 :let l = [0, 1, 2, 3] | |
149 :py3 l=vim.bindeval('l') | |
150 :py3 l[2:-10]=['g'] | |
151 :$put =string(l) | |
152 :let l = [] | |
153 :py3 l=vim.bindeval('l') | |
154 :py3 l[0:0]=['h'] | |
155 :$put =string(l) | |
156 :" | |
157 :" Locked variables | |
158 :let l = [0, 1, 2, 3] | |
159 :py3 l=vim.bindeval('l') | |
160 :lockvar! l | |
161 :py3 l[2]='i' | |
162 :$put =string(l) | |
163 :unlockvar! l | |
164 :" | |
165 :" Function calls | |
166 :function New(...) | |
167 :return ['NewStart']+a:000+['NewEnd'] | |
168 :endfunction | |
169 :function DictNew(...) dict | |
170 :return ['DictNewStart']+a:000+['DictNewEnd', self] | |
171 :endfunction | |
172 :let l=[function('New'), function('DictNew')] | |
173 :py3 l=vim.bindeval('l') | |
174 :py3 l.extend(list(l[0](1, 2, 3))) | |
175 :$put =string(l) | |
176 :py3 l.extend(list(l[1](1, 2, 3, self={'a': 'b'}))) | |
177 :$put =string(l) | |
178 :py3 l+=[l[0].name] | |
179 :$put =string(l) | |
180 :try | |
181 : py3 l[1](1, 2, 3) | |
182 :catch | |
183 : $put =v:exception[:13] | |
184 :endtry | |
185 :delfunction New | |
186 :try | |
187 : py3 l[0](1, 2, 3) | |
188 :catch | |
189 : $put =v:exception[:13] | |
190 :endtry | |
191 :if has('float') | |
192 : let l=[0.0] | |
193 : py3 l=vim.bindeval('l') | |
194 : py3 l.extend([0.0]) | |
195 : $put =string(l) | |
196 :else | |
197 : $put ='[0.0, 0.0]' | |
198 :endif | |
3802 | 199 :let messages=[] |
200 :py3 <<EOF | |
201 d=vim.bindeval('{}') | |
202 m=vim.bindeval('messages') | |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
203 def em(expr, g=globals(), l=locals()): |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
204 try: |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
205 exec(expr, g, l) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
206 except Exception as e: |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
207 m.extend([e.__class__.__name__]) |
3802 | 208 |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
209 em('d["abc"]') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
210 em('d["abc"]="\\0"') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
211 em('d["abc"]=vim') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
212 em('d[""]=1') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
213 em('d["a\\0b"]=1') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
214 em('d[b"a\\0b"]=1') |
3802 | 215 |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
216 em('d.pop("abc")') |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
217 em('d.popitem("abc")') |
3802 | 218 EOF |
219 :$put =messages | |
3828 | 220 :unlet messages |
221 :" locked and scope attributes | |
222 :let d={} | let dl={} | lockvar dl | |
223 :for s in split("d dl v: g:") | |
224 : let name=tr(s, ':', 's') | |
225 : execute 'py3 '.name.'=vim.bindeval("'.s.'")' | |
226 : let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".py3eval(name.".".v:val)'), ';') | |
227 : $put =toput | |
228 :endfor | |
229 :silent! let d.abc=1 | |
230 :silent! let dl.abc=1 | |
231 :py3 d.locked=True | |
232 :py3 dl.locked=False | |
233 :silent! let d.def=1 | |
234 :silent! let dl.def=1 | |
235 :put ='d:'.string(d) | |
236 :put ='dl:'.string(dl) | |
237 :unlet d dl | |
238 : | |
239 :let l=[] | let ll=[] | lockvar ll | |
240 :for s in split("l ll") | |
241 : let name=tr(s, ':', 's') | |
242 : execute 'py3 '.name.'=vim.bindeval("'.s.'")' | |
243 : let toput=s.' : locked:'.py3eval(name.'.locked') | |
244 : $put =toput | |
245 :endfor | |
246 :silent! call extend(l, [0]) | |
247 :silent! call extend(ll, [0]) | |
248 :py3 l.locked=True | |
249 :py3 ll.locked=False | |
250 :silent! call extend(l, [1]) | |
251 :silent! call extend(ll, [1]) | |
252 :put ='l:'.string(l) | |
253 :put ='ll:'.string(ll) | |
254 :unlet l ll | |
3618 | 255 :" |
256 :" py3eval() | |
257 :let l=py3eval('[0, 1, 2]') | |
258 :$put =string(l) | |
259 :let d=py3eval('{"a": "b", "c": 1, "d": ["e"]}') | |
260 :$put =sort(items(d)) | |
261 :if has('float') | |
262 : let f=py3eval('0.0') | |
263 : $put =string(f) | |
264 :else | |
265 : $put ='0.0' | |
266 :endif | |
3802 | 267 :" Invalid values: |
268 :for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim'] | |
269 : try | |
270 : let v=py3eval(e) | |
271 : catch | |
272 : let toput=e.":\t".v:exception[:13] | |
273 : $put =toput | |
274 : endtry | |
275 :endfor | |
4109 | 276 :" |
277 :" threading | |
278 :let l = [0] | |
279 :py3 l=vim.bindeval('l') | |
280 :py3 <<EOF | |
281 import threading | |
282 import time | |
283 | |
284 class T(threading.Thread): | |
285 def __init__(self): | |
286 threading.Thread.__init__(self) | |
287 self.t = 0 | |
288 self.running = True | |
289 | |
290 def run(self): | |
291 while self.running: | |
292 self.t += 1 | |
293 time.sleep(0.1) | |
294 | |
295 t = T() | |
296 t.start() | |
297 EOF | |
298 :sleep 1 | |
299 :py3 t.running = False | |
300 :py3 t.join() | |
301 :py3 l[0] = t.t > 8 # check if the background thread is working | |
302 :$put =string(l) | |
303 :" | |
304 :" settrace | |
305 :let l = [] | |
306 :py3 l=vim.bindeval('l') | |
307 :py3 <<EOF | |
308 import sys | |
309 | |
310 def traceit(frame, event, arg): | |
311 global l | |
312 if event == "line": | |
313 l += [frame.f_lineno] | |
314 return traceit | |
315 | |
316 def trace_main(): | |
317 for i in range(5): | |
318 pass | |
319 EOF | |
320 :py3 sys.settrace(traceit) | |
321 :py3 trace_main() | |
322 :py3 sys.settrace(None) | |
323 :$put =string(l) | |
4323 | 324 :" |
325 :" Vars | |
326 :let g:foo = 'bac' | |
327 :let w:abc = 'def' | |
328 :let b:baz = 'bar' | |
4413 | 329 :let t:bar = 'jkl' |
4323 | 330 :try |
331 : throw "Abc" | |
332 :catch | |
333 : put =py3eval('vim.vvars[''exception'']') | |
334 :endtry | |
335 :put =py3eval('vim.vars[''foo'']') | |
336 :put =py3eval('vim.current.window.vars[''abc'']') | |
337 :put =py3eval('vim.current.buffer.vars[''baz'']') | |
4413 | 338 :put =py3eval('vim.current.tabpage.vars[''bar'']') |
4350 | 339 :" |
340 :" Options | |
341 :" paste: boolean, global | |
342 :" previewheight number, global | |
343 :" operatorfunc: string, global | |
344 :" number: boolean, window-local | |
345 :" numberwidth: number, window-local | |
346 :" colorcolumn: string, window-local | |
347 :" statusline: string, window-local/global | |
348 :" autoindent: boolean, buffer-local | |
4427 | 349 :" shiftwidth: number, buffer-local |
4350 | 350 :" omnifunc: string, buffer-local |
351 :" preserveindent: boolean, buffer-local/global | |
352 :" path: string, buffer-local/global | |
353 :let g:bufs=[bufnr('%')] | |
354 :new | |
355 :let g:bufs+=[bufnr('%')] | |
356 :vnew | |
357 :let g:bufs+=[bufnr('%')] | |
358 :wincmd j | |
359 :vnew | |
360 :let g:bufs+=[bufnr('%')] | |
361 :wincmd l | |
362 :fun RecVars(opt) | |
363 : let gval =string(eval('&g:'.a:opt)) | |
364 : let wvals=join(map(range(1, 4), 'v:val.":".string(getwinvar(v:val, "&".a:opt))')) | |
365 : let bvals=join(map(copy(g:bufs), 'v:val.":".string(getbufvar(v:val, "&".a:opt))')) | |
366 : put =' G: '.gval | |
367 : put =' W: '.wvals | |
368 : put =' B: '.wvals | |
369 :endfun | |
370 py3 << EOF | |
371 def e(s, g=globals(), l=locals()): | |
372 try: | |
373 exec(s, g, l) | |
374 except Exception as e: | |
4498 | 375 vim.command('return ' + repr(e.__class__.__name__)) |
4350 | 376 |
377 def ev(s, g=globals(), l=locals()): | |
378 try: | |
379 return eval(s, g, l) | |
380 except Exception as e: | |
4498 | 381 vim.command('let exc=' + repr(e.__class__.__name__)) |
4350 | 382 return 0 |
383 EOF | |
384 :function E(s) | |
385 : python3 e(vim.eval('a:s')) | |
386 :endfunction | |
387 :function Ev(s) | |
4498 | 388 : let r=py3eval('ev(vim.eval("a:s"))') |
389 : if exists('exc') | |
390 : throw exc | |
391 : endif | |
392 : return r | |
4350 | 393 :endfunction |
394 :py3 gopts1=vim.options | |
395 :py3 wopts1=vim.windows[2].options | |
396 :py3 wopts2=vim.windows[0].options | |
397 :py3 wopts3=vim.windows[1].options | |
398 :py3 bopts1=vim.buffers[vim.bindeval("g:bufs")[2]].options | |
399 :py3 bopts2=vim.buffers[vim.bindeval("g:bufs")[1]].options | |
400 :py3 bopts3=vim.buffers[vim.bindeval("g:bufs")[0]].options | |
401 :let lst=[] | |
402 :let lst+=[['paste', 1, 0, 1, 2, 1, 1, 0 ]] | |
403 :let lst+=[['previewheight', 5, 1, 6, 'a', 0, 1, 0 ]] | |
404 :let lst+=[['operatorfunc', 'A', 'B', 'C', 2, 0, 1, 0 ]] | |
405 :let lst+=[['number', 0, 1, 1, 0, 1, 0, 1 ]] | |
406 :let lst+=[['numberwidth', 2, 3, 5, -100, 0, 0, 1 ]] | |
407 :let lst+=[['colorcolumn', '+1', '+2', '+3', 'abc', 0, 0, 1 ]] | |
408 :let lst+=[['statusline', '1', '2', '4', 0, 0, 1, 1 ]] | |
409 :let lst+=[['autoindent', 0, 1, 1, 2, 1, 0, 2 ]] | |
4427 | 410 :let lst+=[['shiftwidth', 0, 2, 1, 3, 0, 0, 2 ]] |
4350 | 411 :let lst+=[['omnifunc', 'A', 'B', 'C', 1, 0, 0, 2 ]] |
412 :let lst+=[['preserveindent', 0, 1, 1, 2, 1, 1, 2 ]] | |
413 :let lst+=[['path', '.,,', ',,', '.', 0, 0, 1, 2 ]] | |
414 :for [oname, oval1, oval2, oval3, invval, bool, global, local] in lst | |
415 : py3 oname=vim.eval('oname') | |
416 : py3 oval1=vim.bindeval('oval1') | |
417 : py3 oval2=vim.bindeval('oval2') | |
418 : py3 oval3=vim.bindeval('oval3') | |
419 : if invval is 0 || invval is 1 | |
420 : py3 invval=bool(vim.bindeval('invval')) | |
421 : else | |
422 : py3 invval=vim.bindeval('invval') | |
423 : endif | |
424 : if bool | |
425 : py3 oval1=bool(oval1) | |
426 : py3 oval2=bool(oval2) | |
427 : py3 oval3=bool(oval3) | |
428 : endif | |
429 : put ='>>> '.oname | |
430 : for v in ['gopts1', 'wopts1', 'bopts1'] | |
431 : try | |
432 : put =' p/'.v.': '.Ev('repr('.v.'['''.oname.'''])') | |
433 : catch | |
434 : put =' p/'.v.'! '.v:exception | |
435 : endtry | |
4498 | 436 : let r=E(v.'['''.oname.''']=invval') |
437 : if r isnot 0 | |
438 : put =' inv: '.string(invval).'! '.r | |
439 : endif | |
4350 | 440 : for vv in (v is# 'gopts1' ? [v] : [v, v[:-2].'2', v[:-2].'3']) |
441 : let val=substitute(vv, '^.opts', 'oval', '') | |
4498 | 442 : let r=E(vv.'['''.oname.''']='.val) |
443 : if r isnot 0 | |
444 : put =' '.vv.'! '.r | |
445 : endif | |
4350 | 446 : endfor |
447 : endfor | |
448 : call RecVars(oname) | |
449 : for v in ['wopts3', 'bopts3'] | |
4498 | 450 : let r=E('del '.v.'["'.oname.'"]') |
451 : if r isnot 0 | |
452 : put =' del '.v.'! '.r | |
453 : endif | |
4350 | 454 : endfor |
455 : call RecVars(oname) | |
456 :endfor | |
457 :only | |
4397 | 458 :for buf in g:bufs[1:] |
459 : execute 'bwipeout!' buf | |
460 :endfor | |
4389 | 461 :" |
462 :" Test buffer object | |
463 :vnew | |
464 :put ='First line' | |
465 :put ='Second line' | |
466 :put ='Third line' | |
467 :1 delete _ | |
468 :py3 b=vim.current.buffer | |
469 :wincmd w | |
470 :mark a | |
4589
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
471 :augroup BUFS |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
472 : autocmd BufFilePost * python3 cb.append(vim.eval('expand("<abuf>")') + ':BufFilePost:' + vim.eval('bufnr("%")')) |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
473 : autocmd BufFilePre * python3 cb.append(vim.eval('expand("<abuf>")') + ':BufFilePre:' + vim.eval('bufnr("%")')) |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
474 :augroup END |
4389 | 475 py3 << EOF |
476 cb = vim.current.buffer | |
477 # Tests BufferAppend and BufferItem | |
478 cb.append(b[0]) | |
479 # Tests BufferSlice and BufferAssSlice | |
480 cb.append('abc') # Will be overwritten | |
481 cb[-1:] = b[:-2] | |
482 # Test BufferLength and BufferAssSlice | |
483 cb.append('def') # Will not be overwritten | |
484 cb[len(cb):] = b[:] | |
485 # Test BufferAssItem and BufferMark | |
486 cb.append('ghi') # Will be overwritten | |
487 cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1])) | |
488 # Test BufferRepr | |
489 cb.append(repr(cb) + repr(b)) | |
490 # Modify foreign buffer | |
491 b.append('foo') | |
492 b[0]='bar' | |
493 b[0:0]=['baz'] | |
494 vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number) | |
4589
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
495 # Test assigning to name property |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
496 old_name = cb.name |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
497 cb.name = 'foo' |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
498 cb.append(cb.name[-11:]) |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
499 b.name = 'bar' |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
500 cb.append(b.name[-11:]) |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
501 cb.name = old_name |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
502 cb.append(cb.name[-17:]) |
4389 | 503 # Test CheckBuffer |
4589
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
504 for _b in vim.buffers: |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
505 if _b is not cb: |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
506 vim.command('bwipeout! ' + str(_b.number)) |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
507 del _b |
4593
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
508 cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid))) |
4389 | 509 for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")'): |
510 try: | |
511 exec(expr) | |
512 except vim.error: | |
513 pass | |
514 else: | |
515 # Usually a SEGV here | |
516 # Should not happen in any case | |
517 cb.append('No exception for ' + expr) | |
4589
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
518 vim.command('cd .') |
4389 | 519 EOF |
4397 | 520 :" |
521 :" Test vim.buffers object | |
522 :set hidden | |
523 :edit a | |
524 :buffer # | |
525 :edit b | |
526 :buffer # | |
527 :edit c | |
528 :buffer # | |
529 py3 << EOF | |
530 # Check GCing iterator that was not fully exhausted | |
531 i = iter(vim.buffers) | |
532 cb.append('i:' + str(next(i))) | |
533 # and also check creating more then one iterator at a time | |
534 i2 = iter(vim.buffers) | |
535 cb.append('i2:' + str(next(i2))) | |
536 cb.append('i:' + str(next(i))) | |
537 # The following should trigger GC and not cause any problems | |
538 del i | |
539 del i2 | |
540 i3 = iter(vim.buffers) | |
541 cb.append('i3:' + str(next(i3))) | |
542 del i3 | |
543 | |
544 prevnum = 0 | |
545 for b in vim.buffers: | |
546 # Check buffer order | |
547 if prevnum >= b.number: | |
548 cb.append('!!! Buffer numbers not in strictly ascending order') | |
549 # Check indexing: vim.buffers[number].number == number | |
550 cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + '=' + repr(b)) | |
551 prevnum = b.number | |
552 | |
553 cb.append(str(len(vim.buffers))) | |
554 | |
555 bnums = list(map(lambda b: b.number, vim.buffers))[1:] | |
556 | |
557 # Test wiping out buffer with existing iterator | |
558 i4 = iter(vim.buffers) | |
559 cb.append('i4:' + str(next(i4))) | |
560 vim.command('bwipeout! ' + str(bnums.pop(0))) | |
561 try: | |
562 next(i4) | |
563 except vim.error: | |
564 pass | |
565 else: | |
566 cb.append('!!!! No vim.error') | |
567 i4 = iter(vim.buffers) | |
568 vim.command('bwipeout! ' + str(bnums.pop(-1))) | |
569 vim.command('bwipeout! ' + str(bnums.pop(-1))) | |
570 cb.append('i4:' + str(next(i4))) | |
571 try: | |
572 next(i4) | |
573 except StopIteration: | |
574 cb.append('StopIteration') | |
575 EOF | |
4413 | 576 :" |
577 :" Test vim.{tabpage,window}list and vim.{tabpage,window} objects | |
578 :tabnew 0 | |
579 :tabnew 1 | |
580 :vnew a.1 | |
581 :tabnew 2 | |
582 :vnew a.2 | |
583 :vnew b.2 | |
584 :vnew c.2 | |
585 py3 << EOF | |
4511
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4498
diff
changeset
|
586 cb.append('Number of tabs: ' + str(len(vim.tabpages))) |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4498
diff
changeset
|
587 cb.append('Current tab pages:') |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4498
diff
changeset
|
588 |
4413 | 589 def W(w): |
590 if '(unknown)' in repr(w): | |
591 return '<window object (unknown)>' | |
592 else: | |
593 return repr(w) | |
4511
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4498
diff
changeset
|
594 |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4498
diff
changeset
|
595 def Cursor(w, start=len(cb)): |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4498
diff
changeset
|
596 if w.buffer is cb: |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4498
diff
changeset
|
597 return repr((start - w.cursor[0], w.cursor[1])) |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4498
diff
changeset
|
598 else: |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4498
diff
changeset
|
599 return repr(w.cursor) |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4498
diff
changeset
|
600 |
4413 | 601 for t in vim.tabpages: |
602 cb.append(' ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window)) | |
603 cb.append(' Windows:') | |
604 for w in t.windows: | |
4511
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4498
diff
changeset
|
605 cb.append(' ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + Cursor(w)) |
4413 | 606 # Other values depend on the size of the terminal, so they are checked partly: |
607 for attr in ('height', 'row', 'width', 'col'): | |
608 try: | |
609 aval = getattr(w, attr) | |
610 if type(aval) is not int: | |
611 raise TypeError | |
612 if aval < 0: | |
613 raise ValueError | |
614 except Exception as e: | |
615 cb.append('!!!!!! Error while getting attribute ' + attr + ': ' + e.__class__.__name__) | |
616 w.cursor = (len(w.buffer), 0) | |
617 cb.append('Number of windows in current tab page: ' + str(len(vim.windows))) | |
618 if list(vim.windows) != list(vim.current.tabpage.windows): | |
619 cb.append('!!!!!! Windows differ') | |
620 EOF | |
621 :" | |
622 :" Test vim.current | |
623 py3 << EOF | |
624 def H(o): | |
625 return repr(o) | |
626 cb.append('Current tab page: ' + repr(vim.current.tabpage)) | |
627 cb.append('Current window: ' + repr(vim.current.window) + ': ' + H(vim.current.window) + ' is ' + H(vim.current.tabpage.window)) | |
628 cb.append('Current buffer: ' + repr(vim.current.buffer) + ': ' + H(vim.current.buffer) + ' is ' + H(vim.current.window.buffer)+ ' is ' + H(vim.current.tabpage.window.buffer)) | |
629 # Assigning: fails | |
630 try: | |
631 vim.current.window = vim.tabpages[0].window | |
632 except ValueError: | |
633 cb.append('ValueError at assigning foreign tab window') | |
634 | |
635 for attr in ('window', 'tabpage', 'buffer'): | |
636 try: | |
637 setattr(vim.current, attr, None) | |
638 except TypeError: | |
639 cb.append('Type error at assigning None to vim.current.' + attr) | |
640 | |
641 # Assigning: success | |
642 vim.current.tabpage = vim.tabpages[-2] | |
643 vim.current.buffer = cb | |
644 vim.current.window = vim.windows[0] | |
645 vim.current.window.cursor = (len(vim.current.buffer), 0) | |
646 cb.append('Current tab page: ' + repr(vim.current.tabpage)) | |
647 cb.append('Current window: ' + repr(vim.current.window)) | |
648 cb.append('Current buffer: ' + repr(vim.current.buffer)) | |
649 cb.append('Current line: ' + repr(vim.current.line)) | |
4593
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
650 ws = list(vim.windows) |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
651 ts = list(vim.tabpages) |
4413 | 652 for b in vim.buffers: |
653 if b is not cb: | |
654 vim.command('bwipeout! ' + str(b.number)) | |
4593
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
655 cb.append('w.valid: ' + repr([w.valid for w in ws])) |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
656 cb.append('t.valid: ' + repr([t.valid for t in ts])) |
4413 | 657 EOF |
658 :tabonly! | |
659 :only! | |
4496 | 660 :" |
661 :" Test types | |
662 py3 << EOF | |
663 for expr, attr in ( | |
664 ('vim.vars', 'Dictionary'), | |
665 ('vim.options', 'Options'), | |
666 ('vim.bindeval("{}")', 'Dictionary'), | |
667 ('vim.bindeval("[]")', 'List'), | |
668 ('vim.bindeval("function(\'tr\')")', 'Function'), | |
669 ('vim.current.buffer', 'Buffer'), | |
670 ('vim.current.range', 'Range'), | |
671 ('vim.current.window', 'Window'), | |
672 ('vim.current.tabpage', 'TabPage'), | |
673 ): | |
674 cb.append(expr + ':' + attr + ':' + repr(type(eval(expr)) is getattr(vim, attr))) | |
675 EOF | |
4498 | 676 :" |
4599
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
677 :" Test __dir__() method |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
678 py3 << EOF |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
679 for name, o in ( |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
680 ('current', vim.current), |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
681 ('buffer', vim.current.buffer), |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
682 ('window', vim.current.window), |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
683 ('tabpage', vim.current.tabpage), |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
684 ('range', vim.current.range), |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
685 ('dictionary', vim.bindeval('{}')), |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
686 ('list', vim.bindeval('[]')), |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
687 ('function', vim.bindeval('function("tr")')), |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
688 ('output', sys.stdout), |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
689 ): |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
690 cb.append(name + ':' + ','.join(dir(o))) |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
691 del name |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
692 del o |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
693 EOF |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
694 :" |
4629
e4e48d4ee040
updated for version 7.3.1062
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
695 :" Test vim.*.__new__ |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
696 :$put =string(py3eval('vim.Dictionary({})')) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
697 :$put =string(py3eval('vim.Dictionary(a=1)')) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
698 :$put =string(py3eval('vim.Dictionary(((''a'', 1),))')) |
4629
e4e48d4ee040
updated for version 7.3.1062
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
699 :$put =string(py3eval('vim.List()')) |
e4e48d4ee040
updated for version 7.3.1062
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
700 :$put =string(py3eval('vim.List(iter(''abc''))')) |
4619
90beab957ba9
updated for version 7.3.1057
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
701 :" |
90beab957ba9
updated for version 7.3.1057
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
702 :" Test stdout/stderr |
90beab957ba9
updated for version 7.3.1057
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
703 :redir => messages |
90beab957ba9
updated for version 7.3.1057
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
704 :py sys.stdout.write('abc') ; sys.stdout.write('def') |
90beab957ba9
updated for version 7.3.1057
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
705 :py sys.stderr.write('abc') ; sys.stderr.write('def') |
90beab957ba9
updated for version 7.3.1057
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
706 :py sys.stdout.writelines(iter('abc')) |
90beab957ba9
updated for version 7.3.1057
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
707 :py sys.stderr.writelines(iter('abc')) |
90beab957ba9
updated for version 7.3.1057
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
708 :redir END |
90beab957ba9
updated for version 7.3.1057
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
709 :$put =string(substitute(messages, '\d\+', '', 'g')) |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
710 :" Test subclassing |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
711 py3 << EOF |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
712 class DupDict(vim.Dictionary): |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
713 def __setitem__(self, key, value): |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
714 super(DupDict, self).__setitem__(key, value) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
715 super(DupDict, self).__setitem__('dup_' + key, value) |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
716 dd = DupDict() |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
717 dd['a'] = 'b' |
4629
e4e48d4ee040
updated for version 7.3.1062
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
718 |
e4e48d4ee040
updated for version 7.3.1062
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
719 class DupList(vim.List): |
e4e48d4ee040
updated for version 7.3.1062
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
720 def __getitem__(self, idx): |
e4e48d4ee040
updated for version 7.3.1062
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
721 return [super(DupList, self).__getitem__(idx)] * 2 |
e4e48d4ee040
updated for version 7.3.1062
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
722 |
e4e48d4ee040
updated for version 7.3.1062
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
723 dl = DupList() |
e4e48d4ee040
updated for version 7.3.1062
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
724 dl2 = DupList(iter('abc')) |
e4e48d4ee040
updated for version 7.3.1062
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
725 dl.extend(dl2[0]) |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
726 EOF |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4619
diff
changeset
|
727 :$put =string(sort(keys(py3eval('dd')))) |
4629
e4e48d4ee040
updated for version 7.3.1062
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
728 :$put =string(py3eval('dl')) |
e4e48d4ee040
updated for version 7.3.1062
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
729 :$put =string(py3eval('dl2')) |
4619
90beab957ba9
updated for version 7.3.1057
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
730 :" |
4498 | 731 :" Test exceptions |
732 :fun Exe(e) | |
733 : execute a:e | |
734 :endfun | |
735 py3 << EOF | |
736 def ee(expr, g=globals(), l=locals()): | |
737 try: | |
738 exec(expr, g, l) | |
739 except Exception as e: | |
740 cb.append(repr((e.__class__, e))) | |
741 Exe = vim.bindeval('function("Exe")') | |
742 ee('vim.command("throw \'abc\'")') | |
743 ee('Exe("throw \'def\'")') | |
744 ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")') | |
745 ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")') | |
746 ee('vim.eval("Exe(\'xxx_non_existent_command_xxx\')")') | |
747 ee('vim.bindeval("Exe(\'xxx_non_existent_command_xxx\')")') | |
748 EOF | |
3618 | 749 :endfun |
750 :" | |
751 :call Test() | |
752 :" | |
753 :delfunc Test | |
754 :call garbagecollect(1) | |
755 :" | |
756 :/^start:/,$wq! test.out | |
4397 | 757 :call getchar() |
3618 | 758 ENDTEST |
759 | |
760 start: |