blob: 312763c8068c5b3d3b920f536d32572da3b08166 [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 Moolenaardb913952012-06-29 12:54:53 +0200214:"
215:" py3eval()
216:let l=py3eval('[0, 1, 2]')
217:$put =string(l)
218:let d=py3eval('{"a": "b", "c": 1, "d": ["e"]}')
219:$put =sort(items(d))
Bram Moolenaardb913952012-06-29 12:54:53 +0200220:if has('float')
221: let f=py3eval('0.0')
222: $put =string(f)
223:else
224: $put ='0.0'
225:endif
Bram Moolenaarc11073c2012-09-05 19:17:42 +0200226:" Invalid values:
227:for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
228: try
229: let v=py3eval(e)
230: catch
231: let toput=e.":\t".v:exception[:13]
232: $put =toput
233: endtry
234:endfor
Bram Moolenaardb913952012-06-29 12:54:53 +0200235:endfun
236:"
237:call Test()
238:"
239:delfunc Test
240:call garbagecollect(1)
241:"
242:/^start:/,$wq! test.out
243ENDTEST
244
245start: