3618
|
1 Tests for various python features. vim: set ft=vim :
|
|
2
|
|
3 STARTTEST
|
|
4 :so small.vim
|
|
5 :if !has('python') | e! test.ok | wq! test.out | endif
|
|
6 :py import vim
|
|
7 :fun Test()
|
|
8 :let l = []
|
|
9 :py l=vim.bindeval('l')
|
|
10 :py f=vim.bindeval('function("strlen")')
|
|
11 :" Extending List directly with different types
|
|
12 :py l.extend([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 :py l[0]=0
|
|
22 :$put =string(l)
|
|
23 :py l[-2]=f
|
|
24 :$put =string(l)
|
|
25 :"
|
|
26 :" Extending Dictionary directly with different types
|
|
27 :let d = {}
|
|
28 :py d=vim.bindeval('d')
|
|
29 :py d['1']='asd'
|
|
30 :py d['b']=[1, 2, f]
|
|
31 :py d['-1']={'a': 1}
|
|
32 :let dkeys = []
|
|
33 :py dk=vim.bindeval('dkeys')
|
|
34 :py dkeys=d.keys()
|
|
35 :py dkeys.sort()
|
|
36 :py dk.extend(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 :py del l[2]
|
|
45 :$put =string(l)
|
|
46 :let l = range(8)
|
|
47 :py l=vim.bindeval('l')
|
|
48 :try
|
|
49 : py del l[:3]
|
|
50 : py del l[1:]
|
|
51 :catch
|
|
52 : $put =v:exception
|
|
53 :endtry
|
|
54 :$put =string(l)
|
|
55 :"
|
|
56 :py 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 :py l=vim.bindeval('l')
|
|
62 :" The following two ranges delete nothing as they match empty list:
|
|
63 :py del l[2:1]
|
|
64 :$put =string(l)
|
|
65 :py del l[2:2]
|
|
66 :$put =string(l)
|
|
67 :py del l[2:3]
|
|
68 :$put =string(l)
|
|
69 :let l = [0, 1, 2, 3]
|
|
70 :py l=vim.bindeval('l')
|
|
71 :py del l[2:4]
|
|
72 :$put =string(l)
|
|
73 :let l = [0, 1, 2, 3]
|
|
74 :py l=vim.bindeval('l')
|
|
75 :py del l[2:5]
|
|
76 :$put =string(l)
|
|
77 :let l = [0, 1, 2, 3]
|
|
78 :py l=vim.bindeval('l')
|
|
79 :py del l[2:6]
|
|
80 :$put =string(l)
|
|
81 :let l = [0, 1, 2, 3]
|
|
82 :py l=vim.bindeval('l')
|
|
83 :" The following two ranges delete nothing as they match empty list:
|
|
84 :py del l[-1:2]
|
|
85 :$put =string(l)
|
|
86 :py del l[-2:2]
|
|
87 :$put =string(l)
|
|
88 :py del l[-3:2]
|
|
89 :$put =string(l)
|
|
90 :let l = [0, 1, 2, 3]
|
|
91 :py l=vim.bindeval('l')
|
|
92 :py del l[-4:2]
|
|
93 :$put =string(l)
|
|
94 :let l = [0, 1, 2, 3]
|
|
95 :py l=vim.bindeval('l')
|
|
96 :py del l[-5:2]
|
|
97 :$put =string(l)
|
|
98 :let l = [0, 1, 2, 3]
|
|
99 :py l=vim.bindeval('l')
|
|
100 :py del l[-6:2]
|
|
101 :$put =string(l)
|
|
102 :"
|
|
103 :" Slice assignment to a list
|
|
104 :let l = [0, 1, 2, 3]
|
|
105 :py l=vim.bindeval('l')
|
|
106 :py l[0:0]=['a']
|
|
107 :$put =string(l)
|
|
108 :let l = [0, 1, 2, 3]
|
|
109 :py l=vim.bindeval('l')
|
|
110 :py l[1:2]=['b']
|
|
111 :$put =string(l)
|
|
112 :let l = [0, 1, 2, 3]
|
|
113 :py l=vim.bindeval('l')
|
|
114 :py l[2:4]=['c']
|
|
115 :$put =string(l)
|
|
116 :let l = [0, 1, 2, 3]
|
|
117 :py l=vim.bindeval('l')
|
|
118 :py l[4:4]=['d']
|
|
119 :$put =string(l)
|
|
120 :let l = [0, 1, 2, 3]
|
|
121 :py l=vim.bindeval('l')
|
|
122 :py l[-1:2]=['e']
|
|
123 :$put =string(l)
|
|
124 :let l = [0, 1, 2, 3]
|
|
125 :py l=vim.bindeval('l')
|
|
126 :py l[-10:2]=['f']
|
|
127 :$put =string(l)
|
|
128 :let l = [0, 1, 2, 3]
|
|
129 :py l=vim.bindeval('l')
|
|
130 :py l[2:-10]=['g']
|
|
131 :$put =string(l)
|
|
132 :let l = []
|
|
133 :py l=vim.bindeval('l')
|
|
134 :py l[0:0]=['h']
|
|
135 :$put =string(l)
|
|
136 :"
|
|
137 :" Locked variables
|
|
138 :let l = [0, 1, 2, 3]
|
|
139 :py l=vim.bindeval('l')
|
|
140 :lockvar! l
|
|
141 :py 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 :py l=vim.bindeval('l')
|
|
154 :py l.extend(list(l[0](1, 2, 3)))
|
|
155 :$put =string(l)
|
|
156 :py l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
|
|
157 :$put =string(l)
|
|
158 :py l.extend([l[0].name])
|
|
159 :$put =string(l)
|
|
160 :try
|
|
161 : py l[1](1, 2, 3)
|
|
162 :catch
|
|
163 : $put =v:exception[:16]
|
|
164 :endtry
|
|
165 :delfunction New
|
|
166 :try
|
|
167 : py l[0](1, 2, 3)
|
|
168 :catch
|
|
169 : $put =v:exception[:16]
|
|
170 :endtry
|
|
171 :if has('float')
|
|
172 : let l=[0.0]
|
|
173 : py l=vim.bindeval('l')
|
|
174 : py l.extend([0.0])
|
|
175 : $put =string(l)
|
|
176 :else
|
|
177 : $put ='[0.0, 0.0]'
|
|
178 :endif
|
3802
|
179 :let messages=[]
|
|
180 :py <<EOF
|
|
181 d=vim.bindeval('{}')
|
|
182 m=vim.bindeval('messages')
|
|
183 try:
|
|
184 d['abc']
|
|
185 except Exception as e:
|
|
186 m.extend([e.__class__.__name__])
|
|
187
|
|
188 try:
|
|
189 d['abc']="\0"
|
|
190 except Exception as e:
|
|
191 m.extend([e.__class__.__name__])
|
|
192
|
|
193 try:
|
|
194 d['abc']=vim
|
|
195 except Exception as e:
|
|
196 m.extend([e.__class__.__name__])
|
|
197
|
|
198 try:
|
|
199 d['']=1
|
|
200 except Exception as e:
|
|
201 m.extend([e.__class__.__name__])
|
|
202
|
|
203 try:
|
|
204 d['a\0b']=1
|
|
205 except Exception as e:
|
|
206 m.extend([e.__class__.__name__])
|
|
207
|
|
208 try:
|
|
209 d[b'a\0b']=1
|
|
210 except Exception as e:
|
|
211 m.extend([e.__class__.__name__])
|
|
212 EOF
|
|
213 :$put =messages
|
3828
|
214 :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 'py '.name.'=vim.bindeval("'.s.'")'
|
|
220 : let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".pyeval(name.".".v:val)'), ';')
|
|
221 : $put =toput
|
|
222 :endfor
|
|
223 :silent! let d.abc=1
|
|
224 :silent! let dl.abc=1
|
|
225 :py d.locked=True
|
|
226 :py 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 'py '.name.'=vim.bindeval("'.s.'")'
|
|
237 : let toput=s.' : locked:'.pyeval(name.'.locked')
|
|
238 : $put =toput
|
|
239 :endfor
|
|
240 :silent! call extend(l, [0])
|
|
241 :silent! call extend(ll, [0])
|
|
242 :py l.locked=True
|
|
243 :py 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
|
3618
|
249 :"
|
|
250 :" pyeval()
|
|
251 :let l=pyeval('range(3)')
|
|
252 :$put =string(l)
|
|
253 :let d=pyeval('{"a": "b", "c": 1, "d": ["e"]}')
|
|
254 :$put =sort(items(d))
|
|
255 :if has('float')
|
|
256 : let f=pyeval('0.0')
|
|
257 : $put =string(f)
|
|
258 :else
|
|
259 : $put ='0.0'
|
|
260 :endif
|
3802
|
261 :" Invalid values:
|
|
262 :for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
|
|
263 : try
|
|
264 : let v=pyeval(e)
|
|
265 : catch
|
|
266 : let toput=e.":\t".v:exception[:13]
|
|
267 : $put =toput
|
|
268 : endtry
|
|
269 :endfor
|
3618
|
270 :endfun
|
|
271 :"
|
|
272 :call Test()
|
|
273 :"
|
|
274 :delfunc Test
|
|
275 :call garbagecollect(1)
|
|
276 :"
|
|
277 :/^start:/,$wq! test.out
|
3828
|
278 :call getchar()
|
3618
|
279 ENDTEST
|
|
280
|
|
281 start:
|