diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index a0884cd..14062d8 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -21,7 +21,6 @@
 # Tests that run on most systems, but not on Amiga.
 SCRIPTS_MORE1 = \
 	test52.out \
-	test86.out \
 	test87.out
 
 
diff --git a/src/testdir/Make_vms.mms b/src/testdir/Make_vms.mms
index a89bb24..ff6deb4 100644
--- a/src/testdir/Make_vms.mms
+++ b/src/testdir/Make_vms.mms
@@ -116,7 +116,7 @@
 .ENDIF
 
 .IFDEF HAVE_PYTHON
-SCRIPT_PYTHON = test86.out test87.out
+SCRIPT_PYTHON = test87.out
 .ENDIF
 
 .in.out :
diff --git a/src/testdir/test86.in b/src/testdir/test86.in
deleted file mode 100644
index e24c13d..0000000
--- a/src/testdir/test86.in
+++ /dev/null
@@ -1,1711 +0,0 @@
-Tests for various python features.     vim: set ft=vim :
-
-NOTE: This will cause errors when run under valgrind.
-This would require recompiling Python with:
-  ./configure --without-pymalloc
-See http://svn.python.org/view/python/trunk/Misc/README.valgrind?view=markup
-
-STARTTEST
-:so small.vim
-:set encoding=latin1
-:set noswapfile
-:if !has('python') || !has('quickfix') | e! test.ok | wq! test.out | endif
-:lang C
-:fun Test()
-:py import vim
-:py cb = vim.current.buffer
-:let l = []
-:py l=vim.bindeval('l')
-:py f=vim.bindeval('function("strlen")')
-:" Extending List directly with different types
-:py l.extend([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
-:py l[0]=0
-:$put =string(l)
-:py l[-2]=f
-:$put =string(l)
-:"
-:" Extending Dictionary directly with different types
-:let d = {}
-:fun d.f()
-:  return 1
-:endfun
-py << trim EOF
-  d=vim.bindeval('d')
-  d['1']='asd'
-  d.update()  # Must not do anything, including throwing errors
-  d.update(b=[1, 2, f])
-  d.update((('-1', {'a': 1}),))
-  d.update({'0': -1})
-  dk = d.keys()
-  dv = d.values()
-  di = d.items()
-  cmpfun = lambda a, b: cmp(repr(a), repr(b))
-  dk.sort(cmpfun)
-  dv.sort(cmpfun)
-  di.sort(cmpfun)
-EOF
-:$put =pyeval('d[''f''](self={})')
-:$put =pyeval('repr(dk)')
-:$put =substitute(pyeval('repr(dv)'),'0x\x\+','','g')
-:$put =substitute(pyeval('repr(di)'),'0x\x\+','','g')
-:for [key, Val] in sort(items(d))
-:  $put =string(key) . ' : ' . string(Val)
-:  unlet key Val
-:endfor
-:py del dk
-:py del di
-:py del dv
-:"
-:" removing items with del
-:py del l[2]
-:$put =string(l)
-:let l = range(8)
-:py l=vim.bindeval('l')
-:try
-:   py del l[:3]
-:   py del l[1:]
-:catch
-:   $put =v:exception
-:endtry
-:$put =string(l)
-:"
-:py del d['-1']
-:py del d['f']
-:$put =string(pyeval('d.get(''b'', 1)'))
-:$put =string(pyeval('d.pop(''b'')'))
-:$put =string(pyeval('d.get(''b'', 1)'))
-:$put =string(pyeval('d.pop(''1'', 2)'))
-:$put =string(pyeval('d.pop(''1'', 2)'))
-:$put =pyeval('repr(d.has_key(''0''))')
-:$put =pyeval('repr(d.has_key(''1''))')
-:$put =pyeval('repr(''0'' in d)')
-:$put =pyeval('repr(''1'' in d)')
-:$put =pyeval('repr(list(iter(d)))')
-:$put =string(d)
-:$put =pyeval('repr(d.popitem())')
-:$put =pyeval('repr(d.get(''0''))')
-:$put =pyeval('repr(list(iter(d)))')
-:"
-:" removing items out of range: silently skip items that don't exist
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:" The following two ranges delete nothing as they match empty list:
-:py del l[2:1]
-:$put =string(l)
-:py del l[2:2]
-:$put =string(l)
-:py del l[2:3]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py del l[2:4]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py del l[2:5]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py del l[2:6]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:" The following two ranges delete nothing as they match empty list:
-:py del l[-1:2]
-:$put =string(l)
-:py del l[-2:2]
-:$put =string(l)
-:py del l[-3:2]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py del l[-4:2]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py del l[-5:2]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py del l[-6:2]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py del l[::2]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py del l[3:0:-2]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py del l[2:4:-2]
-:$put =string(l)
-:"
-:" Slice assignment to a list
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py l[0:0]=['a']
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py l[1:2]=['b']
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py l[2:4]=['c']
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py l[4:4]=['d']
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py l[-1:2]=['e']
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py l[-10:2]=['f']
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:py l[2:-10]=['g']
-:$put =string(l)
-:let l = []
-:py l=vim.bindeval('l')
-:py l[0:0]=['h']
-:$put =string(l)
-:let l = range(8)
-:py l=vim.bindeval('l')
-:py l[2:6:2] = [10, 20]
-:$put =string(l)
-:let l = range(8)
-:py l=vim.bindeval('l')
-:py l[6:2:-2] = [10, 20]
-:$put =string(l)
-:let l = range(8)
-:py l=vim.bindeval('l')
-:py l[6:2] = ()
-:$put =string(l)
-:let l = range(8)
-:py l=vim.bindeval('l')
-:py l[6:2:1] = ()
-:$put =string(l)
-:let l = range(8)
-:py l=vim.bindeval('l')
-:py l[2:2:1] = ()
-:$put =string(l)
-:"
-:" Locked variables
-:let l = [0, 1, 2, 3]
-:py l=vim.bindeval('l')
-:lockvar! l
-py << trim EOF
-  def emsg(ei):
-      return ei[0].__name__ + ':' + repr(ei[1].args)
-
-  try:
-      l[2]='i'
-  except vim.error:
-      cb.append('l[2] threw vim.error: ' + emsg(sys.exc_info()))
-EOF
-:$put =string(l)
-:unlockvar! l
-:"
-:" Function calls
-py << trim EOF
-  import sys
-  def ee(expr, g=globals(), l=locals()):
-      try:
-          exec(expr, g, l)
-      except:
-          ei = sys.exc_info()
-          msg = emsg(ei)
-          msg = msg.replace('TypeError:(\'argument 1 ', 'TypeError:(\'')
-          if expr.find('None') > -1:
-              msg = msg.replace('TypeError:(\'iteration over non-sequence\',)',
-                                'TypeError:("\'NoneType\' object is not iterable",)')
-          if expr.find('FailingNumber') > -1:
-              msg = msg.replace(', not \'FailingNumber\'', '').replace('"', '\'')
-              msg = msg.replace('TypeError:(\'iteration over non-sequence\',)',
-                                'TypeError:("\'FailingNumber\' object is not iterable",)')
-          if msg.find('(\'\'') > -1 or msg.find('(\'can\'t') > -1:
-              msg = msg.replace('(\'', '("').replace('\',)', '",)')
-          # Some Python versions say can't, others cannot.
-          if msg.find('can\'t') > -1:
-              msg = msg.replace('can\'t', 'cannot')
-          # Some Python versions use single quote, some double quote
-          if msg.find('"cannot ') > -1:
-              msg = msg.replace('"cannot ', '\'cannot ')
-          if msg.find(' attributes"') > -1:
-              msg = msg.replace(' attributes"', ' attributes\'')
-          if expr == 'fd(self=[])':
-              # HACK: PyMapping_Check changed meaning
-              msg = msg.replace('AttributeError:(\'keys\',)',
-                                'TypeError:(\'unable to convert list to vim dictionary\',)')
-          vim.current.buffer.append(expr + ':' + msg)
-      else:
-          vim.current.buffer.append(expr + ':NOT FAILED')
-EOF
-:fun New(...)
-:   return ['NewStart']+a:000+['NewEnd']
-:endfun
-:fun DictNew(...) dict
-:   return ['DictNewStart']+a:000+['DictNewEnd', self]
-:endfun
-:let l=[function('New'), function('DictNew')]
-:py l=vim.bindeval('l')
-:py l.extend(list(l[0](1, 2, 3)))
-:$put =string(l)
-:py l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
-:$put =string(l)
-:py l.extend([l[0].name])
-:$put =string(l)
-:py ee('l[1](1, 2, 3)')
-:py f=l[0]
-:delfunction New
-:py ee('f(1, 2, 3)')
-:if has('float')
-:   let l=[0.0]
-:   py l=vim.bindeval('l')
-:   py l.extend([0.0])
-:   $put =string(l)
-:else
-:   $put ='[0.0, 0.0]'
-:endif
-:let messages=[]
-:delfunction DictNew
-py << trim EOF
-  d=vim.bindeval('{}')
-  m=vim.bindeval('messages')
-  def em(expr, g=globals(), l=locals()):
-      try:
-          exec(expr, g, l)
-      except:
-          m.extend([sys.exc_type.__name__])
-
-  em('d["abc1"]')
-  em('d["abc1"]="\\0"')
-  em('d["abc1"]=vim')
-  em('d[""]=1')
-  em('d["a\\0b"]=1')
-  em('d[u"a\\0b"]=1')
-
-  em('d.pop("abc1")')
-  em('d.popitem()')
-  del em
-  del m
-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 'py '.name.'=vim.bindeval("'.s.'")'
-:    let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".pyeval(name.".".v:val)'), ';')
-:    $put =toput
-:endfor
-:silent! let d.abc2=1
-:silent! let dl.abc3=1
-:py d.locked=True
-:py 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 'py '.name.'=vim.bindeval("'.s.'")'
-:    let toput=s.' : locked:'.pyeval(name.'.locked')
-:    $put =toput
-:endfor
-:silent! call extend(l, [0])
-:silent! call extend(ll, [0])
-:py l.locked=True
-:py ll.locked=False
-:silent! call extend(l, [1])
-:silent! call extend(ll, [1])
-:put ='l:'.string(l)
-:put ='ll:'.string(ll)
-:unlet l ll
-:"
-:" pyeval()
-:let l=pyeval('range(3)')
-:$put =string(l)
-:let d=pyeval('{"a": "b", "c": 1, "d": ["e"]}')
-:$put =sort(items(d))
-:let v:errmsg = ''
-:$put ='pyeval(\"None\") = ' . pyeval('None') . v:errmsg
-:if has('float')
-:   let f=pyeval('0.0')
-:   $put =string(f)
-:else
-:   $put ='0.0'
-:endif
-:" Invalid values:
-:for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
-:   try
-:      let v=pyeval(e)
-:   catch
-:      let toput=e.":\t".v:exception[:13]
-:      $put =toput
-:   endtry
-:endfor
-:"
-:" threading
-:let l = [0]
-:py l=vim.bindeval('l')
-py << trim 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()
-  del T
-  t.start()
-EOF
-:sleep 1
-:py t.running = False
-:py t.join()
-:" Check if the background thread is working.  Count should be 10, but on a
-:" busy system (AppVeyor) it can be much lower.
-:py l[0] = t.t > 4
-:py del time
-:py del threading
-:py del t
-:$put =string(l)
-:"
-:" settrace
-:let l = []
-:py l=vim.bindeval('l')
-py << trim EOF
-  import sys
-
-  def traceit(frame, event, arg):
-      global l
-      if event == "line":
-          l.extend([frame.f_lineno])
-      return traceit
-
-  def trace_main():
-      for i in range(5):
-          pass
-EOF
-:py sys.settrace(traceit)
-:py trace_main()
-:py sys.settrace(None)
-:py del traceit
-:py del trace_main
-:$put =string(l)
-:"
-:" Slice
-:py ll = vim.bindeval('[0, 1, 2, 3, 4, 5]')
-:py l = ll[:4]
-:$put =string(pyeval('l'))
-:py l = ll[2:]
-:$put =string(pyeval('l'))
-:py l = ll[:-4]
-:$put =string(pyeval('l'))
-:py l = ll[-2:]
-:$put =string(pyeval('l'))
-:py l = ll[2:4]
-:$put =string(pyeval('l'))
-:py l = ll[4:2]
-:$put =string(pyeval('l'))
-:py l = ll[-4:-2]
-:$put =string(pyeval('l'))
-:py l = ll[-2:-4]
-:$put =string(pyeval('l'))
-:py l = ll[:]
-:$put =string(pyeval('l'))
-:py l = ll[0:6]
-:$put =string(pyeval('l'))
-:py l = ll[-10:10]
-:$put =string(pyeval('l'))
-:py l = ll[4:2:-1]
-:$put =string(pyeval('l'))
-:py l = ll[::2]
-:$put =string(pyeval('l'))
-:py l = ll[4:2:1]
-:$put =string(pyeval('l'))
-:py del l
-:"
-:" Vars
-:let g:foo = 'bac'
-:let w:abc3 = 'def'
-:let b:baz = 'bar'
-:let t:bar = 'jkl'
-:try
-:  throw "Abc"
-:catch
-:  put =pyeval('vim.vvars[''exception'']')
-:endtry
-:put =pyeval('vim.vars[''foo'']')
-:put =pyeval('vim.current.window.vars[''abc3'']')
-:put =pyeval('vim.current.buffer.vars[''baz'']')
-:put =pyeval('vim.current.tabpage.vars[''bar'']')
-:"
-:" Options
-:" paste:          boolean, global
-:" previewheight   number,  global
-:" operatorfunc:   string,  global
-:" number:         boolean, window-local
-:" numberwidth:    number,  window-local
-:" colorcolumn:    string,  window-local
-:" statusline:     string,  window-local/global
-:" autoindent:     boolean, buffer-local
-:" shiftwidth:     number,  buffer-local
-:" omnifunc:       string,  buffer-local
-:" preserveindent: boolean, buffer-local/global
-:" path:           string,  buffer-local/global
-:let g:bufs=[bufnr('%')]
-:new
-:let g:bufs+=[bufnr('%')]
-:vnew
-:let g:bufs+=[bufnr('%')]
-:wincmd j
-:vnew
-:let g:bufs+=[bufnr('%')]
-:wincmd l
-:fun RecVars(opt)
-:  let gval =string(eval('&g:'.a:opt))
-:  let wvals=join(map(range(1, 4),  'v:val.":".string(getwinvar(v:val, "&".a:opt))'))
-:  let bvals=join(map(copy(g:bufs), 'v:val.":".string(getbufvar(v:val, "&".a:opt))'))
-:  put ='  G: '.gval
-:  put ='  W: '.wvals
-:  put ='  B: '.wvals
-:endfun
-py << trim EOF
-  def e(s, g=globals(), l=locals()):
-      try:
-          exec(s, g, l)
-      except:
-          vim.command('return ' + repr(sys.exc_type.__name__))
-
-  def ev(s, g=globals(), l=locals()):
-      try:
-          return eval(s, g, l)
-      except:
-          vim.command('let exc=' + repr(sys.exc_type.__name__))
-          return 0
-EOF
-:fun E(s)
-:   python e(vim.eval('a:s'))
-:endfun
-:fun Ev(s)
-:   let r=pyeval('ev(vim.eval("a:s"))')
-:   if exists('exc')
-:       throw exc
-:   endif
-:   return r
-:endfun
-:py gopts1=vim.options
-:py wopts1=vim.windows[2].options
-:py wopts2=vim.windows[0].options
-:py wopts3=vim.windows[1].options
-:py bopts1=vim.buffers[vim.bindeval("g:bufs")[2]].options
-:py bopts2=vim.buffers[vim.bindeval("g:bufs")[1]].options
-:py bopts3=vim.buffers[vim.bindeval("g:bufs")[0]].options
-:$put ='wopts iters equal: '.pyeval('list(wopts1) == list(wopts2)')
-:$put ='bopts iters equal: '.pyeval('list(bopts1) == list(bopts2)')
-:py gset=set(iter(gopts1))
-:py wset=set(iter(wopts1))
-:py bset=set(iter(bopts1))
-:set path=.,..,,
-:let lst=[]
-:let lst+=[['paste',          1,     0,     1,     2,      1,    1,      0    ]]
-:let lst+=[['previewheight',  5,     1,     6,     'a',    0,    1,      0    ]]
-:let lst+=[['operatorfunc',   'A',   'B',   'C',   2,      0,    1,      0    ]]
-:let lst+=[['number',         0,     1,     1,     0,      1,    0,      1    ]]
-:let lst+=[['numberwidth',    2,     3,     5,     -100,   0,    0,      1    ]]
-:let lst+=[['colorcolumn',    '+1',  '+2',  '+3',  'abc4',  0,    0,      1    ]]
-:let lst+=[['statusline',     '1',   '2',   '4',   0,      0,    1,      1    ]]
-:let lst+=[['autoindent',     0,     1,     1,     2,      1,    0,      2    ]]
-:let lst+=[['shiftwidth',     0,     2,     1,     3,      0,    0,      2    ]]
-:let lst+=[['omnifunc',       'A',   'B',   'C',   1,      0,    0,      2    ]]
-:let lst+=[['preserveindent', 0,     1,     1,     2,      1,    1,      2    ]]
-:let lst+=[['path',           '.,,', ',,',  '.',   0,      0,    1,      2    ]]
-:for       [oname,            oval1, oval2, oval3, invval, bool, global, local] in lst
-:   py oname=vim.eval('oname')
-:   py oval1=vim.bindeval('oval1')
-:   py oval2=vim.bindeval('oval2')
-:   py oval3=vim.bindeval('oval3')
-:   if invval is 0 || invval is 1
-:       py invval=bool(vim.bindeval('invval'))
-:   else
-:       py invval=vim.bindeval('invval')
-:   endif
-:   if bool
-:       py oval1=bool(oval1)
-:       py oval2=bool(oval2)
-:       py oval3=bool(oval3)
-:   endif
-:   put ='>>> '.oname
-:   $put ='  g/w/b:'.pyeval('oname in gset').'/'.pyeval('oname in wset').'/'.pyeval('oname in bset')
-:   $put ='  g/w/b (in):'.pyeval('oname in gopts1').'/'.pyeval('oname in wopts1').'/'.pyeval('oname in bopts1')
-:   for v in ['gopts1', 'wopts1', 'bopts1']
-:       try
-:           put ='  p/'.v.': '.Ev('repr('.v.'['''.oname.'''])')
-:       catch
-:           put ='  p/'.v.'! '.v:exception
-:       endtry
-:       let r=E(v.'['''.oname.''']=invval')
-:       if r isnot 0
-:           put ='  inv: '.string(invval).'! '.r
-:       endif
-:       for vv in (v is# 'gopts1' ? [v] : [v, v[:-2].'2', v[:-2].'3'])
-:           let val=substitute(vv, '^.opts', 'oval', '')
-:           let r=E(vv.'['''.oname.''']='.val)
-:           if r isnot 0
-:               put ='  '.vv.'! '.r
-:           endif
-:       endfor
-:   endfor
-:   call RecVars(oname)
-:   for v in ['wopts3', 'bopts3']
-:       let r=E('del '.v.'["'.oname.'"]')
-:       if r isnot 0
-:           put ='  del '.v.'! '.r
-:       endif
-:   endfor
-:   call RecVars(oname)
-:endfor
-:delfunction RecVars
-:delfunction E
-:delfunction Ev
-:py del ev
-:py del e
-:only
-:for buf in g:bufs[1:]
-:   execute 'bwipeout!' buf
-:endfor
-:py del gopts1
-:py del wopts1
-:py del wopts2
-:py del wopts3
-:py del bopts1
-:py del bopts2
-:py del bopts3
-:py del oval1
-:py del oval2
-:py del oval3
-:py del oname
-:py del invval
-:"
-:" Test buffer object
-:vnew
-:put ='First line'
-:put ='Second line'
-:put ='Third line'
-:1 delete _
-:py b=vim.current.buffer
-:wincmd w
-:mark a
-:augroup BUFS
-:   autocmd BufFilePost * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePost:' + vim.eval('bufnr("%")'))
-:   autocmd BufFilePre * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePre:' + vim.eval('bufnr("%")'))
-:augroup END
-py << trim EOF
-  # Tests BufferAppend and BufferItem
-  cb.append(b[0])
-  # Tests BufferSlice and BufferAssSlice
-  cb.append('abc5') # Will be overwritten
-  cb[-1:] = b[:-2]
-  # Test BufferLength and BufferAssSlice
-  cb.append('def') # Will not be overwritten
-  cb[len(cb):] = b[:]
-  # Test BufferAssItem and BufferMark
-  cb.append('ghi') # Will be overwritten
-  cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1]))
-  # Test BufferRepr
-  cb.append(repr(cb) + repr(b))
-  # Modify foreign buffer
-  b.append('foo')
-  b[0]='bar'
-  b[0:0]=['baz']
-  vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number)
-  # Test assigning to name property
-  import os
-  old_name = cb.name
-  cb.name = 'foo'
-  cb.append(cb.name[-11:].replace(os.path.sep, '/'))
-  b.name = 'bar'
-  cb.append(b.name[-11:].replace(os.path.sep, '/'))
-  cb.name = old_name
-  cb.append(cb.name[-17:].replace(os.path.sep, '/'))
-  del old_name
-  # Test CheckBuffer
-  for _b in vim.buffers:
-      if _b is not cb:
-          vim.command('bwipeout! ' + str(_b.number))
-  del _b
-  cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid)))
-  for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc6")', 'b.name = "!"'):
-      try:
-          exec(expr)
-      except vim.error:
-          pass
-      else:
-          # Usually a SEGV here
-          # Should not happen in any case
-          cb.append('No exception for ' + expr)
-  vim.command('cd .')
-  del b
-EOF
-:augroup BUFS
-:   autocmd!
-:augroup END
-:augroup! BUFS
-:"
-:" Test vim.buffers object
-:set hidden
-:edit a
-:buffer #
-:edit b
-:buffer #
-:edit c
-:buffer #
-py << trim EOF
-  try:
-      from __builtin__ import next
-  except ImportError:
-      next = lambda o: o.next()
-  # Check GCing iterator that was not fully exhausted
-  i = iter(vim.buffers)
-  cb.append('i:' + str(next(i)))
-  # and also check creating more than one iterator at a time
-  i2 = iter(vim.buffers)
-  cb.append('i2:' + str(next(i2)))
-  cb.append('i:' + str(next(i)))
-  # The following should trigger GC and not cause any problems
-  del i
-  del i2
-  i3 = iter(vim.buffers)
-  cb.append('i3:' + str(next(i3)))
-  del i3
-
-  prevnum = 0
-  for b in vim.buffers:
-      # Check buffer order
-      if prevnum >= b.number:
-          cb.append('!!! Buffer numbers not in strictly ascending order')
-      # Check indexing: vim.buffers[number].number == number
-      cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + '=' + repr(b))
-      prevnum = b.number
-  del prevnum
-
-  cb.append(str(len(vim.buffers)))
-
-  bnums = list(map(lambda b: b.number, vim.buffers))[1:]
-
-  # Test wiping out buffer with existing iterator
-  i4 = iter(vim.buffers)
-  cb.append('i4:' + str(next(i4)))
-  vim.command('bwipeout! ' + str(bnums.pop(0)))
-  try:
-      next(i4)
-  except vim.error:
-      pass
-  else:
-      cb.append('!!!! No vim.error')
-  i4 = iter(vim.buffers)
-  vim.command('bwipeout! ' + str(bnums.pop(-1)))
-  vim.command('bwipeout! ' + str(bnums.pop(-1)))
-  cb.append('i4:' + str(next(i4)))
-  try:
-      next(i4)
-  except StopIteration:
-      cb.append('StopIteration')
-  del i4
-  del bnums
-EOF
-:"
-:" Test vim.{tabpage,window}list and vim.{tabpage,window} objects
-:tabnew 0
-:tabnew 1
-:vnew a.1
-:tabnew 2
-:vnew a.2
-:vnew b.2
-:vnew c.2
-py << trim EOF
-  cb.append('Number of tabs: ' + str(len(vim.tabpages)))
-  cb.append('Current tab pages:')
-  def W(w):
-      if repr(w).find('(unknown)') != -1:
-          return '<window object (unknown)>'
-      else:
-          return repr(w)
-
-  start = len(cb)
-
-  def Cursor(w):
-      if w.buffer is cb:
-          return repr((start - w.cursor[0], w.cursor[1]))
-      else:
-          return repr(w.cursor)
-
-  for t in vim.tabpages:
-      cb.append('  ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window))
-      cb.append('  Windows:')
-      for w in t.windows:
-          cb.append('    ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + Cursor(w))
-          # Other values depend on the size of the terminal, so they are checked partly:
-          for attr in ('height', 'row', 'width', 'col'):
-              try:
-                  aval = getattr(w, attr)
-                  if type(aval) is not long:
-                      raise TypeError
-                  if aval < 0:
-                      raise ValueError
-              except Exception:
-                  cb.append('!!!!!! Error while getting attribute ' + attr + ': ' + sys.exc_type.__name__)
-          del aval
-          del attr
-          w.cursor = (len(w.buffer), 0)
-  del W
-  del Cursor
-  cb.append('Number of windows in current tab page: ' + str(len(vim.windows)))
-  if list(vim.windows) != list(vim.current.tabpage.windows):
-      cb.append('!!!!!! Windows differ')
-EOF
-:"
-:" Test vim.current
-py << trim EOF
-  def H(o):
-      return repr(o)
-  cb.append('Current tab page: ' + repr(vim.current.tabpage))
-  cb.append('Current window: ' + repr(vim.current.window) + ': ' + H(vim.current.window) + ' is ' + H(vim.current.tabpage.window))
-  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))
-  del H
-  # Assigning: fails
-  try:
-      vim.current.window = vim.tabpages[0].window
-  except ValueError:
-      cb.append('ValueError at assigning foreign tab window')
-
-  for attr in ('window', 'tabpage', 'buffer'):
-      try:
-          setattr(vim.current, attr, None)
-      except TypeError:
-          cb.append('Type error at assigning None to vim.current.' + attr)
-  del attr
-
-  # Assigning: success
-  vim.current.tabpage = vim.tabpages[-2]
-  vim.current.buffer = cb
-  vim.current.window = vim.windows[0]
-  vim.current.window.cursor = (len(vim.current.buffer), 0)
-  cb.append('Current tab page: ' + repr(vim.current.tabpage))
-  cb.append('Current window: ' + repr(vim.current.window))
-  cb.append('Current buffer: ' + repr(vim.current.buffer))
-  cb.append('Current line: ' + repr(vim.current.line))
-  ws = list(vim.windows)
-  ts = list(vim.tabpages)
-  for b in vim.buffers:
-      if b is not cb:
-          vim.command('bwipeout! ' + str(b.number))
-  del b
-  cb.append('w.valid: ' + repr([w.valid for w in ws]))
-  cb.append('t.valid: ' + repr([t.valid for t in ts]))
-  del w
-  del t
-  del ts
-  del ws
-EOF
-:tabonly!
-:only!
-:"
-:" Test types
-py << trim EOF
-  for expr, attr in (
-      ('vim.vars',                         'Dictionary'),
-      ('vim.options',                      'Options'),
-      ('vim.bindeval("{}")',               'Dictionary'),
-      ('vim.bindeval("[]")',               'List'),
-      ('vim.bindeval("function(\'tr\')")', 'Function'),
-      ('vim.current.buffer',               'Buffer'),
-      ('vim.current.range',                'Range'),
-      ('vim.current.window',               'Window'),
-      ('vim.current.tabpage',              'TabPage'),
-  ):
-      cb.append(expr + ':' + attr + ':' + repr(type(eval(expr)) is getattr(vim, attr)))
-  del expr
-  del attr
-EOF
-:"
-:" Test __dir__() method
-py << trim EOF
-  for name, o in (
-          ('current',    vim.current),
-          ('buffer',     vim.current.buffer),
-          ('window',     vim.current.window),
-          ('tabpage',    vim.current.tabpage),
-          ('range',      vim.current.range),
-          ('dictionary', vim.bindeval('{}')),
-          ('list',       vim.bindeval('[]')),
-          ('function',   vim.bindeval('function("tr")')),
-          ('output',     sys.stdout),
-      ):
-      cb.append(name + ':' + ','.join(dir(o)))
-  del name
-  del o
-EOF
-:"
-:" Test vim.*.__new__
-:$put =string(pyeval('vim.Dictionary({})'))
-:$put =string(pyeval('vim.Dictionary(a=1)'))
-:$put =string(pyeval('vim.Dictionary(((''a'', 1),))'))
-:$put =string(pyeval('vim.List()'))
-:$put =string(pyeval('vim.List(iter(''abc7''))'))
-:$put =string(pyeval('vim.Function(''tr'')'))
-:$put =string(pyeval('vim.Function(''tr'', args=[123, 3, 4])'))
-:$put =string(pyeval('vim.Function(''tr'', args=[])'))
-:$put =string(pyeval('vim.Function(''tr'', self={})'))
-:$put =string(pyeval('vim.Function(''tr'', args=[123, 3, 4], self={})'))
-:$put ='auto_rebind'
-:$put =string(pyeval('vim.Function(''tr'', auto_rebind=False)'))
-:$put =string(pyeval('vim.Function(''tr'', args=[123, 3, 4], auto_rebind=False)'))
-:$put =string(pyeval('vim.Function(''tr'', args=[], auto_rebind=False)'))
-:$put =string(pyeval('vim.Function(''tr'', self={}, auto_rebind=False)'))
-:$put =string(pyeval('vim.Function(''tr'', args=[123, 3, 4], self={}, auto_rebind=False)'))
-:"
-:" Test vim.Function
-:function Args(...)
-:   return a:000
-:endfunction
-:function SelfArgs(...) dict
-:   return [a:000, self]
-:endfunction
-:" The following four lines should not crash
-:let Pt = function('tr', [[]], {'l': []})
-:py Pt = vim.bindeval('Pt')
-:unlet Pt
-:py del Pt
-py << trim EOF
-  def ecall(out_prefix, func, *args, **kwargs):
-      line = out_prefix + ': '
-      try:
-          ret = func(*args, **kwargs)
-      except Exception:
-          line += '!exception: ' + emsg(sys.exc_info())
-      else:
-          line += '!result: ' + vim.Function('string')(ret)
-      cb.append(line)
-  a = vim.Function('Args')
-  pa1 = vim.Function('Args', args=['abcArgsPA1'])
-  pa2 = vim.Function('Args', args=[])
-  pa3 = vim.Function('Args', args=['abcArgsPA3'], self={'abcSelfPA3': 'abcSelfPA3Val'})
-  pa4 = vim.Function('Args', self={'abcSelfPA4': 'abcSelfPA4Val'})
-  cb.append('a: ' + repr(a))
-  cb.append('pa1: ' + repr(pa1))
-  cb.append('pa2: ' + repr(pa2))
-  cb.append('pa3: ' + repr(pa3))
-  cb.append('pa4: ' + repr(pa4))
-  sa = vim.Function('SelfArgs')
-  psa1 = vim.Function('SelfArgs', args=['abcArgsPSA1'])
-  psa2 = vim.Function('SelfArgs', args=[])
-  psa3 = vim.Function('SelfArgs', args=['abcArgsPSA3'], self={'abcSelfPSA3': 'abcSelfPSA3Val'})
-  psa4 = vim.Function('SelfArgs', self={'abcSelfPSA4': 'abcSelfPSA4Val'})
-  psa5 = vim.Function('SelfArgs', self={'abcSelfPSA5': 'abcSelfPSA5Val'}, auto_rebind=0)
-  psa6 = vim.Function('SelfArgs', args=['abcArgsPSA6'], self={'abcSelfPSA6': 'abcSelfPSA6Val'}, auto_rebind=())
-  psa7 = vim.Function('SelfArgs', args=['abcArgsPSA7'], auto_rebind=[])
-  psa8 = vim.Function('SelfArgs', auto_rebind=False)
-  psa9 = vim.Function('SelfArgs', self={'abcSelfPSA9': 'abcSelfPSA9Val'}, auto_rebind=True)
-  psaA = vim.Function('SelfArgs', args=['abcArgsPSAA'], self={'abcSelfPSAA': 'abcSelfPSAAVal'}, auto_rebind=1)
-  psaB = vim.Function('SelfArgs', args=['abcArgsPSAB'], auto_rebind={'abcARPSAB': 'abcARPSABVal'})
-  psaC = vim.Function('SelfArgs', auto_rebind=['abcARPSAC'])
-  cb.append('sa: ' + repr(sa))
-  cb.append('psa1: ' + repr(psa1))
-  cb.append('psa2: ' + repr(psa2))
-  cb.append('psa3: ' + repr(psa3))
-  cb.append('psa4: ' + repr(psa4))
-  cb.append('psa5: ' + repr(psa5))
-  cb.append('psa6: ' + repr(psa6))
-  cb.append('psa7: ' + repr(psa7))
-  cb.append('psa8: ' + repr(psa8))
-  cb.append('psa9: ' + repr(psa9))
-  cb.append('psaA: ' + repr(psaA))
-  cb.append('psaB: ' + repr(psaB))
-  cb.append('psaC: ' + repr(psaC))
-
-  psar = vim.Function('SelfArgs', args=[{'abcArgsPSAr': 'abcArgsPSArVal'}], self={'abcSelfPSAr': 'abcSelfPSArVal'})
-  psar.args[0]['abcArgsPSAr2'] = [psar.self, psar.args[0]]
-  psar.self['rec'] = psar
-  psar.self['self'] = psar.self
-  psar.self['args'] = psar.args
-
-  try:
-      cb.append('psar: ' + repr(psar))
-  except Exception:
-      cb.append('!!!!!!!! Caught exception: ' + emsg(sys.exc_info()))
-EOF
-:$put ='s(a): '.string(pyeval('a'))
-:$put ='s(pa1): '.string(pyeval('pa1'))
-:$put ='s(pa2): '.string(pyeval('pa2'))
-:$put ='s(pa3): '.string(pyeval('pa3'))
-:$put ='s(pa4): '.string(pyeval('pa4'))
-:$put ='s(sa): '.string(pyeval('sa'))
-:$put ='s(psa1): '.string(pyeval('psa1'))
-:$put ='s(psa2): '.string(pyeval('psa2'))
-:$put ='s(psa3): '.string(pyeval('psa3'))
-:$put ='s(psa4): '.string(pyeval('psa4'))
-:$put ='s(psa5): '.string(pyeval('psa5'))
-:$put ='s(psa6): '.string(pyeval('psa6'))
-:$put ='s(psa7): '.string(pyeval('psa7'))
-:$put ='s(psa8): '.string(pyeval('psa8'))
-:$put ='s(psa9): '.string(pyeval('psa9'))
-:$put ='s(psaA): '.string(pyeval('psaA'))
-:$put ='s(psaB): '.string(pyeval('psaB'))
-:$put ='s(psaC): '.string(pyeval('psaC'))
-:
-:for v in ['sa', 'psa1', 'psa2', 'psa3', 'psa4', 'psa5', 'psa6', 'psa7', 'psa8', 'psa9', 'psaA', 'psaB', 'psaC']
-:   let d = {'f': pyeval(v)}
-:   $put ='d.'.v.'(): '.string(d.f())
-:endfor
-:
-:py ecall('a()', a, )
-:py ecall('pa1()', pa1, )
-:py ecall('pa2()', pa2, )
-:py ecall('pa3()', pa3, )
-:py ecall('pa4()', pa4, )
-:py ecall('sa()', sa, )
-:py ecall('psa1()', psa1, )
-:py ecall('psa2()', psa2, )
-:py ecall('psa3()', psa3, )
-:py ecall('psa4()', psa4, )
-:
-:py ecall('a(42, 43)', a, 42, 43)
-:py ecall('pa1(42, 43)', pa1, 42, 43)
-:py ecall('pa2(42, 43)', pa2, 42, 43)
-:py ecall('pa3(42, 43)', pa3, 42, 43)
-:py ecall('pa4(42, 43)', pa4, 42, 43)
-:py ecall('sa(42, 43)', sa, 42, 43)
-:py ecall('psa1(42, 43)', psa1, 42, 43)
-:py ecall('psa2(42, 43)', psa2, 42, 43)
-:py ecall('psa3(42, 43)', psa3, 42, 43)
-:py ecall('psa4(42, 43)', psa4, 42, 43)
-:
-:py ecall('a(42, self={"20": 1})', a, 42, self={'20': 1})
-:py ecall('pa1(42, self={"20": 1})', pa1, 42, self={'20': 1})
-:py ecall('pa2(42, self={"20": 1})', pa2, 42, self={'20': 1})
-:py ecall('pa3(42, self={"20": 1})', pa3, 42, self={'20': 1})
-:py ecall('pa4(42, self={"20": 1})', pa4, 42, self={'20': 1})
-:py ecall('sa(42, self={"20": 1})', sa, 42, self={'20': 1})
-:py ecall('psa1(42, self={"20": 1})', psa1, 42, self={'20': 1})
-:py ecall('psa2(42, self={"20": 1})', psa2, 42, self={'20': 1})
-:py ecall('psa3(42, self={"20": 1})', psa3, 42, self={'20': 1})
-:py ecall('psa4(42, self={"20": 1})', psa4, 42, self={'20': 1})
-:
-:py ecall('a(self={"20": 1})', a, self={'20': 1})
-:py ecall('pa1(self={"20": 1})', pa1, self={'20': 1})
-:py ecall('pa2(self={"20": 1})', pa2, self={'20': 1})
-:py ecall('pa3(self={"20": 1})', pa3, self={'20': 1})
-:py ecall('pa4(self={"20": 1})', pa4, self={'20': 1})
-:py ecall('sa(self={"20": 1})', sa, self={'20': 1})
-:py ecall('psa1(self={"20": 1})', psa1, self={'20': 1})
-:py ecall('psa2(self={"20": 1})', psa2, self={'20': 1})
-:py ecall('psa3(self={"20": 1})', psa3, self={'20': 1})
-:py ecall('psa4(self={"20": 1})', psa4, self={'20': 1})
-py << trim EOF
-  def s(v):
-      if v is None:
-          return repr(v)
-      else:
-          return vim.Function('string')(v)
-
-  cb.append('a.args: ' + s(a.args))
-  cb.append('pa1.args: ' + s(pa1.args))
-  cb.append('pa2.args: ' + s(pa2.args))
-  cb.append('pa3.args: ' + s(pa3.args))
-  cb.append('pa4.args: ' + s(pa4.args))
-  cb.append('sa.args: ' + s(sa.args))
-  cb.append('psa1.args: ' + s(psa1.args))
-  cb.append('psa2.args: ' + s(psa2.args))
-  cb.append('psa3.args: ' + s(psa3.args))
-  cb.append('psa4.args: ' + s(psa4.args))
-
-  cb.append('a.self: ' + s(a.self))
-  cb.append('pa1.self: ' + s(pa1.self))
-  cb.append('pa2.self: ' + s(pa2.self))
-  cb.append('pa3.self: ' + s(pa3.self))
-  cb.append('pa4.self: ' + s(pa4.self))
-  cb.append('sa.self: ' + s(sa.self))
-  cb.append('psa1.self: ' + s(psa1.self))
-  cb.append('psa2.self: ' + s(psa2.self))
-  cb.append('psa3.self: ' + s(psa3.self))
-  cb.append('psa4.self: ' + s(psa4.self))
-
-  cb.append('a.name: ' + s(a.name))
-  cb.append('pa1.name: ' + s(pa1.name))
-  cb.append('pa2.name: ' + s(pa2.name))
-  cb.append('pa3.name: ' + s(pa3.name))
-  cb.append('pa4.name: ' + s(pa4.name))
-  cb.append('sa.name: ' + s(sa.name))
-  cb.append('psa1.name: ' + s(psa1.name))
-  cb.append('psa2.name: ' + s(psa2.name))
-  cb.append('psa3.name: ' + s(psa3.name))
-  cb.append('psa4.name: ' + s(psa4.name))
-
-  cb.append('a.auto_rebind: ' + s(a.auto_rebind))
-  cb.append('pa1.auto_rebind: ' + s(pa1.auto_rebind))
-  cb.append('pa2.auto_rebind: ' + s(pa2.auto_rebind))
-  cb.append('pa3.auto_rebind: ' + s(pa3.auto_rebind))
-  cb.append('pa4.auto_rebind: ' + s(pa4.auto_rebind))
-  cb.append('sa.auto_rebind: ' + s(sa.auto_rebind))
-  cb.append('psa1.auto_rebind: ' + s(psa1.auto_rebind))
-  cb.append('psa2.auto_rebind: ' + s(psa2.auto_rebind))
-  cb.append('psa3.auto_rebind: ' + s(psa3.auto_rebind))
-  cb.append('psa4.auto_rebind: ' + s(psa4.auto_rebind))
-  cb.append('psa5.auto_rebind: ' + s(psa5.auto_rebind))
-  cb.append('psa6.auto_rebind: ' + s(psa6.auto_rebind))
-  cb.append('psa7.auto_rebind: ' + s(psa7.auto_rebind))
-  cb.append('psa8.auto_rebind: ' + s(psa8.auto_rebind))
-  cb.append('psa9.auto_rebind: ' + s(psa9.auto_rebind))
-  cb.append('psaA.auto_rebind: ' + s(psaA.auto_rebind))
-  cb.append('psaB.auto_rebind: ' + s(psaB.auto_rebind))
-  cb.append('psaC.auto_rebind: ' + s(psaC.auto_rebind))
-
-  del s
-
-  del a
-  del pa1
-  del pa2
-  del pa3
-  del pa4
-  del sa
-  del psa1
-  del psa2
-  del psa3
-  del psa4
-  del psa5
-  del psa6
-  del psa7
-  del psa8
-  del psa9
-  del psaA
-  del psaB
-  del psaC
-  del psar
-
-  del ecall
-EOF
-:"
-:" Test stdout/stderr
-:redir => messages
-:py sys.stdout.write('abc8') ; sys.stdout.write('def')
-:py sys.stderr.write('abc9') ; sys.stderr.write('def')
-:py sys.stdout.writelines(iter('abcA'))
-:py sys.stderr.writelines(iter('abcB'))
-:redir END
-:$put =string(substitute(messages, '\d\+', '', 'g'))
-:" Test subclassing
-:fun Put(...)
-:   $put =string(a:000)
-:   return a:000
-:endfun
-py << trim EOF
-  class DupDict(vim.Dictionary):
-      def __setitem__(self, key, value):
-          super(DupDict, self).__setitem__(key, value)
-          super(DupDict, self).__setitem__('dup_' + key, value)
-  dd = DupDict()
-  dd['a'] = 'b'
-
-  class DupList(vim.List):
-      def __getitem__(self, idx):
-          return [super(DupList, self).__getitem__(idx)] * 2
-
-  dl = DupList()
-  dl2 = DupList(iter('abcC'))
-  dl.extend(dl2[0])
-
-  class DupFun(vim.Function):
-      def __call__(self, arg):
-          return super(DupFun, self).__call__(arg, arg)
-
-  df = DupFun('Put')
-EOF
-:$put =string(sort(keys(pyeval('dd'))))
-:$put =string(pyeval('dl'))
-:$put =string(pyeval('dl2'))
-:$put =string(pyeval('df(2)'))
-:$put =string(pyeval('dl') is# pyeval('dl'))
-:$put =string(pyeval('dd') is# pyeval('dd'))
-:$put =string(pyeval('df'))
-:delfunction Put
-py << trim
-  del DupDict
-  del DupList
-  del DupFun
-  del dd
-  del dl
-  del dl2
-  del df
-.
-:"
-:" Test chdir
-py << trim EOF
-  import os
-  fnamemodify = vim.Function('fnamemodify')
-  cb.append(fnamemodify('.', ':p:h:t'))
-  cb.append(vim.eval('@%'))
-  os.chdir('..')
-  path = fnamemodify('.', ':p:h:t')
-  if path != 'src':
-    # Running tests from a shadow directory, so move up another level
-    # This will result in @% looking like shadow/testdir/test86.in, hence the
-    # extra fnamemodify
-    os.chdir('..')
-    cb.append(fnamemodify('.', ':p:h:t'))
-    cb.append(fnamemodify(vim.eval('@%'), ':s?^%s.??' % path).replace(os.path.sep, '/'))
-    os.chdir(path)
-    del path
-  else:
-    cb.append(fnamemodify('.', ':p:h:t'))
-    cb.append(vim.eval('@%').replace(os.path.sep, '/'))
-  os.chdir('testdir')
-  cb.append(fnamemodify('.', ':p:h:t'))
-  cb.append(vim.eval('@%'))
-  del fnamemodify
-EOF
-:"
-:" Test errors
-:fun F() dict
-:endfun
-:fun D()
-:endfun
-py << trim EOF
-  d = vim.Dictionary()
-  ned = vim.Dictionary(foo='bar', baz='abcD')
-  dl = vim.Dictionary(a=1)
-  dl.locked = True
-  l = vim.List()
-  ll = vim.List('abcE')
-  ll.locked = True
-  nel = vim.List('abcO')
-  f = vim.Function('string')
-  fd = vim.Function('F')
-  fdel = vim.Function('D')
-  vim.command('delfunction D')
-
-  def subexpr_test(expr, name, subexprs):
-      cb.append('>>> Testing %s using %s' % (name, expr))
-      for subexpr in subexprs:
-          ee(expr % subexpr)
-      cb.append('<<< Finished')
-
-  def stringtochars_test(expr):
-      return subexpr_test(expr, 'StringToChars', (
-          '1',       # Fail type checks
-          'u"\\0"',  # Fail PyString_AsStringAndSize(bytes, , NULL) check
-          '"\\0"',   # Fail PyString_AsStringAndSize(object, , NULL) check
-      ))
-
-  class Mapping(object):
-      def __init__(self, d):
-          self.d = d
-
-      def __getitem__(self, key):
-          return self.d[key]
-
-      def keys(self):
-          return self.d.keys()
-
-      def items(self):
-          return self.d.items()
-
-  def convertfrompyobject_test(expr, recurse=True):
-      # pydict_to_tv
-      stringtochars_test(expr % '{%s : 1}')
-      if recurse:
-          convertfrompyobject_test(expr % '{"abcF" : %s}', False)
-      # pymap_to_tv
-      stringtochars_test(expr % 'Mapping({%s : 1})')
-      if recurse:
-          convertfrompyobject_test(expr % 'Mapping({"abcG" : %s})', False)
-      # pyseq_to_tv
-      iter_test(expr)
-      return subexpr_test(expr, 'ConvertFromPyObject', (
-          'None',                 # Not conversible
-          '{"": 1}',              # Empty key not allowed
-          '{u"": 1}',             # Same, but with unicode object
-          'FailingMapping()',     #
-          'FailingMappingKey()',  #
-          'FailingNumber()',      #
-      ))
-
-  def convertfrompymapping_test(expr):
-      convertfrompyobject_test(expr)
-      return subexpr_test(expr, 'ConvertFromPyMapping', (
-          '[]',
-      ))
-
-  def iter_test(expr):
-      return subexpr_test(expr, '*Iter*', (
-          'FailingIter()',
-          'FailingIterNext()',
-      ))
-
-  def number_test(expr, natural=False, unsigned=False):
-      if natural:
-          unsigned = True
-      return subexpr_test(expr, 'NumberToLong', (
-          '[]',
-          'None',
-      ) + (unsigned and ('-1',) or ())
-      + (natural and ('0',) or ()))
-
-  class FailingTrue(object):
-      def __nonzero__(self):
-          raise NotImplementedError('bool')
-
-  class FailingIter(object):
-      def __iter__(self):
-          raise NotImplementedError('iter')
-
-  class FailingIterNext(object):
-      def __iter__(self):
-          return self
-
-      def next(self):
-          raise NotImplementedError('next')
-
-  class FailingIterNextN(object):
-      def __init__(self, n):
-          self.n = n
-
-      def __iter__(self):
-          return self
-
-      def next(self):
-          if self.n:
-              self.n -= 1
-              return 1
-          else:
-              raise NotImplementedError('next N')
-
-  class FailingMappingKey(object):
-      def __getitem__(self, item):
-          raise NotImplementedError('getitem:mappingkey')
-
-      def keys(self):
-          return list("abcH")
-
-  class FailingMapping(object):
-      def __getitem__(self):
-          raise NotImplementedError('getitem:mapping')
-
-      def keys(self):
-          raise NotImplementedError('keys')
-
-  class FailingList(list):
-      def __getitem__(self, idx):
-          if i == 2:
-              raise NotImplementedError('getitem:list')
-          else:
-              return super(FailingList, self).__getitem__(idx)
-
-  class NoArgsCall(object):
-      def __call__(self):
-          pass
-
-  class FailingCall(object):
-      def __call__(self, path):
-          raise NotImplementedError('call')
-
-  class FailingNumber(object):
-      def __int__(self):
-          raise NotImplementedError('int')
-
-  cb.append("> Output")
-  cb.append(">> OutputSetattr")
-  ee('del sys.stdout.softspace')
-  number_test('sys.stdout.softspace = %s', unsigned=True)
-  number_test('sys.stderr.softspace = %s', unsigned=True)
-  ee('assert sys.stdout.isatty()==False')
-  ee('assert sys.stdout.seekable()==False')
-  ee('sys.stdout.close()')
-  ee('sys.stdout.flush()')
-  ee('assert sys.stderr.isatty()==False')
-  ee('assert sys.stderr.seekable()==False')
-  ee('sys.stderr.close()')
-  ee('sys.stderr.flush()')
-  ee('sys.stdout.attr = None')
-  cb.append(">> OutputWrite")
-  ee('assert sys.stdout.writable()==True')
-  ee('assert sys.stdout.readable()==False')
-  ee('assert sys.stderr.writable()==True')
-  ee('assert sys.stderr.readable()==False')
-  ee('assert sys.stdout.closed()==False')
-  ee('assert sys.stderr.closed()==False')
-  ee('assert sys.stdout.errors=="strict"')
-  ee('assert sys.stderr.errors=="strict"')
-  ee('assert sys.stdout.encoding==sys.stderr.encoding')
-  ee('sys.stdout.write(None)')
-  cb.append(">> OutputWriteLines")
-  ee('sys.stdout.writelines(None)')
-  ee('sys.stdout.writelines([1])')
-  iter_test('sys.stdout.writelines(%s)')
-  cb.append("> VimCommand")
-  stringtochars_test('vim.command(%s)')
-  ee('vim.command("", 2)')
-  #! Not checked: vim->python exceptions translating: checked later
-  cb.append("> VimToPython")
-  #! Not checked: everything: needs errors in internal python functions
-  cb.append("> VimEval")
-  stringtochars_test('vim.eval(%s)')
-  ee('vim.eval("", FailingTrue())')
-  #! Not checked: everything: needs errors in internal python functions
-  cb.append("> VimEvalPy")
-  stringtochars_test('vim.bindeval(%s)')
-  ee('vim.eval("", 2)')
-  #! Not checked: vim->python exceptions translating: checked later
-  cb.append("> VimStrwidth")
-  stringtochars_test('vim.strwidth(%s)')
-  cb.append("> VimForeachRTP")
-  ee('vim.foreach_rtp(None)')
-  ee('vim.foreach_rtp(NoArgsCall())')
-  ee('vim.foreach_rtp(FailingCall())')
-  ee('vim.foreach_rtp(int, 2)')
-  cb.append('> import')
-  old_rtp = vim.options['rtp']
-  vim.options['rtp'] = os.getcwd().replace('\\', '\\\\').replace(',', '\\,')
-  ee('import xxx_no_such_module_xxx')
-  ee('import failing_import')
-  ee('import failing')
-  vim.options['rtp'] = old_rtp
-  del old_rtp
-  cb.append("> Options")
-  cb.append(">> OptionsItem")
-  ee('vim.options["abcQ"]')
-  ee('vim.options[""]')
-  stringtochars_test('vim.options[%s]')
-  cb.append(">> OptionsContains")
-  stringtochars_test('%s in vim.options')
-  cb.append("> Dictionary")
-  cb.append(">> DictionaryConstructor")
-  ee('vim.Dictionary("abcI")')
-  ##! Not checked: py_dict_alloc failure
-  cb.append(">> DictionarySetattr")
-  ee('del d.locked')
-  ee('d.locked = FailingTrue()')
-  ee('vim.vvars.locked = False')
-  ee('d.scope = True')
-  ee('d.xxx = True')
-  cb.append(">> _DictionaryItem")
-  ee('d.get("a", 2, 3)')
-  stringtochars_test('d.get(%s)')
-  ee('d.pop("a")')
-  ee('dl.pop("a")')
-  cb.append(">> DictionaryContains")
-  ee('"" in d')
-  ee('0 in d')
-  cb.append(">> DictionaryIterNext")
-  ee('for i in ned: ned["a"] = 1')
-  del i
-  cb.append(">> DictionaryAssItem")
-  ee('dl["b"] = 1')
-  stringtochars_test('d[%s] = 1')
-  convertfrompyobject_test('d["a"] = %s')
-  cb.append(">> DictionaryUpdate")
-  cb.append(">>> kwargs")
-  cb.append(">>> iter")
-  ee('d.update(FailingMapping())')
-  ee('d.update([FailingIterNext()])')
-  ee('d.update([FailingIterNextN(1)])')
-  iter_test('d.update(%s)')
-  convertfrompyobject_test('d.update(%s)')
-  stringtochars_test('d.update(((%s, 0),))')
-  convertfrompyobject_test('d.update((("a", %s),))')
-  cb.append(">> DictionaryPopItem")
-  ee('d.popitem(1, 2)')
-  cb.append(">> DictionaryHasKey")
-  ee('d.has_key()')
-  cb.append("> List")
-  cb.append(">> ListConstructor")
-  ee('vim.List(1, 2)')
-  ee('vim.List(a=1)')
-  iter_test('vim.List(%s)')
-  convertfrompyobject_test('vim.List([%s])')
-  cb.append(">> ListItem")
-  ee('l[1000]')
-  cb.append(">> ListAssItem")
-  ee('ll[1] = 2')
-  ee('l[1000] = 3')
-  cb.append(">> ListAssSlice")
-  ee('ll[1:100] = "abcJ"')
-  iter_test('l[:] = %s')
-  ee('nel[1:10:2]  = "abcK"')
-  cb.append(repr(tuple(nel)))
-  ee('nel[1:10:2]  = "a"')
-  cb.append(repr(tuple(nel)))
-  ee('nel[1:1:-1]  = "a"')
-  cb.append(repr(tuple(nel)))
-  ee('nel[:] = FailingIterNextN(2)')
-  cb.append(repr(tuple(nel)))
-  convertfrompyobject_test('l[:] = [%s]')
-  cb.append(">> ListConcatInPlace")
-  iter_test('l.extend(%s)')
-  convertfrompyobject_test('l.extend([%s])')
-  cb.append(">> ListSetattr")
-  ee('del l.locked')
-  ee('l.locked = FailingTrue()')
-  ee('l.xxx = True')
-  cb.append("> Function")
-  cb.append(">> FunctionConstructor")
-  cb.append(">>> FunctionConstructor")
-  ee('vim.Function("123")')
-  ee('vim.Function("xxx_non_existent_function_xxx")')
-  ee('vim.Function("xxx#non#existent#function#xxx")')
-  ee('vim.Function("xxx_non_existent_function_xxx2", args=[])')
-  ee('vim.Function("xxx_non_existent_function_xxx3", self={})')
-  ee('vim.Function("xxx_non_existent_function_xxx4", args=[], self={})')
-  cb.append(">>> FunctionNew")
-  ee('vim.Function("tr", self="abcFuncSelf")')
-  ee('vim.Function("tr", args=427423)')
-  ee('vim.Function("tr", self="abcFuncSelf2", args="abcFuncArgs2")')
-  ee('vim.Function(self="abcFuncSelf2", args="abcFuncArgs2")')
-  ee('vim.Function("tr", "", self="abcFuncSelf2", args="abcFuncArgs2")')
-  ee('vim.Function("tr", "")')
-  cb.append(">> FunctionCall")
-  convertfrompyobject_test('f(%s)')
-  convertfrompymapping_test('fd(self=%s)')
-  cb.append("> TabPage")
-  cb.append(">> TabPageAttr")
-  ee('vim.current.tabpage.xxx')
-  cb.append("> TabList")
-  cb.append(">> TabListItem")
-  ee('vim.tabpages[1000]')
-  cb.append("> Window")
-  cb.append(">> WindowAttr")
-  ee('vim.current.window.xxx')
-  cb.append(">> WindowSetattr")
-  ee('vim.current.window.buffer = 0')
-  ee('vim.current.window.cursor = (100000000, 100000000)')
-  ee('vim.current.window.cursor = True')
-  number_test('vim.current.window.height = %s', unsigned=True)
-  number_test('vim.current.window.width = %s', unsigned=True)
-  ee('vim.current.window.xxxxxx = True')
-  cb.append("> WinList")
-  cb.append(">> WinListItem")
-  ee('vim.windows[1000]')
-  cb.append("> Buffer")
-  cb.append(">> StringToLine (indirect)")
-  ee('vim.current.buffer[0] = u"\\na"')
-  ee('vim.current.buffer[0] = "\\na"')
-  cb.append(">> SetBufferLine (indirect)")
-  ee('vim.current.buffer[0] = True')
-  cb.append(">> SetBufferLineList (indirect)")
-  ee('vim.current.buffer[:] = True')
-  ee('vim.current.buffer[:] = ["\\na", "bc"]')
-  cb.append(">> InsertBufferLines (indirect)")
-  ee('vim.current.buffer.append(None)')
-  ee('vim.current.buffer.append(["\\na", "bc"])')
-  ee('vim.current.buffer.append("\\nbc")')
-  cb.append(">> RBItem")
-  ee('vim.current.buffer[100000000]')
-  cb.append(">> RBAsItem")
-  ee('vim.current.buffer[100000000] = ""')
-  cb.append(">> BufferAttr")
-  ee('vim.current.buffer.xxx')
-  cb.append(">> BufferSetattr")
-  ee('vim.current.buffer.name = True')
-  ee('vim.current.buffer.xxx = True')
-  cb.append(">> BufferMark")
-  ee('vim.current.buffer.mark(0)')
-  ee('vim.current.buffer.mark("abcM")')
-  ee('vim.current.buffer.mark("!")')
-  cb.append(">> BufferRange")
-  ee('vim.current.buffer.range(1, 2, 3)')
-  cb.append("> BufMap")
-  cb.append(">> BufMapItem")
-  ee('vim.buffers[100000000]')
-  number_test('vim.buffers[%s]', natural=True)
-  cb.append("> Current")
-  cb.append(">> CurrentGetattr")
-  ee('vim.current.xxx')
-  cb.append(">> CurrentSetattr")
-  ee('vim.current.line = True')
-  ee('vim.current.buffer = True')
-  ee('vim.current.window = True')
-  ee('vim.current.tabpage = True')
-  ee('vim.current.xxx = True')
-  del d
-  del ned
-  del dl
-  del l
-  del ll
-  del nel
-  del f
-  del fd
-  del fdel
-  del subexpr_test
-  del stringtochars_test
-  del Mapping
-  del convertfrompyobject_test
-  del convertfrompymapping_test
-  del iter_test
-  del number_test
-  del FailingTrue
-  del FailingIter
-  del FailingIterNext
-  del FailingIterNextN
-  del FailingMapping
-  del FailingMappingKey
-  del FailingList
-  del NoArgsCall
-  del FailingCall
-  del FailingNumber
-EOF
-:delfunction F
-:"
-:" Test import
-py << trim EOF
-  sys.path.insert(0, os.path.join(os.getcwd(), 'python_before'))
-  sys.path.append(os.path.join(os.getcwd(), 'python_after'))
-  vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\')
-  l = []
-  def callback(path):
-      l.append(path[-len('/testdir'):].replace(os.path.sep, '/'))
-  vim.foreach_rtp(callback)
-  cb.append(repr(l))
-  del l
-  def callback(path):
-      return path[-len('/testdir'):].replace(os.path.sep, '/')
-  cb.append(repr(vim.foreach_rtp(callback)))
-  del callback
-  from module import dir as d
-  from modulex import ddir
-  cb.append(d + ',' + ddir)
-  import before
-  cb.append(before.dir)
-  import after
-  cb.append(after.dir)
-  import topmodule as tm
-  import topmodule.submodule as tms
-  import topmodule.submodule.subsubmodule.subsubsubmodule as tmsss
-  cb.append(tm.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/__init__.py'):])
-  cb.append(tms.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/__init__.py'):])
-  cb.append(tmsss.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/subsubmodule/subsubsubmodule.py'):])
-  del before
-  del after
-  del d
-  del ddir
-  del tm
-  del tms
-  del tmsss
-EOF
-:"
-:" Test exceptions
-:fun Exe(e)
-:   execute a:e
-:endfun
-py << trim EOF
-  Exe = vim.bindeval('function("Exe")')
-  ee('vim.command("throw \'abcN\'")')
-  ee('Exe("throw \'def\'")')
-  ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")')
-  ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")')
-  ee('vim.eval("Exe(\'xxx_non_existent_command_xxx\')")')
-  ee('vim.eval("xxx_unknown_function_xxx()")')
-  ee('vim.bindeval("Exe(\'xxx_non_existent_command_xxx\')")')
-  del Exe
-EOF
-:delfunction Exe
-:"
-:" Regression: interrupting vim.command propagates to next vim.command
-py << trim EOF
-  def test_keyboard_interrupt():
-      try:
-          vim.command('while 1 | endwhile')
-      except KeyboardInterrupt:
-          cb.append('Caught KeyboardInterrupt')
-      except Exception:
-          cb.append('!!!!!!!! Caught exception: ' + emsg(sys.exc_info()))
-      else:
-          cb.append('!!!!!!!! No exception')
-      try:
-          vim.command('$ put =\'Running :put\'')
-      except KeyboardInterrupt:
-          cb.append('!!!!!!!! Caught KeyboardInterrupt')
-      except Exception:
-          cb.append('!!!!!!!! Caught exception: ' + emsg(sys.exc_info()))
-      else:
-          cb.append('No exception')
-EOF
-:debuggreedy
-:call inputsave()
-:call feedkeys("s\ns\ns\ns\nq\n")
-:redir => output
-:debug silent! py test_keyboard_interrupt()
-:redir END
-:0 debuggreedy
-:call inputrestore()
-:silent $put =output
-:unlet output
-:py del test_keyboard_interrupt
-:"
-:" Cleanup
-py << trim EOF
-  del cb
-  del ee
-  del emsg
-  del sys
-  del os
-  del vim
-EOF
-:endfun
-:"
-:fun RunTest()
-:let checkrefs = !empty($PYTHONDUMPREFS)
-:let start = getline(1, '$')
-:for i in range(checkrefs ? 10 : 1)
-:   if i != 0
-:       %d _
-:       call setline(1, start)
-:   endif
-:   call Test()
-:   if i == 0
-:       let result = getline(1, '$')
-:   endif
-:endfor
-:if checkrefs
-:   %d _
-:   call setline(1, result)
-:endif
-:endfun
-:"
-:call RunTest()
-:delfunction RunTest
-:delfunction Test
-:call garbagecollect(1)
-:"
-:/^start:/,$wq! test.out
-:" vim: et ts=4 isk-=\:
-:while getchar(0) isnot 0|endwhile
-ENDTEST
-
-start:
diff --git a/src/testdir/test86.ok b/src/testdir/test86.ok
deleted file mode 100644
index 4f6d4b3..0000000
--- a/src/testdir/test86.ok
+++ /dev/null
@@ -1,1445 +0,0 @@
-start:
-[1, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
-[1, 2, function('strlen'), {'a': 1}]
-Vim(put):E684:
-[0, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
-[0, function('strlen'), [1, 2, function('strlen'), {'a': 1}]]
-1
-['-1', '0', '1', 'b', 'f']
-['asd', -1L, <vim.Function '1'>, <vim.dictionary object at >, <vim.list object at >]
-[('-1', <vim.dictionary object at >), ('0', -1L), ('1', 'asd'), ('b', <vim.list object at >), ('f', <vim.Function '1'>)]
-'-1' : {'a': 1}
-'0' : -1
-'1' : 'asd'
-'b' : [1, 2, function('strlen')]
-'f' : function('1')
-[0, function('strlen')]
-[3]
-[1, 2, function('strlen')]
-[1, 2, function('strlen')]
-1
-'asd'
-2
-True
-False
-True
-False
-['0']
-{'0': -1}
-('0', -1L)
-None
-[]
-[0, 1, 2, 3]
-[0, 1, 2, 3]
-[0, 1, 3]
-[0, 1]
-[0, 1]
-[0, 1]
-[0, 1, 2, 3]
-[0, 1, 2, 3]
-[0, 2, 3]
-[2, 3]
-[2, 3]
-[2, 3]
-[1, 3]
-[0, 2]
-[0, 1, 2, 3]
-['a', 0, 1, 2, 3]
-[0, 'b', 2, 3]
-[0, 1, 'c']
-[0, 1, 2, 3, 'd']
-[0, 1, 2, 'e', 3]
-['f', 2, 3]
-[0, 1, 'g', 2, 3]
-['h']
-[0, 1, 10, 3, 20, 5, 6, 7]
-[0, 1, 2, 3, 20, 5, 10, 7]
-[0, 1, 2, 3, 4, 5, 6, 7]
-[0, 1, 2, 3, 4, 5, 6, 7]
-[0, 1, 2, 3, 4, 5, 6, 7]
-l[2] threw vim.error: error:('list is locked',)
-[0, 1, 2, 3]
-[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd']
-[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}]
-[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New']
-l[1](1, 2, 3):error:('Vim:E725: Calling dict function without Dictionary: DictNew',)
-f(1, 2, 3):error:('Vim:E117: Unknown function: New',)
-[0.0, 0.0]
-KeyError
-TypeError
-TypeError
-ValueError
-TypeError
-TypeError
-KeyError
-KeyError
-d : locked:0;scope:0
-dl : locked:1;scope:0
-v: : locked:2;scope:1
-g: : locked:0;scope:2
-d:{'abc2': 1}
-dl:{'def': 1}
-l : locked:0
-ll : locked:1
-l:[0]
-ll:[1]
-[0, 1, 2]
-['a', 'b']
-['c', 1]
-['d', ['e']]
-pyeval("None") = v:none
-0.0
-"\0":	Vim(let):E859:
-{"\0": 1}:	Vim(let):E859:
-undefined_name:	Vim(let):NameE
-vim:	Vim(let):E859:
-[1]
-[1, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 1]
-[0, 1, 2, 3]
-[2, 3, 4, 5]
-[0, 1]
-[4, 5]
-[2, 3]
-[]
-[2, 3]
-[]
-[0, 1, 2, 3, 4, 5]
-[0, 1, 2, 3, 4, 5]
-[0, 1, 2, 3, 4, 5]
-[4, 3]
-[0, 2, 4]
-[]
-Abc
-bac
-def
-bar
-jkl
-wopts iters equal: 1
-bopts iters equal: 1
->>> paste
-  g/w/b:1/0/0
-  g/w/b (in):1/0/0
-  p/gopts1: False
-  p/wopts1! KeyError
-  inv: 2! KeyError
-  wopts1! KeyError
-  wopts2! KeyError
-  wopts3! KeyError
-  p/bopts1! KeyError
-  inv: 2! KeyError
-  bopts1! KeyError
-  bopts2! KeyError
-  bopts3! KeyError
-  G: 1
-  W: 1:1 2:1 3:1 4:1
-  B: 1:1 2:1 3:1 4:1
-  del wopts3! KeyError
-  del bopts3! KeyError
-  G: 1
-  W: 1:1 2:1 3:1 4:1
-  B: 1:1 2:1 3:1 4:1
->>> previewheight
-  g/w/b:1/0/0
-  g/w/b (in):1/0/0
-  p/gopts1: 12
-  inv: 'a'! TypeError
-  p/wopts1! KeyError
-  inv: 'a'! KeyError
-  wopts1! KeyError
-  wopts2! KeyError
-  wopts3! KeyError
-  p/bopts1! KeyError
-  inv: 'a'! KeyError
-  bopts1! KeyError
-  bopts2! KeyError
-  bopts3! KeyError
-  G: 5
-  W: 1:5 2:5 3:5 4:5
-  B: 1:5 2:5 3:5 4:5
-  del wopts3! KeyError
-  del bopts3! KeyError
-  G: 5
-  W: 1:5 2:5 3:5 4:5
-  B: 1:5 2:5 3:5 4:5
->>> operatorfunc
-  g/w/b:1/0/0
-  g/w/b (in):1/0/0
-  p/gopts1: ''
-  inv: 2! TypeError
-  p/wopts1! KeyError
-  inv: 2! KeyError
-  wopts1! KeyError
-  wopts2! KeyError
-  wopts3! KeyError
-  p/bopts1! KeyError
-  inv: 2! KeyError
-  bopts1! KeyError
-  bopts2! KeyError
-  bopts3! KeyError
-  G: 'A'
-  W: 1:'A' 2:'A' 3:'A' 4:'A'
-  B: 1:'A' 2:'A' 3:'A' 4:'A'
-  del wopts3! KeyError
-  del bopts3! KeyError
-  G: 'A'
-  W: 1:'A' 2:'A' 3:'A' 4:'A'
-  B: 1:'A' 2:'A' 3:'A' 4:'A'
->>> number
-  g/w/b:0/1/0
-  g/w/b (in):0/1/0
-  p/gopts1! KeyError
-  inv: 0! KeyError
-  gopts1! KeyError
-  p/wopts1: False
-  p/bopts1! KeyError
-  inv: 0! KeyError
-  bopts1! KeyError
-  bopts2! KeyError
-  bopts3! KeyError
-  G: 0
-  W: 1:1 2:1 3:0 4:0
-  B: 1:1 2:1 3:0 4:0
-  del wopts3! ValueError
-  del bopts3! KeyError
-  G: 0
-  W: 1:1 2:1 3:0 4:0
-  B: 1:1 2:1 3:0 4:0
->>> numberwidth
-  g/w/b:0/1/0
-  g/w/b (in):0/1/0
-  p/gopts1! KeyError
-  inv: -100! KeyError
-  gopts1! KeyError
-  p/wopts1: 8
-  inv: -100! error
-  p/bopts1! KeyError
-  inv: -100! KeyError
-  bopts1! KeyError
-  bopts2! KeyError
-  bopts3! KeyError
-  G: 8
-  W: 1:3 2:5 3:2 4:8
-  B: 1:3 2:5 3:2 4:8
-  del wopts3! ValueError
-  del bopts3! KeyError
-  G: 8
-  W: 1:3 2:5 3:2 4:8
-  B: 1:3 2:5 3:2 4:8
->>> colorcolumn
-  g/w/b:0/1/0
-  g/w/b (in):0/1/0
-  p/gopts1! KeyError
-  inv: 'abc4'! KeyError
-  gopts1! KeyError
-  p/wopts1: ''
-  inv: 'abc4'! error
-  p/bopts1! KeyError
-  inv: 'abc4'! KeyError
-  bopts1! KeyError
-  bopts2! KeyError
-  bopts3! KeyError
-  G: ''
-  W: 1:'+2' 2:'+3' 3:'+1' 4:''
-  B: 1:'+2' 2:'+3' 3:'+1' 4:''
-  del wopts3! ValueError
-  del bopts3! KeyError
-  G: ''
-  W: 1:'+2' 2:'+3' 3:'+1' 4:''
-  B: 1:'+2' 2:'+3' 3:'+1' 4:''
->>> statusline
-  g/w/b:1/1/0
-  g/w/b (in):1/1/0
-  p/gopts1: ''
-  inv: 0! TypeError
-  p/wopts1: None
-  inv: 0! TypeError
-  p/bopts1! KeyError
-  inv: 0! KeyError
-  bopts1! KeyError
-  bopts2! KeyError
-  bopts3! KeyError
-  G: '1'
-  W: 1:'2' 2:'4' 3:'1' 4:'1'
-  B: 1:'2' 2:'4' 3:'1' 4:'1'
-  del bopts3! KeyError
-  G: '1'
-  W: 1:'2' 2:'1' 3:'1' 4:'1'
-  B: 1:'2' 2:'1' 3:'1' 4:'1'
->>> autoindent
-  g/w/b:0/0/1
-  g/w/b (in):0/0/1
-  p/gopts1! KeyError
-  inv: 2! KeyError
-  gopts1! KeyError
-  p/wopts1! KeyError
-  inv: 2! KeyError
-  wopts1! KeyError
-  wopts2! KeyError
-  wopts3! KeyError
-  p/bopts1: False
-  G: 0
-  W: 1:0 2:1 3:0 4:1
-  B: 1:0 2:1 3:0 4:1
-  del wopts3! KeyError
-  del bopts3! ValueError
-  G: 0
-  W: 1:0 2:1 3:0 4:1
-  B: 1:0 2:1 3:0 4:1
->>> shiftwidth
-  g/w/b:0/0/1
-  g/w/b (in):0/0/1
-  p/gopts1! KeyError
-  inv: 3! KeyError
-  gopts1! KeyError
-  p/wopts1! KeyError
-  inv: 3! KeyError
-  wopts1! KeyError
-  wopts2! KeyError
-  wopts3! KeyError
-  p/bopts1: 8
-  G: 8
-  W: 1:0 2:2 3:8 4:1
-  B: 1:0 2:2 3:8 4:1
-  del wopts3! KeyError
-  del bopts3! ValueError
-  G: 8
-  W: 1:0 2:2 3:8 4:1
-  B: 1:0 2:2 3:8 4:1
->>> omnifunc
-  g/w/b:0/0/1
-  g/w/b (in):0/0/1
-  p/gopts1! KeyError
-  inv: 1! KeyError
-  gopts1! KeyError
-  p/wopts1! KeyError
-  inv: 1! KeyError
-  wopts1! KeyError
-  wopts2! KeyError
-  wopts3! KeyError
-  p/bopts1: ''
-  inv: 1! TypeError
-  G: ''
-  W: 1:'A' 2:'B' 3:'' 4:'C'
-  B: 1:'A' 2:'B' 3:'' 4:'C'
-  del wopts3! KeyError
-  del bopts3! ValueError
-  G: ''
-  W: 1:'A' 2:'B' 3:'' 4:'C'
-  B: 1:'A' 2:'B' 3:'' 4:'C'
->>> preserveindent
-  g/w/b:0/0/1
-  g/w/b (in):0/0/1
-  p/gopts1! KeyError
-  inv: 2! KeyError
-  gopts1! KeyError
-  p/wopts1! KeyError
-  inv: 2! KeyError
-  wopts1! KeyError
-  wopts2! KeyError
-  wopts3! KeyError
-  p/bopts1: False
-  G: 0
-  W: 1:0 2:1 3:0 4:1
-  B: 1:0 2:1 3:0 4:1
-  del wopts3! KeyError
-  del bopts3! ValueError
-  G: 0
-  W: 1:0 2:1 3:0 4:1
-  B: 1:0 2:1 3:0 4:1
->>> path
-  g/w/b:1/0/1
-  g/w/b (in):1/0/1
-  p/gopts1: '.,..,,'
-  inv: 0! TypeError
-  p/wopts1! KeyError
-  inv: 0! KeyError
-  wopts1! KeyError
-  wopts2! KeyError
-  wopts3! KeyError
-  p/bopts1: None
-  inv: 0! TypeError
-  G: '.,,'
-  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
-  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
-  del wopts3! KeyError
-  G: '.,,'
-  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
-  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
-First line
-First line
-def
-First line
-Second line
-Third line
-(7, 2)
-<buffer test86.in><buffer >
-baz
-bar
-Second line
-Third line
-foo
-1:BufFilePre:1
-1:BufFilePost:1
-testdir/foo
-5:BufFilePre:5
-5:BufFilePost:5
-testdir/bar
-1:BufFilePre:1
-1:BufFilePost:1
-testdir/test86.in
-valid: b:False, cb:True
-i:<buffer test86.in>
-i2:<buffer test86.in>
-i:<buffer a>
-i3:<buffer test86.in>
-1:<buffer test86.in>=<buffer test86.in>
-8:<buffer a>=<buffer a>
-9:<buffer b>=<buffer b>
-10:<buffer c>=<buffer c>
-4
-i4:<buffer test86.in>
-i4:<buffer test86.in>
-StopIteration
-Number of tabs: 4
-Current tab pages:
-  <tabpage 0>(1): 1 windows, current is <window object (unknown)>
-  Windows:
-    <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (37, 0)
-  <tabpage 1>(2): 1 windows, current is <window object (unknown)>
-  Windows:
-    <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
-  <tabpage 2>(3): 2 windows, current is <window object (unknown)>
-  Windows:
-    <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0)
-    <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0)
-  <tabpage 3>(4): 4 windows, current is <window 0>
-  Windows:
-    <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
-    <window 1>(2): displays buffer <buffer b.2>; cursor is at (1, 0)
-    <window 2>(3): displays buffer <buffer a.2>; cursor is at (1, 0)
-    <window 3>(4): displays buffer <buffer 2>; cursor is at (1, 0)
-Number of windows in current tab page: 4
-Current tab page: <tabpage 3>
-Current window: <window 0>: <window 0> is <window 0>
-Current buffer: <buffer c.2>: <buffer c.2> is <buffer c.2> is <buffer c.2>
-ValueError at assigning foreign tab window
-Type error at assigning None to vim.current.window
-Type error at assigning None to vim.current.tabpage
-Type error at assigning None to vim.current.buffer
-Current tab page: <tabpage 2>
-Current window: <window 0>
-Current buffer: <buffer test86.in>
-Current line: 'Type error at assigning None to vim.current.buffer'
-w.valid: [True, False]
-t.valid: [True, False, True, False]
-vim.vars:Dictionary:True
-vim.options:Options:True
-vim.bindeval("{}"):Dictionary:True
-vim.bindeval("[]"):List:True
-vim.bindeval("function('tr')"):Function:True
-vim.current.buffer:Buffer:True
-vim.current.range:Range:True
-vim.current.window:Window:True
-vim.current.tabpage:TabPage:True
-current:__dir__,__members__,buffer,line,range,tabpage,window
-buffer:__dir__,__members__,append,mark,name,number,options,range,valid,vars
-window:__dir__,__members__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars,width
-tabpage:__dir__,__members__,number,valid,vars,window,windows
-range:__dir__,__members__,append,end,start
-dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
-list:__dir__,__members__,extend,locked
-function:__dir__,__members__,args,auto_rebind,self,softspace
-output:__dir__,__members__,close,closed,flush,isatty,readable,seekable,softspace,writable,write,writelines
-{}
-{'a': 1}
-{'a': 1}
-[]
-['a', 'b', 'c', '7']
-function('tr')
-function('tr', [123, 3, 4])
-function('tr')
-function('tr', {})
-function('tr', [123, 3, 4], {})
-auto_rebind
-function('tr')
-function('tr', [123, 3, 4])
-function('tr')
-function('tr', {})
-function('tr', [123, 3, 4], {})
-a: <vim.Function 'Args'>
-pa1: <vim.Function 'Args', args=['abcArgsPA1']>
-pa2: <vim.Function 'Args'>
-pa3: <vim.Function 'Args', args=['abcArgsPA3'], self={'abcSelfPA3': 'abcSelfPA3Val'}>
-pa4: <vim.Function 'Args', self={'abcSelfPA4': 'abcSelfPA4Val'}>
-sa: <vim.Function 'SelfArgs'>
-psa1: <vim.Function 'SelfArgs', args=['abcArgsPSA1']>
-psa2: <vim.Function 'SelfArgs'>
-psa3: <vim.Function 'SelfArgs', args=['abcArgsPSA3'], self={'abcSelfPSA3': 'abcSelfPSA3Val'}>
-psa4: <vim.Function 'SelfArgs', self={'abcSelfPSA4': 'abcSelfPSA4Val'}>
-psa5: <vim.Function 'SelfArgs', self={'abcSelfPSA5': 'abcSelfPSA5Val'}>
-psa6: <vim.Function 'SelfArgs', args=['abcArgsPSA6'], self={'abcSelfPSA6': 'abcSelfPSA6Val'}>
-psa7: <vim.Function 'SelfArgs', args=['abcArgsPSA7']>
-psa8: <vim.Function 'SelfArgs'>
-psa9: <vim.Function 'SelfArgs', self={'abcSelfPSA9': 'abcSelfPSA9Val'}, auto_rebind=True>
-psaA: <vim.Function 'SelfArgs', args=['abcArgsPSAA'], self={'abcSelfPSAA': 'abcSelfPSAAVal'}, auto_rebind=True>
-psaB: <vim.Function 'SelfArgs', args=['abcArgsPSAB']>
-psaC: <vim.Function 'SelfArgs'>
-psar: <vim.Function 'SelfArgs', args=[{'abcArgsPSAr2': [{'rec': function('SelfArgs', [{...}], {...}), 'self': {...}, 'abcSelfPSAr': 'abcSelfPSArVal', 'args': [{...}]}, {...}], 'abcArgsPSAr': 'abcArgsPSArVal'}], self={'rec': function('SelfArgs', [{'abcArgsPSAr2': [{...}, {...}], 'abcArgsPSAr': 'abcArgsPSArVal'}], {...}), 'self': {...}, 'abcSelfPSAr': 'abcSelfPSArVal', 'args': [{'abcArgsPSAr2': [{...}, {...}], 'abcArgsPSAr': 'abcArgsPSArVal'}]}>
-s(a): function('Args')
-s(pa1): function('Args', ['abcArgsPA1'])
-s(pa2): function('Args')
-s(pa3): function('Args', ['abcArgsPA3'], {'abcSelfPA3': 'abcSelfPA3Val'})
-s(pa4): function('Args', {'abcSelfPA4': 'abcSelfPA4Val'})
-s(sa): function('SelfArgs')
-s(psa1): function('SelfArgs', ['abcArgsPSA1'])
-s(psa2): function('SelfArgs')
-s(psa3): function('SelfArgs', ['abcArgsPSA3'], {'abcSelfPSA3': 'abcSelfPSA3Val'})
-s(psa4): function('SelfArgs', {'abcSelfPSA4': 'abcSelfPSA4Val'})
-s(psa5): function('SelfArgs', {'abcSelfPSA5': 'abcSelfPSA5Val'})
-s(psa6): function('SelfArgs', ['abcArgsPSA6'], {'abcSelfPSA6': 'abcSelfPSA6Val'})
-s(psa7): function('SelfArgs', ['abcArgsPSA7'])
-s(psa8): function('SelfArgs')
-s(psa9): function('SelfArgs', {'abcSelfPSA9': 'abcSelfPSA9Val'})
-s(psaA): function('SelfArgs', ['abcArgsPSAA'], {'abcSelfPSAA': 'abcSelfPSAAVal'})
-s(psaB): function('SelfArgs', ['abcArgsPSAB'])
-s(psaC): function('SelfArgs')
-d.sa(): [[], {'f': function('SelfArgs')}]
-d.psa1(): [['abcArgsPSA1'], {'f': function('SelfArgs', ['abcArgsPSA1'])}]
-d.psa2(): [[], {'f': function('SelfArgs')}]
-d.psa3(): [['abcArgsPSA3'], {'abcSelfPSA3': 'abcSelfPSA3Val'}]
-d.psa4(): [[], {'abcSelfPSA4': 'abcSelfPSA4Val'}]
-d.psa5(): [[], {'abcSelfPSA5': 'abcSelfPSA5Val'}]
-d.psa6(): [['abcArgsPSA6'], {'abcSelfPSA6': 'abcSelfPSA6Val'}]
-d.psa7(): [['abcArgsPSA7'], {'f': function('SelfArgs', ['abcArgsPSA7'])}]
-d.psa8(): [[], {'f': function('SelfArgs')}]
-d.psa9(): [[], {'f': function('SelfArgs', {'abcSelfPSA9': 'abcSelfPSA9Val'})}]
-d.psaA(): [['abcArgsPSAA'], {'f': function('SelfArgs', ['abcArgsPSAA'], {'abcSelfPSAA': 'abcSelfPSAAVal'})}]
-d.psaB(): [['abcArgsPSAB'], {'f': function('SelfArgs', ['abcArgsPSAB'])}]
-d.psaC(): [[], {'f': function('SelfArgs')}]
-a(): !result: []
-pa1(): !result: ['abcArgsPA1']
-pa2(): !result: []
-pa3(): !result: ['abcArgsPA3']
-pa4(): !result: []
-sa(): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',)
-psa1(): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',)
-psa2(): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',)
-psa3(): !result: [['abcArgsPSA3'], {'abcSelfPSA3': 'abcSelfPSA3Val'}]
-psa4(): !result: [[], {'abcSelfPSA4': 'abcSelfPSA4Val'}]
-a(42, 43): !result: [42, 43]
-pa1(42, 43): !result: ['abcArgsPA1', 42, 43]
-pa2(42, 43): !result: [42, 43]
-pa3(42, 43): !result: ['abcArgsPA3', 42, 43]
-pa4(42, 43): !result: [42, 43]
-sa(42, 43): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',)
-psa1(42, 43): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',)
-psa2(42, 43): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',)
-psa3(42, 43): !result: [['abcArgsPSA3', 42, 43], {'abcSelfPSA3': 'abcSelfPSA3Val'}]
-psa4(42, 43): !result: [[42, 43], {'abcSelfPSA4': 'abcSelfPSA4Val'}]
-a(42, self={"20": 1}): !result: [42]
-pa1(42, self={"20": 1}): !result: ['abcArgsPA1', 42]
-pa2(42, self={"20": 1}): !result: [42]
-pa3(42, self={"20": 1}): !result: ['abcArgsPA3', 42]
-pa4(42, self={"20": 1}): !result: [42]
-sa(42, self={"20": 1}): !result: [[42], {'20': 1}]
-psa1(42, self={"20": 1}): !result: [['abcArgsPSA1', 42], {'20': 1}]
-psa2(42, self={"20": 1}): !result: [[42], {'20': 1}]
-psa3(42, self={"20": 1}): !result: [['abcArgsPSA3', 42], {'20': 1}]
-psa4(42, self={"20": 1}): !result: [[42], {'20': 1}]
-a(self={"20": 1}): !result: []
-pa1(self={"20": 1}): !result: ['abcArgsPA1']
-pa2(self={"20": 1}): !result: []
-pa3(self={"20": 1}): !result: ['abcArgsPA3']
-pa4(self={"20": 1}): !result: []
-sa(self={"20": 1}): !result: [[], {'20': 1}]
-psa1(self={"20": 1}): !result: [['abcArgsPSA1'], {'20': 1}]
-psa2(self={"20": 1}): !result: [[], {'20': 1}]
-psa3(self={"20": 1}): !result: [['abcArgsPSA3'], {'20': 1}]
-psa4(self={"20": 1}): !result: [[], {'20': 1}]
-a.args: None
-pa1.args: ['abcArgsPA1']
-pa2.args: None
-pa3.args: ['abcArgsPA3']
-pa4.args: None
-sa.args: None
-psa1.args: ['abcArgsPSA1']
-psa2.args: None
-psa3.args: ['abcArgsPSA3']
-psa4.args: None
-a.self: None
-pa1.self: None
-pa2.self: None
-pa3.self: {'abcSelfPA3': 'abcSelfPA3Val'}
-pa4.self: {'abcSelfPA4': 'abcSelfPA4Val'}
-sa.self: None
-psa1.self: None
-psa2.self: None
-psa3.self: {'abcSelfPSA3': 'abcSelfPSA3Val'}
-psa4.self: {'abcSelfPSA4': 'abcSelfPSA4Val'}
-a.name: 'Args'
-pa1.name: 'Args'
-pa2.name: 'Args'
-pa3.name: 'Args'
-pa4.name: 'Args'
-sa.name: 'SelfArgs'
-psa1.name: 'SelfArgs'
-psa2.name: 'SelfArgs'
-psa3.name: 'SelfArgs'
-psa4.name: 'SelfArgs'
-a.auto_rebind: 1
-pa1.auto_rebind: 1
-pa2.auto_rebind: 1
-pa3.auto_rebind: 0
-pa4.auto_rebind: 0
-sa.auto_rebind: 1
-psa1.auto_rebind: 1
-psa2.auto_rebind: 1
-psa3.auto_rebind: 0
-psa4.auto_rebind: 0
-psa5.auto_rebind: 0
-psa6.auto_rebind: 0
-psa7.auto_rebind: 1
-psa8.auto_rebind: 1
-psa9.auto_rebind: 1
-psaA.auto_rebind: 1
-psaB.auto_rebind: 1
-psaC.auto_rebind: 1
-'
-abcdef
-Error detected while processing function RunTest[]..Test:
-line :
-abcdef
-abcA
-line :
-abcB'
-['a', 'dup_a']
-['a', 'a']
-['a', 'b', 'c', 'C']
-[2, 2]
-[2, 2]
-1
-1
-function('Put')
-testdir
-test86.in
-src
-testdir/test86.in
-testdir
-test86.in
-> Output
->> OutputSetattr
-del sys.stdout.softspace:AttributeError:('cannot delete OutputObject attributes',)
->>> Testing NumberToLong using sys.stdout.softspace = %s
-sys.stdout.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
-sys.stdout.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
-sys.stdout.softspace = -1:ValueError:('number must be greater or equal to zero',)
-<<< Finished
->>> Testing NumberToLong using sys.stderr.softspace = %s
-sys.stderr.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
-sys.stderr.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
-sys.stderr.softspace = -1:ValueError:('number must be greater or equal to zero',)
-<<< Finished
-assert sys.stdout.isatty()==False:NOT FAILED
-assert sys.stdout.seekable()==False:NOT FAILED
-sys.stdout.close():NOT FAILED
-sys.stdout.flush():NOT FAILED
-assert sys.stderr.isatty()==False:NOT FAILED
-assert sys.stderr.seekable()==False:NOT FAILED
-sys.stderr.close():NOT FAILED
-sys.stderr.flush():NOT FAILED
-sys.stdout.attr = None:AttributeError:('invalid attribute: attr',)
->> OutputWrite
-assert sys.stdout.writable()==True:NOT FAILED
-assert sys.stdout.readable()==False:NOT FAILED
-assert sys.stderr.writable()==True:NOT FAILED
-assert sys.stderr.readable()==False:NOT FAILED
-assert sys.stdout.closed()==False:NOT FAILED
-assert sys.stderr.closed()==False:NOT FAILED
-assert sys.stdout.errors=="strict":NOT FAILED
-assert sys.stderr.errors=="strict":NOT FAILED
-assert sys.stdout.encoding==sys.stderr.encoding:NOT FAILED
-sys.stdout.write(None):TypeError:('coercing to Unicode: need string or buffer, NoneType found',)
->> OutputWriteLines
-sys.stdout.writelines(None):TypeError:("'NoneType' object is not iterable",)
-sys.stdout.writelines([1]):TypeError:('coercing to Unicode: need string or buffer, int found',)
->>> Testing *Iter* using sys.stdout.writelines(%s)
-sys.stdout.writelines(FailingIter()):NotImplementedError:('iter',)
-sys.stdout.writelines(FailingIterNext()):NotImplementedError:('next',)
-<<< Finished
-> VimCommand
->>> Testing StringToChars using vim.command(%s)
-vim.command(1):TypeError:('expected str() or unicode() instance, but got int',)
-vim.command(u"\0"):TypeError:('expected string without null bytes',)
-vim.command("\0"):TypeError:('expected string without null bytes',)
-<<< Finished
-vim.command("", 2):TypeError:('command() takes exactly one argument (2 given)',)
-> VimToPython
-> VimEval
->>> Testing StringToChars using vim.eval(%s)
-vim.eval(1):TypeError:('expected str() or unicode() instance, but got int',)
-vim.eval(u"\0"):TypeError:('expected string without null bytes',)
-vim.eval("\0"):TypeError:('expected string without null bytes',)
-<<< Finished
-vim.eval("", FailingTrue()):TypeError:('function takes exactly 1 argument (2 given)',)
-> VimEvalPy
->>> Testing StringToChars using vim.bindeval(%s)
-vim.bindeval(1):TypeError:('expected str() or unicode() instance, but got int',)
-vim.bindeval(u"\0"):TypeError:('expected string without null bytes',)
-vim.bindeval("\0"):TypeError:('expected string without null bytes',)
-<<< Finished
-vim.eval("", 2):TypeError:('function takes exactly 1 argument (2 given)',)
-> VimStrwidth
->>> Testing StringToChars using vim.strwidth(%s)
-vim.strwidth(1):TypeError:('expected str() or unicode() instance, but got int',)
-vim.strwidth(u"\0"):TypeError:('expected string without null bytes',)
-vim.strwidth("\0"):TypeError:('expected string without null bytes',)
-<<< Finished
-> VimForeachRTP
-vim.foreach_rtp(None):TypeError:("'NoneType' object is not callable",)
-vim.foreach_rtp(NoArgsCall()):TypeError:('__call__() takes exactly 1 argument (2 given)',)
-vim.foreach_rtp(FailingCall()):NotImplementedError:('call',)
-vim.foreach_rtp(int, 2):TypeError:('foreach_rtp() takes exactly one argument (2 given)',)
-> import
-import xxx_no_such_module_xxx:ImportError:('No module named xxx_no_such_module_xxx',)
-import failing_import:ImportError:()
-import failing:NotImplementedError:()
-> Options
->> OptionsItem
-vim.options["abcQ"]:KeyError:('abcQ',)
-vim.options[""]:ValueError:('empty keys are not allowed',)
->>> Testing StringToChars using vim.options[%s]
-vim.options[1]:TypeError:('expected str() or unicode() instance, but got int',)
-vim.options[u"\0"]:TypeError:('expected string without null bytes',)
-vim.options["\0"]:TypeError:('expected string without null bytes',)
-<<< Finished
->> OptionsContains
->>> Testing StringToChars using %s in vim.options
-1 in vim.options:TypeError:('expected str() or unicode() instance, but got int',)
-u"\0" in vim.options:TypeError:('expected string without null bytes',)
-"\0" in vim.options:TypeError:('expected string without null bytes',)
-<<< Finished
-> Dictionary
->> DictionaryConstructor
-vim.Dictionary("abcI"):ValueError:('expected sequence element of size 2, but got sequence of size 1',)
->> DictionarySetattr
-del d.locked:AttributeError:('cannot delete vim.Dictionary attributes',)
-d.locked = FailingTrue():NotImplementedError:('bool',)
-vim.vvars.locked = False:TypeError:('cannot modify fixed dictionary',)
-d.scope = True:AttributeError:('cannot set attribute scope',)
-d.xxx = True:AttributeError:('cannot set attribute xxx',)
->> _DictionaryItem
-d.get("a", 2, 3):TypeError:('function takes at most 2 arguments (3 given)',)
->>> Testing StringToChars using d.get(%s)
-d.get(1):TypeError:('expected str() or unicode() instance, but got int',)
-d.get(u"\0"):TypeError:('expected string without null bytes',)
-d.get("\0"):TypeError:('expected string without null bytes',)
-<<< Finished
-d.pop("a"):KeyError:('a',)
-dl.pop("a"):error:('dictionary is locked',)
->> DictionaryContains
-"" in d:ValueError:('empty keys are not allowed',)
-0 in d:TypeError:('expected str() or unicode() instance, but got int',)
->> DictionaryIterNext
-for i in ned: ned["a"] = 1:RuntimeError:('hashtab changed during iteration',)
->> DictionaryAssItem
-dl["b"] = 1:error:('dictionary is locked',)
->>> Testing StringToChars using d[%s] = 1
-d[1] = 1:TypeError:('expected str() or unicode() instance, but got int',)
-d[u"\0"] = 1:TypeError:('expected string without null bytes',)
-d["\0"] = 1:TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d["a"] = {%s : 1}
-d["a"] = {1 : 1}:TypeError:('expected str() or unicode() instance, but got int',)
-d["a"] = {u"\0" : 1}:TypeError:('expected string without null bytes',)
-d["a"] = {"\0" : 1}:TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d["a"] = {"abcF" : {%s : 1}}
-d["a"] = {"abcF" : {1 : 1}}:TypeError:('expected str() or unicode() instance, but got int',)
-d["a"] = {"abcF" : {u"\0" : 1}}:TypeError:('expected string without null bytes',)
-d["a"] = {"abcF" : {"\0" : 1}}:TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d["a"] = {"abcF" : Mapping({%s : 1})}
-d["a"] = {"abcF" : Mapping({1 : 1})}:TypeError:('expected str() or unicode() instance, but got int',)
-d["a"] = {"abcF" : Mapping({u"\0" : 1})}:TypeError:('expected string without null bytes',)
-d["a"] = {"abcF" : Mapping({"\0" : 1})}:TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using d["a"] = {"abcF" : %s}
-d["a"] = {"abcF" : FailingIter()}:TypeError:('unable to convert FailingIter to a Vim structure',)
-d["a"] = {"abcF" : FailingIterNext()}:NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using d["a"] = {"abcF" : %s}
-d["a"] = {"abcF" : None}:NOT FAILED
-d["a"] = {"abcF" : {"": 1}}:ValueError:('empty keys are not allowed',)
-d["a"] = {"abcF" : {u"": 1}}:ValueError:('empty keys are not allowed',)
-d["a"] = {"abcF" : FailingMapping()}:NotImplementedError:('keys',)
-d["a"] = {"abcF" : FailingMappingKey()}:NotImplementedError:('getitem:mappingkey',)
-d["a"] = {"abcF" : FailingNumber()}:TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing StringToChars using d["a"] = Mapping({%s : 1})
-d["a"] = Mapping({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
-d["a"] = Mapping({u"\0" : 1}):TypeError:('expected string without null bytes',)
-d["a"] = Mapping({"\0" : 1}):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d["a"] = Mapping({"abcG" : {%s : 1}})
-d["a"] = Mapping({"abcG" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
-d["a"] = Mapping({"abcG" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
-d["a"] = Mapping({"abcG" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d["a"] = Mapping({"abcG" : Mapping({%s : 1})})
-d["a"] = Mapping({"abcG" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
-d["a"] = Mapping({"abcG" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
-d["a"] = Mapping({"abcG" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using d["a"] = Mapping({"abcG" : %s})
-d["a"] = Mapping({"abcG" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',)
-d["a"] = Mapping({"abcG" : FailingIterNext()}):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using d["a"] = Mapping({"abcG" : %s})
-d["a"] = Mapping({"abcG" : None}):NOT FAILED
-d["a"] = Mapping({"abcG" : {"": 1}}):ValueError:('empty keys are not allowed',)
-d["a"] = Mapping({"abcG" : {u"": 1}}):ValueError:('empty keys are not allowed',)
-d["a"] = Mapping({"abcG" : FailingMapping()}):NotImplementedError:('keys',)
-d["a"] = Mapping({"abcG" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
-d["a"] = Mapping({"abcG" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing *Iter* using d["a"] = %s
-d["a"] = FailingIter():TypeError:('unable to convert FailingIter to a Vim structure',)
-d["a"] = FailingIterNext():NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using d["a"] = %s
-d["a"] = None:NOT FAILED
-d["a"] = {"": 1}:ValueError:('empty keys are not allowed',)
-d["a"] = {u"": 1}:ValueError:('empty keys are not allowed',)
-d["a"] = FailingMapping():NotImplementedError:('keys',)
-d["a"] = FailingMappingKey():NotImplementedError:('getitem:mappingkey',)
-d["a"] = FailingNumber():TypeError:('long() argument must be a string or a number',)
-<<< Finished
->> DictionaryUpdate
->>> kwargs
->>> iter
-d.update(FailingMapping()):NotImplementedError:('keys',)
-d.update([FailingIterNext()]):NotImplementedError:('next',)
-d.update([FailingIterNextN(1)]):NotImplementedError:('next N',)
->>> Testing *Iter* using d.update(%s)
-d.update(FailingIter()):NotImplementedError:('iter',)
-d.update(FailingIterNext()):NotImplementedError:('next',)
-<<< Finished
->>> Testing StringToChars using d.update({%s : 1})
-d.update({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
-d.update({u"\0" : 1}):TypeError:('expected string without null bytes',)
-d.update({"\0" : 1}):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d.update({"abcF" : {%s : 1}})
-d.update({"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
-d.update({"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
-d.update({"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d.update({"abcF" : Mapping({%s : 1})})
-d.update({"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
-d.update({"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
-d.update({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using d.update({"abcF" : %s})
-d.update({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',)
-d.update({"abcF" : FailingIterNext()}):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using d.update({"abcF" : %s})
-d.update({"abcF" : None}):NOT FAILED
-d.update({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',)
-d.update({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',)
-d.update({"abcF" : FailingMapping()}):NotImplementedError:('keys',)
-d.update({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
-d.update({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing StringToChars using d.update(Mapping({%s : 1}))
-d.update(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',)
-d.update(Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',)
-d.update(Mapping({"\0" : 1})):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d.update(Mapping({"abcG" : {%s : 1}}))
-d.update(Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',)
-d.update(Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',)
-d.update(Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d.update(Mapping({"abcG" : Mapping({%s : 1})}))
-d.update(Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',)
-d.update(Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',)
-d.update(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using d.update(Mapping({"abcG" : %s}))
-d.update(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to a Vim structure',)
-d.update(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using d.update(Mapping({"abcG" : %s}))
-d.update(Mapping({"abcG" : None})):NOT FAILED
-d.update(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',)
-d.update(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',)
-d.update(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',)
-d.update(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',)
-d.update(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing *Iter* using d.update(%s)
-d.update(FailingIter()):NotImplementedError:('iter',)
-d.update(FailingIterNext()):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using d.update(%s)
-d.update(None):TypeError:("'NoneType' object is not iterable",)
-d.update({"": 1}):ValueError:('empty keys are not allowed',)
-d.update({u"": 1}):ValueError:('empty keys are not allowed',)
-d.update(FailingMapping()):NotImplementedError:('keys',)
-d.update(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',)
-d.update(FailingNumber()):TypeError:("'FailingNumber' object is not iterable",)
-<<< Finished
->>> Testing StringToChars using d.update(((%s, 0),))
-d.update(((1, 0),)):TypeError:('expected str() or unicode() instance, but got int',)
-d.update(((u"\0", 0),)):TypeError:('expected string without null bytes',)
-d.update((("\0", 0),)):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d.update((("a", {%s : 1}),))
-d.update((("a", {1 : 1}),)):TypeError:('expected str() or unicode() instance, but got int',)
-d.update((("a", {u"\0" : 1}),)):TypeError:('expected string without null bytes',)
-d.update((("a", {"\0" : 1}),)):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d.update((("a", {"abcF" : {%s : 1}}),))
-d.update((("a", {"abcF" : {1 : 1}}),)):TypeError:('expected str() or unicode() instance, but got int',)
-d.update((("a", {"abcF" : {u"\0" : 1}}),)):TypeError:('expected string without null bytes',)
-d.update((("a", {"abcF" : {"\0" : 1}}),)):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d.update((("a", {"abcF" : Mapping({%s : 1})}),))
-d.update((("a", {"abcF" : Mapping({1 : 1})}),)):TypeError:('expected str() or unicode() instance, but got int',)
-d.update((("a", {"abcF" : Mapping({u"\0" : 1})}),)):TypeError:('expected string without null bytes',)
-d.update((("a", {"abcF" : Mapping({"\0" : 1})}),)):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using d.update((("a", {"abcF" : %s}),))
-d.update((("a", {"abcF" : FailingIter()}),)):TypeError:('unable to convert FailingIter to a Vim structure',)
-d.update((("a", {"abcF" : FailingIterNext()}),)):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using d.update((("a", {"abcF" : %s}),))
-d.update((("a", {"abcF" : None}),)):error:("failed to add key 'a' to dictionary",)
-d.update((("a", {"abcF" : {"": 1}}),)):ValueError:('empty keys are not allowed',)
-d.update((("a", {"abcF" : {u"": 1}}),)):ValueError:('empty keys are not allowed',)
-d.update((("a", {"abcF" : FailingMapping()}),)):NotImplementedError:('keys',)
-d.update((("a", {"abcF" : FailingMappingKey()}),)):NotImplementedError:('getitem:mappingkey',)
-d.update((("a", {"abcF" : FailingNumber()}),)):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),))
-d.update((("a", Mapping({1 : 1})),)):TypeError:('expected str() or unicode() instance, but got int',)
-d.update((("a", Mapping({u"\0" : 1})),)):TypeError:('expected string without null bytes',)
-d.update((("a", Mapping({"\0" : 1})),)):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d.update((("a", Mapping({"abcG" : {%s : 1}})),))
-d.update((("a", Mapping({"abcG" : {1 : 1}})),)):TypeError:('expected str() or unicode() instance, but got int',)
-d.update((("a", Mapping({"abcG" : {u"\0" : 1}})),)):TypeError:('expected string without null bytes',)
-d.update((("a", Mapping({"abcG" : {"\0" : 1}})),)):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using d.update((("a", Mapping({"abcG" : Mapping({%s : 1})})),))
-d.update((("a", Mapping({"abcG" : Mapping({1 : 1})})),)):TypeError:('expected str() or unicode() instance, but got int',)
-d.update((("a", Mapping({"abcG" : Mapping({u"\0" : 1})})),)):TypeError:('expected string without null bytes',)
-d.update((("a", Mapping({"abcG" : Mapping({"\0" : 1})})),)):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using d.update((("a", Mapping({"abcG" : %s})),))
-d.update((("a", Mapping({"abcG" : FailingIter()})),)):TypeError:('unable to convert FailingIter to a Vim structure',)
-d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abcG" : %s})),))
-d.update((("a", Mapping({"abcG" : None})),)):error:("failed to add key 'a' to dictionary",)
-d.update((("a", Mapping({"abcG" : {"": 1}})),)):ValueError:('empty keys are not allowed',)
-d.update((("a", Mapping({"abcG" : {u"": 1}})),)):ValueError:('empty keys are not allowed',)
-d.update((("a", Mapping({"abcG" : FailingMapping()})),)):NotImplementedError:('keys',)
-d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):NotImplementedError:('getitem:mappingkey',)
-d.update((("a", Mapping({"abcG" : FailingNumber()})),)):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing *Iter* using d.update((("a", %s),))
-d.update((("a", FailingIter()),)):TypeError:('unable to convert FailingIter to a Vim structure',)
-d.update((("a", FailingIterNext()),)):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using d.update((("a", %s),))
-d.update((("a", None),)):error:("failed to add key 'a' to dictionary",)
-d.update((("a", {"": 1}),)):ValueError:('empty keys are not allowed',)
-d.update((("a", {u"": 1}),)):ValueError:('empty keys are not allowed',)
-d.update((("a", FailingMapping()),)):NotImplementedError:('keys',)
-d.update((("a", FailingMappingKey()),)):NotImplementedError:('getitem:mappingkey',)
-d.update((("a", FailingNumber()),)):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->> DictionaryPopItem
-d.popitem(1, 2):TypeError:('popitem() takes no arguments (2 given)',)
->> DictionaryHasKey
-d.has_key():TypeError:('has_key() takes exactly one argument (0 given)',)
-> List
->> ListConstructor
-vim.List(1, 2):TypeError:('function takes at most 1 argument (2 given)',)
-vim.List(a=1):TypeError:('list constructor does not accept keyword arguments',)
->>> Testing *Iter* using vim.List(%s)
-vim.List(FailingIter()):NotImplementedError:('iter',)
-vim.List(FailingIterNext()):NotImplementedError:('next',)
-<<< Finished
->>> Testing StringToChars using vim.List([{%s : 1}])
-vim.List([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',)
-vim.List([{u"\0" : 1}]):TypeError:('expected string without null bytes',)
-vim.List([{"\0" : 1}]):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using vim.List([{"abcF" : {%s : 1}}])
-vim.List([{"abcF" : {1 : 1}}]):TypeError:('expected str() or unicode() instance, but got int',)
-vim.List([{"abcF" : {u"\0" : 1}}]):TypeError:('expected string without null bytes',)
-vim.List([{"abcF" : {"\0" : 1}}]):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using vim.List([{"abcF" : Mapping({%s : 1})}])
-vim.List([{"abcF" : Mapping({1 : 1})}]):TypeError:('expected str() or unicode() instance, but got int',)
-vim.List([{"abcF" : Mapping({u"\0" : 1})}]):TypeError:('expected string without null bytes',)
-vim.List([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using vim.List([{"abcF" : %s}])
-vim.List([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to a Vim structure',)
-vim.List([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using vim.List([{"abcF" : %s}])
-vim.List([{"abcF" : None}]):NOT FAILED
-vim.List([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',)
-vim.List([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',)
-vim.List([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',)
-vim.List([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',)
-vim.List([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing StringToChars using vim.List([Mapping({%s : 1})])
-vim.List([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',)
-vim.List([Mapping({u"\0" : 1})]):TypeError:('expected string without null bytes',)
-vim.List([Mapping({"\0" : 1})]):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using vim.List([Mapping({"abcG" : {%s : 1}})])
-vim.List([Mapping({"abcG" : {1 : 1}})]):TypeError:('expected str() or unicode() instance, but got int',)
-vim.List([Mapping({"abcG" : {u"\0" : 1}})]):TypeError:('expected string without null bytes',)
-vim.List([Mapping({"abcG" : {"\0" : 1}})]):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using vim.List([Mapping({"abcG" : Mapping({%s : 1})})])
-vim.List([Mapping({"abcG" : Mapping({1 : 1})})]):TypeError:('expected str() or unicode() instance, but got int',)
-vim.List([Mapping({"abcG" : Mapping({u"\0" : 1})})]):TypeError:('expected string without null bytes',)
-vim.List([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using vim.List([Mapping({"abcG" : %s})])
-vim.List([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to a Vim structure',)
-vim.List([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using vim.List([Mapping({"abcG" : %s})])
-vim.List([Mapping({"abcG" : None})]):NOT FAILED
-vim.List([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',)
-vim.List([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',)
-vim.List([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',)
-vim.List([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',)
-vim.List([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing *Iter* using vim.List([%s])
-vim.List([FailingIter()]):TypeError:('unable to convert FailingIter to a Vim structure',)
-vim.List([FailingIterNext()]):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using vim.List([%s])
-vim.List([None]):NOT FAILED
-vim.List([{"": 1}]):ValueError:('empty keys are not allowed',)
-vim.List([{u"": 1}]):ValueError:('empty keys are not allowed',)
-vim.List([FailingMapping()]):NotImplementedError:('keys',)
-vim.List([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',)
-vim.List([FailingNumber()]):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->> ListItem
-l[1000]:IndexError:('list index out of range',)
->> ListAssItem
-ll[1] = 2:error:('list is locked',)
-l[1000] = 3:IndexError:('list index out of range',)
->> ListAssSlice
-ll[1:100] = "abcJ":error:('list is locked',)
->>> Testing *Iter* using l[:] = %s
-l[:] = FailingIter():NotImplementedError:('iter',)
-l[:] = FailingIterNext():NotImplementedError:('next',)
-<<< Finished
-nel[1:10:2]  = "abcK":ValueError:('attempt to assign sequence of size greater than 2 to extended slice',)
-('a', 'b', 'c', 'O')
-nel[1:10:2]  = "a":ValueError:('attempt to assign sequence of size 1 to extended slice of size 2',)
-('a', 'b', 'c', 'O')
-nel[1:1:-1]  = "a":ValueError:('attempt to assign sequence of size greater than 0 to extended slice',)
-('a', 'b', 'c', 'O')
-nel[:] = FailingIterNextN(2):NotImplementedError:('next N',)
-('a', 'b', 'c', 'O')
->>> Testing StringToChars using l[:] = [{%s : 1}]
-l[:] = [{1 : 1}]:TypeError:('expected str() or unicode() instance, but got int',)
-l[:] = [{u"\0" : 1}]:TypeError:('expected string without null bytes',)
-l[:] = [{"\0" : 1}]:TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using l[:] = [{"abcF" : {%s : 1}}]
-l[:] = [{"abcF" : {1 : 1}}]:TypeError:('expected str() or unicode() instance, but got int',)
-l[:] = [{"abcF" : {u"\0" : 1}}]:TypeError:('expected string without null bytes',)
-l[:] = [{"abcF" : {"\0" : 1}}]:TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using l[:] = [{"abcF" : Mapping({%s : 1})}]
-l[:] = [{"abcF" : Mapping({1 : 1})}]:TypeError:('expected str() or unicode() instance, but got int',)
-l[:] = [{"abcF" : Mapping({u"\0" : 1})}]:TypeError:('expected string without null bytes',)
-l[:] = [{"abcF" : Mapping({"\0" : 1})}]:TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using l[:] = [{"abcF" : %s}]
-l[:] = [{"abcF" : FailingIter()}]:TypeError:('unable to convert FailingIter to a Vim structure',)
-l[:] = [{"abcF" : FailingIterNext()}]:NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using l[:] = [{"abcF" : %s}]
-l[:] = [{"abcF" : None}]:NOT FAILED
-l[:] = [{"abcF" : {"": 1}}]:ValueError:('empty keys are not allowed',)
-l[:] = [{"abcF" : {u"": 1}}]:ValueError:('empty keys are not allowed',)
-l[:] = [{"abcF" : FailingMapping()}]:NotImplementedError:('keys',)
-l[:] = [{"abcF" : FailingMappingKey()}]:NotImplementedError:('getitem:mappingkey',)
-l[:] = [{"abcF" : FailingNumber()}]:TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing StringToChars using l[:] = [Mapping({%s : 1})]
-l[:] = [Mapping({1 : 1})]:TypeError:('expected str() or unicode() instance, but got int',)
-l[:] = [Mapping({u"\0" : 1})]:TypeError:('expected string without null bytes',)
-l[:] = [Mapping({"\0" : 1})]:TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using l[:] = [Mapping({"abcG" : {%s : 1}})]
-l[:] = [Mapping({"abcG" : {1 : 1}})]:TypeError:('expected str() or unicode() instance, but got int',)
-l[:] = [Mapping({"abcG" : {u"\0" : 1}})]:TypeError:('expected string without null bytes',)
-l[:] = [Mapping({"abcG" : {"\0" : 1}})]:TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using l[:] = [Mapping({"abcG" : Mapping({%s : 1})})]
-l[:] = [Mapping({"abcG" : Mapping({1 : 1})})]:TypeError:('expected str() or unicode() instance, but got int',)
-l[:] = [Mapping({"abcG" : Mapping({u"\0" : 1})})]:TypeError:('expected string without null bytes',)
-l[:] = [Mapping({"abcG" : Mapping({"\0" : 1})})]:TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using l[:] = [Mapping({"abcG" : %s})]
-l[:] = [Mapping({"abcG" : FailingIter()})]:TypeError:('unable to convert FailingIter to a Vim structure',)
-l[:] = [Mapping({"abcG" : FailingIterNext()})]:NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using l[:] = [Mapping({"abcG" : %s})]
-l[:] = [Mapping({"abcG" : None})]:NOT FAILED
-l[:] = [Mapping({"abcG" : {"": 1}})]:ValueError:('empty keys are not allowed',)
-l[:] = [Mapping({"abcG" : {u"": 1}})]:ValueError:('empty keys are not allowed',)
-l[:] = [Mapping({"abcG" : FailingMapping()})]:NotImplementedError:('keys',)
-l[:] = [Mapping({"abcG" : FailingMappingKey()})]:NotImplementedError:('getitem:mappingkey',)
-l[:] = [Mapping({"abcG" : FailingNumber()})]:TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing *Iter* using l[:] = [%s]
-l[:] = [FailingIter()]:TypeError:('unable to convert FailingIter to a Vim structure',)
-l[:] = [FailingIterNext()]:NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using l[:] = [%s]
-l[:] = [None]:NOT FAILED
-l[:] = [{"": 1}]:ValueError:('empty keys are not allowed',)
-l[:] = [{u"": 1}]:ValueError:('empty keys are not allowed',)
-l[:] = [FailingMapping()]:NotImplementedError:('keys',)
-l[:] = [FailingMappingKey()]:NotImplementedError:('getitem:mappingkey',)
-l[:] = [FailingNumber()]:TypeError:('long() argument must be a string or a number',)
-<<< Finished
->> ListConcatInPlace
->>> Testing *Iter* using l.extend(%s)
-l.extend(FailingIter()):NotImplementedError:('iter',)
-l.extend(FailingIterNext()):NotImplementedError:('next',)
-<<< Finished
->>> Testing StringToChars using l.extend([{%s : 1}])
-l.extend([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',)
-l.extend([{u"\0" : 1}]):TypeError:('expected string without null bytes',)
-l.extend([{"\0" : 1}]):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using l.extend([{"abcF" : {%s : 1}}])
-l.extend([{"abcF" : {1 : 1}}]):TypeError:('expected str() or unicode() instance, but got int',)
-l.extend([{"abcF" : {u"\0" : 1}}]):TypeError:('expected string without null bytes',)
-l.extend([{"abcF" : {"\0" : 1}}]):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using l.extend([{"abcF" : Mapping({%s : 1})}])
-l.extend([{"abcF" : Mapping({1 : 1})}]):TypeError:('expected str() or unicode() instance, but got int',)
-l.extend([{"abcF" : Mapping({u"\0" : 1})}]):TypeError:('expected string without null bytes',)
-l.extend([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using l.extend([{"abcF" : %s}])
-l.extend([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to a Vim structure',)
-l.extend([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using l.extend([{"abcF" : %s}])
-l.extend([{"abcF" : None}]):NOT FAILED
-l.extend([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',)
-l.extend([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',)
-l.extend([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',)
-l.extend([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',)
-l.extend([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing StringToChars using l.extend([Mapping({%s : 1})])
-l.extend([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',)
-l.extend([Mapping({u"\0" : 1})]):TypeError:('expected string without null bytes',)
-l.extend([Mapping({"\0" : 1})]):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using l.extend([Mapping({"abcG" : {%s : 1}})])
-l.extend([Mapping({"abcG" : {1 : 1}})]):TypeError:('expected str() or unicode() instance, but got int',)
-l.extend([Mapping({"abcG" : {u"\0" : 1}})]):TypeError:('expected string without null bytes',)
-l.extend([Mapping({"abcG" : {"\0" : 1}})]):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using l.extend([Mapping({"abcG" : Mapping({%s : 1})})])
-l.extend([Mapping({"abcG" : Mapping({1 : 1})})]):TypeError:('expected str() or unicode() instance, but got int',)
-l.extend([Mapping({"abcG" : Mapping({u"\0" : 1})})]):TypeError:('expected string without null bytes',)
-l.extend([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using l.extend([Mapping({"abcG" : %s})])
-l.extend([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to a Vim structure',)
-l.extend([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using l.extend([Mapping({"abcG" : %s})])
-l.extend([Mapping({"abcG" : None})]):NOT FAILED
-l.extend([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',)
-l.extend([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',)
-l.extend([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',)
-l.extend([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',)
-l.extend([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing *Iter* using l.extend([%s])
-l.extend([FailingIter()]):TypeError:('unable to convert FailingIter to a Vim structure',)
-l.extend([FailingIterNext()]):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using l.extend([%s])
-l.extend([None]):NOT FAILED
-l.extend([{"": 1}]):ValueError:('empty keys are not allowed',)
-l.extend([{u"": 1}]):ValueError:('empty keys are not allowed',)
-l.extend([FailingMapping()]):NotImplementedError:('keys',)
-l.extend([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',)
-l.extend([FailingNumber()]):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->> ListSetattr
-del l.locked:AttributeError:('cannot delete vim.List attributes',)
-l.locked = FailingTrue():NotImplementedError:('bool',)
-l.xxx = True:AttributeError:('cannot set attribute xxx',)
-> Function
->> FunctionConstructor
->>> FunctionConstructor
-vim.Function("123"):ValueError:('unnamed function 123 does not exist',)
-vim.Function("xxx_non_existent_function_xxx"):ValueError:('function xxx_non_existent_function_xxx does not exist',)
-vim.Function("xxx#non#existent#function#xxx"):NOT FAILED
-vim.Function("xxx_non_existent_function_xxx2", args=[]):ValueError:('function xxx_non_existent_function_xxx2 does not exist',)
-vim.Function("xxx_non_existent_function_xxx3", self={}):ValueError:('function xxx_non_existent_function_xxx3 does not exist',)
-vim.Function("xxx_non_existent_function_xxx4", args=[], self={}):ValueError:('function xxx_non_existent_function_xxx4 does not exist',)
->>> FunctionNew
-vim.Function("tr", self="abcFuncSelf"):TypeError:('unable to convert str to a Vim dictionary',)
-vim.Function("tr", args=427423):TypeError:('unable to convert int to a Vim list',)
-vim.Function("tr", self="abcFuncSelf2", args="abcFuncArgs2"):TypeError:('unable to convert str to a Vim dictionary',)
-vim.Function(self="abcFuncSelf2", args="abcFuncArgs2"):TypeError:('unable to convert str to a Vim dictionary',)
-vim.Function("tr", "", self="abcFuncSelf2", args="abcFuncArgs2"):TypeError:('unable to convert str to a Vim dictionary',)
-vim.Function("tr", ""):TypeError:('function takes exactly 1 argument (2 given)',)
->> FunctionCall
->>> Testing StringToChars using f({%s : 1})
-f({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
-f({u"\0" : 1}):TypeError:('expected string without null bytes',)
-f({"\0" : 1}):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using f({"abcF" : {%s : 1}})
-f({"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
-f({"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
-f({"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using f({"abcF" : Mapping({%s : 1})})
-f({"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
-f({"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
-f({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using f({"abcF" : %s})
-f({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',)
-f({"abcF" : FailingIterNext()}):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using f({"abcF" : %s})
-f({"abcF" : None}):NOT FAILED
-f({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',)
-f({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',)
-f({"abcF" : FailingMapping()}):NotImplementedError:('keys',)
-f({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
-f({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing StringToChars using f(Mapping({%s : 1}))
-f(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',)
-f(Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',)
-f(Mapping({"\0" : 1})):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using f(Mapping({"abcG" : {%s : 1}}))
-f(Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',)
-f(Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',)
-f(Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using f(Mapping({"abcG" : Mapping({%s : 1})}))
-f(Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',)
-f(Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',)
-f(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using f(Mapping({"abcG" : %s}))
-f(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to a Vim structure',)
-f(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using f(Mapping({"abcG" : %s}))
-f(Mapping({"abcG" : None})):NOT FAILED
-f(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',)
-f(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',)
-f(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',)
-f(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',)
-f(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing *Iter* using f(%s)
-f(FailingIter()):TypeError:('unable to convert FailingIter to a Vim structure',)
-f(FailingIterNext()):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using f(%s)
-f(None):NOT FAILED
-f({"": 1}):ValueError:('empty keys are not allowed',)
-f({u"": 1}):ValueError:('empty keys are not allowed',)
-f(FailingMapping()):NotImplementedError:('keys',)
-f(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',)
-f(FailingNumber()):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing StringToChars using fd(self={%s : 1})
-fd(self={1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
-fd(self={u"\0" : 1}):TypeError:('expected string without null bytes',)
-fd(self={"\0" : 1}):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using fd(self={"abcF" : {%s : 1}})
-fd(self={"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
-fd(self={"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
-fd(self={"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using fd(self={"abcF" : Mapping({%s : 1})})
-fd(self={"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
-fd(self={"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
-fd(self={"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using fd(self={"abcF" : %s})
-fd(self={"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',)
-fd(self={"abcF" : FailingIterNext()}):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using fd(self={"abcF" : %s})
-fd(self={"abcF" : None}):NOT FAILED
-fd(self={"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',)
-fd(self={"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',)
-fd(self={"abcF" : FailingMapping()}):NotImplementedError:('keys',)
-fd(self={"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
-fd(self={"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing StringToChars using fd(self=Mapping({%s : 1}))
-fd(self=Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',)
-fd(self=Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',)
-fd(self=Mapping({"\0" : 1})):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using fd(self=Mapping({"abcG" : {%s : 1}}))
-fd(self=Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',)
-fd(self=Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',)
-fd(self=Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing StringToChars using fd(self=Mapping({"abcG" : Mapping({%s : 1})}))
-fd(self=Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',)
-fd(self=Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',)
-fd(self=Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',)
-<<< Finished
->>> Testing *Iter* using fd(self=Mapping({"abcG" : %s}))
-fd(self=Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to a Vim structure',)
-fd(self=Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',)
-<<< Finished
->>> Testing ConvertFromPyObject using fd(self=Mapping({"abcG" : %s}))
-fd(self=Mapping({"abcG" : None})):NOT FAILED
-fd(self=Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',)
-fd(self=Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',)
-fd(self=Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',)
-fd(self=Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',)
-fd(self=Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',)
-<<< Finished
->>> Testing *Iter* using fd(self=%s)
-fd(self=FailingIter()):TypeError:('unable to convert FailingIter to a Vim dictionary',)
-fd(self=FailingIterNext()):TypeError:('unable to convert FailingIterNext to a Vim dictionary',)
-<<< Finished
->>> Testing ConvertFromPyObject using fd(self=%s)
-fd(self=None):TypeError:('unable to convert NoneType to a Vim dictionary',)
-fd(self={"": 1}):ValueError:('empty keys are not allowed',)
-fd(self={u"": 1}):ValueError:('empty keys are not allowed',)
-fd(self=FailingMapping()):NotImplementedError:('keys',)
-fd(self=FailingMappingKey()):NotImplementedError:('getitem:mappingkey',)
-fd(self=FailingNumber()):TypeError:('unable to convert FailingNumber to a Vim dictionary',)
-<<< Finished
->>> Testing ConvertFromPyMapping using fd(self=%s)
-fd(self=[]):TypeError:('unable to convert list to a Vim dictionary',)
-<<< Finished
-> TabPage
->> TabPageAttr
-vim.current.tabpage.xxx:AttributeError:('xxx',)
-> TabList
->> TabListItem
-vim.tabpages[1000]:IndexError:('no such tab page',)
-> Window
->> WindowAttr
-vim.current.window.xxx:AttributeError:('xxx',)
->> WindowSetattr
-vim.current.window.buffer = 0:TypeError:('readonly attribute: buffer',)
-vim.current.window.cursor = (100000000, 100000000):error:('cursor position outside buffer',)
-vim.current.window.cursor = True:TypeError:('argument must be 2-item sequence, not bool',)
->>> Testing NumberToLong using vim.current.window.height = %s
-vim.current.window.height = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
-vim.current.window.height = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
-vim.current.window.height = -1:ValueError:('number must be greater or equal to zero',)
-<<< Finished
->>> Testing NumberToLong using vim.current.window.width = %s
-vim.current.window.width = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
-vim.current.window.width = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
-vim.current.window.width = -1:ValueError:('number must be greater or equal to zero',)
-<<< Finished
-vim.current.window.xxxxxx = True:AttributeError:('xxxxxx',)
-> WinList
->> WinListItem
-vim.windows[1000]:IndexError:('no such window',)
-> Buffer
->> StringToLine (indirect)
-vim.current.buffer[0] = u"\na":error:('string cannot contain newlines',)
-vim.current.buffer[0] = "\na":error:('string cannot contain newlines',)
->> SetBufferLine (indirect)
-vim.current.buffer[0] = True:TypeError:('bad argument type for built-in operation',)
->> SetBufferLineList (indirect)
-vim.current.buffer[:] = True:TypeError:('bad argument type for built-in operation',)
-vim.current.buffer[:] = ["\na", "bc"]:error:('string cannot contain newlines',)
->> InsertBufferLines (indirect)
-vim.current.buffer.append(None):TypeError:('bad argument type for built-in operation',)
-vim.current.buffer.append(["\na", "bc"]):error:('string cannot contain newlines',)
-vim.current.buffer.append("\nbc"):error:('string cannot contain newlines',)
->> RBItem
-vim.current.buffer[100000000]:IndexError:('line number out of range',)
->> RBAsItem
-vim.current.buffer[100000000] = "":IndexError:('line number out of range',)
->> BufferAttr
-vim.current.buffer.xxx:AttributeError:('xxx',)
->> BufferSetattr
-vim.current.buffer.name = True:TypeError:('expected str() or unicode() instance, but got bool',)
-vim.current.buffer.xxx = True:AttributeError:('xxx',)
->> BufferMark
-vim.current.buffer.mark(0):TypeError:('expected str() or unicode() instance, but got int',)
-vim.current.buffer.mark("abcM"):ValueError:('mark name must be a single character',)
-vim.current.buffer.mark("!"):error:('invalid mark name',)
->> BufferRange
-vim.current.buffer.range(1, 2, 3):TypeError:('function takes exactly 2 arguments (3 given)',)
-> BufMap
->> BufMapItem
-vim.buffers[100000000]:KeyError:(100000000,)
->>> Testing NumberToLong using vim.buffers[%s]
-vim.buffers[[]]:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
-vim.buffers[None]:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
-vim.buffers[-1]:ValueError:('number must be greater than zero',)
-vim.buffers[0]:ValueError:('number must be greater than zero',)
-<<< Finished
-> Current
->> CurrentGetattr
-vim.current.xxx:AttributeError:('xxx',)
->> CurrentSetattr
-vim.current.line = True:TypeError:('bad argument type for built-in operation',)
-vim.current.buffer = True:TypeError:('expected vim.Buffer object, but got bool',)
-vim.current.window = True:TypeError:('expected vim.Window object, but got bool',)
-vim.current.tabpage = True:TypeError:('expected vim.TabPage object, but got bool',)
-vim.current.xxx = True:AttributeError:('xxx',)
-['/testdir']
-'/testdir'
-2,xx
-before
-after
-pythonx/topmodule/__init__.py
-pythonx/topmodule/submodule/__init__.py
-pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py
-vim.command("throw 'abcN'"):error:('abcN',)
-Exe("throw 'def'"):error:('def',)
-vim.eval("Exe('throw ''ghi''')"):error:('ghi',)
-vim.eval("Exe('echoerr ''jkl''')"):error:('Vim(echoerr):jkl',)
-vim.eval("Exe('xxx_non_existent_command_xxx')"):error:('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)
-vim.eval("xxx_unknown_function_xxx()"):error:('Vim:E117: Unknown function: xxx_unknown_function_xxx',)
-vim.bindeval("Exe('xxx_non_existent_command_xxx')"):error:('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)
-Caught KeyboardInterrupt
-Running :put
-No exception
-
diff --git a/src/testdir/test_python2.vim b/src/testdir/test_python2.vim
index ae76fe6..dae2739 100644
--- a/src/testdir/test_python2.vim
+++ b/src/testdir/test_python2.vim
@@ -1,12 +1,61 @@
 " Test for python 2 commands.
-" TODO: move tests from test86.in here.
 
 source check.vim
 CheckFeature python
+CheckFeature quickfix
+
+" NOTE: This will cause errors when run under valgrind.
+" This would require recompiling Python with:
+"   ./configure --without-pymalloc
+" See http://svn.python.org/view/python/trunk/Misc/README.valgrind?view=markup
+"
+
+" This function should be called first. This sets up python functions used by
+" the other tests.
+func Test_AAA_python_setup()
+  py << trim EOF
+    import vim
+    import sys
+
+    def emsg(ei):
+      return ei[0].__name__ + ':' + repr(ei[1].args)
+
+    def ee(expr, g=globals(), l=locals()):
+      try:
+        exec(expr, g, l)
+      except:
+        ei = sys.exc_info()
+        msg = emsg(ei)
+        msg = msg.replace('TypeError:(\'argument 1 ', 'TypeError:(\'')
+        if expr.find('None') > -1:
+          msg = msg.replace('TypeError:(\'iteration over non-sequence\',)',
+                        'TypeError:("\'NoneType\' object is not iterable",)')
+        if expr.find('FailingNumber') > -1:
+          msg = msg.replace(', not \'FailingNumber\'', '').replace('"', '\'')
+          msg = msg.replace('TypeError:(\'iteration over non-sequence\',)',
+                    'TypeError:("\'FailingNumber\' object is not iterable",)')
+        if msg.find('(\'\'') > -1 or msg.find('(\'can\'t') > -1:
+          msg = msg.replace('(\'', '("').replace('\',)', '",)')
+        # Some Python versions say can't, others cannot.
+        if msg.find('can\'t') > -1:
+          msg = msg.replace('can\'t', 'cannot')
+        # Some Python versions use single quote, some double quote
+        if msg.find('"cannot ') > -1:
+          msg = msg.replace('"cannot ', '\'cannot ')
+        if msg.find(' attributes"') > -1:
+          msg = msg.replace(' attributes"', ' attributes\'')
+        if expr == 'fd(self=[])':
+          # HACK: PyMapping_Check changed meaning
+          msg = msg.replace('AttributeError:(\'keys\',)',
+                  'TypeError:(\'unable to convert list to vim dictionary\',)')
+        vim.current.buffer.append(expr + ':' + msg)
+      else:
+        vim.current.buffer.append(expr + ':NOT FAILED')
+  EOF
+endfunc
 
 func Test_pydo()
   " Check deleting lines does not trigger ml_get error.
-  py import vim
   new
   call setline(1, ['one', 'two', 'three'])
   pydo vim.command("%d_")
@@ -24,7 +73,6 @@
 
 func Test_set_cursor()
   " Check that setting the cursor position works.
-  py import vim
   new
   call setline(1, ['first line', 'second line'])
   normal gg
@@ -38,7 +86,6 @@
 
 func Test_vim_function()
   " Check creating vim.Function object
-  py import vim
 
   func s:foo()
     return matchstr(expand('<sfile>'), '<SNR>\zs\d\+_foo$')
@@ -59,6 +106,15 @@
     call assert_false(v:exception)
   endtry
 
+  let caught_vim_err = v:false
+  try
+    let x = pyeval('f.abc')
+  catch
+    call assert_match('AttributeError: abc', v:exception)
+    let caught_vim_err = v:true
+  endtry
+  call assert_equal(v:true, caught_vim_err)
+
   py del f
   delfunc s:foo
 endfunc
@@ -72,7 +128,6 @@
 endfunc
 
 func _SetUpHiddenBuffer()
-  py import vim
   new
   edit hidden
   setlocal bufhidden=hide
@@ -122,7 +177,6 @@
 endfunc
 
 func _SetUpVisibleBuffer()
-  py import vim
   new
   let lnum = 0
   while lnum < 10
@@ -149,7 +203,7 @@
   call assert_equal( line( '.' ), 1 )
 
   bwipe!
-endfunction
+endfunc
 
 func Test_Write_To_Current_Buffer_Fixes_Cursor_Str()
   call _SetUpVisibleBuffer()
@@ -158,7 +212,7 @@
   call assert_equal( line( '.' ), 10 )
 
   bwipe!
-endfunction
+endfunc
 
 func Test_Catch_Exception_Message()
   try
@@ -188,4 +242,3306 @@
   call assert_equal('ABCDE', pyxeval('s'))
 endfunc
 
+" Test for the buffer range object
+func Test_python_range()
+  new
+  call setline(1, ['one', 'two', 'three'])
+  py b = vim.current.buffer
+  py r = b.range(1, 3)
+  call assert_equal(0, pyeval('r.start'))
+  call assert_equal(2, pyeval('r.end'))
+  call assert_equal(['two', 'three'], pyeval('r[1:]'))
+  py r[0] = 'green'
+  call assert_equal(['green', 'two', 'three'], getline(1, '$'))
+  py r[0:2] = ['red', 'blue']
+  call assert_equal(['red', 'blue', 'three'], getline(1, '$'))
+  call assert_equal(['start', 'end', '__members__'], pyeval('r.__members__'))
+
+  let caught_vim_err = v:false
+  try
+    let x = pyeval('r.abc')
+  catch
+    call assert_match('AttributeError: abc', v:exception)
+    let caught_vim_err = v:true
+  endtry
+  call assert_equal(v:true, caught_vim_err)
+
+  close!
+endfunc
+
+" Test for the python tabpage object
+func Test_python_tabpage()
+  tabnew
+  py t = vim.tabpages[1]
+  tabclose
+  let caught_vim_err = v:false
+  try
+    let n = pyeval('t.number')
+  catch
+    call assert_match('vim.error: attempt to refer to deleted tab page',
+          \ v:exception)
+    let caught_vim_err = v:true
+  endtry
+  call assert_equal(v:true, caught_vim_err)
+  %bw!
+endfunc
+
+" Test for the python window object
+func Test_python_window()
+  new
+  py w = vim.current.window
+  close
+  let caught_vim_err = v:false
+  try
+    let n = pyeval('w.number')
+  catch
+    call assert_match('vim.error: attempt to refer to deleted window',
+          \ v:exception)
+    let caught_vim_err = v:true
+  endtry
+  call assert_equal(v:true, caught_vim_err)
+endfunc
+
+" Test for the python List object
+func Test_python_list()
+  let l = [1, 2]
+  py pl = vim.bindeval('l')
+  call assert_equal(['locked', '__members__'], pyeval('pl.__members__'))
+
+  let l = []
+  py l = vim.bindeval('l')
+  py f = vim.bindeval('function("strlen")')
+  " Extending List directly with different types
+  py l.extend([1, "as'd", [1, 2, f, {'a': 1}]])
+  call assert_equal([1, "as'd", [1, 2, function("strlen"), {'a': 1}]], l)
+  call assert_equal([1, 2, function("strlen"), {'a': 1}], l[-1])
+  call assert_fails('echo l[-4]', 'E684:')
+
+  " List assignment
+  py l[0] = 0
+  call assert_equal([0, "as'd", [1, 2, function("strlen"), {'a': 1}]], l)
+  py l[-2] = f
+  call assert_equal([0, function("strlen"), [1, 2, function("strlen"), {'a': 1}]], l)
+endfunc
+
+" Test for the python Dict object
+func Test_python_dict()
+  let d = {}
+  py pd = vim.bindeval('d')
+  call assert_equal(['locked', 'scope', '__members__'],
+        \ pyeval('pd.__members__'))
+endfunc
+
+" Extending Dictionary directly with different types
+func Test_python_dict_extend()
+  let d = {}
+  func d.f()
+    return 1
+  endfunc
+
+  py f = vim.bindeval('function("strlen")')
+  py << trim EOF
+    d = vim.bindeval('d')
+    d['1'] = 'asd'
+    d.update()  # Must not do anything, including throwing errors
+    d.update(b = [1, 2, f])
+    d.update((('-1', {'a': 1}),))
+    d.update({'0': -1})
+    dk = d.keys()
+    dv = d.values()
+    di = d.items()
+    cmpfun = lambda a, b: cmp(repr(a), repr(b))
+    dk.sort(cmpfun)
+    dv.sort(cmpfun)
+    di.sort(cmpfun)
+  EOF
+
+  call assert_equal(1, pyeval("d['f'](self={})"))
+  call assert_equal("['-1', '0', '1', 'b', 'f']", pyeval('repr(dk)'))
+  call assert_equal("['asd', -1L, <vim.Function '1'>, <vim.dictionary object at >, <vim.list object at >]", substitute(pyeval('repr(dv)'),'0x\x\+','','g'))
+  call assert_equal("[('-1', <vim.dictionary object at >), ('0', -1L), ('1', 'asd'), ('b', <vim.list object at >), ('f', <vim.Function '1'>)]", substitute(pyeval('repr(di)'),'0x\x\+','','g'))
+  call assert_equal(['0', '1', 'b', 'f', '-1'], keys(d))
+  call assert_equal("[-1, 'asd', [1, 2, function('strlen')], function('1'), {'a': 1}]", string(values(d)))
+  py del dk
+  py del di
+  py del dv
+endfunc
+
+func Test_python_list_del_items()
+  " removing items with del
+  let l = [0, function("strlen"), [1, 2, function("strlen"), {'a': 1}]]
+  py l = vim.bindeval('l')
+  py del l[2]
+  call assert_equal("[0, function('strlen')]", string(l))
+
+  let l = range(8)
+  py l = vim.bindeval('l')
+  py del l[:3]
+  py del l[1:]
+  call assert_equal([3], l)
+
+  " removing items out of range: silently skip items that don't exist
+
+  " The following two ranges delete nothing as they match empty list:
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py del l[2:1]
+  call assert_equal([0, 1, 2, 3], l)
+  py del l[2:2]
+  call assert_equal([0, 1, 2, 3], l)
+  py del l[2:3]
+  call assert_equal([0, 1, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py del l[2:4]
+  call assert_equal([0, 1], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py del l[2:5]
+  call assert_equal([0, 1], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py del l[2:6]
+  call assert_equal([0, 1], l)
+
+  " The following two ranges delete nothing as they match empty list:
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py del l[-1:2]
+  call assert_equal([0, 1, 2, 3], l)
+  py del l[-2:2]
+  call assert_equal([0, 1, 2, 3], l)
+  py del l[-3:2]
+  call assert_equal([0, 2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py del l[-4:2]
+  call assert_equal([2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py del l[-5:2]
+  call assert_equal([2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py del l[-6:2]
+  call assert_equal([2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py del l[::2]
+  call assert_equal([1, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py del l[3:0:-2]
+  call assert_equal([0, 2], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py del l[2:4:-2]
+  let l = [0, 1, 2, 3]
+endfunc
+
+func Test_python_dict_del_items()
+  let d = eval("{'0' : -1, '1' : 'asd', 'b' : [1, 2, function('strlen')], 'f' : function('min'), '-1' : {'a': 1}}")
+  py d = vim.bindeval('d')
+  py del d['-1']
+  py del d['f']
+  call assert_equal([1, 2, function('strlen')], pyeval('d.get(''b'', 1)'))
+  call assert_equal([1, 2, function('strlen')], pyeval('d.pop(''b'')'))
+  call assert_equal(1, pyeval('d.get(''b'', 1)'))
+  call assert_equal('asd', pyeval('d.pop(''1'', 2)'))
+  call assert_equal(2, pyeval('d.pop(''1'', 2)'))
+  call assert_equal('True', pyeval('repr(d.has_key(''0''))'))
+  call assert_equal('False', pyeval('repr(d.has_key(''1''))'))
+  call assert_equal('True', pyeval('repr(''0'' in d)'))
+  call assert_equal('False', pyeval('repr(''1'' in d)'))
+  call assert_equal("['0']", pyeval('repr(list(iter(d)))'))
+  call assert_equal({'0' : -1}, d)
+  call assert_equal("('0', -1L)", pyeval('repr(d.popitem())'))
+  call assert_equal('None', pyeval('repr(d.get(''0''))'))
+  call assert_equal('[]', pyeval('repr(list(iter(d)))'))
+endfunc
+
+" Slice assignment to a list
+func Test_python_slice_assignment()
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py l[0:0] = ['a']
+  call assert_equal(['a', 0, 1, 2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py l[1:2] = ['b']
+  call assert_equal([0, 'b', 2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py l[2:4] = ['c']
+  call assert_equal([0, 1, 'c'], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py l[4:4] = ['d']
+  call assert_equal([0, 1, 2, 3, 'd'], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py l[-1:2] = ['e']
+  call assert_equal([0, 1, 2, 'e', 3], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py l[-10:2] = ['f']
+  call assert_equal(['f', 2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  py l[2:-10] = ['g']
+  call assert_equal([0, 1, 'g', 2, 3], l)
+
+  let l = []
+  py l = vim.bindeval('l')
+  py l[0:0] = ['h']
+  call assert_equal(['h'], l)
+
+  let l = range(8)
+  py l = vim.bindeval('l')
+  py l[2:6:2] = [10, 20]
+  call assert_equal([0, 1, 10, 3, 20, 5, 6, 7], l)
+
+  let l = range(8)
+  py l = vim.bindeval('l')
+  py l[6:2:-2] = [10, 20]
+  call assert_equal([0, 1, 2, 3, 20, 5, 10, 7], l)
+
+  let l = range(8)
+  py l = vim.bindeval('l')
+  py l[6:2] = ()
+  call assert_equal([0, 1, 2, 3, 4, 5, 6, 7], l)
+
+  let l = range(8)
+  py l = vim.bindeval('l')
+  py l[6:2:1] = ()
+  call assert_equal([0, 1, 2, 3, 4, 5, 6, 7], l)
+
+  let l = range(8)
+  py l = vim.bindeval('l')
+  py l[2:2:1] = ()
+  call assert_equal([0, 1, 2, 3, 4, 5, 6, 7], l)
+endfunc
+
+" Locked variables
+func Test_python_lockedvar()
+  new
+  py cb = vim.current.buffer
+  let l = [0, 1, 2, 3]
+  py l = vim.bindeval('l')
+  lockvar! l
+  py << trim EOF
+    try:
+        l[2]='i'
+    except vim.error:
+        cb.append('l[2] threw vim.error: ' + emsg(sys.exc_info()))
+  EOF
+  call assert_equal(['', "l[2] threw vim.error: error:('list is locked',)"],
+        \ getline(1, '$'))
+  call assert_equal([0, 1, 2, 3], l)
+  unlockvar! l
+  close!
+endfunc
+
+" Test for calling a function
+func Test_python_function_call()
+  func New(...)
+     return ['NewStart'] + a:000 + ['NewEnd']
+  endfunc
+
+  func DictNew(...) dict
+     return ['DictNewStart'] + a:000 + ['DictNewEnd', self]
+  endfunc
+
+  new
+  let l = [function('New'), function('DictNew')]
+  py l = vim.bindeval('l')
+  py l.extend(list(l[0](1, 2, 3)))
+  call assert_equal([function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd'], l)
+  py l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
+  call assert_equal([function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}], l)
+  py l.extend([l[0].name])
+  call assert_equal([function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New'], l)
+  py ee('l[1](1, 2, 3)')
+  call assert_equal("l[1](1, 2, 3):error:('Vim:E725: Calling dict function without Dictionary: DictNew',)", getline(2))
+  %d
+  py f = l[0]
+  delfunction New
+  py ee('f(1, 2, 3)')
+  call assert_equal("f(1, 2, 3):error:('Vim:E117: Unknown function: New',)", getline(2))
+  close!
+  delfunction DictNew
+endfunc
+
+func Test_python_float()
+  CheckFeature float
+  let l = [0.0]
+  py l = vim.bindeval('l')
+  py l.extend([0.0])
+  call assert_equal([0.0, 0.0], l)
+endfunc
+
+" Test for Dict key errors
+func Test_python_dict_key_error()
+  let messages = []
+  py << trim EOF
+    d = vim.bindeval('{}')
+    m = vim.bindeval('messages')
+    def em(expr, g=globals(), l=locals()):
+      try:
+        exec(expr, g, l)
+      except:
+        m.extend([sys.exc_type.__name__])
+
+    em('d["abc1"]')
+    em('d["abc1"]="\\0"')
+    em('d["abc1"]=vim')
+    em('d[""]=1')
+    em('d["a\\0b"]=1')
+    em('d[u"a\\0b"]=1')
+    em('d.pop("abc1")')
+    em('d.popitem()')
+    del em
+    del m
+  EOF
+
+  call assert_equal(['KeyError', 'TypeError', 'TypeError', 'ValueError',
+        \ 'TypeError', 'TypeError', 'KeyError', 'KeyError'], messages)
+  unlet messages
+endfunc
+
+" Test for locked and scope attributes
+func Test_python_lock_scope_attr()
+  let d = {} | let dl = {} | lockvar dl
+  let res = []
+  for s in split("d dl v: g:")
+    let name = tr(s, ':', 's')
+    execute 'py ' .. name .. ' = vim.bindeval("' .. s .. '")'
+    call add(res, s .. ' : ' .. join(map(['locked', 'scope'],
+          \ 'v:val .. ":" .. pyeval(name .. "." .. v:val)'), ';'))
+  endfor
+  call assert_equal(['d : locked:0;scope:0', 'dl : locked:1;scope:0',
+        \ 'v: : locked:2;scope:1', 'g: : locked:0;scope:2'], res)
+
+  silent! let d.abc2 = 1
+  silent! let dl.abc3 = 1
+  py d.locked = True
+  py dl.locked = False
+  silent! let d.def = 1
+  silent! let dl.def = 1
+  call assert_equal({'abc2': 1}, d)
+  call assert_equal({'def': 1}, dl)
+  unlet d dl
+
+  let l = [] | let ll = [] | lockvar ll
+  let res = []
+  for s in split("l ll")
+    let name = tr(s, ':', 's')
+    execute 'py ' .. name .. '=vim.bindeval("' .. s .. '")'
+    call add(res, s .. ' : locked:' .. pyeval(name .. '.locked'))
+  endfor
+  call assert_equal(['l : locked:0', 'll : locked:1'], res)
+
+  silent! call extend(l, [0])
+  silent! call extend(ll, [0])
+  py l.locked = True
+  py ll.locked = False
+  silent! call extend(l, [1])
+  silent! call extend(ll, [1])
+  call assert_equal([0], l)
+  call assert_equal([1], ll)
+  unlet l ll
+endfunc
+
+" Test for pyeval()
+func Test_python_pyeval()
+  let l = pyeval('range(3)')
+  call assert_equal([0, 1, 2], l)
+
+  let d = pyeval('{"a": "b", "c": 1, "d": ["e"]}')
+  call assert_equal([['a', 'b'], ['c', 1], ['d', ['e']]], sort(items(d)))
+
+  let v:errmsg = ''
+  call assert_equal(v:none, pyeval('None'))
+  call assert_equal('', v:errmsg)
+
+  if has('float')
+    call assert_equal(0.0, pyeval('0.0'))
+  endif
+
+  " Invalid values:
+  let caught_859 = 0
+  try
+    let v = pyeval('"\0"')
+  catch /E859:/
+    let caught_859 = 1
+  endtry
+  call assert_equal(1, caught_859)
+
+  let caught_859 = 0
+  try
+    let v = pyeval('{"\0" : 1}')
+  catch /E859:/
+    let caught_859 = 1
+  endtry
+  call assert_equal(1, caught_859)
+
+  let caught_nameerr = 0
+  try
+    let v = pyeval("undefined_name")
+  catch /NameError: name 'undefined_name'/
+    let caught_nameerr = 1
+  endtry
+  call assert_equal(1, caught_nameerr)
+
+  let caught_859 = 0
+  try
+    let v = pyeval("vim")
+  catch /E859:/
+    let caught_859 = 1
+  endtry
+  call assert_equal(1, caught_859)
+endfunc
+
+" threading
+" Running pydo command (Test_pydo) before this test, stops the python thread
+" from running. So this test should be run before the pydo test
+func Test_aaa_python_threading()
+  let l = [0]
+  py l = vim.bindeval('l')
+  py << trim 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()
+    del T
+    t.start()
+  EOF
+
+  sleep 1
+  py t.running = False
+  py t.join()
+
+  " Check if the background thread is working.  Count should be 10, but on a
+  " busy system (AppVeyor) it can be much lower.
+  py l[0] = t.t > 4
+  py del time
+  py del threading
+  py del t
+  call assert_equal([1], l)
+endfunc
+
+" settrace
+func Test_python_settrace()
+  let l = []
+  py l = vim.bindeval('l')
+  py << trim EOF
+    import sys
+
+    def traceit(frame, event, arg):
+      global l
+      if event == "line":
+          l.extend([frame.f_lineno])
+      return traceit
+
+    def trace_main():
+      for i in range(5):
+        pass
+  EOF
+  py sys.settrace(traceit)
+  py trace_main()
+  py sys.settrace(None)
+  py del traceit
+  py del trace_main
+  call assert_equal([1, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 1], l)
+endfunc
+
+" Slice
+func Test_python_list_slice()
+  py ll = vim.bindeval('[0, 1, 2, 3, 4, 5]')
+  py l = ll[:4]
+  call assert_equal([0, 1, 2, 3], pyeval('l'))
+  py l = ll[2:]
+  call assert_equal([2, 3, 4, 5], pyeval('l'))
+  py l = ll[:-4]
+  call assert_equal([0, 1], pyeval('l'))
+  py l = ll[-2:]
+  call assert_equal([4, 5], pyeval('l'))
+  py l = ll[2:4]
+  call assert_equal([2, 3], pyeval('l'))
+  py l = ll[4:2]
+  call assert_equal([], pyeval('l'))
+  py l = ll[-4:-2]
+  call assert_equal([2, 3], pyeval('l'))
+  py l = ll[-2:-4]
+  call assert_equal([], pyeval('l'))
+  py l = ll[:]
+  call assert_equal([0, 1, 2, 3, 4, 5], pyeval('l'))
+  py l = ll[0:6]
+  call assert_equal([0, 1, 2, 3, 4, 5], pyeval('l'))
+  py l = ll[-10:10]
+  call assert_equal([0, 1, 2, 3, 4, 5], pyeval('l'))
+  py l = ll[4:2:-1]
+  call assert_equal([4, 3], pyeval('l'))
+  py l = ll[::2]
+  call assert_equal([0, 2, 4], pyeval('l'))
+  py l = ll[4:2:1]
+  call assert_equal([], pyeval('l'))
+  py del l
+endfunc
+
+" Vars
+func Test_python_vars()
+  let g:foo = 'bac'
+  let w:abc3 = 'def'
+  let b:baz = 'bar'
+  let t:bar = 'jkl'
+  try
+    throw "Abc"
+  catch /Abc/
+    call assert_equal('Abc', pyeval('vim.vvars[''exception'']'))
+  endtry
+  call assert_equal('bac', pyeval('vim.vars[''foo'']'))
+  call assert_equal('def', pyeval('vim.current.window.vars[''abc3'']'))
+  call assert_equal('bar', pyeval('vim.current.buffer.vars[''baz'']'))
+  call assert_equal('jkl', pyeval('vim.current.tabpage.vars[''bar'']'))
+endfunc
+
+" Options
+" paste:          boolean, global
+" previewheight   number,  global
+" operatorfunc:   string,  global
+" number:         boolean, window-local
+" numberwidth:    number,  window-local
+" colorcolumn:    string,  window-local
+" statusline:     string,  window-local/global
+" autoindent:     boolean, buffer-local
+" shiftwidth:     number,  buffer-local
+" omnifunc:       string,  buffer-local
+" preserveindent: boolean, buffer-local/global
+" path:           string,  buffer-local/global
+func Test_python_opts()
+  let g:res = []
+  let g:bufs = [bufnr('%')]
+  new
+  let g:bufs += [bufnr('%')]
+  vnew
+  let g:bufs += [bufnr('%')]
+  wincmd j
+  vnew
+  let g:bufs += [bufnr('%')]
+  wincmd l
+
+  func RecVars(opt)
+    let gval = string(eval('&g:' .. a:opt))
+    let wvals = join(map(range(1, 4),
+          \ 'v:val .. ":" .. string(getwinvar(v:val, "&" .. a:opt))'))
+    let bvals = join(map(copy(g:bufs),
+          \ 'v:val .. ":" .. string(getbufvar(v:val, "&" .. a:opt))'))
+    call add(g:res, '  G: ' .. gval)
+    call add(g:res, '  W: ' .. wvals)
+    call add(g:res, '  B: ' .. wvals)
+  endfunc
+
+  py << trim EOF
+    def e(s, g=globals(), l=locals()):
+      try:
+        exec(s, g, l)
+      except:
+        vim.command('return ' + repr(sys.exc_type.__name__))
+
+    def ev(s, g=globals(), l=locals()):
+      try:
+        return eval(s, g, l)
+      except:
+        vim.command('let exc=' + repr(sys.exc_type.__name__))
+        return 0
+  EOF
+
+  func E(s)
+    python e(vim.eval('a:s'))
+  endfunc
+
+  func Ev(s)
+    let r = pyeval('ev(vim.eval("a:s"))')
+    if exists('exc')
+      throw exc
+    endif
+    return r
+  endfunc
+
+  py gopts1 = vim.options
+  py wopts1 = vim.windows[2].options
+  py wopts2 = vim.windows[0].options
+  py wopts3 = vim.windows[1].options
+  py bopts1 = vim.buffers[vim.bindeval("g:bufs")[2]].options
+  py bopts2 = vim.buffers[vim.bindeval("g:bufs")[1]].options
+  py bopts3 = vim.buffers[vim.bindeval("g:bufs")[0]].options
+  call add(g:res, 'wopts iters equal: ' ..
+        \ pyeval('list(wopts1) == list(wopts2)'))
+  call add(g:res, 'bopts iters equal: ' ..
+        \ pyeval('list(bopts1) == list(bopts2)'))
+  py gset = set(iter(gopts1))
+  py wset = set(iter(wopts1))
+  py bset = set(iter(bopts1))
+
+  set path=.,..,,
+  let lst = []
+  let lst += [['paste', 1, 0, 1, 2, 1, 1, 0]]
+  let lst += [['previewheight', 5, 1, 6, 'a', 0, 1, 0]]
+  let lst += [['operatorfunc', 'A', 'B', 'C', 2, 0, 1, 0]]
+  let lst += [['number', 0, 1, 1, 0, 1, 0, 1]]
+  let lst += [['numberwidth', 2, 3, 5, -100, 0, 0, 1]]
+  let lst += [['colorcolumn', '+1', '+2', '+3', 'abc4', 0, 0, 1]]
+  let lst += [['statusline', '1', '2', '4', 0, 0, 1, 1]]
+  let lst += [['autoindent', 0, 1, 1, 2, 1, 0, 2]]
+  let lst += [['shiftwidth', 0, 2, 1, 3, 0, 0, 2]]
+  let lst += [['omnifunc', 'A', 'B', 'C', 1, 0, 0, 2]]
+  let lst += [['preserveindent', 0, 1, 1, 2, 1, 1, 2]]
+  let lst += [['path', '.,,', ',,', '.', 0, 0, 1, 2]]
+  for  [oname, oval1, oval2, oval3, invval, bool, global, local] in lst
+    py oname = vim.eval('oname')
+    py oval1 = vim.bindeval('oval1')
+    py oval2 = vim.bindeval('oval2')
+    py oval3 = vim.bindeval('oval3')
+    if invval is 0 || invval is 1
+      py invval = bool(vim.bindeval('invval'))
+    else
+      py invval = vim.bindeval('invval')
+    endif
+    if bool
+      py oval1 = bool(oval1)
+      py oval2 = bool(oval2)
+      py oval3 = bool(oval3)
+    endif
+    call add(g:res, '>>> ' .. oname)
+    call add(g:res, '  g/w/b:' .. pyeval('oname in gset') .. '/' ..
+          \ pyeval('oname in wset') .. '/' .. pyeval('oname in bset'))
+    call add(g:res, '  g/w/b (in):' .. pyeval('oname in gopts1') .. '/' ..
+          \ pyeval('oname in wopts1') .. '/' .. pyeval('oname in bopts1'))
+    for v in ['gopts1', 'wopts1', 'bopts1']
+      try
+        call add(g:res, '  p/' .. v .. ': ' .. Ev('repr(' .. v .. '[''' .. oname .. '''])'))
+      catch
+        call add(g:res, '  p/' .. v .. '! ' .. v:exception)
+      endtry
+      let r = E(v .. '[''' .. oname .. ''']=invval')
+      if r isnot 0
+        call add(g:res, '  inv: ' .. string(invval) .. '! ' .. r)
+      endif
+      for vv in (v is# 'gopts1' ? [v] : [v, v[:-2] .. '2', v[:-2] .. '3'])
+        let val = substitute(vv, '^.opts', 'oval', '')
+        let r = E(vv .. '[''' .. oname .. ''']=' .. val)
+        if r isnot 0
+            call add(g:res, '  ' .. vv .. '! ' .. r)
+        endif
+      endfor
+    endfor
+    call RecVars(oname)
+    for v in ['wopts3', 'bopts3']
+      let r = E('del ' .. v .. '["' .. oname .. '"]')
+      if r isnot 0
+        call add(g:res, '  del ' .. v .. '! ' .. r)
+      endif
+    endfor
+    call RecVars(oname)
+  endfor
+  delfunction RecVars
+  delfunction E
+  delfunction Ev
+  py del ev
+  py del e
+  only
+  for buf in g:bufs[1:]
+    execute 'bwipeout!' buf
+  endfor
+  py del gopts1
+  py del wopts1
+  py del wopts2
+  py del wopts3
+  py del bopts1
+  py del bopts2
+  py del bopts3
+  py del oval1
+  py del oval2
+  py del oval3
+  py del oname
+  py del invval
+
+  let expected =<< trim END
+    wopts iters equal: 1
+    bopts iters equal: 1
+    >>> paste
+      g/w/b:1/0/0
+      g/w/b (in):1/0/0
+      p/gopts1: False
+      p/wopts1! KeyError
+      inv: 2! KeyError
+      wopts1! KeyError
+      wopts2! KeyError
+      wopts3! KeyError
+      p/bopts1! KeyError
+      inv: 2! KeyError
+      bopts1! KeyError
+      bopts2! KeyError
+      bopts3! KeyError
+      G: 1
+      W: 1:1 2:1 3:1 4:1
+      B: 1:1 2:1 3:1 4:1
+      del wopts3! KeyError
+      del bopts3! KeyError
+      G: 1
+      W: 1:1 2:1 3:1 4:1
+      B: 1:1 2:1 3:1 4:1
+    >>> previewheight
+      g/w/b:1/0/0
+      g/w/b (in):1/0/0
+      p/gopts1: 12
+      inv: 'a'! TypeError
+      p/wopts1! KeyError
+      inv: 'a'! KeyError
+      wopts1! KeyError
+      wopts2! KeyError
+      wopts3! KeyError
+      p/bopts1! KeyError
+      inv: 'a'! KeyError
+      bopts1! KeyError
+      bopts2! KeyError
+      bopts3! KeyError
+      G: 5
+      W: 1:5 2:5 3:5 4:5
+      B: 1:5 2:5 3:5 4:5
+      del wopts3! KeyError
+      del bopts3! KeyError
+      G: 5
+      W: 1:5 2:5 3:5 4:5
+      B: 1:5 2:5 3:5 4:5
+    >>> operatorfunc
+      g/w/b:1/0/0
+      g/w/b (in):1/0/0
+      p/gopts1: ''
+      inv: 2! TypeError
+      p/wopts1! KeyError
+      inv: 2! KeyError
+      wopts1! KeyError
+      wopts2! KeyError
+      wopts3! KeyError
+      p/bopts1! KeyError
+      inv: 2! KeyError
+      bopts1! KeyError
+      bopts2! KeyError
+      bopts3! KeyError
+      G: 'A'
+      W: 1:'A' 2:'A' 3:'A' 4:'A'
+      B: 1:'A' 2:'A' 3:'A' 4:'A'
+      del wopts3! KeyError
+      del bopts3! KeyError
+      G: 'A'
+      W: 1:'A' 2:'A' 3:'A' 4:'A'
+      B: 1:'A' 2:'A' 3:'A' 4:'A'
+    >>> number
+      g/w/b:0/1/0
+      g/w/b (in):0/1/0
+      p/gopts1! KeyError
+      inv: 0! KeyError
+      gopts1! KeyError
+      p/wopts1: False
+      p/bopts1! KeyError
+      inv: 0! KeyError
+      bopts1! KeyError
+      bopts2! KeyError
+      bopts3! KeyError
+      G: 0
+      W: 1:1 2:1 3:0 4:0
+      B: 1:1 2:1 3:0 4:0
+      del wopts3! ValueError
+      del bopts3! KeyError
+      G: 0
+      W: 1:1 2:1 3:0 4:0
+      B: 1:1 2:1 3:0 4:0
+    >>> numberwidth
+      g/w/b:0/1/0
+      g/w/b (in):0/1/0
+      p/gopts1! KeyError
+      inv: -100! KeyError
+      gopts1! KeyError
+      p/wopts1: 4
+      inv: -100! error
+      p/bopts1! KeyError
+      inv: -100! KeyError
+      bopts1! KeyError
+      bopts2! KeyError
+      bopts3! KeyError
+      G: 4
+      W: 1:3 2:5 3:2 4:4
+      B: 1:3 2:5 3:2 4:4
+      del wopts3! ValueError
+      del bopts3! KeyError
+      G: 4
+      W: 1:3 2:5 3:2 4:4
+      B: 1:3 2:5 3:2 4:4
+    >>> colorcolumn
+      g/w/b:0/1/0
+      g/w/b (in):0/1/0
+      p/gopts1! KeyError
+      inv: 'abc4'! KeyError
+      gopts1! KeyError
+      p/wopts1: ''
+      inv: 'abc4'! error
+      p/bopts1! KeyError
+      inv: 'abc4'! KeyError
+      bopts1! KeyError
+      bopts2! KeyError
+      bopts3! KeyError
+      G: ''
+      W: 1:'+2' 2:'+3' 3:'+1' 4:''
+      B: 1:'+2' 2:'+3' 3:'+1' 4:''
+      del wopts3! ValueError
+      del bopts3! KeyError
+      G: ''
+      W: 1:'+2' 2:'+3' 3:'+1' 4:''
+      B: 1:'+2' 2:'+3' 3:'+1' 4:''
+    >>> statusline
+      g/w/b:1/1/0
+      g/w/b (in):1/1/0
+      p/gopts1: ''
+      inv: 0! TypeError
+      p/wopts1: None
+      inv: 0! TypeError
+      p/bopts1! KeyError
+      inv: 0! KeyError
+      bopts1! KeyError
+      bopts2! KeyError
+      bopts3! KeyError
+      G: '1'
+      W: 1:'2' 2:'4' 3:'1' 4:'1'
+      B: 1:'2' 2:'4' 3:'1' 4:'1'
+      del bopts3! KeyError
+      G: '1'
+      W: 1:'2' 2:'1' 3:'1' 4:'1'
+      B: 1:'2' 2:'1' 3:'1' 4:'1'
+    >>> autoindent
+      g/w/b:0/0/1
+      g/w/b (in):0/0/1
+      p/gopts1! KeyError
+      inv: 2! KeyError
+      gopts1! KeyError
+      p/wopts1! KeyError
+      inv: 2! KeyError
+      wopts1! KeyError
+      wopts2! KeyError
+      wopts3! KeyError
+      p/bopts1: False
+      G: 0
+      W: 1:0 2:1 3:0 4:1
+      B: 1:0 2:1 3:0 4:1
+      del wopts3! KeyError
+      del bopts3! ValueError
+      G: 0
+      W: 1:0 2:1 3:0 4:1
+      B: 1:0 2:1 3:0 4:1
+    >>> shiftwidth
+      g/w/b:0/0/1
+      g/w/b (in):0/0/1
+      p/gopts1! KeyError
+      inv: 3! KeyError
+      gopts1! KeyError
+      p/wopts1! KeyError
+      inv: 3! KeyError
+      wopts1! KeyError
+      wopts2! KeyError
+      wopts3! KeyError
+      p/bopts1: 8
+      G: 8
+      W: 1:0 2:2 3:8 4:1
+      B: 1:0 2:2 3:8 4:1
+      del wopts3! KeyError
+      del bopts3! ValueError
+      G: 8
+      W: 1:0 2:2 3:8 4:1
+      B: 1:0 2:2 3:8 4:1
+    >>> omnifunc
+      g/w/b:0/0/1
+      g/w/b (in):0/0/1
+      p/gopts1! KeyError
+      inv: 1! KeyError
+      gopts1! KeyError
+      p/wopts1! KeyError
+      inv: 1! KeyError
+      wopts1! KeyError
+      wopts2! KeyError
+      wopts3! KeyError
+      p/bopts1: ''
+      inv: 1! TypeError
+      G: ''
+      W: 1:'A' 2:'B' 3:'' 4:'C'
+      B: 1:'A' 2:'B' 3:'' 4:'C'
+      del wopts3! KeyError
+      del bopts3! ValueError
+      G: ''
+      W: 1:'A' 2:'B' 3:'' 4:'C'
+      B: 1:'A' 2:'B' 3:'' 4:'C'
+    >>> preserveindent
+      g/w/b:0/0/1
+      g/w/b (in):0/0/1
+      p/gopts1! KeyError
+      inv: 2! KeyError
+      gopts1! KeyError
+      p/wopts1! KeyError
+      inv: 2! KeyError
+      wopts1! KeyError
+      wopts2! KeyError
+      wopts3! KeyError
+      p/bopts1: False
+      G: 0
+      W: 1:0 2:1 3:0 4:1
+      B: 1:0 2:1 3:0 4:1
+      del wopts3! KeyError
+      del bopts3! ValueError
+      G: 0
+      W: 1:0 2:1 3:0 4:1
+      B: 1:0 2:1 3:0 4:1
+    >>> path
+      g/w/b:1/0/1
+      g/w/b (in):1/0/1
+      p/gopts1: '.,..,,'
+      inv: 0! TypeError
+      p/wopts1! KeyError
+      inv: 0! KeyError
+      wopts1! KeyError
+      wopts2! KeyError
+      wopts3! KeyError
+      p/bopts1: None
+      inv: 0! TypeError
+      G: '.,,'
+      W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+      B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+      del wopts3! KeyError
+      G: '.,,'
+      W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+      B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+  END
+
+  call assert_equal(expected, g:res)
+  unlet g:res
+endfunc
+
+" Test for vim.buffer object
+func Test_python_buffer()
+  new
+  call setline(1, "Hello\nWorld")
+  call assert_fails("let x = pyeval('vim.current.buffer[0]')", 'E859:')
+  %bw!
+
+  edit Xfile1
+  let bnr1 = bufnr()
+  py cb = vim.current.buffer
+  vnew Xfile2
+  let bnr2 = bufnr()
+  call setline(1, ['First line', 'Second line', 'Third line'])
+  py b = vim.current.buffer
+  wincmd w
+
+  " Tests BufferAppend and BufferItem
+  py cb.append(b[0])
+  call assert_equal(['First line'], getbufline(bnr1, 2))
+  %d
+
+  " Tests BufferSlice and BufferAssSlice
+  py cb.append('abc5') # Will be overwritten
+  py cb[-1:] = b[:-2]
+  call assert_equal(['First line'], getbufline(bnr1, 2))
+  %d
+
+  " Test BufferLength and BufferAssSlice
+  py cb.append('def') # Will not be overwritten
+  py cb[len(cb):] = b[:]
+  call assert_equal(['def', 'First line', 'Second line', 'Third line'],
+        \ getbufline(bnr1, 2, '$'))
+  %d
+
+  " Test BufferAssItem and BufferMark
+  call setbufline(bnr1, 1, ['one', 'two', 'three'])
+  call cursor(1, 3)
+  normal ma
+  py cb.append('ghi') # Will be overwritten
+  py cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1]))
+  call assert_equal(['(3, 2)'], getbufline(bnr1, 4))
+  %d
+
+  " Test BufferRepr
+  py cb.append(repr(cb) + repr(b))
+  call assert_equal(['<buffer Xfile1><buffer Xfile2>'], getbufline(bnr1, 2))
+  %d
+
+  " Modify foreign buffer
+  py << trim EOF
+    b.append('foo')
+    b[0]='bar'
+    b[0:0]=['baz']
+    vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number)
+  EOF
+  call assert_equal(['baz', 'bar', 'Second line', 'Third line', 'foo'],
+        \ getbufline(bnr2, 1, '$'))
+  %d
+
+  " Test assigning to name property
+  augroup BUFS
+     autocmd BufFilePost * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePost:' + vim.eval('bufnr("%")'))
+     autocmd BufFilePre * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePre:' + vim.eval('bufnr("%")'))
+  augroup END
+  py << trim EOF
+    import os
+    old_name = cb.name
+    cb.name = 'foo'
+    cb.append(cb.name[-11:].replace(os.path.sep, '/'))
+    b.name = 'bar'
+    cb.append(b.name[-11:].replace(os.path.sep, '/'))
+    cb.name = old_name
+    cb.append(cb.name[-14:].replace(os.path.sep, '/'))
+    del old_name
+  EOF
+  call assert_equal([bnr1 .. ':BufFilePre:' .. bnr1,
+        \ bnr1 .. ':BufFilePost:' .. bnr1,
+        \ 'testdir/foo',
+        \ bnr2 .. ':BufFilePre:' .. bnr2,
+        \ bnr2 .. ':BufFilePost:' .. bnr2,
+        \ 'testdir/bar',
+        \ bnr1 .. ':BufFilePre:' .. bnr1,
+        \ bnr1 .. ':BufFilePost:' .. bnr1,
+        \ 'testdir/Xfile1'], getbufline(bnr1, 2, '$'))
+  %d
+
+  " Test CheckBuffer
+  py << trim EOF
+    for _b in vim.buffers:
+      if _b is not cb:
+        vim.command('bwipeout! ' + str(_b.number))
+    del _b
+    cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid)))
+  EOF
+  call assert_equal('valid: b:False, cb:True', getline(2))
+  %d
+
+  py << trim EOF
+    for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc6")', 'b.name = "!"'):
+      try:
+        exec(expr)
+      except vim.error:
+        pass
+      else:
+        # Usually a SEGV here
+        # Should not happen in any case
+        cb.append('No exception for ' + expr)
+    vim.command('cd .')
+    del b
+  EOF
+  call assert_equal([''], getline(1, '$'))
+
+  augroup BUFS
+     autocmd!
+  augroup END
+  augroup! BUFS
+  %bw!
+endfunc
+
+" Test vim.buffers object
+func Test_python_buffers()
+  %bw!
+  edit Xfile
+  py cb = vim.current.buffer
+  set hidden
+  edit a
+  buffer #
+  edit b
+  buffer #
+  edit c
+  buffer #
+  py << trim EOF
+    try:
+      from __builtin__ import next
+    except ImportError:
+      next = lambda o: o.next()
+    # Check GCing iterator that was not fully exhausted
+    i = iter(vim.buffers)
+    cb.append('i:' + str(next(i)))
+    # and also check creating more than one iterator at a time
+    i2 = iter(vim.buffers)
+    cb.append('i2:' + str(next(i2)))
+    cb.append('i:' + str(next(i)))
+    # The following should trigger GC and not cause any problems
+    del i
+    del i2
+    i3 = iter(vim.buffers)
+    cb.append('i3:' + str(next(i3)))
+    del i3
+  EOF
+  call assert_equal(['i:<buffer Xfile>',
+        \ 'i2:<buffer Xfile>', 'i:<buffer a>', 'i3:<buffer Xfile>'],
+        \ getline(2, '$'))
+  %d
+
+  py << trim EOF
+    prevnum = 0
+    for b in vim.buffers:
+      # Check buffer order
+      if prevnum >= b.number:
+        cb.append('!!! Buffer numbers not in strictly ascending order')
+      # Check indexing: vim.buffers[number].number == number
+      cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + \
+                                                            '=' + repr(b))
+      prevnum = b.number
+    del prevnum
+
+    cb.append(str(len(vim.buffers)))
+  EOF
+  call assert_equal([bufnr('Xfile') .. ':<buffer Xfile>=<buffer Xfile>',
+        \ bufnr('a') .. ':<buffer a>=<buffer a>',
+        \ bufnr('b') .. ':<buffer b>=<buffer b>',
+        \ bufnr('c') .. ':<buffer c>=<buffer c>', '4'], getline(2, '$'))
+  %d
+
+  py << trim EOF
+    bnums = list(map(lambda b: b.number, vim.buffers))[1:]
+
+    # Test wiping out buffer with existing iterator
+    i4 = iter(vim.buffers)
+    cb.append('i4:' + str(next(i4)))
+    vim.command('bwipeout! ' + str(bnums.pop(0)))
+    try:
+      next(i4)
+    except vim.error:
+      pass
+    else:
+      cb.append('!!!! No vim.error')
+    i4 = iter(vim.buffers)
+    vim.command('bwipeout! ' + str(bnums.pop(-1)))
+    vim.command('bwipeout! ' + str(bnums.pop(-1)))
+    cb.append('i4:' + str(next(i4)))
+    try:
+      next(i4)
+    except StopIteration:
+      cb.append('StopIteration')
+    del i4
+    del bnums
+  EOF
+  call assert_equal(['i4:<buffer Xfile>',
+        \ 'i4:<buffer Xfile>', 'StopIteration'], getline(2, '$'))
+  %bw!
+endfunc
+
+" Test vim.{tabpage,window}list and vim.{tabpage,window} objects
+func Test_python_tabpage_window()
+  %bw
+  edit Xfile
+  py cb = vim.current.buffer
+  tabnew 0
+  tabnew 1
+  vnew a.1
+  tabnew 2
+  vnew a.2
+  vnew b.2
+  vnew c.2
+
+  py << trim EOF
+    cb.append('Number of tabs: ' + str(len(vim.tabpages)))
+    cb.append('Current tab pages:')
+    def W(w):
+      if repr(w).find('(unknown)') != -1:
+        return '<window object (unknown)>'
+      else:
+        return repr(w)
+
+    start = len(cb)
+
+    def Cursor(w):
+      if w.buffer is cb:
+        return repr((start - w.cursor[0], w.cursor[1]))
+      else:
+        return repr(w.cursor)
+
+    for t in vim.tabpages:
+      cb.append('  ' + repr(t) + '(' + str(t.number) + ')' + ': ' + \
+                str(len(t.windows)) + ' windows, current is ' + W(t.window))
+      cb.append('  Windows:')
+      for w in t.windows:
+        cb.append('    ' + W(w) + '(' + str(w.number) + ')' + \
+                                  ': displays buffer ' + repr(w.buffer) + \
+                                  '; cursor is at ' + Cursor(w))
+        # Other values depend on the size of the terminal, so they are checked
+        # partly:
+        for attr in ('height', 'row', 'width', 'col'):
+          try:
+            aval = getattr(w, attr)
+            if type(aval) is not long:
+              raise TypeError
+            if aval < 0:
+              raise ValueError
+          except Exception:
+            cb.append('!!!!!! Error while getting attribute ' + attr + \
+                                            ': ' + sys.exc_type.__name__)
+        del aval
+        del attr
+        w.cursor = (len(w.buffer), 0)
+    del W
+    del Cursor
+    cb.append('Number of windows in current tab page: ' + \
+                                                    str(len(vim.windows)))
+    if list(vim.windows) != list(vim.current.tabpage.windows):
+      cb.append('!!!!!! Windows differ')
+  EOF
+
+  let expected =<< trim END 
+    Number of tabs: 4
+    Current tab pages:
+      <tabpage 0>(1): 1 windows, current is <window object (unknown)>
+      Windows:
+        <window object (unknown)>(1): displays buffer <buffer Xfile>; cursor is at (2, 0)
+      <tabpage 1>(2): 1 windows, current is <window object (unknown)>
+      Windows:
+        <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
+      <tabpage 2>(3): 2 windows, current is <window object (unknown)>
+      Windows:
+        <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0)
+        <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0)
+      <tabpage 3>(4): 4 windows, current is <window 0>
+      Windows:
+        <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
+        <window 1>(2): displays buffer <buffer b.2>; cursor is at (1, 0)
+        <window 2>(3): displays buffer <buffer a.2>; cursor is at (1, 0)
+        <window 3>(4): displays buffer <buffer 2>; cursor is at (1, 0)
+    Number of windows in current tab page: 4
+  END
+  call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$'))
+  %bw!
+endfunc
+
+" Test vim.current
+func Test_python_vim_current()
+  %bw
+  edit Xfile
+  py cb = vim.current.buffer
+  tabnew 0
+  tabnew 1
+  vnew a.1
+  tabnew 2
+  vnew a.2
+  vnew b.2
+  vnew c.2
+
+  py << trim EOF
+    def H(o):
+      return repr(o)
+    cb.append('Current tab page: ' + repr(vim.current.tabpage))
+    cb.append('Current window: ' + repr(vim.current.window) + ': ' + \
+               H(vim.current.window) + ' is ' + H(vim.current.tabpage.window))
+    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))
+    del H
+  EOF
+  let expected =<< trim END
+    Current tab page: <tabpage 3>
+    Current window: <window 0>: <window 0> is <window 0>
+    Current buffer: <buffer c.2>: <buffer c.2> is <buffer c.2> is <buffer c.2>
+  END
+  call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$'))
+  call deletebufline(bufnr('Xfile'), 1, '$')
+
+  " Assigning: fails
+  py << trim EOF
+    try:
+      vim.current.window = vim.tabpages[0].window
+    except ValueError:
+      cb.append('ValueError at assigning foreign tab window')
+
+    for attr in ('window', 'tabpage', 'buffer'):
+      try:
+        setattr(vim.current, attr, None)
+      except TypeError:
+        cb.append('Type error at assigning None to vim.current.' + attr)
+    del attr
+  EOF
+
+  let expected =<< trim END
+    ValueError at assigning foreign tab window
+    Type error at assigning None to vim.current.window
+    Type error at assigning None to vim.current.tabpage
+    Type error at assigning None to vim.current.buffer
+  END
+  call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$'))
+  call deletebufline(bufnr('Xfile'), 1, '$')
+
+  call setbufline(bufnr('Xfile'), 1, 'python interface')
+  py << trim EOF
+    # Assigning: success
+    vim.current.tabpage = vim.tabpages[-2]
+    vim.current.buffer = cb
+    vim.current.window = vim.windows[0]
+    vim.current.window.cursor = (len(vim.current.buffer), 0)
+    cb.append('Current tab page: ' + repr(vim.current.tabpage))
+    cb.append('Current window: ' + repr(vim.current.window))
+    cb.append('Current buffer: ' + repr(vim.current.buffer))
+    cb.append('Current line: ' + repr(vim.current.line))
+  EOF
+
+  let expected =<< trim END
+    Current tab page: <tabpage 2>
+    Current window: <window 0>
+    Current buffer: <buffer Xfile>
+    Current line: 'python interface'
+  END
+  call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$'))
+  call deletebufline(bufnr('Xfile'), 1, '$')
+
+  py << trim EOF
+    ws = list(vim.windows)
+    ts = list(vim.tabpages)
+    for b in vim.buffers:
+      if b is not cb:
+        vim.command('bwipeout! ' + str(b.number))
+    del b
+    cb.append('w.valid: ' + repr([w.valid for w in ws]))
+    cb.append('t.valid: ' + repr([t.valid for t in ts]))
+    del w
+    del t
+    del ts
+    del ws
+  EOF
+  let expected =<< trim END
+    w.valid: [True, False]
+    t.valid: [True, False, True, False]
+  END
+  call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$'))
+  %bw!
+endfunc
+
+" Test types
+func Test_python_types()
+  %d
+  py cb = vim.current.buffer
+  py << trim EOF
+    for expr, attr in (
+      ('vim.vars',                         'Dictionary'),
+      ('vim.options',                      'Options'),
+      ('vim.bindeval("{}")',               'Dictionary'),
+      ('vim.bindeval("[]")',               'List'),
+      ('vim.bindeval("function(\'tr\')")', 'Function'),
+      ('vim.current.buffer',               'Buffer'),
+      ('vim.current.range',                'Range'),
+      ('vim.current.window',               'Window'),
+      ('vim.current.tabpage',              'TabPage'),
+    ):
+      cb.append(expr + ':' + attr + ':' + \
+                                repr(type(eval(expr)) is getattr(vim, attr)))
+    del expr
+    del attr
+  EOF
+  let expected =<< trim END
+    vim.vars:Dictionary:True
+    vim.options:Options:True
+    vim.bindeval("{}"):Dictionary:True
+    vim.bindeval("[]"):List:True
+    vim.bindeval("function('tr')"):Function:True
+    vim.current.buffer:Buffer:True
+    vim.current.range:Range:True
+    vim.current.window:Window:True
+    vim.current.tabpage:TabPage:True
+  END
+  call assert_equal(expected, getline(2, '$'))
+endfunc
+
+" Test __dir__() method
+func Test_python_dir_method()
+  %d
+  py cb = vim.current.buffer
+  py << trim EOF
+    for name, o in (
+            ('current',    vim.current),
+            ('buffer',     vim.current.buffer),
+            ('window',     vim.current.window),
+            ('tabpage',    vim.current.tabpage),
+            ('range',      vim.current.range),
+            ('dictionary', vim.bindeval('{}')),
+            ('list',       vim.bindeval('[]')),
+            ('function',   vim.bindeval('function("tr")')),
+            ('output',     sys.stdout),
+        ):
+        cb.append(name + ':' + ','.join(dir(o)))
+    del name
+    del o
+  EOF
+  let expected =<< trim END
+    current:__dir__,__members__,buffer,line,range,tabpage,window
+    buffer:__dir__,__members__,append,mark,name,number,options,range,valid,vars
+    window:__dir__,__members__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars,width
+    tabpage:__dir__,__members__,number,valid,vars,window,windows
+    range:__dir__,__members__,append,end,start
+    dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
+    list:__dir__,__members__,extend,locked
+    function:__dir__,__members__,args,auto_rebind,self,softspace
+    output:__dir__,__members__,close,closed,flush,isatty,readable,seekable,softspace,writable,write,writelines
+  END
+  call assert_equal(expected, getline(2, '$'))
+endfunc
+
+" Test vim.*.__new__
+func Test_python_new()
+  call assert_equal({}, pyeval('vim.Dictionary({})'))
+  call assert_equal({'a': 1}, pyeval('vim.Dictionary(a=1)'))
+  call assert_equal({'a': 1}, pyeval('vim.Dictionary(((''a'', 1),))'))
+  call assert_equal([], pyeval('vim.List()'))
+  call assert_equal(['a', 'b', 'c', '7'], pyeval('vim.List(iter(''abc7''))'))
+  call assert_equal(function('tr'), pyeval('vim.Function(''tr'')'))
+  call assert_equal(function('tr', [123, 3, 4]),
+        \ pyeval('vim.Function(''tr'', args=[123, 3, 4])'))
+  call assert_equal(function('tr'), pyeval('vim.Function(''tr'', args=[])'))
+  call assert_equal(function('tr', {}),
+        \ pyeval('vim.Function(''tr'', self={})'))
+  call assert_equal(function('tr', [123, 3, 4], {}),
+        \ pyeval('vim.Function(''tr'', args=[123, 3, 4], self={})'))
+  call assert_equal(function('tr'),
+        \ pyeval('vim.Function(''tr'', auto_rebind=False)'))
+  call assert_equal(function('tr', [123, 3, 4]),
+        \ pyeval('vim.Function(''tr'', args=[123, 3, 4], auto_rebind=False)'))
+  call assert_equal(function('tr'),
+        \ pyeval('vim.Function(''tr'', args=[], auto_rebind=False)'))
+  call assert_equal(function('tr', {}),
+        \ pyeval('vim.Function(''tr'', self={}, auto_rebind=False)'))
+  call assert_equal(function('tr', [123, 3, 4], {}),
+        \ pyeval('vim.Function(''tr'', args=[123, 3, 4], self={}, auto_rebind=False)'))
+endfunc
+
+" Test vim.Function
+func Test_python_vim_func()
+  function Args(...)
+    return a:000
+  endfunction
+
+  function SelfArgs(...) dict
+    return [a:000, self]
+  endfunction
+
+  " The following four lines should not crash
+  let Pt = function('tr', [[]], {'l': []})
+  py Pt = vim.bindeval('Pt')
+  unlet Pt
+  py del Pt
+
+  %bw!
+  py cb = vim.current.buffer
+  py << trim EOF
+    def ecall(out_prefix, func, *args, **kwargs):
+        line = out_prefix + ': '
+        try:
+            ret = func(*args, **kwargs)
+        except Exception:
+            line += '!exception: ' + emsg(sys.exc_info())
+        else:
+            line += '!result: ' + vim.Function('string')(ret)
+        cb.append(line)
+    a = vim.Function('Args')
+    pa1 = vim.Function('Args', args=['abcArgsPA1'])
+    pa2 = vim.Function('Args', args=[])
+    pa3 = vim.Function('Args', args=['abcArgsPA3'], self={'abcSelfPA3': 'abcSelfPA3Val'})
+    pa4 = vim.Function('Args', self={'abcSelfPA4': 'abcSelfPA4Val'})
+    cb.append('a: ' + repr(a))
+    cb.append('pa1: ' + repr(pa1))
+    cb.append('pa2: ' + repr(pa2))
+    cb.append('pa3: ' + repr(pa3))
+    cb.append('pa4: ' + repr(pa4))
+    sa = vim.Function('SelfArgs')
+    psa1 = vim.Function('SelfArgs', args=['abcArgsPSA1'])
+    psa2 = vim.Function('SelfArgs', args=[])
+    psa3 = vim.Function('SelfArgs', args=['abcArgsPSA3'], self={'abcSelfPSA3': 'abcSelfPSA3Val'})
+    psa4 = vim.Function('SelfArgs', self={'abcSelfPSA4': 'abcSelfPSA4Val'})
+    psa5 = vim.Function('SelfArgs', self={'abcSelfPSA5': 'abcSelfPSA5Val'}, auto_rebind=0)
+    psa6 = vim.Function('SelfArgs', args=['abcArgsPSA6'], self={'abcSelfPSA6': 'abcSelfPSA6Val'}, auto_rebind=())
+    psa7 = vim.Function('SelfArgs', args=['abcArgsPSA7'], auto_rebind=[])
+    psa8 = vim.Function('SelfArgs', auto_rebind=False)
+    psa9 = vim.Function('SelfArgs', self={'abcSelfPSA9': 'abcSelfPSA9Val'}, auto_rebind=True)
+    psaA = vim.Function('SelfArgs', args=['abcArgsPSAA'], self={'abcSelfPSAA': 'abcSelfPSAAVal'}, auto_rebind=1)
+    psaB = vim.Function('SelfArgs', args=['abcArgsPSAB'], auto_rebind={'abcARPSAB': 'abcARPSABVal'})
+    psaC = vim.Function('SelfArgs', auto_rebind=['abcARPSAC'])
+    cb.append('sa: ' + repr(sa))
+    cb.append('psa1: ' + repr(psa1))
+    cb.append('psa2: ' + repr(psa2))
+    cb.append('psa3: ' + repr(psa3))
+    cb.append('psa4: ' + repr(psa4))
+    cb.append('psa5: ' + repr(psa5))
+    cb.append('psa6: ' + repr(psa6))
+    cb.append('psa7: ' + repr(psa7))
+    cb.append('psa8: ' + repr(psa8))
+    cb.append('psa9: ' + repr(psa9))
+    cb.append('psaA: ' + repr(psaA))
+    cb.append('psaB: ' + repr(psaB))
+    cb.append('psaC: ' + repr(psaC))
+  
+    psar = vim.Function('SelfArgs', args=[{'abcArgsPSAr': 'abcArgsPSArVal'}], self={'abcSelfPSAr': 'abcSelfPSArVal'})
+    psar.args[0]['abcArgsPSAr2'] = [psar.self, psar.args[0]]
+    psar.self['rec'] = psar
+    psar.self['self'] = psar.self
+    psar.self['args'] = psar.args
+  
+    try:
+        cb.append('psar: ' + repr(psar))
+    except Exception:
+        cb.append('!!!!!!!! Caught exception: ' + emsg(sys.exc_info()))
+  EOF
+
+  let expected =<< trim END
+    a: <vim.Function 'Args'>
+    pa1: <vim.Function 'Args', args=['abcArgsPA1']>
+    pa2: <vim.Function 'Args'>
+    pa3: <vim.Function 'Args', args=['abcArgsPA3'], self={'abcSelfPA3': 'abcSelfPA3Val'}>
+    pa4: <vim.Function 'Args', self={'abcSelfPA4': 'abcSelfPA4Val'}>
+    sa: <vim.Function 'SelfArgs'>
+    psa1: <vim.Function 'SelfArgs', args=['abcArgsPSA1']>
+    psa2: <vim.Function 'SelfArgs'>
+    psa3: <vim.Function 'SelfArgs', args=['abcArgsPSA3'], self={'abcSelfPSA3': 'abcSelfPSA3Val'}>
+    psa4: <vim.Function 'SelfArgs', self={'abcSelfPSA4': 'abcSelfPSA4Val'}>
+    psa5: <vim.Function 'SelfArgs', self={'abcSelfPSA5': 'abcSelfPSA5Val'}>
+    psa6: <vim.Function 'SelfArgs', args=['abcArgsPSA6'], self={'abcSelfPSA6': 'abcSelfPSA6Val'}>
+    psa7: <vim.Function 'SelfArgs', args=['abcArgsPSA7']>
+    psa8: <vim.Function 'SelfArgs'>
+    psa9: <vim.Function 'SelfArgs', self={'abcSelfPSA9': 'abcSelfPSA9Val'}, auto_rebind=True>
+    psaA: <vim.Function 'SelfArgs', args=['abcArgsPSAA'], self={'abcSelfPSAA': 'abcSelfPSAAVal'}, auto_rebind=True>
+    psaB: <vim.Function 'SelfArgs', args=['abcArgsPSAB']>
+    psaC: <vim.Function 'SelfArgs'>
+    psar: <vim.Function 'SelfArgs', args=[{'abcArgsPSAr2': [{'rec': function('SelfArgs', [{...}], {...}), 'self': {...}, 'abcSelfPSAr': 'abcSelfPSArVal', 'args': [{...}]}, {...}], 'abcArgsPSAr': 'abcArgsPSArVal'}], self={'rec': function('SelfArgs', [{'abcArgsPSAr2': [{...}, {...}], 'abcArgsPSAr': 'abcArgsPSArVal'}], {...}), 'self': {...}, 'abcSelfPSAr': 'abcSelfPSArVal', 'args': [{'abcArgsPSAr2': [{...}, {...}], 'abcArgsPSAr': 'abcArgsPSArVal'}]}>
+  END
+  call assert_equal(expected, getline(2, '$'))
+  %d
+
+  call assert_equal(function('Args'), pyeval('a'))
+  call assert_equal(function('Args', ['abcArgsPA1']), pyeval('pa1'))
+  call assert_equal(function('Args'), pyeval('pa2'))
+  call assert_equal(function('Args', ['abcArgsPA3'], {'abcSelfPA3': 'abcSelfPA3Val'}), pyeval('pa3'))
+  call assert_equal(function('Args', {'abcSelfPA4': 'abcSelfPA4Val'}), pyeval('pa4'))
+  call assert_equal(function('SelfArgs'), pyeval('sa'))
+  call assert_equal(function('SelfArgs', ['abcArgsPSA1']), pyeval('psa1'))
+  call assert_equal(function('SelfArgs'), pyeval('psa2'))
+  call assert_equal(function('SelfArgs', ['abcArgsPSA3'], {'abcSelfPSA3': 'abcSelfPSA3Val'}), pyeval('psa3'))
+  call assert_equal(function('SelfArgs', {'abcSelfPSA4': 'abcSelfPSA4Val'}), pyeval('psa4'))
+  call assert_equal(function('SelfArgs', {'abcSelfPSA5': 'abcSelfPSA5Val'}), pyeval('psa5'))
+  call assert_equal(function('SelfArgs', ['abcArgsPSA6'], {'abcSelfPSA6': 'abcSelfPSA6Val'}), pyeval('psa6'))
+  call assert_equal(function('SelfArgs', ['abcArgsPSA7']), pyeval('psa7'))
+  call assert_equal(function('SelfArgs'), pyeval('psa8'))
+  call assert_equal(function('SelfArgs', {'abcSelfPSA9': 'abcSelfPSA9Val'}), pyeval('psa9'))
+  call assert_equal(function('SelfArgs', ['abcArgsPSAA'], {'abcSelfPSAA': 'abcSelfPSAAVal'}), pyeval('psaA'))
+  call assert_equal(function('SelfArgs', ['abcArgsPSAB']), pyeval('psaB'))
+  call assert_equal(function('SelfArgs'), pyeval('psaC'))
+
+  let res = []
+  for v in ['sa', 'psa1', 'psa2', 'psa3', 'psa4', 'psa5', 'psa6', 'psa7',
+        \ 'psa8', 'psa9', 'psaA', 'psaB', 'psaC']
+    let d = {'f': pyeval(v)}
+    call add(res, 'd.' .. v .. '(): ' .. string(d.f()))
+  endfor
+
+  let expected =<< trim END
+    d.sa(): [[], {'f': function('SelfArgs')}]
+    d.psa1(): [['abcArgsPSA1'], {'f': function('SelfArgs', ['abcArgsPSA1'])}]
+    d.psa2(): [[], {'f': function('SelfArgs')}]
+    d.psa3(): [['abcArgsPSA3'], {'abcSelfPSA3': 'abcSelfPSA3Val'}]
+    d.psa4(): [[], {'abcSelfPSA4': 'abcSelfPSA4Val'}]
+    d.psa5(): [[], {'abcSelfPSA5': 'abcSelfPSA5Val'}]
+    d.psa6(): [['abcArgsPSA6'], {'abcSelfPSA6': 'abcSelfPSA6Val'}]
+    d.psa7(): [['abcArgsPSA7'], {'f': function('SelfArgs', ['abcArgsPSA7'])}]
+    d.psa8(): [[], {'f': function('SelfArgs')}]
+    d.psa9(): [[], {'f': function('SelfArgs', {'abcSelfPSA9': 'abcSelfPSA9Val'})}]
+    d.psaA(): [['abcArgsPSAA'], {'f': function('SelfArgs', ['abcArgsPSAA'], {'abcSelfPSAA': 'abcSelfPSAAVal'})}]
+    d.psaB(): [['abcArgsPSAB'], {'f': function('SelfArgs', ['abcArgsPSAB'])}]
+    d.psaC(): [[], {'f': function('SelfArgs')}]
+  END
+  call assert_equal(expected, res)
+
+  py ecall('a()', a, )
+  py ecall('pa1()', pa1, )
+  py ecall('pa2()', pa2, )
+  py ecall('pa3()', pa3, )
+  py ecall('pa4()', pa4, )
+  py ecall('sa()', sa, )
+  py ecall('psa1()', psa1, )
+  py ecall('psa2()', psa2, )
+  py ecall('psa3()', psa3, )
+  py ecall('psa4()', psa4, )
+
+  py ecall('a(42, 43)', a, 42, 43)
+  py ecall('pa1(42, 43)', pa1, 42, 43)
+  py ecall('pa2(42, 43)', pa2, 42, 43)
+  py ecall('pa3(42, 43)', pa3, 42, 43)
+  py ecall('pa4(42, 43)', pa4, 42, 43)
+  py ecall('sa(42, 43)', sa, 42, 43)
+  py ecall('psa1(42, 43)', psa1, 42, 43)
+  py ecall('psa2(42, 43)', psa2, 42, 43)
+  py ecall('psa3(42, 43)', psa3, 42, 43)
+  py ecall('psa4(42, 43)', psa4, 42, 43)
+
+  py ecall('a(42, self={"20": 1})', a, 42, self={'20': 1})
+  py ecall('pa1(42, self={"20": 1})', pa1, 42, self={'20': 1})
+  py ecall('pa2(42, self={"20": 1})', pa2, 42, self={'20': 1})
+  py ecall('pa3(42, self={"20": 1})', pa3, 42, self={'20': 1})
+  py ecall('pa4(42, self={"20": 1})', pa4, 42, self={'20': 1})
+  py ecall('sa(42, self={"20": 1})', sa, 42, self={'20': 1})
+  py ecall('psa1(42, self={"20": 1})', psa1, 42, self={'20': 1})
+  py ecall('psa2(42, self={"20": 1})', psa2, 42, self={'20': 1})
+  py ecall('psa3(42, self={"20": 1})', psa3, 42, self={'20': 1})
+  py ecall('psa4(42, self={"20": 1})', psa4, 42, self={'20': 1})
+
+  py ecall('a(self={"20": 1})', a, self={'20': 1})
+  py ecall('pa1(self={"20": 1})', pa1, self={'20': 1})
+  py ecall('pa2(self={"20": 1})', pa2, self={'20': 1})
+  py ecall('pa3(self={"20": 1})', pa3, self={'20': 1})
+  py ecall('pa4(self={"20": 1})', pa4, self={'20': 1})
+  py ecall('sa(self={"20": 1})', sa, self={'20': 1})
+  py ecall('psa1(self={"20": 1})', psa1, self={'20': 1})
+  py ecall('psa2(self={"20": 1})', psa2, self={'20': 1})
+  py ecall('psa3(self={"20": 1})', psa3, self={'20': 1})
+  py ecall('psa4(self={"20": 1})', psa4, self={'20': 1})
+
+  py << trim EOF
+    def s(v):
+        if v is None:
+            return repr(v)
+        else:
+            return vim.Function('string')(v)
+  
+    cb.append('a.args: ' + s(a.args))
+    cb.append('pa1.args: ' + s(pa1.args))
+    cb.append('pa2.args: ' + s(pa2.args))
+    cb.append('pa3.args: ' + s(pa3.args))
+    cb.append('pa4.args: ' + s(pa4.args))
+    cb.append('sa.args: ' + s(sa.args))
+    cb.append('psa1.args: ' + s(psa1.args))
+    cb.append('psa2.args: ' + s(psa2.args))
+    cb.append('psa3.args: ' + s(psa3.args))
+    cb.append('psa4.args: ' + s(psa4.args))
+  
+    cb.append('a.self: ' + s(a.self))
+    cb.append('pa1.self: ' + s(pa1.self))
+    cb.append('pa2.self: ' + s(pa2.self))
+    cb.append('pa3.self: ' + s(pa3.self))
+    cb.append('pa4.self: ' + s(pa4.self))
+    cb.append('sa.self: ' + s(sa.self))
+    cb.append('psa1.self: ' + s(psa1.self))
+    cb.append('psa2.self: ' + s(psa2.self))
+    cb.append('psa3.self: ' + s(psa3.self))
+    cb.append('psa4.self: ' + s(psa4.self))
+  
+    cb.append('a.name: ' + s(a.name))
+    cb.append('pa1.name: ' + s(pa1.name))
+    cb.append('pa2.name: ' + s(pa2.name))
+    cb.append('pa3.name: ' + s(pa3.name))
+    cb.append('pa4.name: ' + s(pa4.name))
+    cb.append('sa.name: ' + s(sa.name))
+    cb.append('psa1.name: ' + s(psa1.name))
+    cb.append('psa2.name: ' + s(psa2.name))
+    cb.append('psa3.name: ' + s(psa3.name))
+    cb.append('psa4.name: ' + s(psa4.name))
+  
+    cb.append('a.auto_rebind: ' + s(a.auto_rebind))
+    cb.append('pa1.auto_rebind: ' + s(pa1.auto_rebind))
+    cb.append('pa2.auto_rebind: ' + s(pa2.auto_rebind))
+    cb.append('pa3.auto_rebind: ' + s(pa3.auto_rebind))
+    cb.append('pa4.auto_rebind: ' + s(pa4.auto_rebind))
+    cb.append('sa.auto_rebind: ' + s(sa.auto_rebind))
+    cb.append('psa1.auto_rebind: ' + s(psa1.auto_rebind))
+    cb.append('psa2.auto_rebind: ' + s(psa2.auto_rebind))
+    cb.append('psa3.auto_rebind: ' + s(psa3.auto_rebind))
+    cb.append('psa4.auto_rebind: ' + s(psa4.auto_rebind))
+    cb.append('psa5.auto_rebind: ' + s(psa5.auto_rebind))
+    cb.append('psa6.auto_rebind: ' + s(psa6.auto_rebind))
+    cb.append('psa7.auto_rebind: ' + s(psa7.auto_rebind))
+    cb.append('psa8.auto_rebind: ' + s(psa8.auto_rebind))
+    cb.append('psa9.auto_rebind: ' + s(psa9.auto_rebind))
+    cb.append('psaA.auto_rebind: ' + s(psaA.auto_rebind))
+    cb.append('psaB.auto_rebind: ' + s(psaB.auto_rebind))
+    cb.append('psaC.auto_rebind: ' + s(psaC.auto_rebind))
+  
+    del s
+  
+    del a
+    del pa1
+    del pa2
+    del pa3
+    del pa4
+    del sa
+    del psa1
+    del psa2
+    del psa3
+    del psa4
+    del psa5
+    del psa6
+    del psa7
+    del psa8
+    del psa9
+    del psaA
+    del psaB
+    del psaC
+    del psar
+  
+    del ecall
+  EOF
+
+  let expected =<< trim END
+    a(): !result: []
+    pa1(): !result: ['abcArgsPA1']
+    pa2(): !result: []
+    pa3(): !result: ['abcArgsPA3']
+    pa4(): !result: []
+    sa(): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',)
+    psa1(): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',)
+    psa2(): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',)
+    psa3(): !result: [['abcArgsPSA3'], {'abcSelfPSA3': 'abcSelfPSA3Val'}]
+    psa4(): !result: [[], {'abcSelfPSA4': 'abcSelfPSA4Val'}]
+    a(42, 43): !result: [42, 43]
+    pa1(42, 43): !result: ['abcArgsPA1', 42, 43]
+    pa2(42, 43): !result: [42, 43]
+    pa3(42, 43): !result: ['abcArgsPA3', 42, 43]
+    pa4(42, 43): !result: [42, 43]
+    sa(42, 43): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',)
+    psa1(42, 43): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',)
+    psa2(42, 43): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',)
+    psa3(42, 43): !result: [['abcArgsPSA3', 42, 43], {'abcSelfPSA3': 'abcSelfPSA3Val'}]
+    psa4(42, 43): !result: [[42, 43], {'abcSelfPSA4': 'abcSelfPSA4Val'}]
+    a(42, self={"20": 1}): !result: [42]
+    pa1(42, self={"20": 1}): !result: ['abcArgsPA1', 42]
+    pa2(42, self={"20": 1}): !result: [42]
+    pa3(42, self={"20": 1}): !result: ['abcArgsPA3', 42]
+    pa4(42, self={"20": 1}): !result: [42]
+    sa(42, self={"20": 1}): !result: [[42], {'20': 1}]
+    psa1(42, self={"20": 1}): !result: [['abcArgsPSA1', 42], {'20': 1}]
+    psa2(42, self={"20": 1}): !result: [[42], {'20': 1}]
+    psa3(42, self={"20": 1}): !result: [['abcArgsPSA3', 42], {'20': 1}]
+    psa4(42, self={"20": 1}): !result: [[42], {'20': 1}]
+    a(self={"20": 1}): !result: []
+    pa1(self={"20": 1}): !result: ['abcArgsPA1']
+    pa2(self={"20": 1}): !result: []
+    pa3(self={"20": 1}): !result: ['abcArgsPA3']
+    pa4(self={"20": 1}): !result: []
+    sa(self={"20": 1}): !result: [[], {'20': 1}]
+    psa1(self={"20": 1}): !result: [['abcArgsPSA1'], {'20': 1}]
+    psa2(self={"20": 1}): !result: [[], {'20': 1}]
+    psa3(self={"20": 1}): !result: [['abcArgsPSA3'], {'20': 1}]
+    psa4(self={"20": 1}): !result: [[], {'20': 1}]
+    a.args: None
+    pa1.args: ['abcArgsPA1']
+    pa2.args: None
+    pa3.args: ['abcArgsPA3']
+    pa4.args: None
+    sa.args: None
+    psa1.args: ['abcArgsPSA1']
+    psa2.args: None
+    psa3.args: ['abcArgsPSA3']
+    psa4.args: None
+    a.self: None
+    pa1.self: None
+    pa2.self: None
+    pa3.self: {'abcSelfPA3': 'abcSelfPA3Val'}
+    pa4.self: {'abcSelfPA4': 'abcSelfPA4Val'}
+    sa.self: None
+    psa1.self: None
+    psa2.self: None
+    psa3.self: {'abcSelfPSA3': 'abcSelfPSA3Val'}
+    psa4.self: {'abcSelfPSA4': 'abcSelfPSA4Val'}
+    a.name: 'Args'
+    pa1.name: 'Args'
+    pa2.name: 'Args'
+    pa3.name: 'Args'
+    pa4.name: 'Args'
+    sa.name: 'SelfArgs'
+    psa1.name: 'SelfArgs'
+    psa2.name: 'SelfArgs'
+    psa3.name: 'SelfArgs'
+    psa4.name: 'SelfArgs'
+    a.auto_rebind: 1
+    pa1.auto_rebind: 1
+    pa2.auto_rebind: 1
+    pa3.auto_rebind: 0
+    pa4.auto_rebind: 0
+    sa.auto_rebind: 1
+    psa1.auto_rebind: 1
+    psa2.auto_rebind: 1
+    psa3.auto_rebind: 0
+    psa4.auto_rebind: 0
+    psa5.auto_rebind: 0
+    psa6.auto_rebind: 0
+    psa7.auto_rebind: 1
+    psa8.auto_rebind: 1
+    psa9.auto_rebind: 1
+    psaA.auto_rebind: 1
+    psaB.auto_rebind: 1
+    psaC.auto_rebind: 1
+  END
+  call assert_equal(expected, getline(2, '$'))
+  %bw!
+endfunc
+
+" Test stdout/stderr
+func Test_python_stdin_stderr()
+  let caught_writeerr = 0
+  let caught_writelineerr = 0
+  redir => messages
+  py sys.stdout.write('abc8') ; sys.stdout.write('def')
+  try
+    py sys.stderr.write('abc9') ; sys.stderr.write('def')
+  catch /abc9def/
+    let caught_writeerr = 1
+  endtry
+  py sys.stdout.writelines(iter('abcA'))
+  try
+    py sys.stderr.writelines(iter('abcB'))
+  catch /abcB/
+    let caught_writelineerr = 1
+  endtry
+  redir END
+  call assert_equal("\nabc8def\nabcA", messages)
+  call assert_equal(1, caught_writeerr)
+  call assert_equal(1, caught_writelineerr)
+endfunc
+
+" Test subclassing
+func Test_python_subclass()
+  new
+  fun Put(...)
+     return a:000
+  endfun
+
+  py << trim EOF
+    class DupDict(vim.Dictionary):
+      def __setitem__(self, key, value):
+        super(DupDict, self).__setitem__(key, value)
+        super(DupDict, self).__setitem__('dup_' + key, value)
+    dd = DupDict()
+    dd['a'] = 'b'
+  
+    class DupList(vim.List):
+      def __getitem__(self, idx):
+        return [super(DupList, self).__getitem__(idx)] * 2
+  
+    dl = DupList()
+    dl2 = DupList(iter('abcC'))
+    dl.extend(dl2[0])
+  
+    class DupFun(vim.Function):
+      def __call__(self, arg):
+        return super(DupFun, self).__call__(arg, arg)
+  
+    df = DupFun('Put')
+  EOF
+
+  call assert_equal(['a', 'dup_a'], sort(keys(pyeval('dd'))))
+  call assert_equal(['a', 'a'], pyeval('dl'))
+  call assert_equal(['a', 'b', 'c', 'C'], pyeval('dl2'))
+  call assert_equal([2, 2], pyeval('df(2)'))
+  call assert_equal(1, pyeval('dl') is# pyeval('dl'))
+  call assert_equal(1, pyeval('dd') is# pyeval('dd'))
+  call assert_equal(function('Put'), pyeval('df'))
+  delfunction Put
+  py << trim EOF
+    del DupDict
+    del DupList
+    del DupFun
+    del dd
+    del dl
+    del dl2
+    del df
+  EOF
+  close!
+endfunc
+
+" Test chdir
+func Test_python_chdir()
+  new Xfile
+  py cb = vim.current.buffer
+  py << trim EOF
+    import os
+    fnamemodify = vim.Function('fnamemodify')
+    cb.append(fnamemodify('.', ':p:h:t'))
+    cb.append(vim.eval('@%'))
+    os.chdir('..')
+    path = fnamemodify('.', ':p:h:t')
+    if path != 'src':
+      # Running tests from a shadow directory, so move up another level
+      # This will result in @% looking like shadow/testdir/Xfile, hence the
+      # extra fnamemodify
+      os.chdir('..')
+      cb.append(fnamemodify('.', ':p:h:t'))
+      cb.append(fnamemodify(vim.eval('@%'), ':s?^%s.??' % path).replace(os.path.sep, '/'))
+      os.chdir(path)
+      del path
+    else:
+      cb.append(fnamemodify('.', ':p:h:t'))
+      cb.append(vim.eval('@%').replace(os.path.sep, '/'))
+    os.chdir('testdir')
+    cb.append(fnamemodify('.', ':p:h:t'))
+    cb.append(vim.eval('@%'))
+    del fnamemodify
+  EOF
+  call assert_equal(['testdir', 'Xfile', 'src', 'testdir/Xfile', 'testdir',
+        \ 'Xfile'], getline(2, '$'))
+  close!
+endfunc
+
+" Test errors
+func Test_python_errors()
+  fun F() dict
+  endfun
+
+  fun D()
+  endfun
+
+  new
+  py cb = vim.current.buffer
+
+  py << trim EOF
+    d = vim.Dictionary()
+    ned = vim.Dictionary(foo='bar', baz='abcD')
+    dl = vim.Dictionary(a=1)
+    dl.locked = True
+    l = vim.List()
+    ll = vim.List('abcE')
+    ll.locked = True
+    nel = vim.List('abcO')
+    f = vim.Function('string')
+    fd = vim.Function('F')
+    fdel = vim.Function('D')
+    vim.command('delfunction D')
+  
+    def subexpr_test(expr, name, subexprs):
+        cb.append('>>> Testing %s using %s' % (name, expr))
+        for subexpr in subexprs:
+            ee(expr % subexpr)
+        cb.append('<<< Finished')
+  
+    def stringtochars_test(expr):
+        return subexpr_test(expr, 'StringToChars', (
+            '1',       # Fail type checks
+            'u"\\0"',  # Fail PyString_AsStringAndSize(bytes, , NULL) check
+            '"\\0"',   # Fail PyString_AsStringAndSize(object, , NULL) check
+        ))
+  
+    class Mapping(object):
+        def __init__(self, d):
+            self.d = d
+  
+        def __getitem__(self, key):
+            return self.d[key]
+  
+        def keys(self):
+            return self.d.keys()
+  
+        def items(self):
+            return self.d.items()
+  
+    def convertfrompyobject_test(expr, recurse=True):
+        # pydict_to_tv
+        stringtochars_test(expr % '{%s : 1}')
+        if recurse:
+            convertfrompyobject_test(expr % '{"abcF" : %s}', False)
+        # pymap_to_tv
+        stringtochars_test(expr % 'Mapping({%s : 1})')
+        if recurse:
+            convertfrompyobject_test(expr % 'Mapping({"abcG" : %s})', False)
+        # pyseq_to_tv
+        iter_test(expr)
+        return subexpr_test(expr, 'ConvertFromPyObject', (
+            'None',                 # Not conversible
+            '{"": 1}',              # Empty key not allowed
+            '{u"": 1}',             # Same, but with unicode object
+            'FailingMapping()',     #
+            'FailingMappingKey()',  #
+            'FailingNumber()',      #
+        ))
+  
+    def convertfrompymapping_test(expr):
+        convertfrompyobject_test(expr)
+        return subexpr_test(expr, 'ConvertFromPyMapping', (
+            '[]',
+        ))
+  
+    def iter_test(expr):
+        return subexpr_test(expr, '*Iter*', (
+            'FailingIter()',
+            'FailingIterNext()',
+        ))
+  
+    def number_test(expr, natural=False, unsigned=False):
+        if natural:
+            unsigned = True
+        return subexpr_test(expr, 'NumberToLong', (
+            '[]',
+            'None',
+        ) + (unsigned and ('-1',) or ())
+        + (natural and ('0',) or ()))
+  
+    class FailingTrue(object):
+        def __nonzero__(self):
+            raise NotImplementedError('bool')
+  
+    class FailingIter(object):
+        def __iter__(self):
+            raise NotImplementedError('iter')
+  
+    class FailingIterNext(object):
+        def __iter__(self):
+            return self
+  
+        def next(self):
+            raise NotImplementedError('next')
+  
+    class FailingIterNextN(object):
+        def __init__(self, n):
+            self.n = n
+  
+        def __iter__(self):
+            return self
+  
+        def next(self):
+            if self.n:
+                self.n -= 1
+                return 1
+            else:
+                raise NotImplementedError('next N')
+  
+    class FailingMappingKey(object):
+        def __getitem__(self, item):
+            raise NotImplementedError('getitem:mappingkey')
+  
+        def keys(self):
+            return list("abcH")
+  
+    class FailingMapping(object):
+        def __getitem__(self):
+            raise NotImplementedError('getitem:mapping')
+  
+        def keys(self):
+            raise NotImplementedError('keys')
+  
+    class FailingList(list):
+        def __getitem__(self, idx):
+            if i == 2:
+                raise NotImplementedError('getitem:list')
+            else:
+                return super(FailingList, self).__getitem__(idx)
+  
+    class NoArgsCall(object):
+        def __call__(self):
+            pass
+  
+    class FailingCall(object):
+        def __call__(self, path):
+            raise NotImplementedError('call')
+  
+    class FailingNumber(object):
+        def __int__(self):
+            raise NotImplementedError('int')
+  
+    cb.append("> Output")
+    cb.append(">> OutputSetattr")
+    ee('del sys.stdout.softspace')
+    number_test('sys.stdout.softspace = %s', unsigned=True)
+    number_test('sys.stderr.softspace = %s', unsigned=True)
+    ee('assert sys.stdout.isatty()==False')
+    ee('assert sys.stdout.seekable()==False')
+    ee('sys.stdout.close()')
+    ee('sys.stdout.flush()')
+    ee('assert sys.stderr.isatty()==False')
+    ee('assert sys.stderr.seekable()==False')
+    ee('sys.stderr.close()')
+    ee('sys.stderr.flush()')
+    ee('sys.stdout.attr = None')
+    cb.append(">> OutputWrite")
+    ee('assert sys.stdout.writable()==True')
+    ee('assert sys.stdout.readable()==False')
+    ee('assert sys.stderr.writable()==True')
+    ee('assert sys.stderr.readable()==False')
+    ee('assert sys.stdout.closed()==False')
+    ee('assert sys.stderr.closed()==False')
+    ee('assert sys.stdout.errors=="strict"')
+    ee('assert sys.stderr.errors=="strict"')
+    ee('assert sys.stdout.encoding==sys.stderr.encoding')
+    ee('sys.stdout.write(None)')
+    cb.append(">> OutputWriteLines")
+    ee('sys.stdout.writelines(None)')
+    ee('sys.stdout.writelines([1])')
+    iter_test('sys.stdout.writelines(%s)')
+    cb.append("> VimCommand")
+    stringtochars_test('vim.command(%s)')
+    ee('vim.command("", 2)')
+    #! Not checked: vim->python exceptions translating: checked later
+    cb.append("> VimToPython")
+    #! Not checked: everything: needs errors in internal python functions
+    cb.append("> VimEval")
+    stringtochars_test('vim.eval(%s)')
+    ee('vim.eval("", FailingTrue())')
+    #! Not checked: everything: needs errors in internal python functions
+    cb.append("> VimEvalPy")
+    stringtochars_test('vim.bindeval(%s)')
+    ee('vim.eval("", 2)')
+    #! Not checked: vim->python exceptions translating: checked later
+    cb.append("> VimStrwidth")
+    stringtochars_test('vim.strwidth(%s)')
+    cb.append("> VimForeachRTP")
+    ee('vim.foreach_rtp(None)')
+    ee('vim.foreach_rtp(NoArgsCall())')
+    ee('vim.foreach_rtp(FailingCall())')
+    ee('vim.foreach_rtp(int, 2)')
+    cb.append('> import')
+    old_rtp = vim.options['rtp']
+    vim.options['rtp'] = os.getcwd().replace('\\', '\\\\').replace(',', '\\,')
+    ee('import xxx_no_such_module_xxx')
+    ee('import failing_import')
+    ee('import failing')
+    vim.options['rtp'] = old_rtp
+    del old_rtp
+    cb.append("> Options")
+    cb.append(">> OptionsItem")
+    ee('vim.options["abcQ"]')
+    ee('vim.options[""]')
+    stringtochars_test('vim.options[%s]')
+    cb.append(">> OptionsContains")
+    stringtochars_test('%s in vim.options')
+    cb.append("> Dictionary")
+    cb.append(">> DictionaryConstructor")
+    ee('vim.Dictionary("abcI")')
+    ##! Not checked: py_dict_alloc failure
+    cb.append(">> DictionarySetattr")
+    ee('del d.locked')
+    ee('d.locked = FailingTrue()')
+    ee('vim.vvars.locked = False')
+    ee('d.scope = True')
+    ee('d.xxx = True')
+    cb.append(">> _DictionaryItem")
+    ee('d.get("a", 2, 3)')
+    stringtochars_test('d.get(%s)')
+    ee('d.pop("a")')
+    ee('dl.pop("a")')
+    cb.append(">> DictionaryContains")
+    ee('"" in d')
+    ee('0 in d')
+    cb.append(">> DictionaryIterNext")
+    ee('for i in ned: ned["a"] = 1')
+    del i
+    cb.append(">> DictionaryAssItem")
+    ee('dl["b"] = 1')
+    stringtochars_test('d[%s] = 1')
+    convertfrompyobject_test('d["a"] = %s')
+    cb.append(">> DictionaryUpdate")
+    cb.append(">>> kwargs")
+    cb.append(">>> iter")
+    ee('d.update(FailingMapping())')
+    ee('d.update([FailingIterNext()])')
+    ee('d.update([FailingIterNextN(1)])')
+    iter_test('d.update(%s)')
+    convertfrompyobject_test('d.update(%s)')
+    stringtochars_test('d.update(((%s, 0),))')
+    convertfrompyobject_test('d.update((("a", %s),))')
+    cb.append(">> DictionaryPopItem")
+    ee('d.popitem(1, 2)')
+    cb.append(">> DictionaryHasKey")
+    ee('d.has_key()')
+    cb.append("> List")
+    cb.append(">> ListConstructor")
+    ee('vim.List(1, 2)')
+    ee('vim.List(a=1)')
+    iter_test('vim.List(%s)')
+    convertfrompyobject_test('vim.List([%s])')
+    cb.append(">> ListItem")
+    ee('l[1000]')
+    cb.append(">> ListAssItem")
+    ee('ll[1] = 2')
+    ee('l[1000] = 3')
+    cb.append(">> ListAssSlice")
+    ee('ll[1:100] = "abcJ"')
+    iter_test('l[:] = %s')
+    ee('nel[1:10:2]  = "abcK"')
+    cb.append(repr(tuple(nel)))
+    ee('nel[1:10:2]  = "a"')
+    cb.append(repr(tuple(nel)))
+    ee('nel[1:1:-1]  = "a"')
+    cb.append(repr(tuple(nel)))
+    ee('nel[:] = FailingIterNextN(2)')
+    cb.append(repr(tuple(nel)))
+    convertfrompyobject_test('l[:] = [%s]')
+    cb.append(">> ListConcatInPlace")
+    iter_test('l.extend(%s)')
+    convertfrompyobject_test('l.extend([%s])')
+    cb.append(">> ListSetattr")
+    ee('del l.locked')
+    ee('l.locked = FailingTrue()')
+    ee('l.xxx = True')
+    cb.append("> Function")
+    cb.append(">> FunctionConstructor")
+    cb.append(">>> FunctionConstructor")
+    ee('vim.Function("123")')
+    ee('vim.Function("xxx_non_existent_function_xxx")')
+    ee('vim.Function("xxx#non#existent#function#xxx")')
+    ee('vim.Function("xxx_non_existent_function_xxx2", args=[])')
+    ee('vim.Function("xxx_non_existent_function_xxx3", self={})')
+    ee('vim.Function("xxx_non_existent_function_xxx4", args=[], self={})')
+    cb.append(">>> FunctionNew")
+    ee('vim.Function("tr", self="abcFuncSelf")')
+    ee('vim.Function("tr", args=427423)')
+    ee('vim.Function("tr", self="abcFuncSelf2", args="abcFuncArgs2")')
+    ee('vim.Function(self="abcFuncSelf2", args="abcFuncArgs2")')
+    ee('vim.Function("tr", "", self="abcFuncSelf2", args="abcFuncArgs2")')
+    ee('vim.Function("tr", "")')
+    cb.append(">> FunctionCall")
+    convertfrompyobject_test('f(%s)')
+    convertfrompymapping_test('fd(self=%s)')
+    cb.append("> TabPage")
+    cb.append(">> TabPageAttr")
+    ee('vim.current.tabpage.xxx')
+    cb.append("> TabList")
+    cb.append(">> TabListItem")
+    ee('vim.tabpages[1000]')
+    cb.append("> Window")
+    cb.append(">> WindowAttr")
+    ee('vim.current.window.xxx')
+    cb.append(">> WindowSetattr")
+    ee('vim.current.window.buffer = 0')
+    ee('vim.current.window.cursor = (100000000, 100000000)')
+    ee('vim.current.window.cursor = True')
+    number_test('vim.current.window.height = %s', unsigned=True)
+    number_test('vim.current.window.width = %s', unsigned=True)
+    ee('vim.current.window.xxxxxx = True')
+    cb.append("> WinList")
+    cb.append(">> WinListItem")
+    ee('vim.windows[1000]')
+    cb.append("> Buffer")
+    cb.append(">> StringToLine (indirect)")
+    ee('vim.current.buffer[0] = u"\\na"')
+    ee('vim.current.buffer[0] = "\\na"')
+    cb.append(">> SetBufferLine (indirect)")
+    ee('vim.current.buffer[0] = True')
+    cb.append(">> SetBufferLineList (indirect)")
+    ee('vim.current.buffer[:] = True')
+    ee('vim.current.buffer[:] = ["\\na", "bc"]')
+    cb.append(">> InsertBufferLines (indirect)")
+    ee('vim.current.buffer.append(None)')
+    ee('vim.current.buffer.append(["\\na", "bc"])')
+    ee('vim.current.buffer.append("\\nbc")')
+    cb.append(">> RBItem")
+    ee('vim.current.buffer[100000000]')
+    cb.append(">> RBAsItem")
+    ee('vim.current.buffer[100000000] = ""')
+    cb.append(">> BufferAttr")
+    ee('vim.current.buffer.xxx')
+    cb.append(">> BufferSetattr")
+    ee('vim.current.buffer.name = True')
+    ee('vim.current.buffer.xxx = True')
+    cb.append(">> BufferMark")
+    ee('vim.current.buffer.mark(0)')
+    ee('vim.current.buffer.mark("abcM")')
+    ee('vim.current.buffer.mark("!")')
+    cb.append(">> BufferRange")
+    ee('vim.current.buffer.range(1, 2, 3)')
+    cb.append("> BufMap")
+    cb.append(">> BufMapItem")
+    ee('vim.buffers[100000000]')
+    number_test('vim.buffers[%s]', natural=True)
+    cb.append("> Current")
+    cb.append(">> CurrentGetattr")
+    ee('vim.current.xxx')
+    cb.append(">> CurrentSetattr")
+    ee('vim.current.line = True')
+    ee('vim.current.buffer = True')
+    ee('vim.current.window = True')
+    ee('vim.current.tabpage = True')
+    ee('vim.current.xxx = True')
+    del d
+    del ned
+    del dl
+    del l
+    del ll
+    del nel
+    del f
+    del fd
+    del fdel
+    del subexpr_test
+    del stringtochars_test
+    del Mapping
+    del convertfrompyobject_test
+    del convertfrompymapping_test
+    del iter_test
+    del number_test
+    del FailingTrue
+    del FailingIter
+    del FailingIterNext
+    del FailingIterNextN
+    del FailingMapping
+    del FailingMappingKey
+    del FailingList
+    del NoArgsCall
+    del FailingCall
+    del FailingNumber
+  EOF
+  delfunction F
+
+  let expected =<< trim END
+    > Output
+    >> OutputSetattr
+    del sys.stdout.softspace:AttributeError:('cannot delete OutputObject attributes',)
+    >>> Testing NumberToLong using sys.stdout.softspace = %s
+    sys.stdout.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+    sys.stdout.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+    sys.stdout.softspace = -1:ValueError:('number must be greater or equal to zero',)
+    <<< Finished
+    >>> Testing NumberToLong using sys.stderr.softspace = %s
+    sys.stderr.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+    sys.stderr.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+    sys.stderr.softspace = -1:ValueError:('number must be greater or equal to zero',)
+    <<< Finished
+    assert sys.stdout.isatty()==False:NOT FAILED
+    assert sys.stdout.seekable()==False:NOT FAILED
+    sys.stdout.close():NOT FAILED
+    sys.stdout.flush():NOT FAILED
+    assert sys.stderr.isatty()==False:NOT FAILED
+    assert sys.stderr.seekable()==False:NOT FAILED
+    sys.stderr.close():NOT FAILED
+    sys.stderr.flush():NOT FAILED
+    sys.stdout.attr = None:AttributeError:('invalid attribute: attr',)
+    >> OutputWrite
+    assert sys.stdout.writable()==True:NOT FAILED
+    assert sys.stdout.readable()==False:NOT FAILED
+    assert sys.stderr.writable()==True:NOT FAILED
+    assert sys.stderr.readable()==False:NOT FAILED
+    assert sys.stdout.closed()==False:NOT FAILED
+    assert sys.stderr.closed()==False:NOT FAILED
+    assert sys.stdout.errors=="strict":NOT FAILED
+    assert sys.stderr.errors=="strict":NOT FAILED
+    assert sys.stdout.encoding==sys.stderr.encoding:NOT FAILED
+    sys.stdout.write(None):TypeError:('coercing to Unicode: need string or buffer, NoneType found',)
+    >> OutputWriteLines
+    sys.stdout.writelines(None):TypeError:("'NoneType' object is not iterable",)
+    sys.stdout.writelines([1]):TypeError:('coercing to Unicode: need string or buffer, int found',)
+    >>> Testing *Iter* using sys.stdout.writelines(%s)
+    sys.stdout.writelines(FailingIter()):NotImplementedError:('iter',)
+    sys.stdout.writelines(FailingIterNext()):NotImplementedError:('next',)
+    <<< Finished
+    > VimCommand
+    >>> Testing StringToChars using vim.command(%s)
+    vim.command(1):TypeError:('expected str() or unicode() instance, but got int',)
+    vim.command(u"\0"):TypeError:('expected string without null bytes',)
+    vim.command("\0"):TypeError:('expected string without null bytes',)
+    <<< Finished
+    vim.command("", 2):TypeError:('command() takes exactly one argument (2 given)',)
+    > VimToPython
+    > VimEval
+    >>> Testing StringToChars using vim.eval(%s)
+    vim.eval(1):TypeError:('expected str() or unicode() instance, but got int',)
+    vim.eval(u"\0"):TypeError:('expected string without null bytes',)
+    vim.eval("\0"):TypeError:('expected string without null bytes',)
+    <<< Finished
+    vim.eval("", FailingTrue()):TypeError:('function takes exactly 1 argument (2 given)',)
+    > VimEvalPy
+    >>> Testing StringToChars using vim.bindeval(%s)
+    vim.bindeval(1):TypeError:('expected str() or unicode() instance, but got int',)
+    vim.bindeval(u"\0"):TypeError:('expected string without null bytes',)
+    vim.bindeval("\0"):TypeError:('expected string without null bytes',)
+    <<< Finished
+    vim.eval("", 2):TypeError:('function takes exactly 1 argument (2 given)',)
+    > VimStrwidth
+    >>> Testing StringToChars using vim.strwidth(%s)
+    vim.strwidth(1):TypeError:('expected str() or unicode() instance, but got int',)
+    vim.strwidth(u"\0"):TypeError:('expected string without null bytes',)
+    vim.strwidth("\0"):TypeError:('expected string without null bytes',)
+    <<< Finished
+    > VimForeachRTP
+    vim.foreach_rtp(None):TypeError:("'NoneType' object is not callable",)
+    vim.foreach_rtp(NoArgsCall()):TypeError:('__call__() takes exactly 1 argument (2 given)',)
+    vim.foreach_rtp(FailingCall()):NotImplementedError:('call',)
+    vim.foreach_rtp(int, 2):TypeError:('foreach_rtp() takes exactly one argument (2 given)',)
+    > import
+    import xxx_no_such_module_xxx:ImportError:('No module named xxx_no_such_module_xxx',)
+    import failing_import:ImportError:()
+    import failing:NotImplementedError:()
+    > Options
+    >> OptionsItem
+    vim.options["abcQ"]:KeyError:('abcQ',)
+    vim.options[""]:ValueError:('empty keys are not allowed',)
+    >>> Testing StringToChars using vim.options[%s]
+    vim.options[1]:TypeError:('expected str() or unicode() instance, but got int',)
+    vim.options[u"\0"]:TypeError:('expected string without null bytes',)
+    vim.options["\0"]:TypeError:('expected string without null bytes',)
+    <<< Finished
+    >> OptionsContains
+    >>> Testing StringToChars using %s in vim.options
+    1 in vim.options:TypeError:('expected str() or unicode() instance, but got int',)
+    u"\0" in vim.options:TypeError:('expected string without null bytes',)
+    "\0" in vim.options:TypeError:('expected string without null bytes',)
+    <<< Finished
+    > Dictionary
+    >> DictionaryConstructor
+    vim.Dictionary("abcI"):ValueError:('expected sequence element of size 2, but got sequence of size 1',)
+    >> DictionarySetattr
+    del d.locked:AttributeError:('cannot delete vim.Dictionary attributes',)
+    d.locked = FailingTrue():NotImplementedError:('bool',)
+    vim.vvars.locked = False:TypeError:('cannot modify fixed dictionary',)
+    d.scope = True:AttributeError:('cannot set attribute scope',)
+    d.xxx = True:AttributeError:('cannot set attribute xxx',)
+    >> _DictionaryItem
+    d.get("a", 2, 3):TypeError:('function takes at most 2 arguments (3 given)',)
+    >>> Testing StringToChars using d.get(%s)
+    d.get(1):TypeError:('expected str() or unicode() instance, but got int',)
+    d.get(u"\0"):TypeError:('expected string without null bytes',)
+    d.get("\0"):TypeError:('expected string without null bytes',)
+    <<< Finished
+    d.pop("a"):KeyError:('a',)
+    dl.pop("a"):error:('dictionary is locked',)
+    >> DictionaryContains
+    "" in d:ValueError:('empty keys are not allowed',)
+    0 in d:TypeError:('expected str() or unicode() instance, but got int',)
+    >> DictionaryIterNext
+    for i in ned: ned["a"] = 1:RuntimeError:('hashtab changed during iteration',)
+    >> DictionaryAssItem
+    dl["b"] = 1:error:('dictionary is locked',)
+    >>> Testing StringToChars using d[%s] = 1
+    d[1] = 1:TypeError:('expected str() or unicode() instance, but got int',)
+    d[u"\0"] = 1:TypeError:('expected string without null bytes',)
+    d["\0"] = 1:TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d["a"] = {%s : 1}
+    d["a"] = {1 : 1}:TypeError:('expected str() or unicode() instance, but got int',)
+    d["a"] = {u"\0" : 1}:TypeError:('expected string without null bytes',)
+    d["a"] = {"\0" : 1}:TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d["a"] = {"abcF" : {%s : 1}}
+    d["a"] = {"abcF" : {1 : 1}}:TypeError:('expected str() or unicode() instance, but got int',)
+    d["a"] = {"abcF" : {u"\0" : 1}}:TypeError:('expected string without null bytes',)
+    d["a"] = {"abcF" : {"\0" : 1}}:TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d["a"] = {"abcF" : Mapping({%s : 1})}
+    d["a"] = {"abcF" : Mapping({1 : 1})}:TypeError:('expected str() or unicode() instance, but got int',)
+    d["a"] = {"abcF" : Mapping({u"\0" : 1})}:TypeError:('expected string without null bytes',)
+    d["a"] = {"abcF" : Mapping({"\0" : 1})}:TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using d["a"] = {"abcF" : %s}
+    d["a"] = {"abcF" : FailingIter()}:TypeError:('unable to convert FailingIter to a Vim structure',)
+    d["a"] = {"abcF" : FailingIterNext()}:NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d["a"] = {"abcF" : %s}
+    d["a"] = {"abcF" : None}:NOT FAILED
+    d["a"] = {"abcF" : {"": 1}}:ValueError:('empty keys are not allowed',)
+    d["a"] = {"abcF" : {u"": 1}}:ValueError:('empty keys are not allowed',)
+    d["a"] = {"abcF" : FailingMapping()}:NotImplementedError:('keys',)
+    d["a"] = {"abcF" : FailingMappingKey()}:NotImplementedError:('getitem:mappingkey',)
+    d["a"] = {"abcF" : FailingNumber()}:TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing StringToChars using d["a"] = Mapping({%s : 1})
+    d["a"] = Mapping({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
+    d["a"] = Mapping({u"\0" : 1}):TypeError:('expected string without null bytes',)
+    d["a"] = Mapping({"\0" : 1}):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d["a"] = Mapping({"abcG" : {%s : 1}})
+    d["a"] = Mapping({"abcG" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
+    d["a"] = Mapping({"abcG" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
+    d["a"] = Mapping({"abcG" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d["a"] = Mapping({"abcG" : Mapping({%s : 1})})
+    d["a"] = Mapping({"abcG" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
+    d["a"] = Mapping({"abcG" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
+    d["a"] = Mapping({"abcG" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using d["a"] = Mapping({"abcG" : %s})
+    d["a"] = Mapping({"abcG" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',)
+    d["a"] = Mapping({"abcG" : FailingIterNext()}):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d["a"] = Mapping({"abcG" : %s})
+    d["a"] = Mapping({"abcG" : None}):NOT FAILED
+    d["a"] = Mapping({"abcG" : {"": 1}}):ValueError:('empty keys are not allowed',)
+    d["a"] = Mapping({"abcG" : {u"": 1}}):ValueError:('empty keys are not allowed',)
+    d["a"] = Mapping({"abcG" : FailingMapping()}):NotImplementedError:('keys',)
+    d["a"] = Mapping({"abcG" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
+    d["a"] = Mapping({"abcG" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing *Iter* using d["a"] = %s
+    d["a"] = FailingIter():TypeError:('unable to convert FailingIter to a Vim structure',)
+    d["a"] = FailingIterNext():NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d["a"] = %s
+    d["a"] = None:NOT FAILED
+    d["a"] = {"": 1}:ValueError:('empty keys are not allowed',)
+    d["a"] = {u"": 1}:ValueError:('empty keys are not allowed',)
+    d["a"] = FailingMapping():NotImplementedError:('keys',)
+    d["a"] = FailingMappingKey():NotImplementedError:('getitem:mappingkey',)
+    d["a"] = FailingNumber():TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >> DictionaryUpdate
+    >>> kwargs
+    >>> iter
+    d.update(FailingMapping()):NotImplementedError:('keys',)
+    d.update([FailingIterNext()]):NotImplementedError:('next',)
+    d.update([FailingIterNextN(1)]):NotImplementedError:('next N',)
+    >>> Testing *Iter* using d.update(%s)
+    d.update(FailingIter()):NotImplementedError:('iter',)
+    d.update(FailingIterNext()):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing StringToChars using d.update({%s : 1})
+    d.update({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
+    d.update({u"\0" : 1}):TypeError:('expected string without null bytes',)
+    d.update({"\0" : 1}):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d.update({"abcF" : {%s : 1}})
+    d.update({"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
+    d.update({"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
+    d.update({"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d.update({"abcF" : Mapping({%s : 1})})
+    d.update({"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
+    d.update({"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
+    d.update({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using d.update({"abcF" : %s})
+    d.update({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',)
+    d.update({"abcF" : FailingIterNext()}):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d.update({"abcF" : %s})
+    d.update({"abcF" : None}):NOT FAILED
+    d.update({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',)
+    d.update({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',)
+    d.update({"abcF" : FailingMapping()}):NotImplementedError:('keys',)
+    d.update({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
+    d.update({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing StringToChars using d.update(Mapping({%s : 1}))
+    d.update(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',)
+    d.update(Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',)
+    d.update(Mapping({"\0" : 1})):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d.update(Mapping({"abcG" : {%s : 1}}))
+    d.update(Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',)
+    d.update(Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',)
+    d.update(Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d.update(Mapping({"abcG" : Mapping({%s : 1})}))
+    d.update(Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',)
+    d.update(Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',)
+    d.update(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using d.update(Mapping({"abcG" : %s}))
+    d.update(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to a Vim structure',)
+    d.update(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d.update(Mapping({"abcG" : %s}))
+    d.update(Mapping({"abcG" : None})):NOT FAILED
+    d.update(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',)
+    d.update(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',)
+    d.update(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',)
+    d.update(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',)
+    d.update(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing *Iter* using d.update(%s)
+    d.update(FailingIter()):NotImplementedError:('iter',)
+    d.update(FailingIterNext()):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d.update(%s)
+    d.update(None):TypeError:("'NoneType' object is not iterable",)
+    d.update({"": 1}):ValueError:('empty keys are not allowed',)
+    d.update({u"": 1}):ValueError:('empty keys are not allowed',)
+    d.update(FailingMapping()):NotImplementedError:('keys',)
+    d.update(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',)
+    d.update(FailingNumber()):TypeError:("'FailingNumber' object is not iterable",)
+    <<< Finished
+    >>> Testing StringToChars using d.update(((%s, 0),))
+    d.update(((1, 0),)):TypeError:('expected str() or unicode() instance, but got int',)
+    d.update(((u"\0", 0),)):TypeError:('expected string without null bytes',)
+    d.update((("\0", 0),)):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d.update((("a", {%s : 1}),))
+    d.update((("a", {1 : 1}),)):TypeError:('expected str() or unicode() instance, but got int',)
+    d.update((("a", {u"\0" : 1}),)):TypeError:('expected string without null bytes',)
+    d.update((("a", {"\0" : 1}),)):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d.update((("a", {"abcF" : {%s : 1}}),))
+    d.update((("a", {"abcF" : {1 : 1}}),)):TypeError:('expected str() or unicode() instance, but got int',)
+    d.update((("a", {"abcF" : {u"\0" : 1}}),)):TypeError:('expected string without null bytes',)
+    d.update((("a", {"abcF" : {"\0" : 1}}),)):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d.update((("a", {"abcF" : Mapping({%s : 1})}),))
+    d.update((("a", {"abcF" : Mapping({1 : 1})}),)):TypeError:('expected str() or unicode() instance, but got int',)
+    d.update((("a", {"abcF" : Mapping({u"\0" : 1})}),)):TypeError:('expected string without null bytes',)
+    d.update((("a", {"abcF" : Mapping({"\0" : 1})}),)):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using d.update((("a", {"abcF" : %s}),))
+    d.update((("a", {"abcF" : FailingIter()}),)):TypeError:('unable to convert FailingIter to a Vim structure',)
+    d.update((("a", {"abcF" : FailingIterNext()}),)):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d.update((("a", {"abcF" : %s}),))
+    d.update((("a", {"abcF" : None}),)):error:("failed to add key 'a' to dictionary",)
+    d.update((("a", {"abcF" : {"": 1}}),)):ValueError:('empty keys are not allowed',)
+    d.update((("a", {"abcF" : {u"": 1}}),)):ValueError:('empty keys are not allowed',)
+    d.update((("a", {"abcF" : FailingMapping()}),)):NotImplementedError:('keys',)
+    d.update((("a", {"abcF" : FailingMappingKey()}),)):NotImplementedError:('getitem:mappingkey',)
+    d.update((("a", {"abcF" : FailingNumber()}),)):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),))
+    d.update((("a", Mapping({1 : 1})),)):TypeError:('expected str() or unicode() instance, but got int',)
+    d.update((("a", Mapping({u"\0" : 1})),)):TypeError:('expected string without null bytes',)
+    d.update((("a", Mapping({"\0" : 1})),)):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d.update((("a", Mapping({"abcG" : {%s : 1}})),))
+    d.update((("a", Mapping({"abcG" : {1 : 1}})),)):TypeError:('expected str() or unicode() instance, but got int',)
+    d.update((("a", Mapping({"abcG" : {u"\0" : 1}})),)):TypeError:('expected string without null bytes',)
+    d.update((("a", Mapping({"abcG" : {"\0" : 1}})),)):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using d.update((("a", Mapping({"abcG" : Mapping({%s : 1})})),))
+    d.update((("a", Mapping({"abcG" : Mapping({1 : 1})})),)):TypeError:('expected str() or unicode() instance, but got int',)
+    d.update((("a", Mapping({"abcG" : Mapping({u"\0" : 1})})),)):TypeError:('expected string without null bytes',)
+    d.update((("a", Mapping({"abcG" : Mapping({"\0" : 1})})),)):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using d.update((("a", Mapping({"abcG" : %s})),))
+    d.update((("a", Mapping({"abcG" : FailingIter()})),)):TypeError:('unable to convert FailingIter to a Vim structure',)
+    d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abcG" : %s})),))
+    d.update((("a", Mapping({"abcG" : None})),)):error:("failed to add key 'a' to dictionary",)
+    d.update((("a", Mapping({"abcG" : {"": 1}})),)):ValueError:('empty keys are not allowed',)
+    d.update((("a", Mapping({"abcG" : {u"": 1}})),)):ValueError:('empty keys are not allowed',)
+    d.update((("a", Mapping({"abcG" : FailingMapping()})),)):NotImplementedError:('keys',)
+    d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):NotImplementedError:('getitem:mappingkey',)
+    d.update((("a", Mapping({"abcG" : FailingNumber()})),)):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing *Iter* using d.update((("a", %s),))
+    d.update((("a", FailingIter()),)):TypeError:('unable to convert FailingIter to a Vim structure',)
+    d.update((("a", FailingIterNext()),)):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d.update((("a", %s),))
+    d.update((("a", None),)):error:("failed to add key 'a' to dictionary",)
+    d.update((("a", {"": 1}),)):ValueError:('empty keys are not allowed',)
+    d.update((("a", {u"": 1}),)):ValueError:('empty keys are not allowed',)
+    d.update((("a", FailingMapping()),)):NotImplementedError:('keys',)
+    d.update((("a", FailingMappingKey()),)):NotImplementedError:('getitem:mappingkey',)
+    d.update((("a", FailingNumber()),)):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >> DictionaryPopItem
+    d.popitem(1, 2):TypeError:('popitem() takes no arguments (2 given)',)
+    >> DictionaryHasKey
+    d.has_key():TypeError:('has_key() takes exactly one argument (0 given)',)
+    > List
+    >> ListConstructor
+    vim.List(1, 2):TypeError:('function takes at most 1 argument (2 given)',)
+    vim.List(a=1):TypeError:('list constructor does not accept keyword arguments',)
+    >>> Testing *Iter* using vim.List(%s)
+    vim.List(FailingIter()):NotImplementedError:('iter',)
+    vim.List(FailingIterNext()):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing StringToChars using vim.List([{%s : 1}])
+    vim.List([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',)
+    vim.List([{u"\0" : 1}]):TypeError:('expected string without null bytes',)
+    vim.List([{"\0" : 1}]):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using vim.List([{"abcF" : {%s : 1}}])
+    vim.List([{"abcF" : {1 : 1}}]):TypeError:('expected str() or unicode() instance, but got int',)
+    vim.List([{"abcF" : {u"\0" : 1}}]):TypeError:('expected string without null bytes',)
+    vim.List([{"abcF" : {"\0" : 1}}]):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using vim.List([{"abcF" : Mapping({%s : 1})}])
+    vim.List([{"abcF" : Mapping({1 : 1})}]):TypeError:('expected str() or unicode() instance, but got int',)
+    vim.List([{"abcF" : Mapping({u"\0" : 1})}]):TypeError:('expected string without null bytes',)
+    vim.List([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using vim.List([{"abcF" : %s}])
+    vim.List([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to a Vim structure',)
+    vim.List([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using vim.List([{"abcF" : %s}])
+    vim.List([{"abcF" : None}]):NOT FAILED
+    vim.List([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',)
+    vim.List([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',)
+    vim.List([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',)
+    vim.List([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',)
+    vim.List([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing StringToChars using vim.List([Mapping({%s : 1})])
+    vim.List([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',)
+    vim.List([Mapping({u"\0" : 1})]):TypeError:('expected string without null bytes',)
+    vim.List([Mapping({"\0" : 1})]):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using vim.List([Mapping({"abcG" : {%s : 1}})])
+    vim.List([Mapping({"abcG" : {1 : 1}})]):TypeError:('expected str() or unicode() instance, but got int',)
+    vim.List([Mapping({"abcG" : {u"\0" : 1}})]):TypeError:('expected string without null bytes',)
+    vim.List([Mapping({"abcG" : {"\0" : 1}})]):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using vim.List([Mapping({"abcG" : Mapping({%s : 1})})])
+    vim.List([Mapping({"abcG" : Mapping({1 : 1})})]):TypeError:('expected str() or unicode() instance, but got int',)
+    vim.List([Mapping({"abcG" : Mapping({u"\0" : 1})})]):TypeError:('expected string without null bytes',)
+    vim.List([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using vim.List([Mapping({"abcG" : %s})])
+    vim.List([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to a Vim structure',)
+    vim.List([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using vim.List([Mapping({"abcG" : %s})])
+    vim.List([Mapping({"abcG" : None})]):NOT FAILED
+    vim.List([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',)
+    vim.List([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',)
+    vim.List([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',)
+    vim.List([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',)
+    vim.List([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing *Iter* using vim.List([%s])
+    vim.List([FailingIter()]):TypeError:('unable to convert FailingIter to a Vim structure',)
+    vim.List([FailingIterNext()]):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using vim.List([%s])
+    vim.List([None]):NOT FAILED
+    vim.List([{"": 1}]):ValueError:('empty keys are not allowed',)
+    vim.List([{u"": 1}]):ValueError:('empty keys are not allowed',)
+    vim.List([FailingMapping()]):NotImplementedError:('keys',)
+    vim.List([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',)
+    vim.List([FailingNumber()]):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >> ListItem
+    l[1000]:IndexError:('list index out of range',)
+    >> ListAssItem
+    ll[1] = 2:error:('list is locked',)
+    l[1000] = 3:IndexError:('list index out of range',)
+    >> ListAssSlice
+    ll[1:100] = "abcJ":error:('list is locked',)
+    >>> Testing *Iter* using l[:] = %s
+    l[:] = FailingIter():NotImplementedError:('iter',)
+    l[:] = FailingIterNext():NotImplementedError:('next',)
+    <<< Finished
+    nel[1:10:2]  = "abcK":ValueError:('attempt to assign sequence of size greater than 2 to extended slice',)
+    ('a', 'b', 'c', 'O')
+    nel[1:10:2]  = "a":ValueError:('attempt to assign sequence of size 1 to extended slice of size 2',)
+    ('a', 'b', 'c', 'O')
+    nel[1:1:-1]  = "a":ValueError:('attempt to assign sequence of size greater than 0 to extended slice',)
+    ('a', 'b', 'c', 'O')
+    nel[:] = FailingIterNextN(2):NotImplementedError:('next N',)
+    ('a', 'b', 'c', 'O')
+    >>> Testing StringToChars using l[:] = [{%s : 1}]
+    l[:] = [{1 : 1}]:TypeError:('expected str() or unicode() instance, but got int',)
+    l[:] = [{u"\0" : 1}]:TypeError:('expected string without null bytes',)
+    l[:] = [{"\0" : 1}]:TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using l[:] = [{"abcF" : {%s : 1}}]
+    l[:] = [{"abcF" : {1 : 1}}]:TypeError:('expected str() or unicode() instance, but got int',)
+    l[:] = [{"abcF" : {u"\0" : 1}}]:TypeError:('expected string without null bytes',)
+    l[:] = [{"abcF" : {"\0" : 1}}]:TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using l[:] = [{"abcF" : Mapping({%s : 1})}]
+    l[:] = [{"abcF" : Mapping({1 : 1})}]:TypeError:('expected str() or unicode() instance, but got int',)
+    l[:] = [{"abcF" : Mapping({u"\0" : 1})}]:TypeError:('expected string without null bytes',)
+    l[:] = [{"abcF" : Mapping({"\0" : 1})}]:TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using l[:] = [{"abcF" : %s}]
+    l[:] = [{"abcF" : FailingIter()}]:TypeError:('unable to convert FailingIter to a Vim structure',)
+    l[:] = [{"abcF" : FailingIterNext()}]:NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using l[:] = [{"abcF" : %s}]
+    l[:] = [{"abcF" : None}]:NOT FAILED
+    l[:] = [{"abcF" : {"": 1}}]:ValueError:('empty keys are not allowed',)
+    l[:] = [{"abcF" : {u"": 1}}]:ValueError:('empty keys are not allowed',)
+    l[:] = [{"abcF" : FailingMapping()}]:NotImplementedError:('keys',)
+    l[:] = [{"abcF" : FailingMappingKey()}]:NotImplementedError:('getitem:mappingkey',)
+    l[:] = [{"abcF" : FailingNumber()}]:TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing StringToChars using l[:] = [Mapping({%s : 1})]
+    l[:] = [Mapping({1 : 1})]:TypeError:('expected str() or unicode() instance, but got int',)
+    l[:] = [Mapping({u"\0" : 1})]:TypeError:('expected string without null bytes',)
+    l[:] = [Mapping({"\0" : 1})]:TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using l[:] = [Mapping({"abcG" : {%s : 1}})]
+    l[:] = [Mapping({"abcG" : {1 : 1}})]:TypeError:('expected str() or unicode() instance, but got int',)
+    l[:] = [Mapping({"abcG" : {u"\0" : 1}})]:TypeError:('expected string without null bytes',)
+    l[:] = [Mapping({"abcG" : {"\0" : 1}})]:TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using l[:] = [Mapping({"abcG" : Mapping({%s : 1})})]
+    l[:] = [Mapping({"abcG" : Mapping({1 : 1})})]:TypeError:('expected str() or unicode() instance, but got int',)
+    l[:] = [Mapping({"abcG" : Mapping({u"\0" : 1})})]:TypeError:('expected string without null bytes',)
+    l[:] = [Mapping({"abcG" : Mapping({"\0" : 1})})]:TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using l[:] = [Mapping({"abcG" : %s})]
+    l[:] = [Mapping({"abcG" : FailingIter()})]:TypeError:('unable to convert FailingIter to a Vim structure',)
+    l[:] = [Mapping({"abcG" : FailingIterNext()})]:NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using l[:] = [Mapping({"abcG" : %s})]
+    l[:] = [Mapping({"abcG" : None})]:NOT FAILED
+    l[:] = [Mapping({"abcG" : {"": 1}})]:ValueError:('empty keys are not allowed',)
+    l[:] = [Mapping({"abcG" : {u"": 1}})]:ValueError:('empty keys are not allowed',)
+    l[:] = [Mapping({"abcG" : FailingMapping()})]:NotImplementedError:('keys',)
+    l[:] = [Mapping({"abcG" : FailingMappingKey()})]:NotImplementedError:('getitem:mappingkey',)
+    l[:] = [Mapping({"abcG" : FailingNumber()})]:TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing *Iter* using l[:] = [%s]
+    l[:] = [FailingIter()]:TypeError:('unable to convert FailingIter to a Vim structure',)
+    l[:] = [FailingIterNext()]:NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using l[:] = [%s]
+    l[:] = [None]:NOT FAILED
+    l[:] = [{"": 1}]:ValueError:('empty keys are not allowed',)
+    l[:] = [{u"": 1}]:ValueError:('empty keys are not allowed',)
+    l[:] = [FailingMapping()]:NotImplementedError:('keys',)
+    l[:] = [FailingMappingKey()]:NotImplementedError:('getitem:mappingkey',)
+    l[:] = [FailingNumber()]:TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >> ListConcatInPlace
+    >>> Testing *Iter* using l.extend(%s)
+    l.extend(FailingIter()):NotImplementedError:('iter',)
+    l.extend(FailingIterNext()):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing StringToChars using l.extend([{%s : 1}])
+    l.extend([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',)
+    l.extend([{u"\0" : 1}]):TypeError:('expected string without null bytes',)
+    l.extend([{"\0" : 1}]):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using l.extend([{"abcF" : {%s : 1}}])
+    l.extend([{"abcF" : {1 : 1}}]):TypeError:('expected str() or unicode() instance, but got int',)
+    l.extend([{"abcF" : {u"\0" : 1}}]):TypeError:('expected string without null bytes',)
+    l.extend([{"abcF" : {"\0" : 1}}]):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using l.extend([{"abcF" : Mapping({%s : 1})}])
+    l.extend([{"abcF" : Mapping({1 : 1})}]):TypeError:('expected str() or unicode() instance, but got int',)
+    l.extend([{"abcF" : Mapping({u"\0" : 1})}]):TypeError:('expected string without null bytes',)
+    l.extend([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using l.extend([{"abcF" : %s}])
+    l.extend([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to a Vim structure',)
+    l.extend([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using l.extend([{"abcF" : %s}])
+    l.extend([{"abcF" : None}]):NOT FAILED
+    l.extend([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',)
+    l.extend([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',)
+    l.extend([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',)
+    l.extend([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',)
+    l.extend([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing StringToChars using l.extend([Mapping({%s : 1})])
+    l.extend([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',)
+    l.extend([Mapping({u"\0" : 1})]):TypeError:('expected string without null bytes',)
+    l.extend([Mapping({"\0" : 1})]):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using l.extend([Mapping({"abcG" : {%s : 1}})])
+    l.extend([Mapping({"abcG" : {1 : 1}})]):TypeError:('expected str() or unicode() instance, but got int',)
+    l.extend([Mapping({"abcG" : {u"\0" : 1}})]):TypeError:('expected string without null bytes',)
+    l.extend([Mapping({"abcG" : {"\0" : 1}})]):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using l.extend([Mapping({"abcG" : Mapping({%s : 1})})])
+    l.extend([Mapping({"abcG" : Mapping({1 : 1})})]):TypeError:('expected str() or unicode() instance, but got int',)
+    l.extend([Mapping({"abcG" : Mapping({u"\0" : 1})})]):TypeError:('expected string without null bytes',)
+    l.extend([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using l.extend([Mapping({"abcG" : %s})])
+    l.extend([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to a Vim structure',)
+    l.extend([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using l.extend([Mapping({"abcG" : %s})])
+    l.extend([Mapping({"abcG" : None})]):NOT FAILED
+    l.extend([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',)
+    l.extend([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',)
+    l.extend([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',)
+    l.extend([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',)
+    l.extend([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing *Iter* using l.extend([%s])
+    l.extend([FailingIter()]):TypeError:('unable to convert FailingIter to a Vim structure',)
+    l.extend([FailingIterNext()]):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using l.extend([%s])
+    l.extend([None]):NOT FAILED
+    l.extend([{"": 1}]):ValueError:('empty keys are not allowed',)
+    l.extend([{u"": 1}]):ValueError:('empty keys are not allowed',)
+    l.extend([FailingMapping()]):NotImplementedError:('keys',)
+    l.extend([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',)
+    l.extend([FailingNumber()]):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >> ListSetattr
+    del l.locked:AttributeError:('cannot delete vim.List attributes',)
+    l.locked = FailingTrue():NotImplementedError:('bool',)
+    l.xxx = True:AttributeError:('cannot set attribute xxx',)
+    > Function
+    >> FunctionConstructor
+    >>> FunctionConstructor
+    vim.Function("123"):ValueError:('unnamed function 123 does not exist',)
+    vim.Function("xxx_non_existent_function_xxx"):ValueError:('function xxx_non_existent_function_xxx does not exist',)
+    vim.Function("xxx#non#existent#function#xxx"):NOT FAILED
+    vim.Function("xxx_non_existent_function_xxx2", args=[]):ValueError:('function xxx_non_existent_function_xxx2 does not exist',)
+    vim.Function("xxx_non_existent_function_xxx3", self={}):ValueError:('function xxx_non_existent_function_xxx3 does not exist',)
+    vim.Function("xxx_non_existent_function_xxx4", args=[], self={}):ValueError:('function xxx_non_existent_function_xxx4 does not exist',)
+    >>> FunctionNew
+    vim.Function("tr", self="abcFuncSelf"):TypeError:('unable to convert str to a Vim dictionary',)
+    vim.Function("tr", args=427423):TypeError:('unable to convert int to a Vim list',)
+    vim.Function("tr", self="abcFuncSelf2", args="abcFuncArgs2"):TypeError:('unable to convert str to a Vim dictionary',)
+    vim.Function(self="abcFuncSelf2", args="abcFuncArgs2"):TypeError:('unable to convert str to a Vim dictionary',)
+    vim.Function("tr", "", self="abcFuncSelf2", args="abcFuncArgs2"):TypeError:('unable to convert str to a Vim dictionary',)
+    vim.Function("tr", ""):TypeError:('function takes exactly 1 argument (2 given)',)
+    >> FunctionCall
+    >>> Testing StringToChars using f({%s : 1})
+    f({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
+    f({u"\0" : 1}):TypeError:('expected string without null bytes',)
+    f({"\0" : 1}):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using f({"abcF" : {%s : 1}})
+    f({"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
+    f({"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
+    f({"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using f({"abcF" : Mapping({%s : 1})})
+    f({"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
+    f({"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
+    f({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using f({"abcF" : %s})
+    f({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',)
+    f({"abcF" : FailingIterNext()}):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using f({"abcF" : %s})
+    f({"abcF" : None}):NOT FAILED
+    f({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',)
+    f({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',)
+    f({"abcF" : FailingMapping()}):NotImplementedError:('keys',)
+    f({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
+    f({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing StringToChars using f(Mapping({%s : 1}))
+    f(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',)
+    f(Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',)
+    f(Mapping({"\0" : 1})):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using f(Mapping({"abcG" : {%s : 1}}))
+    f(Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',)
+    f(Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',)
+    f(Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using f(Mapping({"abcG" : Mapping({%s : 1})}))
+    f(Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',)
+    f(Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',)
+    f(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using f(Mapping({"abcG" : %s}))
+    f(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to a Vim structure',)
+    f(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using f(Mapping({"abcG" : %s}))
+    f(Mapping({"abcG" : None})):NOT FAILED
+    f(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',)
+    f(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',)
+    f(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',)
+    f(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',)
+    f(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing *Iter* using f(%s)
+    f(FailingIter()):TypeError:('unable to convert FailingIter to a Vim structure',)
+    f(FailingIterNext()):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using f(%s)
+    f(None):NOT FAILED
+    f({"": 1}):ValueError:('empty keys are not allowed',)
+    f({u"": 1}):ValueError:('empty keys are not allowed',)
+    f(FailingMapping()):NotImplementedError:('keys',)
+    f(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',)
+    f(FailingNumber()):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing StringToChars using fd(self={%s : 1})
+    fd(self={1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
+    fd(self={u"\0" : 1}):TypeError:('expected string without null bytes',)
+    fd(self={"\0" : 1}):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using fd(self={"abcF" : {%s : 1}})
+    fd(self={"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
+    fd(self={"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
+    fd(self={"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using fd(self={"abcF" : Mapping({%s : 1})})
+    fd(self={"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
+    fd(self={"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
+    fd(self={"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using fd(self={"abcF" : %s})
+    fd(self={"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',)
+    fd(self={"abcF" : FailingIterNext()}):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using fd(self={"abcF" : %s})
+    fd(self={"abcF" : None}):NOT FAILED
+    fd(self={"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',)
+    fd(self={"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',)
+    fd(self={"abcF" : FailingMapping()}):NotImplementedError:('keys',)
+    fd(self={"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
+    fd(self={"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing StringToChars using fd(self=Mapping({%s : 1}))
+    fd(self=Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',)
+    fd(self=Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',)
+    fd(self=Mapping({"\0" : 1})):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using fd(self=Mapping({"abcG" : {%s : 1}}))
+    fd(self=Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',)
+    fd(self=Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',)
+    fd(self=Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing StringToChars using fd(self=Mapping({"abcG" : Mapping({%s : 1})}))
+    fd(self=Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',)
+    fd(self=Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',)
+    fd(self=Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',)
+    <<< Finished
+    >>> Testing *Iter* using fd(self=Mapping({"abcG" : %s}))
+    fd(self=Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to a Vim structure',)
+    fd(self=Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using fd(self=Mapping({"abcG" : %s}))
+    fd(self=Mapping({"abcG" : None})):NOT FAILED
+    fd(self=Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',)
+    fd(self=Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',)
+    fd(self=Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',)
+    fd(self=Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',)
+    fd(self=Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',)
+    <<< Finished
+    >>> Testing *Iter* using fd(self=%s)
+    fd(self=FailingIter()):TypeError:('unable to convert FailingIter to a Vim dictionary',)
+    fd(self=FailingIterNext()):TypeError:('unable to convert FailingIterNext to a Vim dictionary',)
+    <<< Finished
+    >>> Testing ConvertFromPyObject using fd(self=%s)
+    fd(self=None):TypeError:('unable to convert NoneType to a Vim dictionary',)
+    fd(self={"": 1}):ValueError:('empty keys are not allowed',)
+    fd(self={u"": 1}):ValueError:('empty keys are not allowed',)
+    fd(self=FailingMapping()):NotImplementedError:('keys',)
+    fd(self=FailingMappingKey()):NotImplementedError:('getitem:mappingkey',)
+    fd(self=FailingNumber()):TypeError:('unable to convert FailingNumber to a Vim dictionary',)
+    <<< Finished
+    >>> Testing ConvertFromPyMapping using fd(self=%s)
+    fd(self=[]):TypeError:('unable to convert list to a Vim dictionary',)
+    <<< Finished
+    > TabPage
+    >> TabPageAttr
+    vim.current.tabpage.xxx:AttributeError:('xxx',)
+    > TabList
+    >> TabListItem
+    vim.tabpages[1000]:IndexError:('no such tab page',)
+    > Window
+    >> WindowAttr
+    vim.current.window.xxx:AttributeError:('xxx',)
+    >> WindowSetattr
+    vim.current.window.buffer = 0:TypeError:('readonly attribute: buffer',)
+    vim.current.window.cursor = (100000000, 100000000):error:('cursor position outside buffer',)
+    vim.current.window.cursor = True:TypeError:('argument must be 2-item sequence, not bool',)
+    >>> Testing NumberToLong using vim.current.window.height = %s
+    vim.current.window.height = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+    vim.current.window.height = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+    vim.current.window.height = -1:ValueError:('number must be greater or equal to zero',)
+    <<< Finished
+    >>> Testing NumberToLong using vim.current.window.width = %s
+    vim.current.window.width = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+    vim.current.window.width = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+    vim.current.window.width = -1:ValueError:('number must be greater or equal to zero',)
+    <<< Finished
+    vim.current.window.xxxxxx = True:AttributeError:('xxxxxx',)
+    > WinList
+    >> WinListItem
+    vim.windows[1000]:IndexError:('no such window',)
+    > Buffer
+    >> StringToLine (indirect)
+    vim.current.buffer[0] = u"\na":error:('string cannot contain newlines',)
+    vim.current.buffer[0] = "\na":error:('string cannot contain newlines',)
+    >> SetBufferLine (indirect)
+    vim.current.buffer[0] = True:TypeError:('bad argument type for built-in operation',)
+    >> SetBufferLineList (indirect)
+    vim.current.buffer[:] = True:TypeError:('bad argument type for built-in operation',)
+    vim.current.buffer[:] = ["\na", "bc"]:error:('string cannot contain newlines',)
+    >> InsertBufferLines (indirect)
+    vim.current.buffer.append(None):TypeError:('bad argument type for built-in operation',)
+    vim.current.buffer.append(["\na", "bc"]):error:('string cannot contain newlines',)
+    vim.current.buffer.append("\nbc"):error:('string cannot contain newlines',)
+    >> RBItem
+    vim.current.buffer[100000000]:IndexError:('line number out of range',)
+    >> RBAsItem
+    vim.current.buffer[100000000] = "":IndexError:('line number out of range',)
+    >> BufferAttr
+    vim.current.buffer.xxx:AttributeError:('xxx',)
+    >> BufferSetattr
+    vim.current.buffer.name = True:TypeError:('expected str() or unicode() instance, but got bool',)
+    vim.current.buffer.xxx = True:AttributeError:('xxx',)
+    >> BufferMark
+    vim.current.buffer.mark(0):TypeError:('expected str() or unicode() instance, but got int',)
+    vim.current.buffer.mark("abcM"):ValueError:('mark name must be a single character',)
+    vim.current.buffer.mark("!"):error:('invalid mark name',)
+    >> BufferRange
+    vim.current.buffer.range(1, 2, 3):TypeError:('function takes exactly 2 arguments (3 given)',)
+    > BufMap
+    >> BufMapItem
+    vim.buffers[100000000]:KeyError:(100000000,)
+    >>> Testing NumberToLong using vim.buffers[%s]
+    vim.buffers[[]]:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+    vim.buffers[None]:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+    vim.buffers[-1]:ValueError:('number must be greater than zero',)
+    vim.buffers[0]:ValueError:('number must be greater than zero',)
+    <<< Finished
+    > Current
+    >> CurrentGetattr
+    vim.current.xxx:AttributeError:('xxx',)
+    >> CurrentSetattr
+    vim.current.line = True:TypeError:('bad argument type for built-in operation',)
+    vim.current.buffer = True:TypeError:('expected vim.Buffer object, but got bool',)
+    vim.current.window = True:TypeError:('expected vim.Window object, but got bool',)
+    vim.current.tabpage = True:TypeError:('expected vim.TabPage object, but got bool',)
+    vim.current.xxx = True:AttributeError:('xxx',)
+  END
+
+  call assert_equal(expected, getline(2, '$'))
+  close!
+endfunc
+
+" Test import
+func Test_python_import()
+  new
+  py cb = vim.current.buffer
+
+  py << trim EOF
+    sys.path.insert(0, os.path.join(os.getcwd(), 'python_before'))
+    sys.path.append(os.path.join(os.getcwd(), 'python_after'))
+    vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\')
+    l = []
+    def callback(path):
+        l.append(path[-len('/testdir'):].replace(os.path.sep, '/'))
+    vim.foreach_rtp(callback)
+    cb.append(repr(l))
+    del l
+    def callback(path):
+        return path[-len('/testdir'):].replace(os.path.sep, '/')
+    cb.append(repr(vim.foreach_rtp(callback)))
+    del callback
+    from module import dir as d
+    from modulex import ddir
+    cb.append(d + ',' + ddir)
+    import before
+    cb.append(before.dir)
+    import after
+    cb.append(after.dir)
+    import topmodule as tm
+    import topmodule.submodule as tms
+    import topmodule.submodule.subsubmodule.subsubsubmodule as tmsss
+    cb.append(tm.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/__init__.py'):])
+    cb.append(tms.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/__init__.py'):])
+    cb.append(tmsss.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/subsubmodule/subsubsubmodule.py'):])
+    del before
+    del after
+    del d
+    del ddir
+    del tm
+    del tms
+    del tmsss
+  EOF
+
+  let expected =<< trim END
+    ['/testdir']
+    '/testdir'
+    2,xx
+    before
+    after
+    pythonx/topmodule/__init__.py
+    pythonx/topmodule/submodule/__init__.py
+    pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py
+  END
+  call assert_equal(expected, getline(2, '$'))
+  close!
+endfunc
+
+" Test exceptions
+func Test_python_exception()
+  fun Exe(e)
+    execute a:e
+  endfun
+
+  new
+  py cb = vim.current.buffer
+
+  py << trim EOF
+    Exe = vim.bindeval('function("Exe")')
+    ee('vim.command("throw \'abcN\'")')
+    ee('Exe("throw \'def\'")')
+    ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")')
+    ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")')
+    ee('vim.eval("Exe(\'xxx_non_existent_command_xxx\')")')
+    ee('vim.eval("xxx_unknown_function_xxx()")')
+    ee('vim.bindeval("Exe(\'xxx_non_existent_command_xxx\')")')
+    del Exe
+  EOF
+  delfunction Exe
+
+  let expected =<< trim END
+    vim.command("throw 'abcN'"):error:('abcN',)
+    Exe("throw 'def'"):error:('def',)
+    vim.eval("Exe('throw ''ghi''')"):error:('ghi',)
+    vim.eval("Exe('echoerr ''jkl''')"):error:('Vim(echoerr):jkl',)
+    vim.eval("Exe('xxx_non_existent_command_xxx')"):error:('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)
+    vim.eval("xxx_unknown_function_xxx()"):error:('Vim:E117: Unknown function: xxx_unknown_function_xxx',)
+    vim.bindeval("Exe('xxx_non_existent_command_xxx')"):error:('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)
+  END
+  call assert_equal(expected, getline(2, '$'))
+  close!
+endfunc
+
+" Regression: interrupting vim.command propagates to next vim.command
+func Test_python_keyboard_interrupt()
+  new
+  py cb = vim.current.buffer
+  py << trim EOF
+    def test_keyboard_interrupt():
+        try:
+            vim.command('while 1 | endwhile')
+        except KeyboardInterrupt:
+            cb.append('Caught KeyboardInterrupt')
+        except Exception:
+            cb.append('!!!!!!!! Caught exception: ' + emsg(sys.exc_info()))
+        else:
+            cb.append('!!!!!!!! No exception')
+        try:
+            vim.command('$ put =\'Running :put\'')
+        except KeyboardInterrupt:
+            cb.append('!!!!!!!! Caught KeyboardInterrupt')
+        except Exception:
+            cb.append('!!!!!!!! Caught exception: ' + emsg(sys.exc_info()))
+        else:
+            cb.append('No exception')
+  EOF
+
+  debuggreedy
+  call inputsave()
+  call feedkeys("s\ns\ns\ns\nq\n")
+  redir => output
+  debug silent! py test_keyboard_interrupt()
+  redir END
+  0 debuggreedy
+  call inputrestore()
+  py del test_keyboard_interrupt
+
+  let expected =<< trim END
+    Caught KeyboardInterrupt
+    Running :put
+    No exception
+  END
+  call assert_equal(expected, getline(2, '$'))
+  call assert_equal('', output)
+  close!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
