Mercurial > vim
view src/testdir/test87.in @ 4221:dd4f3ceb5d86 v7.3.862
updated for version 7.3.862
Problem: Dragging the status line can be slow.
Solution: Look ahead and drop the drag event if there is a next one.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Sat, 16 Mar 2013 14:20:51 +0100 |
parents | 3b2a771abb39 |
children | f1eab4f77a6f |
line wrap: on
line source
Tests for various python features. vim: set ft=vim : STARTTEST :so small.vim :if !has('python3') | e! test.ok | wq! test.out | endif :py3 import vim :fun Test() :let l = [] :py3 l=vim.bindeval('l') :py3 f=vim.bindeval('function("strlen")') :" Extending List directly with different types :py3 l+=[1, "as'd", [1, 2, f, {'a': 1}]] :$put =string(l) :$put =string(l[-1]) :try : $put =string(l[-4]) :catch : $put =v:exception[:13] :endtry :" List assignment :py3 l[0]=0 :$put =string(l) :py3 l[-2]=f :$put =string(l) :" :" Extending Dictionary directly with different types :let d = {} :py3 d=vim.bindeval('d') :py3 d['1']='asd' :py3 d['b']=[1, 2, f] :py3 d['-1']={'a': 1} :let dkeys = [] :py3 dk=vim.bindeval('dkeys') :py3 dkeys=d.keys() :py3 dkeys.sort() :py3 dk+=dkeys :$put =string(dkeys) :for [key, val] in sort(items(d)) : $put =string(key) . ' : ' . string(val) : unlet key val :endfor :" :" removing items with del :py3 del l[2] :$put =string(l) :let l = range(8) :py3 l=vim.bindeval('l') :try : py3 del l[:3] : py3 del l[1:] :catch : $put =v:exception :endtry :$put =string(l) :" :py3 del d['-1'] :$put =string(d) :" :" removing items out of range: silently skip items that don't exist :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :" The following two ranges delete nothing as they match empty list: :py3 del l[2:1] :$put =string(l) :py3 del l[2:2] :$put =string(l) :py3 del l[2:3] :$put =string(l) :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :py3 del l[2:4] :$put =string(l) :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :py3 del l[2:5] :$put =string(l) :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :py3 del l[2:6] :$put =string(l) :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :" The following two ranges delete nothing as they match empty list: :py3 del l[-1:2] :$put =string(l) :py3 del l[-2:2] :$put =string(l) :py3 del l[-3:2] :$put =string(l) :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :py3 del l[-4:2] :$put =string(l) :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :py3 del l[-5:2] :$put =string(l) :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :py3 del l[-6:2] :$put =string(l) :" :" Slice assignment to a list :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :py3 l[0:0]=['a'] :$put =string(l) :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :py3 l[1:2]=['b'] :$put =string(l) :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :py3 l[2:4]=['c'] :$put =string(l) :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :py3 l[4:4]=['d'] :$put =string(l) :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :py3 l[-1:2]=['e'] :$put =string(l) :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :py3 l[-10:2]=['f'] :$put =string(l) :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :py3 l[2:-10]=['g'] :$put =string(l) :let l = [] :py3 l=vim.bindeval('l') :py3 l[0:0]=['h'] :$put =string(l) :" :" Locked variables :let l = [0, 1, 2, 3] :py3 l=vim.bindeval('l') :lockvar! l :py3 l[2]='i' :$put =string(l) :unlockvar! l :" :" Function calls :function New(...) :return ['NewStart']+a:000+['NewEnd'] :endfunction :function DictNew(...) dict :return ['DictNewStart']+a:000+['DictNewEnd', self] :endfunction :let l=[function('New'), function('DictNew')] :py3 l=vim.bindeval('l') :py3 l.extend(list(l[0](1, 2, 3))) :$put =string(l) :py3 l.extend(list(l[1](1, 2, 3, self={'a': 'b'}))) :$put =string(l) :py3 l+=[l[0].name] :$put =string(l) :try : py3 l[1](1, 2, 3) :catch : $put =v:exception[:13] :endtry :delfunction New :try : py3 l[0](1, 2, 3) :catch : $put =v:exception[:13] :endtry :if has('float') : let l=[0.0] : py3 l=vim.bindeval('l') : py3 l.extend([0.0]) : $put =string(l) :else : $put ='[0.0, 0.0]' :endif :let messages=[] :py3 <<EOF d=vim.bindeval('{}') m=vim.bindeval('messages') try: d['abc'] except Exception as e: m.extend([e.__class__.__name__]) try: d['abc']="\0" except Exception as e: m.extend([e.__class__.__name__]) try: d['abc']=vim except Exception as e: m.extend([e.__class__.__name__]) try: d['']=1 except Exception as e: m.extend([e.__class__.__name__]) try: d['a\0b']=1 except Exception as e: m.extend([e.__class__.__name__]) try: d[b'a\0b']=1 except Exception as e: m.extend([e.__class__.__name__]) EOF :$put =messages :unlet messages :" locked and scope attributes :let d={} | let dl={} | lockvar dl :for s in split("d dl v: g:") : let name=tr(s, ':', 's') : execute 'py3 '.name.'=vim.bindeval("'.s.'")' : let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".py3eval(name.".".v:val)'), ';') : $put =toput :endfor :silent! let d.abc=1 :silent! let dl.abc=1 :py3 d.locked=True :py3 dl.locked=False :silent! let d.def=1 :silent! let dl.def=1 :put ='d:'.string(d) :put ='dl:'.string(dl) :unlet d dl : :let l=[] | let ll=[] | lockvar ll :for s in split("l ll") : let name=tr(s, ':', 's') : execute 'py3 '.name.'=vim.bindeval("'.s.'")' : let toput=s.' : locked:'.py3eval(name.'.locked') : $put =toput :endfor :silent! call extend(l, [0]) :silent! call extend(ll, [0]) :py3 l.locked=True :py3 ll.locked=False :silent! call extend(l, [1]) :silent! call extend(ll, [1]) :put ='l:'.string(l) :put ='ll:'.string(ll) :unlet l ll :" :" py3eval() :let l=py3eval('[0, 1, 2]') :$put =string(l) :let d=py3eval('{"a": "b", "c": 1, "d": ["e"]}') :$put =sort(items(d)) :if has('float') : let f=py3eval('0.0') : $put =string(f) :else : $put ='0.0' :endif :" Invalid values: :for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim'] : try : let v=py3eval(e) : catch : let toput=e.":\t".v:exception[:13] : $put =toput : endtry :endfor :" :" threading :let l = [0] :py3 l=vim.bindeval('l') :py3 <<EOF import threading import time class T(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.t = 0 self.running = True def run(self): while self.running: self.t += 1 time.sleep(0.1) t = T() t.start() EOF :sleep 1 :py3 t.running = False :py3 t.join() :py3 l[0] = t.t > 8 # check if the background thread is working :$put =string(l) :" :" settrace :let l = [] :py3 l=vim.bindeval('l') :py3 <<EOF import sys def traceit(frame, event, arg): global l if event == "line": l += [frame.f_lineno] return traceit def trace_main(): for i in range(5): pass EOF :py3 sys.settrace(traceit) :py3 trace_main() :py3 sys.settrace(None) :$put =string(l) :endfun :" :call Test() :" :delfunc Test :call garbagecollect(1) :" :/^start:/,$wq! test.out ENDTEST start: