blob: 1d7ccedd51da7d1cf4555b9063e5ca78f33e514b [file] [log] [blame]
Bram Moolenaardb913952012-06-29 12:54:53 +02001Tests for various python features. vim: set ft=vim :
2
3STARTTEST
4:so small.vim
5:if !has('python3') | e! test.ok | wq! test.out | endif
6:py3 import vim
7:fun Test()
8:let l = []
9:py3 l=vim.bindeval('l')
10:py3 f=vim.bindeval('function("strlen")')
11:" Extending List directly with different types
12:py3 l+=[1, "as'd", [1, 2, f, {'a': 1}]]
13:$put =string(l)
14:$put =string(l[-1])
15:try
16: $put =string(l[-4])
17:catch
18: $put =v:exception[:13]
19:endtry
20:" List assignment
21:py3 l[0]=0
22:$put =string(l)
23:py3 l[-2]=f
24:$put =string(l)
25:"
26:" Extending Dictionary directly with different types
27:let d = {}
28:py3 d=vim.bindeval('d')
29:py3 d['1']='asd'
30:py3 d['b']=[1, 2, f]
31:py3 d['-1']={'a': 1}
32:let dkeys = []
33:py3 dk=vim.bindeval('dkeys')
34:py3 dkeys=d.keys()
35:py3 dkeys.sort()
36:py3 dk+=dkeys
37:$put =string(dkeys)
38:for [key, val] in sort(items(d))
39: $put =string(key) . ' : ' . string(val)
40: unlet key val
41:endfor
42:"
43:" removing items with del
44:py3 del l[2]
45:$put =string(l)
46:let l = range(8)
47:py3 l=vim.bindeval('l')
48:try
49: py3 del l[:3]
50: py3 del l[1:]
51:catch
52: $put =v:exception
53:endtry
54:$put =string(l)
55:"
56:py3 del d['-1']
57:$put =string(d)
58:"
59:" removing items out of range: silently skip items that don't exist
60:let l = [0, 1, 2, 3]
61:py3 l=vim.bindeval('l')
62:" The following two ranges delete nothing as they match empty list:
63:py3 del l[2:1]
64:$put =string(l)
65:py3 del l[2:2]
66:$put =string(l)
67:py3 del l[2:3]
68:$put =string(l)
69:let l = [0, 1, 2, 3]
70:py3 l=vim.bindeval('l')
71:py3 del l[2:4]
72:$put =string(l)
73:let l = [0, 1, 2, 3]
74:py3 l=vim.bindeval('l')
75:py3 del l[2:5]
76:$put =string(l)
77:let l = [0, 1, 2, 3]
78:py3 l=vim.bindeval('l')
79:py3 del l[2:6]
80:$put =string(l)
81:let l = [0, 1, 2, 3]
82:py3 l=vim.bindeval('l')
83:" The following two ranges delete nothing as they match empty list:
84:py3 del l[-1:2]
85:$put =string(l)
86:py3 del l[-2:2]
87:$put =string(l)
88:py3 del l[-3:2]
89:$put =string(l)
90:let l = [0, 1, 2, 3]
91:py3 l=vim.bindeval('l')
92:py3 del l[-4:2]
93:$put =string(l)
94:let l = [0, 1, 2, 3]
95:py3 l=vim.bindeval('l')
96:py3 del l[-5:2]
97:$put =string(l)
98:let l = [0, 1, 2, 3]
99:py3 l=vim.bindeval('l')
100:py3 del l[-6:2]
101:$put =string(l)
102:"
103:" Slice assignment to a list
104:let l = [0, 1, 2, 3]
105:py3 l=vim.bindeval('l')
106:py3 l[0:0]=['a']
107:$put =string(l)
108:let l = [0, 1, 2, 3]
109:py3 l=vim.bindeval('l')
110:py3 l[1:2]=['b']
111:$put =string(l)
112:let l = [0, 1, 2, 3]
113:py3 l=vim.bindeval('l')
114:py3 l[2:4]=['c']
115:$put =string(l)
116:let l = [0, 1, 2, 3]
117:py3 l=vim.bindeval('l')
118:py3 l[4:4]=['d']
119:$put =string(l)
120:let l = [0, 1, 2, 3]
121:py3 l=vim.bindeval('l')
122:py3 l[-1:2]=['e']
123:$put =string(l)
124:let l = [0, 1, 2, 3]
125:py3 l=vim.bindeval('l')
126:py3 l[-10:2]=['f']
127:$put =string(l)
128:let l = [0, 1, 2, 3]
129:py3 l=vim.bindeval('l')
130:py3 l[2:-10]=['g']
131:$put =string(l)
132:let l = []
133:py3 l=vim.bindeval('l')
134:py3 l[0:0]=['h']
135:$put =string(l)
136:"
137:" Locked variables
138:let l = [0, 1, 2, 3]
139:py3 l=vim.bindeval('l')
140:lockvar! l
141:py3 l[2]='i'
142:$put =string(l)
143:unlockvar! l
144:"
145:" Function calls
146:function New(...)
147:return ['NewStart']+a:000+['NewEnd']
148:endfunction
149:function DictNew(...) dict
150:return ['DictNewStart']+a:000+['DictNewEnd', self]
151:endfunction
152:let l=[function('New'), function('DictNew')]
153:py3 l=vim.bindeval('l')
154:py3 l.extend(list(l[0](1, 2, 3)))
155:$put =string(l)
156:py3 l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
157:$put =string(l)
158:py3 l+=[l[0].name]
159:$put =string(l)
160:try
161: py3 l[1](1, 2, 3)
162:catch
163: $put =v:exception[:13]
164:endtry
165:delfunction New
166:try
167: py3 l[0](1, 2, 3)
168:catch
169: $put =v:exception[:13]
170:endtry
171:if has('float')
172: let l=[0.0]
173: py3 l=vim.bindeval('l')
174: py3 l.extend([0.0])
175: $put =string(l)
176:else
177: $put ='[0.0, 0.0]'
178:endif
Bram Moolenaarc11073c2012-09-05 19:17:42 +0200179:let messages=[]
180:py3 <<EOF
181d=vim.bindeval('{}')
182m=vim.bindeval('messages')
183try:
184 d['abc']
185except Exception as e:
186 m.extend([e.__class__.__name__])
187
188try:
189 d['abc']="\0"
190except Exception as e:
191 m.extend([e.__class__.__name__])
192
193try:
194 d['abc']=vim
195except Exception as e:
196 m.extend([e.__class__.__name__])
197
198try:
199 d['']=1
200except Exception as e:
201 m.extend([e.__class__.__name__])
202
203try:
204 d['a\0b']=1
205except Exception as e:
206 m.extend([e.__class__.__name__])
207
208try:
209 d[b'a\0b']=1
210except Exception as e:
211 m.extend([e.__class__.__name__])
212EOF
213:$put =messages
Bram Moolenaar66b79852012-09-21 14:00:35 +0200214:unlet messages
215:" locked and scope attributes
216:let d={} | let dl={} | lockvar dl
217:for s in split("d dl v: g:")
218: let name=tr(s, ':', 's')
219: execute 'py3 '.name.'=vim.bindeval("'.s.'")'
220: let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".py3eval(name.".".v:val)'), ';')
221: $put =toput
222:endfor
223:silent! let d.abc=1
224:silent! let dl.abc=1
225:py3 d.locked=True
226:py3 dl.locked=False
227:silent! let d.def=1
228:silent! let dl.def=1
229:put ='d:'.string(d)
230:put ='dl:'.string(dl)
231:unlet d dl
232:
233:let l=[] | let ll=[] | lockvar ll
234:for s in split("l ll")
235: let name=tr(s, ':', 's')
236: execute 'py3 '.name.'=vim.bindeval("'.s.'")'
237: let toput=s.' : locked:'.py3eval(name.'.locked')
238: $put =toput
239:endfor
240:silent! call extend(l, [0])
241:silent! call extend(ll, [0])
242:py3 l.locked=True
243:py3 ll.locked=False
244:silent! call extend(l, [1])
245:silent! call extend(ll, [1])
246:put ='l:'.string(l)
247:put ='ll:'.string(ll)
248:unlet l ll
Bram Moolenaardb913952012-06-29 12:54:53 +0200249:"
250:" py3eval()
251:let l=py3eval('[0, 1, 2]')
252:$put =string(l)
253:let d=py3eval('{"a": "b", "c": 1, "d": ["e"]}')
254:$put =sort(items(d))
Bram Moolenaardb913952012-06-29 12:54:53 +0200255:if has('float')
256: let f=py3eval('0.0')
257: $put =string(f)
258:else
259: $put ='0.0'
260:endif
Bram Moolenaarc11073c2012-09-05 19:17:42 +0200261:" Invalid values:
262:for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
263: try
264: let v=py3eval(e)
265: catch
266: let toput=e.":\t".v:exception[:13]
267: $put =toput
268: endtry
269:endfor
Bram Moolenaardb913952012-06-29 12:54:53 +0200270:endfun
271:"
272:call Test()
273:"
274:delfunc Test
275:call garbagecollect(1)
276:"
277:/^start:/,$wq! test.out
278ENDTEST
279
280start: