diff --git a/src/Makefile b/src/Makefile
index 105820a..9166662 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -2308,7 +2308,7 @@
 	test42 test44 test49 \
 	test52 test59 \
 	test70 \
-	test86 test87 \
+	test87 \
 	test99:
 	cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
 
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
diff --git a/src/version.c b/src/version.c
index ae2a95f..c13c6e6 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1120,
+/**/
     1119,
 /**/
     1118,
