diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index 14062d8..12aeffe 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -20,15 +20,12 @@
 
 # Tests that run on most systems, but not on Amiga.
 SCRIPTS_MORE1 = \
-	test52.out \
-	test87.out
-
+	test52.out
 
 # Tests that run on most systems, but not on Amiga and DOS/Windows.
 SCRIPTS_MORE2 = \
 	test49.out
 
-
 # Tests that run on most systems, but not on VMS
 SCRIPTS_MORE4 = \
 	test59.out
@@ -36,7 +33,6 @@
 # Tests specifically for MS-Windows.
 SCRIPTS_WIN32 =
 
-
 # Tests for the GUI.
 SCRIPTS_GUI =
 
@@ -309,7 +305,6 @@
 	test_alot_utf8 \
 	test_alot
 
-
 # Test targets that use runtest.vim.
 # Keep test_alot*.res as the last one, sort the others.
 # test_largefile.res is omitted, it uses too much resources to run on CI.
diff --git a/src/testdir/Make_vms.mms b/src/testdir/Make_vms.mms
index ff6deb4..991a2f7 100644
--- a/src/testdir/Make_vms.mms
+++ b/src/testdir/Make_vms.mms
@@ -4,7 +4,7 @@
 # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
 #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
 #
-# Last change:  2019 May 31
+# Last change:  2020 Jul 03
 #
 # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
 # Edit the lines in the Configuration section below to select.
@@ -115,10 +115,6 @@
 SCRIPT_GDIFF = test47.out
 .ENDIF
 
-.IFDEF HAVE_PYTHON
-SCRIPT_PYTHON = test87.out
-.ENDIF
-
 .in.out :
 	-@ !clean up before doing the test
 	-@ if "''F$SEARCH("test.out.*")'" .NES. "" then delete/noconfirm/nolog test.out.*
@@ -140,7 +136,7 @@
 	-@ if "''F$SEARCH("Xtest.*")'"    .NES. "" then delete/noconfirm/nolog Xtest.*.*
 
 all : clean nolog $(START_WITH) $(SCRIPT) $(SCRIPT_GUI) $(SCRIPT_UNIX) $(SCRIPT_WIN) $(SCRIPT_SPELL) $(SCRIPT_ODS5) \
-    $(SCRIPT_GDIFF) $(SCRIPT_MZSCH) $(SCRIPT_LUA) $(SCRIPT_PYTHON) nolog 
+    $(SCRIPT_GDIFF) $(SCRIPT_MZSCH) $(SCRIPT_LUA) nolog 
 	-@ write sys$output " "
 	-@ write sys$output "-----------------------------------------------"
 	-@ write sys$output "                All done"
diff --git a/src/testdir/test87.in b/src/testdir/test87.in
deleted file mode 100644
index 187b807..0000000
--- a/src/testdir/test87.in
+++ /dev/null
@@ -1,1725 +0,0 @@
-Tests for various python features.     vim: set ft=vim :
-
-STARTTEST
-:so small.vim
-:set noswapfile
-:if !has('python3') || !has('quickfix') | e! test.ok | wq! test.out | endif
-:lang C
-:fun Test()
-:py3 import vim
-:py3 cb = vim.current.buffer
-:let l = []
-:py3 l=vim.bindeval('l')
-:py3 f=vim.bindeval('function("strlen")')
-:" Extending List directly with different types
-:py3 l+=[1, "as'd", [1, 2, f, {'a': 1}]]
-:$put =string(l)
-:$put =string(l[-1])
-:try
-:  $put =string(l[-4])
-:catch
-:  $put =v:exception[:13]
-:endtry
-:" List assignment
-:py3 l[0]=0
-:$put =string(l)
-:py3 l[-2]=f
-:$put =string(l)
-:"
-:" Extending Dictionary directly with different types
-:let d = {}
-:fun d.f()
-:  return 1
-:endfun
-py3 << 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()
-  dk.sort(key=repr)
-  dv.sort(key=repr)
-  di.sort(key=repr)
-EOF
-:$put =py3eval('d[''f''](self={})')
-:$put =py3eval('repr(dk)')
-:$put =substitute(py3eval('repr(dv)'),'0x\x\+','','g')
-:$put =substitute(py3eval('repr(di)'),'0x\x\+','','g')
-:for [key, Val] in sort(items(d))
-:  $put =string(key) . ' : ' . string(Val)
-:  unlet key Val
-:endfor
-:py3 del dk
-:py3 del di
-:py3 del dv
-:"
-:" removing items with del
-:py3 del l[2]
-:$put =string(l)
-:let l = range(8)
-:py3 l=vim.bindeval('l')
-:try
-:   py3 del l[:3]
-:   py3 del l[1:]
-:catch
-:   $put =v:exception
-:endtry
-:$put =string(l)
-:"
-:py3 del d['-1']
-:py3 del d['f']
-:$put =string(py3eval('d.get(''b'', 1)'))
-:$put =string(py3eval('d.pop(''b'')'))
-:$put =string(py3eval('d.get(''b'', 1)'))
-:$put =string(py3eval('d.pop(''1'', 2)'))
-:$put =string(py3eval('d.pop(''1'', 2)'))
-:$put =py3eval('repr(d.has_key(''0''))')
-:$put =py3eval('repr(d.has_key(''1''))')
-:$put =py3eval('repr(''0'' in d)')
-:$put =py3eval('repr(''1'' in d)')
-:$put =py3eval('repr(list(iter(d)))')
-:$put =string(d)
-:$put =py3eval('repr(d.popitem())')
-:$put =py3eval('repr(d.get(''0''))')
-:$put =py3eval('repr(list(iter(d)))')
-:"
-:" removing items out of range: silently skip items that don't exist
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:" The following two ranges delete nothing as they match empty list:
-:py3 del l[2:1]
-:$put =string(l)
-:py3 del l[2:2]
-:$put =string(l)
-:py3 del l[2:3]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 del l[2:4]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 del l[2:5]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 del l[2:6]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:" The following two ranges delete nothing as they match empty list:
-:py3 del l[-1:2]
-:$put =string(l)
-:py3 del l[-2:2]
-:$put =string(l)
-:py3 del l[-3:2]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 del l[-4:2]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 del l[-5:2]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 del l[-6:2]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 del l[::2]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 del l[3:0:-2]
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 del l[2:4:-2]
-:$put =string(l)
-:"
-:" Slice assignment to a list
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 l[0:0]=['a']
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 l[1:2]=['b']
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 l[2:4]=['c']
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 l[4:4]=['d']
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 l[-1:2]=['e']
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 l[-10:2]=['f']
-:$put =string(l)
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:py3 l[2:-10]=['g']
-:$put =string(l)
-:let l = []
-:py3 l=vim.bindeval('l')
-:py3 l[0:0]=['h']
-:$put =string(l)
-:let l = range(8)
-:py3 l=vim.bindeval('l')
-:py3 l[2:6:2] = [10, 20]
-:$put =string(l)
-:let l = range(8)
-:py3 l=vim.bindeval('l')
-:py3 l[6:2:-2] = [10, 20]
-:$put =string(l)
-:let l = range(8)
-:py3 l=vim.bindeval('l')
-:py3 l[6:2] = ()
-:$put =string(l)
-:let l = range(8)
-:py3 l=vim.bindeval('l')
-:py3 l[6:2:1] = ()
-:$put =string(l)
-:let l = range(8)
-:py3 l=vim.bindeval('l')
-:py3 l[2:2:1] = ()
-:$put =string(l)
-:"
-:" Locked variables
-:let l = [0, 1, 2, 3]
-:py3 l=vim.bindeval('l')
-:lockvar! l
-py3 << 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
-py3 << trim EOF
-  import sys
-  import re
-
-  py33_type_error_pattern = re.compile('^__call__\(\) takes (\d+) positional argument but (\d+) were given$')
-  py37_exception_repr = re.compile(r'([^\(\),])(\)+)$')
-
-  def ee(expr, g=globals(), l=locals()):
-      cb = vim.current.buffer
-      try:
-          try:
-              exec(expr, g, l)
-          except Exception as e:
-              if sys.version_info >= (3, 3) and e.__class__ is AttributeError and str(e).find('has no attribute')>=0 and not str(e).startswith("'vim."):
-                  msg = repr((e.__class__, AttributeError(str(e)[str(e).rfind(" '") + 2:-1])))
-              elif sys.version_info >= (3, 3) and e.__class__ is ImportError and str(e).find('No module named \'') >= 0:
-                  msg = repr((e.__class__, ImportError(str(e).replace("'", ''))))
-              elif sys.version_info >= (3, 6) and e.__class__ is ModuleNotFoundError:
-                  # Python 3.6 gives ModuleNotFoundError, change it to an ImportError
-                  msg = repr((ImportError, ImportError(str(e).replace("'", ''))))
-              elif sys.version_info >= (3, 3) and e.__class__ is TypeError:
-                  m = py33_type_error_pattern.search(str(e))
-                  if m:
-                      msg = '__call__() takes exactly {0} positional argument ({1} given)'.format(m.group(1), m.group(2))
-                      msg = repr((e.__class__, TypeError(msg)))
-                  else:
-                      msg = repr((e.__class__, e))
-                      # Messages changed with Python 3.6, change new to old.
-                      newmsg1 = """'argument must be str, bytes or bytearray, not None'"""
-                      oldmsg1 = '''"Can't convert 'NoneType' object to str implicitly"'''
-                      if msg.find(newmsg1) > -1:
-                          msg = msg.replace(newmsg1, oldmsg1)
-                      newmsg2 = """'argument must be str, bytes or bytearray, not int'"""
-                      oldmsg2 = '''"Can't convert 'int' object to str implicitly"'''
-                      if msg.find(newmsg2) > -1:
-                          msg = msg.replace(newmsg2, oldmsg2)
-              elif sys.version_info >= (3, 5) and e.__class__ is ValueError and str(e) == 'embedded null byte':
-                  msg = repr((TypeError, TypeError('expected bytes with no null')))
-              else:
-                  msg = repr((e.__class__, e))
-                  # 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 sys.version_info >= (3, 7):
-                  msg = py37_exception_repr.sub(r'\1,\2', msg)
-              cb.append(expr + ':' + msg)
-          else:
-              cb.append(expr + ':NOT FAILED')
-      except Exception as e:
-          msg = repr((e.__class__, e))
-          if sys.version_info >= (3, 7):
-              msg = py37_exception_repr.sub(r'\1,\2', msg)
-          cb.append(expr + '::' + msg)
-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')]
-:py3 l=vim.bindeval('l')
-:py3 l.extend(list(l[0](1, 2, 3)))
-:$put =string(l)
-:py3 l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
-:$put =string(l)
-:py3 l+=[l[0].name]
-:$put =string(l)
-:py3 ee('l[1](1, 2, 3)')
-:py3 f=l[0]
-:delfunction New
-:py3 ee('f(1, 2, 3)')
-:if has('float')
-:   let l=[0.0]
-:   py3 l=vim.bindeval('l')
-:   py3 l.extend([0.0])
-:   $put =string(l)
-:else
-:   $put ='[0.0, 0.0]'
-:endif
-:let messages=[]
-:delfunction DictNew
-py3 << trim EOF
-  import sys
-  d=vim.bindeval('{}')
-  m=vim.bindeval('messages')
-  def em(expr, g=globals(), l=locals()):
-      try:
-          exec(expr, g, l)
-      except Exception as e:
-          if sys.version_info >= (3, 5) and e.__class__ is ValueError and str(e) == 'embedded null byte':
-              m.extend([TypeError.__name__])
-          else:
-              m.extend([e.__class__.__name__])
-
-  em('d["abc1"]')
-  em('d["abc1"]="\\0"')
-  em('d["abc1"]=vim')
-  em('d[""]=1')
-  em('d["a\\0b"]=1')
-  em('d[b"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 'py3 '.name.'=vim.bindeval("'.s.'")'
-:    let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".py3eval(name.".".v:val)'), ';')
-:    $put =toput
-:endfor
-:silent! let d.abc2=1
-:silent! let dl.abc3=1
-:py3 d.locked=True
-:py3 dl.locked=False
-:silent! let d.def=1
-:silent! let dl.def=1
-:put ='d:'.string(d)
-:put ='dl:'.string(dl)
-:unlet d dl
-:
-:let l=[] | let ll=[] | lockvar ll
-:for s in split("l ll")
-:    let name=tr(s, ':', 's')
-:    execute 'py3 '.name.'=vim.bindeval("'.s.'")'
-:    let toput=s.' : locked:'.py3eval(name.'.locked')
-:    $put =toput
-:endfor
-:silent! call extend(l, [0])
-:silent! call extend(ll, [0])
-:py3 l.locked=True
-:py3 ll.locked=False
-:silent! call extend(l, [1])
-:silent! call extend(ll, [1])
-:put ='l:'.string(l)
-:put ='ll:'.string(ll)
-:unlet l ll
-:"
-:" py3eval()
-:let l=py3eval('[0, 1, 2]')
-:$put =string(l)
-:let d=py3eval('{"a": "b", "c": 1, "d": ["e"]}')
-:$put =sort(items(d))
-:let v:errmsg = ''
-:$put ='py3eval(\"None\") = ' . py3eval('None') . v:errmsg
-:if has('float')
-:   let f=py3eval('0.0')
-:   $put =string(f)
-:else
-:   $put ='0.0'
-:endif
-:" Invalid values:
-:for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
-:   try
-:      let v=py3eval(e)
-:   catch
-:      let toput=e.":\t".v:exception[:13]
-:      $put =toput
-:   endtry
-:endfor
-:"
-:" threading
-:let l = [0]
-:py3 l=vim.bindeval('l')
-py3 << 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
-:py3 t.running = False
-:py3 t.join()
-:" Check if the background thread is working.  Count should be 10, but on a
-:" busy system (AppVeyor) it can be much lower.
-:py3 l[0] = t.t > 4
-:py3 del time
-:py3 del threading
-:py3 del t
-:$put =string(l)
-:"
-:" settrace
-:let l = []
-:py3 l=vim.bindeval('l')
-py3 << trim EOF
-  import sys
-
-  def traceit(frame, event, arg):
-      global l
-      if event == "line":
-          l += [frame.f_lineno]
-      return traceit
-
-  def trace_main():
-      for i in range(5):
-          pass
-EOF
-:py3 sys.settrace(traceit)
-:py3 trace_main()
-:py3 sys.settrace(None)
-:py3 del traceit
-:py3 del trace_main
-:$put =string(l)
-:"
-:" Slice
-:py3 ll = vim.bindeval('[0, 1, 2, 3, 4, 5]')
-:py3 l = ll[:4]
-:$put =string(py3eval('l'))
-:py3 l = ll[2:]
-:$put =string(py3eval('l'))
-:py3 l = ll[:-4]
-:$put =string(py3eval('l'))
-:py3 l = ll[-2:]
-:$put =string(py3eval('l'))
-:py3 l = ll[2:4]
-:$put =string(py3eval('l'))
-:py3 l = ll[4:2]
-:$put =string(py3eval('l'))
-:py3 l = ll[-4:-2]
-:$put =string(py3eval('l'))
-:py3 l = ll[-2:-4]
-:$put =string(py3eval('l'))
-:py3 l = ll[:]
-:$put =string(py3eval('l'))
-:py3 l = ll[0:6]
-:$put =string(py3eval('l'))
-:py3 l = ll[-10:10]
-:$put =string(py3eval('l'))
-:py3 l = ll[4:2:-1]
-:$put =string(py3eval('l'))
-:py3 l = ll[::2]
-:$put =string(py3eval('l'))
-:py3 l = ll[4:2:1]
-:$put =string(py3eval('l'))
-:py3 del l
-:"
-:" Vars
-:let g:foo = 'bac'
-:let w:abc3 = 'def'
-:let b:baz = 'bar'
-:let t:bar = 'jkl'
-:try
-:  throw "Abc"
-:catch
-:  put =py3eval('vim.vvars[''exception'']')
-:endtry
-:put =py3eval('vim.vars[''foo'']')
-:put =py3eval('vim.current.window.vars[''abc3'']')
-:put =py3eval('vim.current.buffer.vars[''baz'']')
-:put =py3eval('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
-py3 << trim EOF
-  def e(s, g=globals(), l=locals()):
-      try:
-          exec(s, g, l)
-      except Exception as e:
-          vim.command('return ' + repr(e.__class__.__name__))
-
-  def ev(s, g=globals(), l=locals()):
-      try:
-          return eval(s, g, l)
-      except Exception as e:
-          vim.command('let exc=' + repr(e.__class__.__name__))
-          return 0
-EOF
-:fun E(s)
-:   python3 e(vim.eval('a:s'))
-:endfun
-:fun Ev(s)
-:   let r=py3eval('ev(vim.eval("a:s"))')
-:   if exists('exc')
-:       throw exc
-:   endif
-:   return r
-:endfun
-:py3 gopts1=vim.options
-:py3 wopts1=vim.windows[2].options
-:py3 wopts2=vim.windows[0].options
-:py3 wopts3=vim.windows[1].options
-:py3 bopts1=vim.buffers[vim.bindeval("g:bufs")[2]].options
-:py3 bopts2=vim.buffers[vim.bindeval("g:bufs")[1]].options
-:py3 bopts3=vim.buffers[vim.bindeval("g:bufs")[0]].options
-:$put ='wopts iters equal: '.py3eval('list(wopts1) == list(wopts2)')
-:$put ='bopts iters equal: '.py3eval('list(bopts1) == list(bopts2)')
-:py3 gset=set(iter(gopts1))
-:py3 wset=set(iter(wopts1))
-:py3 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
-:   py3 oname=vim.eval('oname')
-:   py3 oval1=vim.bindeval('oval1')
-:   py3 oval2=vim.bindeval('oval2')
-:   py3 oval3=vim.bindeval('oval3')
-:   if invval is 0 || invval is 1
-:       py3 invval=bool(vim.bindeval('invval'))
-:   else
-:       py3 invval=vim.bindeval('invval')
-:   endif
-:   if bool
-:       py3 oval1=bool(oval1)
-:       py3 oval2=bool(oval2)
-:       py3 oval3=bool(oval3)
-:   endif
-:   put ='>>> '.oname
-:   $put ='  g/w/b:'.py3eval('oname in gset').'/'.py3eval('oname in wset').'/'.py3eval('oname in bset')
-:   $put ='  g/w/b (in):'.py3eval('oname in gopts1').'/'.py3eval('oname in wopts1').'/'.py3eval('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
-:py3 del ev
-:py3 del e
-:only
-:for buf in g:bufs[1:]
-:   execute 'bwipeout!' buf
-:endfor
-:py3 del gopts1
-:py3 del wopts1
-:py3 del wopts2
-:py3 del wopts3
-:py3 del bopts1
-:py3 del bopts2
-:py3 del bopts3
-:py3 del oval1
-:py3 del oval2
-:py3 del oval3
-:py3 del oname
-:py3 del invval
-:"
-:" Test buffer object
-:vnew
-:put ='First line'
-:put ='Second line'
-:put ='Third line'
-:1 delete _
-:py3 b=vim.current.buffer
-:wincmd w
-:mark a
-:augroup BUFS
-:   autocmd BufFilePost * python3 cb.append(vim.eval('expand("<abuf>")') + ':BufFilePost:' + vim.eval('bufnr("%")'))
-:   autocmd BufFilePre * python3 cb.append(vim.eval('expand("<abuf>")') + ':BufFilePre:' + vim.eval('bufnr("%")'))
-:augroup END
-py3 << 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")'):
-      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
-:"
-:" Test vim.buffers object
-:set hidden
-:edit a
-:buffer #
-:edit b
-:buffer #
-:edit c
-:buffer #
-py3 << trim EOF
-  # 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
-py3 << trim EOF
-  cb.append('Number of tabs: ' + str(len(vim.tabpages)))
-  cb.append('Current tab pages:')
-
-  def W(w):
-      if '(unknown)' in repr(w):
-          return '<window object (unknown)>'
-      else:
-          return repr(w)
-
-  def Cursor(w, start=len(cb)):
-      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 int:
-                      raise TypeError
-                  if aval < 0:
-                      raise ValueError
-              except Exception as e:
-                  cb.append('!!!!!! Error while getting attribute ' + attr + ': ' + e.__class__.__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
-py3 << 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
-py3 << 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
-py3 << 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(py3eval('vim.Dictionary({})'))
-:$put =string(py3eval('vim.Dictionary(a=1)'))
-:$put =string(py3eval('vim.Dictionary(((''a'', 1),))'))
-:$put =string(py3eval('vim.List()'))
-:$put =string(py3eval('vim.List(iter(''abc7''))'))
-:$put =string(py3eval('vim.Function(''tr'')'))
-:$put =string(py3eval('vim.Function(''tr'', args=[123, 3, 4])'))
-:$put =string(py3eval('vim.Function(''tr'', args=[])'))
-:$put =string(py3eval('vim.Function(''tr'', self={})'))
-:$put =string(py3eval('vim.Function(''tr'', args=[123, 3, 4], self={})'))
-:$put ='auto_rebind'
-:$put =string(py3eval('vim.Function(''tr'', auto_rebind=False)'))
-:$put =string(py3eval('vim.Function(''tr'', args=[123, 3, 4], auto_rebind=False)'))
-:$put =string(py3eval('vim.Function(''tr'', args=[], auto_rebind=False)'))
-:$put =string(py3eval('vim.Function(''tr'', self={}, auto_rebind=False)'))
-:$put =string(py3eval('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': []})
-:py3 Pt = vim.bindeval('Pt')
-:unlet Pt
-:py3 del Pt
-py3 << 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: ' + str(vim.Function('string')(ret), 'utf-8')
-      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(py3eval('a'))
-:$put ='s(pa1): '.string(py3eval('pa1'))
-:$put ='s(pa2): '.string(py3eval('pa2'))
-:$put ='s(pa3): '.string(py3eval('pa3'))
-:$put ='s(pa4): '.string(py3eval('pa4'))
-:$put ='s(sa): '.string(py3eval('sa'))
-:$put ='s(psa1): '.string(py3eval('psa1'))
-:$put ='s(psa2): '.string(py3eval('psa2'))
-:$put ='s(psa3): '.string(py3eval('psa3'))
-:$put ='s(psa4): '.string(py3eval('psa4'))
-:$put ='s(psa5): '.string(py3eval('psa5'))
-:$put ='s(psa6): '.string(py3eval('psa6'))
-:$put ='s(psa7): '.string(py3eval('psa7'))
-:$put ='s(psa8): '.string(py3eval('psa8'))
-:$put ='s(psa9): '.string(py3eval('psa9'))
-:$put ='s(psaA): '.string(py3eval('psaA'))
-:$put ='s(psaB): '.string(py3eval('psaB'))
-:$put ='s(psaC): '.string(py3eval('psaC'))
-:
-:for v in ['sa', 'psa1', 'psa2', 'psa3', 'psa4', 'psa5', 'psa6', 'psa7', 'psa8', 'psa9', 'psaA', 'psaB', 'psaC']
-:   let d = {'f': py3eval(v)}
-:   $put ='d.'.v.'(): '.string(d.f())
-:endfor
-:
-:py3 ecall('a()', a, )
-:py3 ecall('pa1()', pa1, )
-:py3 ecall('pa2()', pa2, )
-:py3 ecall('pa3()', pa3, )
-:py3 ecall('pa4()', pa4, )
-:py3 ecall('sa()', sa, )
-:py3 ecall('psa1()', psa1, )
-:py3 ecall('psa2()', psa2, )
-:py3 ecall('psa3()', psa3, )
-:py3 ecall('psa4()', psa4, )
-:
-:py3 ecall('a(42, 43)', a, 42, 43)
-:py3 ecall('pa1(42, 43)', pa1, 42, 43)
-:py3 ecall('pa2(42, 43)', pa2, 42, 43)
-:py3 ecall('pa3(42, 43)', pa3, 42, 43)
-:py3 ecall('pa4(42, 43)', pa4, 42, 43)
-:py3 ecall('sa(42, 43)', sa, 42, 43)
-:py3 ecall('psa1(42, 43)', psa1, 42, 43)
-:py3 ecall('psa2(42, 43)', psa2, 42, 43)
-:py3 ecall('psa3(42, 43)', psa3, 42, 43)
-:py3 ecall('psa4(42, 43)', psa4, 42, 43)
-:
-:py3 ecall('a(42, self={"20": 1})', a, 42, self={'20': 1})
-:py3 ecall('pa1(42, self={"20": 1})', pa1, 42, self={'20': 1})
-:py3 ecall('pa2(42, self={"20": 1})', pa2, 42, self={'20': 1})
-:py3 ecall('pa3(42, self={"20": 1})', pa3, 42, self={'20': 1})
-:py3 ecall('pa4(42, self={"20": 1})', pa4, 42, self={'20': 1})
-:py3 ecall('sa(42, self={"20": 1})', sa, 42, self={'20': 1})
-:py3 ecall('psa1(42, self={"20": 1})', psa1, 42, self={'20': 1})
-:py3 ecall('psa2(42, self={"20": 1})', psa2, 42, self={'20': 1})
-:py3 ecall('psa3(42, self={"20": 1})', psa3, 42, self={'20': 1})
-:py3 ecall('psa4(42, self={"20": 1})', psa4, 42, self={'20': 1})
-:
-:py3 ecall('a(self={"20": 1})', a, self={'20': 1})
-:py3 ecall('pa1(self={"20": 1})', pa1, self={'20': 1})
-:py3 ecall('pa2(self={"20": 1})', pa2, self={'20': 1})
-:py3 ecall('pa3(self={"20": 1})', pa3, self={'20': 1})
-:py3 ecall('pa4(self={"20": 1})', pa4, self={'20': 1})
-:py3 ecall('sa(self={"20": 1})', sa, self={'20': 1})
-:py3 ecall('psa1(self={"20": 1})', psa1, self={'20': 1})
-:py3 ecall('psa2(self={"20": 1})', psa2, self={'20': 1})
-:py3 ecall('psa3(self={"20": 1})', psa3, self={'20': 1})
-:py3 ecall('psa4(self={"20": 1})', psa4, self={'20': 1})
-py3 << trim EOF
-  def s(v):
-      if v is None:
-          return repr(v)
-      else:
-          return str(vim.Function('string')(v), 'utf-8')
-
-  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
-:py3 sys.stdout.write('abc8') ; sys.stdout.write('def')
-:py3 sys.stderr.write('abc9') ; sys.stderr.write('def')
-:py3 sys.stdout.writelines(iter('abcA'))
-:py3 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
-py3 << 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(py3eval('dd'))))
-:$put =string(py3eval('dl'))
-:$put =string(py3eval('dl2'))
-:$put =string(py3eval('df(2)'))
-:$put =string(py3eval('dl') is# py3eval('dl'))
-:$put =string(py3eval('dd') is# py3eval('dd'))
-:$put =string(py3eval('df'))
-:delfunction Put
-py3 << trim EOF
-  del DupDict
-  del DupList
-  del DupFun
-  del dd
-  del dl
-  del dl2
-  del df
-EOF
-:"
-:" Test chdir
-py3 << trim EOF
-  import os
-  fnamemodify = vim.Function('fnamemodify')
-  cb.append(str(fnamemodify('.', ':p:h:t')))
-  cb.append(vim.eval('@%'))
-  os.chdir('..')
-  path = fnamemodify('.', ':p:h:t')
-  if path != b'src':
-    # Running tests from a shadow directory, so move up another level
-    # This will result in @% looking like shadow/testdir/test87.in, hence the
-    # slicing to remove the leading path and path separator
-    os.chdir('..')
-    cb.append(str(fnamemodify('.', ':p:h:t')))
-    cb.append(vim.eval('@%')[len(path)+1:].replace(os.path.sep, '/'))
-    os.chdir(path)
-  else:
-    cb.append(str(fnamemodify('.', ':p:h:t')))
-    cb.append(vim.eval('@%').replace(os.path.sep, '/'))
-  del path
-  os.chdir('testdir')
-  cb.append(str(fnamemodify('.', ':p:h:t')))
-  cb.append(vim.eval('@%'))
-  del fnamemodify
-EOF
-:"
-:" Test errors
-:fun F() dict
-:endfun
-:fun D()
-:endfun
-py3 << 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
-          'b"\\0"',  # Fail PyString_AsStringAndSize(object, , NULL) check
-          '"\\0"',   # Fail PyString_AsStringAndSize(bytes, , 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
-          '{b"": 1}',             # Empty key not allowed
-          '{"": 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',
-      ) + (('-1',) if unsigned else ())
-      + (('0',) if natural else ()))
-
-  class FailingTrue(object):
-      def __bool__(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] = "\\na"')
-  ee('vim.current.buffer[0] = b"\\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
-py3 << 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(os.path.relpath(path))
-  vim.foreach_rtp(callback)
-  cb.append(repr(l))
-  del l
-  def callback(path):
-      return os.path.relpath(path)
-  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(os.path.sep, '/')[-len('modulex/topmodule/__init__.py'):])
-  cb.append(tms.__file__.replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/__init__.py'):])
-  cb.append(tmsss.__file__.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
-py3 << 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
-py3 << 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! py3 test_keyboard_interrupt()
-:redir END
-:0 debuggreedy
-:call inputrestore()
-:silent $put =output
-:unlet output
-:py3 del test_keyboard_interrupt
-:"
-:" Cleanup
-py3 << 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
-:/^start:/,$w! test.out
-:" vim: et ts=4 isk-=\:
-:while getchar(0) isnot 0|endwhile
-ENDTEST
-
-start:
diff --git a/src/testdir/test87.ok b/src/testdir/test87.ok
deleted file mode 100644
index c42acdf..0000000
--- a/src/testdir/test87.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
-[b'-1', b'0', b'1', b'b', b'f']
-[-1, <vim.Function '1'>, <vim.dictionary object at >, <vim.list object at >, b'asd']
-[(b'-1', <vim.dictionary object at >), (b'0', -1), (b'1', b'asd'), (b'b', <vim.list object at >), (b'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
-[b'0']
-{'0': -1}
-(b'0', -1)
-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):(<class 'vim.error'>, error('Vim:E725: Calling dict function without Dictionary: DictNew',))
-f(1, 2, 3):(<class 'vim.error'>, 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']]
-py3eval("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: b''
-  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: b''
-  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: b''
-  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: b''
-  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: b'.,..,,'
-  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 test87.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/test87.in
-valid: b:False, cb:True
-i:<buffer test87.in>
-i2:<buffer test87.in>
-i:<buffer a>
-i3:<buffer test87.in>
-1:<buffer test87.in>=<buffer test87.in>
-8:<buffer a>=<buffer a>
-9:<buffer b>=<buffer b>
-10:<buffer c>=<buffer c>
-4
-i4:<buffer test87.in>
-i4:<buffer test87.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 test87.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 test87.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__,buffer,line,range,tabpage,window
-buffer:__dir__,append,mark,name,number,options,range,valid,vars
-window:__dir__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars,width
-tabpage:__dir__,number,valid,vars,window,windows
-range:__dir__,append,end,start
-dictionary:__dir__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
-list:__dir__,extend,locked
-function:__dir__,args,auto_rebind,self,softspace
-output:__dir__,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')
-b'testdir'
-test87.in
-b'src'
-testdir/test87.in
-b'testdir'
-test87.in
-> Output
->> OutputSetattr
-del sys.stdout.softspace:(<class 'AttributeError'>, AttributeError('cannot delete OutputObject attributes',))
->>> Testing NumberToLong using sys.stdout.softspace = %s
-sys.stdout.softspace = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
-sys.stdout.softspace = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
-sys.stdout.softspace = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
-<<< Finished
->>> Testing NumberToLong using sys.stderr.softspace = %s
-sys.stderr.softspace = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
-sys.stderr.softspace = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
-sys.stderr.softspace = -1:(<class 'ValueError'>, 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:(<class 'AttributeError'>, 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):(<class 'TypeError'>, TypeError("Can't convert 'NoneType' object to str implicitly",))
->> OutputWriteLines
-sys.stdout.writelines(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",))
-sys.stdout.writelines([1]):(<class 'TypeError'>, TypeError("Can't convert 'int' object to str implicitly",))
->>> Testing *Iter* using sys.stdout.writelines(%s)
-sys.stdout.writelines(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
-sys.stdout.writelines(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
-> VimCommand
->>> Testing StringToChars using vim.command(%s)
-vim.command(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-vim.command(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-vim.command("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
-vim.command("", 2):(<class 'TypeError'>, TypeError('command() takes exactly one argument (2 given)',))
-> VimToPython
-> VimEval
->>> Testing StringToChars using vim.eval(%s)
-vim.eval(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-vim.eval(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-vim.eval("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
-vim.eval("", FailingTrue()):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
-> VimEvalPy
->>> Testing StringToChars using vim.bindeval(%s)
-vim.bindeval(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-vim.bindeval(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-vim.bindeval("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
-vim.eval("", 2):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
-> VimStrwidth
->>> Testing StringToChars using vim.strwidth(%s)
-vim.strwidth(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-vim.strwidth(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-vim.strwidth("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
-> VimForeachRTP
-vim.foreach_rtp(None):(<class 'TypeError'>, TypeError("'NoneType' object is not callable",))
-vim.foreach_rtp(NoArgsCall()):(<class 'TypeError'>, TypeError('__call__() takes exactly 1 positional argument (2 given)',))
-vim.foreach_rtp(FailingCall()):(<class 'NotImplementedError'>, NotImplementedError('call',))
-vim.foreach_rtp(int, 2):(<class 'TypeError'>, TypeError('foreach_rtp() takes exactly one argument (2 given)',))
-> import
-import xxx_no_such_module_xxx:(<class 'ImportError'>, ImportError('No module named xxx_no_such_module_xxx',))
-import failing_import:(<class 'ImportError'>, ImportError())
-import failing:(<class 'NotImplementedError'>, NotImplementedError())
-> Options
->> OptionsItem
-vim.options["abcQ"]:(<class 'KeyError'>, KeyError('abcQ',))
-vim.options[""]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
->>> Testing StringToChars using vim.options[%s]
-vim.options[1]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-vim.options[b"\0"]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-vim.options["\0"]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->> OptionsContains
->>> Testing StringToChars using %s in vim.options
-1 in vim.options:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-b"\0" in vim.options:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-"\0" in vim.options:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
-> Dictionary
->> DictionaryConstructor
-vim.Dictionary("abcI"):(<class 'ValueError'>, ValueError('expected sequence element of size 2, but got sequence of size 1',))
->> DictionarySetattr
-del d.locked:(<class 'AttributeError'>, AttributeError('cannot delete vim.Dictionary attributes',))
-d.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError('bool',))
-vim.vvars.locked = False:(<class 'TypeError'>, TypeError('cannot modify fixed dictionary',))
-d.scope = True:(<class 'AttributeError'>, AttributeError('cannot set attribute scope',))
-d.xxx = True:(<class 'AttributeError'>, AttributeError('cannot set attribute xxx',))
->> _DictionaryItem
-d.get("a", 2, 3):(<class 'TypeError'>, TypeError('function takes at most 2 arguments (3 given)',))
->>> Testing StringToChars using d.get(%s)
-d.get(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.get(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.get("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
-d.pop("a"):(<class 'KeyError'>, KeyError('a',))
-dl.pop("a"):(<class 'vim.error'>, error('dictionary is locked',))
->> DictionaryContains
-"" in d:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-0 in d:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
->> DictionaryIterNext
-for i in ned: ned["a"] = 1:(<class 'RuntimeError'>, RuntimeError('hashtab changed during iteration',))
->> DictionaryAssItem
-dl["b"] = 1:(<class 'vim.error'>, error('dictionary is locked',))
->>> Testing StringToChars using d[%s] = 1
-d[1] = 1:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d[b"\0"] = 1:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d["\0"] = 1:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d["a"] = {%s : 1}
-d["a"] = {1 : 1}:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d["a"] = {b"\0" : 1}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d["a"] = {"\0" : 1}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d["a"] = {"abcF" : {%s : 1}}
-d["a"] = {"abcF" : {1 : 1}}:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d["a"] = {"abcF" : {b"\0" : 1}}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d["a"] = {"abcF" : {"\0" : 1}}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d["a"] = {"abcF" : Mapping({%s : 1})}
-d["a"] = {"abcF" : Mapping({1 : 1})}:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d["a"] = {"abcF" : Mapping({b"\0" : 1})}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d["a"] = {"abcF" : Mapping({"\0" : 1})}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using d["a"] = {"abcF" : %s}
-d["a"] = {"abcF" : FailingIter()}:(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-d["a"] = {"abcF" : FailingIterNext()}:(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using d["a"] = {"abcF" : %s}
-d["a"] = {"abcF" : None}:NOT FAILED
-d["a"] = {"abcF" : {b"": 1}}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d["a"] = {"abcF" : {"": 1}}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d["a"] = {"abcF" : FailingMapping()}:(<class 'NotImplementedError'>, NotImplementedError('keys',))
-d["a"] = {"abcF" : FailingMappingKey()}:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-d["a"] = {"abcF" : FailingNumber()}:(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing StringToChars using d["a"] = Mapping({%s : 1})
-d["a"] = Mapping({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d["a"] = Mapping({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d["a"] = Mapping({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d["a"] = Mapping({"abcG" : {%s : 1}})
-d["a"] = Mapping({"abcG" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d["a"] = Mapping({"abcG" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d["a"] = Mapping({"abcG" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d["a"] = Mapping({"abcG" : Mapping({%s : 1})})
-d["a"] = Mapping({"abcG" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d["a"] = Mapping({"abcG" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d["a"] = Mapping({"abcG" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using d["a"] = Mapping({"abcG" : %s})
-d["a"] = Mapping({"abcG" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-d["a"] = Mapping({"abcG" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using d["a"] = Mapping({"abcG" : %s})
-d["a"] = Mapping({"abcG" : None}):NOT FAILED
-d["a"] = Mapping({"abcG" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d["a"] = Mapping({"abcG" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d["a"] = Mapping({"abcG" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-d["a"] = Mapping({"abcG" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-d["a"] = Mapping({"abcG" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing *Iter* using d["a"] = %s
-d["a"] = FailingIter():(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-d["a"] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using d["a"] = %s
-d["a"] = None:NOT FAILED
-d["a"] = {b"": 1}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d["a"] = {"": 1}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d["a"] = FailingMapping():(<class 'NotImplementedError'>, NotImplementedError('keys',))
-d["a"] = FailingMappingKey():(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-d["a"] = FailingNumber():(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->> DictionaryUpdate
->>> kwargs
->>> iter
-d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-d.update([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',))
-d.update([FailingIterNextN(1)]):(<class 'NotImplementedError'>, NotImplementedError('next N',))
->>> Testing *Iter* using d.update(%s)
-d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
-d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing StringToChars using d.update({%s : 1})
-d.update({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.update({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.update({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d.update({"abcF" : {%s : 1}})
-d.update({"abcF" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.update({"abcF" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.update({"abcF" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d.update({"abcF" : Mapping({%s : 1})})
-d.update({"abcF" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.update({"abcF" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.update({"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using d.update({"abcF" : %s})
-d.update({"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-d.update({"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using d.update({"abcF" : %s})
-d.update({"abcF" : None}):NOT FAILED
-d.update({"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d.update({"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d.update({"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-d.update({"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-d.update({"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing StringToChars using d.update(Mapping({%s : 1}))
-d.update(Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.update(Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.update(Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d.update(Mapping({"abcG" : {%s : 1}}))
-d.update(Mapping({"abcG" : {1 : 1}})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.update(Mapping({"abcG" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.update(Mapping({"abcG" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d.update(Mapping({"abcG" : Mapping({%s : 1})}))
-d.update(Mapping({"abcG" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.update(Mapping({"abcG" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.update(Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using d.update(Mapping({"abcG" : %s}))
-d.update(Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-d.update(Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using d.update(Mapping({"abcG" : %s}))
-d.update(Mapping({"abcG" : None})):NOT FAILED
-d.update(Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d.update(Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d.update(Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-d.update(Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-d.update(Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing *Iter* using d.update(%s)
-d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
-d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using d.update(%s)
-d.update(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",))
-d.update({b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d.update({"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-d.update(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-d.update(FailingNumber()):(<class 'TypeError'>, TypeError("'FailingNumber' object is not iterable",))
-<<< Finished
->>> Testing StringToChars using d.update(((%s, 0),))
-d.update(((1, 0),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.update(((b"\0", 0),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.update((("\0", 0),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d.update((("a", {%s : 1}),))
-d.update((("a", {1 : 1}),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.update((("a", {b"\0" : 1}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.update((("a", {"\0" : 1}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d.update((("a", {"abcF" : {%s : 1}}),))
-d.update((("a", {"abcF" : {1 : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.update((("a", {"abcF" : {b"\0" : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.update((("a", {"abcF" : {"\0" : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d.update((("a", {"abcF" : Mapping({%s : 1})}),))
-d.update((("a", {"abcF" : Mapping({1 : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.update((("a", {"abcF" : Mapping({b"\0" : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.update((("a", {"abcF" : Mapping({"\0" : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using d.update((("a", {"abcF" : %s}),))
-d.update((("a", {"abcF" : FailingIter()}),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-d.update((("a", {"abcF" : FailingIterNext()}),)):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using d.update((("a", {"abcF" : %s}),))
-d.update((("a", {"abcF" : None}),)):(<class 'vim.error'>, error("failed to add key 'a' to dictionary",))
-d.update((("a", {"abcF" : {b"": 1}}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d.update((("a", {"abcF" : {"": 1}}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d.update((("a", {"abcF" : FailingMapping()}),)):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-d.update((("a", {"abcF" : FailingMappingKey()}),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-d.update((("a", {"abcF" : FailingNumber()}),)):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),))
-d.update((("a", Mapping({1 : 1})),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.update((("a", Mapping({b"\0" : 1})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.update((("a", Mapping({"\0" : 1})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d.update((("a", Mapping({"abcG" : {%s : 1}})),))
-d.update((("a", Mapping({"abcG" : {1 : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.update((("a", Mapping({"abcG" : {b"\0" : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.update((("a", Mapping({"abcG" : {"\0" : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using d.update((("a", Mapping({"abcG" : Mapping({%s : 1})})),))
-d.update((("a", Mapping({"abcG" : Mapping({1 : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-d.update((("a", Mapping({"abcG" : Mapping({b"\0" : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-d.update((("a", Mapping({"abcG" : Mapping({"\0" : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using d.update((("a", Mapping({"abcG" : %s})),))
-d.update((("a", Mapping({"abcG" : FailingIter()})),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abcG" : %s})),))
-d.update((("a", Mapping({"abcG" : None})),)):(<class 'vim.error'>, error("failed to add key 'a' to dictionary",))
-d.update((("a", Mapping({"abcG" : {b"": 1}})),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d.update((("a", Mapping({"abcG" : {"": 1}})),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d.update((("a", Mapping({"abcG" : FailingMapping()})),)):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-d.update((("a", Mapping({"abcG" : FailingNumber()})),)):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing *Iter* using d.update((("a", %s),))
-d.update((("a", FailingIter()),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-d.update((("a", FailingIterNext()),)):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using d.update((("a", %s),))
-d.update((("a", None),)):(<class 'vim.error'>, error("failed to add key 'a' to dictionary",))
-d.update((("a", {b"": 1}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d.update((("a", {"": 1}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-d.update((("a", FailingMapping()),)):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-d.update((("a", FailingMappingKey()),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-d.update((("a", FailingNumber()),)):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->> DictionaryPopItem
-d.popitem(1, 2):(<class 'TypeError'>, TypeError('popitem() takes no arguments (2 given)',))
->> DictionaryHasKey
-d.has_key():(<class 'TypeError'>, TypeError('has_key() takes exactly one argument (0 given)',))
-> List
->> ListConstructor
-vim.List(1, 2):(<class 'TypeError'>, TypeError('function takes at most 1 argument (2 given)',))
-vim.List(a=1):(<class 'TypeError'>, TypeError('list constructor does not accept keyword arguments',))
->>> Testing *Iter* using vim.List(%s)
-vim.List(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
-vim.List(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing StringToChars using vim.List([{%s : 1}])
-vim.List([{1 : 1}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-vim.List([{b"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-vim.List([{"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using vim.List([{"abcF" : {%s : 1}}])
-vim.List([{"abcF" : {1 : 1}}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-vim.List([{"abcF" : {b"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-vim.List([{"abcF" : {"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using vim.List([{"abcF" : Mapping({%s : 1})}])
-vim.List([{"abcF" : Mapping({1 : 1})}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-vim.List([{"abcF" : Mapping({b"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-vim.List([{"abcF" : Mapping({"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using vim.List([{"abcF" : %s}])
-vim.List([{"abcF" : FailingIter()}]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-vim.List([{"abcF" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using vim.List([{"abcF" : %s}])
-vim.List([{"abcF" : None}]):NOT FAILED
-vim.List([{"abcF" : {b"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-vim.List([{"abcF" : {"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-vim.List([{"abcF" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-vim.List([{"abcF" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-vim.List([{"abcF" : FailingNumber()}]):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing StringToChars using vim.List([Mapping({%s : 1})])
-vim.List([Mapping({1 : 1})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-vim.List([Mapping({b"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-vim.List([Mapping({"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using vim.List([Mapping({"abcG" : {%s : 1}})])
-vim.List([Mapping({"abcG" : {1 : 1}})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-vim.List([Mapping({"abcG" : {b"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-vim.List([Mapping({"abcG" : {"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using vim.List([Mapping({"abcG" : Mapping({%s : 1})})])
-vim.List([Mapping({"abcG" : Mapping({1 : 1})})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-vim.List([Mapping({"abcG" : Mapping({b"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-vim.List([Mapping({"abcG" : Mapping({"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using vim.List([Mapping({"abcG" : %s})])
-vim.List([Mapping({"abcG" : FailingIter()})]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-vim.List([Mapping({"abcG" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using vim.List([Mapping({"abcG" : %s})])
-vim.List([Mapping({"abcG" : None})]):NOT FAILED
-vim.List([Mapping({"abcG" : {b"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-vim.List([Mapping({"abcG" : {"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-vim.List([Mapping({"abcG" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-vim.List([Mapping({"abcG" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-vim.List([Mapping({"abcG" : FailingNumber()})]):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing *Iter* using vim.List([%s])
-vim.List([FailingIter()]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-vim.List([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using vim.List([%s])
-vim.List([None]):NOT FAILED
-vim.List([{b"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-vim.List([{"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-vim.List([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-vim.List([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-vim.List([FailingNumber()]):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->> ListItem
-l[1000]:(<class 'IndexError'>, IndexError('list index out of range',))
->> ListAssItem
-ll[1] = 2:(<class 'vim.error'>, error('list is locked',))
-l[1000] = 3:(<class 'IndexError'>, IndexError('list index out of range',))
->> ListAssSlice
-ll[1:100] = "abcJ":(<class 'vim.error'>, error('list is locked',))
->>> Testing *Iter* using l[:] = %s
-l[:] = FailingIter():(<class 'NotImplementedError'>, NotImplementedError('iter',))
-l[:] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
-nel[1:10:2]  = "abcK":(<class 'ValueError'>, ValueError('attempt to assign sequence of size greater than 2 to extended slice',))
-(b'a', b'b', b'c', b'O')
-nel[1:10:2]  = "a":(<class 'ValueError'>, ValueError('attempt to assign sequence of size 1 to extended slice of size 2',))
-(b'a', b'b', b'c', b'O')
-nel[1:1:-1]  = "a":(<class 'ValueError'>, ValueError('attempt to assign sequence of size greater than 0 to extended slice',))
-(b'a', b'b', b'c', b'O')
-nel[:] = FailingIterNextN(2):(<class 'NotImplementedError'>, NotImplementedError('next N',))
-(b'a', b'b', b'c', b'O')
->>> Testing StringToChars using l[:] = [{%s : 1}]
-l[:] = [{1 : 1}]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-l[:] = [{b"\0" : 1}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-l[:] = [{"\0" : 1}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using l[:] = [{"abcF" : {%s : 1}}]
-l[:] = [{"abcF" : {1 : 1}}]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-l[:] = [{"abcF" : {b"\0" : 1}}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-l[:] = [{"abcF" : {"\0" : 1}}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using l[:] = [{"abcF" : Mapping({%s : 1})}]
-l[:] = [{"abcF" : Mapping({1 : 1})}]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-l[:] = [{"abcF" : Mapping({b"\0" : 1})}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-l[:] = [{"abcF" : Mapping({"\0" : 1})}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using l[:] = [{"abcF" : %s}]
-l[:] = [{"abcF" : FailingIter()}]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-l[:] = [{"abcF" : FailingIterNext()}]:(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using l[:] = [{"abcF" : %s}]
-l[:] = [{"abcF" : None}]:NOT FAILED
-l[:] = [{"abcF" : {b"": 1}}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-l[:] = [{"abcF" : {"": 1}}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-l[:] = [{"abcF" : FailingMapping()}]:(<class 'NotImplementedError'>, NotImplementedError('keys',))
-l[:] = [{"abcF" : FailingMappingKey()}]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-l[:] = [{"abcF" : FailingNumber()}]:(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing StringToChars using l[:] = [Mapping({%s : 1})]
-l[:] = [Mapping({1 : 1})]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-l[:] = [Mapping({b"\0" : 1})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-l[:] = [Mapping({"\0" : 1})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using l[:] = [Mapping({"abcG" : {%s : 1}})]
-l[:] = [Mapping({"abcG" : {1 : 1}})]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-l[:] = [Mapping({"abcG" : {b"\0" : 1}})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-l[:] = [Mapping({"abcG" : {"\0" : 1}})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using l[:] = [Mapping({"abcG" : Mapping({%s : 1})})]
-l[:] = [Mapping({"abcG" : Mapping({1 : 1})})]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-l[:] = [Mapping({"abcG" : Mapping({b"\0" : 1})})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-l[:] = [Mapping({"abcG" : Mapping({"\0" : 1})})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using l[:] = [Mapping({"abcG" : %s})]
-l[:] = [Mapping({"abcG" : FailingIter()})]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-l[:] = [Mapping({"abcG" : FailingIterNext()})]:(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using l[:] = [Mapping({"abcG" : %s})]
-l[:] = [Mapping({"abcG" : None})]:NOT FAILED
-l[:] = [Mapping({"abcG" : {b"": 1}})]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-l[:] = [Mapping({"abcG" : {"": 1}})]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-l[:] = [Mapping({"abcG" : FailingMapping()})]:(<class 'NotImplementedError'>, NotImplementedError('keys',))
-l[:] = [Mapping({"abcG" : FailingMappingKey()})]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-l[:] = [Mapping({"abcG" : FailingNumber()})]:(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing *Iter* using l[:] = [%s]
-l[:] = [FailingIter()]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-l[:] = [FailingIterNext()]:(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using l[:] = [%s]
-l[:] = [None]:NOT FAILED
-l[:] = [{b"": 1}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-l[:] = [{"": 1}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-l[:] = [FailingMapping()]:(<class 'NotImplementedError'>, NotImplementedError('keys',))
-l[:] = [FailingMappingKey()]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-l[:] = [FailingNumber()]:(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->> ListConcatInPlace
->>> Testing *Iter* using l.extend(%s)
-l.extend(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
-l.extend(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing StringToChars using l.extend([{%s : 1}])
-l.extend([{1 : 1}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-l.extend([{b"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-l.extend([{"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using l.extend([{"abcF" : {%s : 1}}])
-l.extend([{"abcF" : {1 : 1}}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-l.extend([{"abcF" : {b"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-l.extend([{"abcF" : {"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using l.extend([{"abcF" : Mapping({%s : 1})}])
-l.extend([{"abcF" : Mapping({1 : 1})}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-l.extend([{"abcF" : Mapping({b"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-l.extend([{"abcF" : Mapping({"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using l.extend([{"abcF" : %s}])
-l.extend([{"abcF" : FailingIter()}]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-l.extend([{"abcF" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using l.extend([{"abcF" : %s}])
-l.extend([{"abcF" : None}]):NOT FAILED
-l.extend([{"abcF" : {b"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-l.extend([{"abcF" : {"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-l.extend([{"abcF" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-l.extend([{"abcF" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-l.extend([{"abcF" : FailingNumber()}]):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing StringToChars using l.extend([Mapping({%s : 1})])
-l.extend([Mapping({1 : 1})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-l.extend([Mapping({b"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-l.extend([Mapping({"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using l.extend([Mapping({"abcG" : {%s : 1}})])
-l.extend([Mapping({"abcG" : {1 : 1}})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-l.extend([Mapping({"abcG" : {b"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-l.extend([Mapping({"abcG" : {"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using l.extend([Mapping({"abcG" : Mapping({%s : 1})})])
-l.extend([Mapping({"abcG" : Mapping({1 : 1})})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-l.extend([Mapping({"abcG" : Mapping({b"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-l.extend([Mapping({"abcG" : Mapping({"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using l.extend([Mapping({"abcG" : %s})])
-l.extend([Mapping({"abcG" : FailingIter()})]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-l.extend([Mapping({"abcG" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using l.extend([Mapping({"abcG" : %s})])
-l.extend([Mapping({"abcG" : None})]):NOT FAILED
-l.extend([Mapping({"abcG" : {b"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-l.extend([Mapping({"abcG" : {"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-l.extend([Mapping({"abcG" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-l.extend([Mapping({"abcG" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-l.extend([Mapping({"abcG" : FailingNumber()})]):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing *Iter* using l.extend([%s])
-l.extend([FailingIter()]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-l.extend([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using l.extend([%s])
-l.extend([None]):NOT FAILED
-l.extend([{b"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-l.extend([{"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-l.extend([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-l.extend([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-l.extend([FailingNumber()]):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->> ListSetattr
-del l.locked:(<class 'AttributeError'>, AttributeError('cannot delete vim.List attributes',))
-l.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError('bool',))
-l.xxx = True:(<class 'AttributeError'>, AttributeError('cannot set attribute xxx',))
-> Function
->> FunctionConstructor
->>> FunctionConstructor
-vim.Function("123"):(<class 'ValueError'>, ValueError('unnamed function 123 does not exist',))
-vim.Function("xxx_non_existent_function_xxx"):(<class 'ValueError'>, 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=[]):(<class 'ValueError'>, ValueError('function xxx_non_existent_function_xxx2 does not exist',))
-vim.Function("xxx_non_existent_function_xxx3", self={}):(<class 'ValueError'>, ValueError('function xxx_non_existent_function_xxx3 does not exist',))
-vim.Function("xxx_non_existent_function_xxx4", args=[], self={}):(<class 'ValueError'>, ValueError('function xxx_non_existent_function_xxx4 does not exist',))
->>> FunctionNew
-vim.Function("tr", self="abcFuncSelf"):(<class 'AttributeError'>, AttributeError('keys',))
-vim.Function("tr", args=427423):(<class 'TypeError'>, TypeError('unable to convert int to a Vim list',))
-vim.Function("tr", self="abcFuncSelf2", args="abcFuncArgs2"):(<class 'AttributeError'>, AttributeError('keys',))
-vim.Function(self="abcFuncSelf2", args="abcFuncArgs2"):(<class 'AttributeError'>, AttributeError('keys',))
-vim.Function("tr", "", self="abcFuncSelf2", args="abcFuncArgs2"):(<class 'AttributeError'>, AttributeError('keys',))
-vim.Function("tr", ""):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
->> FunctionCall
->>> Testing StringToChars using f({%s : 1})
-f({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-f({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-f({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using f({"abcF" : {%s : 1}})
-f({"abcF" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-f({"abcF" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-f({"abcF" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using f({"abcF" : Mapping({%s : 1})})
-f({"abcF" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-f({"abcF" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-f({"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using f({"abcF" : %s})
-f({"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-f({"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using f({"abcF" : %s})
-f({"abcF" : None}):NOT FAILED
-f({"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-f({"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-f({"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-f({"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-f({"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing StringToChars using f(Mapping({%s : 1}))
-f(Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-f(Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-f(Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using f(Mapping({"abcG" : {%s : 1}}))
-f(Mapping({"abcG" : {1 : 1}})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-f(Mapping({"abcG" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-f(Mapping({"abcG" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using f(Mapping({"abcG" : Mapping({%s : 1})}))
-f(Mapping({"abcG" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-f(Mapping({"abcG" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-f(Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using f(Mapping({"abcG" : %s}))
-f(Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-f(Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using f(Mapping({"abcG" : %s}))
-f(Mapping({"abcG" : None})):NOT FAILED
-f(Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-f(Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-f(Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-f(Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-f(Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing *Iter* using f(%s)
-f(FailingIter()):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-f(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using f(%s)
-f(None):NOT FAILED
-f({b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-f({"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-f(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-f(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-f(FailingNumber()):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing StringToChars using fd(self={%s : 1})
-fd(self={1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-fd(self={b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-fd(self={"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using fd(self={"abcF" : {%s : 1}})
-fd(self={"abcF" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-fd(self={"abcF" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-fd(self={"abcF" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using fd(self={"abcF" : Mapping({%s : 1})})
-fd(self={"abcF" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-fd(self={"abcF" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-fd(self={"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using fd(self={"abcF" : %s})
-fd(self={"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-fd(self={"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using fd(self={"abcF" : %s})
-fd(self={"abcF" : None}):NOT FAILED
-fd(self={"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-fd(self={"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-fd(self={"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-fd(self={"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-fd(self={"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing StringToChars using fd(self=Mapping({%s : 1}))
-fd(self=Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-fd(self=Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-fd(self=Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using fd(self=Mapping({"abcG" : {%s : 1}}))
-fd(self=Mapping({"abcG" : {1 : 1}})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-fd(self=Mapping({"abcG" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-fd(self=Mapping({"abcG" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing StringToChars using fd(self=Mapping({"abcG" : Mapping({%s : 1})}))
-fd(self=Mapping({"abcG" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-fd(self=Mapping({"abcG" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-fd(self=Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
-<<< Finished
->>> Testing *Iter* using fd(self=Mapping({"abcG" : %s}))
-fd(self=Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
-fd(self=Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',))
-<<< Finished
->>> Testing ConvertFromPyObject using fd(self=Mapping({"abcG" : %s}))
-fd(self=Mapping({"abcG" : None})):NOT FAILED
-fd(self=Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-fd(self=Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-fd(self=Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-fd(self=Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-fd(self=Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',))
-<<< Finished
->>> Testing *Iter* using fd(self=%s)
-fd(self=FailingIter()):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim dictionary',))
-fd(self=FailingIterNext()):(<class 'TypeError'>, TypeError('unable to convert FailingIterNext to a Vim dictionary',))
-<<< Finished
->>> Testing ConvertFromPyObject using fd(self=%s)
-fd(self=None):(<class 'TypeError'>, TypeError('unable to convert NoneType to a Vim dictionary',))
-fd(self={b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-fd(self={"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
-fd(self=FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
-fd(self=FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
-fd(self=FailingNumber()):(<class 'TypeError'>, TypeError('unable to convert FailingNumber to a Vim dictionary',))
-<<< Finished
->>> Testing ConvertFromPyMapping using fd(self=%s)
-fd(self=[]):(<class 'AttributeError'>, AttributeError('keys',))
-<<< Finished
-> TabPage
->> TabPageAttr
-vim.current.tabpage.xxx:(<class 'AttributeError'>, AttributeError("'vim.tabpage' object has no attribute 'xxx'",))
-> TabList
->> TabListItem
-vim.tabpages[1000]:(<class 'IndexError'>, IndexError('no such tab page',))
-> Window
->> WindowAttr
-vim.current.window.xxx:(<class 'AttributeError'>, AttributeError("'vim.window' object has no attribute 'xxx'",))
->> WindowSetattr
-vim.current.window.buffer = 0:(<class 'TypeError'>, TypeError('readonly attribute: buffer',))
-vim.current.window.cursor = (100000000, 100000000):(<class 'vim.error'>, error('cursor position outside buffer',))
-vim.current.window.cursor = True:(<class 'TypeError'>, TypeError('argument must be 2-item sequence, not bool',))
->>> Testing NumberToLong using vim.current.window.height = %s
-vim.current.window.height = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
-vim.current.window.height = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
-vim.current.window.height = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
-<<< Finished
->>> Testing NumberToLong using vim.current.window.width = %s
-vim.current.window.width = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
-vim.current.window.width = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
-vim.current.window.width = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
-<<< Finished
-vim.current.window.xxxxxx = True:(<class 'AttributeError'>, AttributeError('xxxxxx',))
-> WinList
->> WinListItem
-vim.windows[1000]:(<class 'IndexError'>, IndexError('no such window',))
-> Buffer
->> StringToLine (indirect)
-vim.current.buffer[0] = "\na":(<class 'vim.error'>, error('string cannot contain newlines',))
-vim.current.buffer[0] = b"\na":(<class 'vim.error'>, error('string cannot contain newlines',))
->> SetBufferLine (indirect)
-vim.current.buffer[0] = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
->> SetBufferLineList (indirect)
-vim.current.buffer[:] = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
-vim.current.buffer[:] = ["\na", "bc"]:(<class 'vim.error'>, error('string cannot contain newlines',))
->> InsertBufferLines (indirect)
-vim.current.buffer.append(None):(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
-vim.current.buffer.append(["\na", "bc"]):(<class 'vim.error'>, error('string cannot contain newlines',))
-vim.current.buffer.append("\nbc"):(<class 'vim.error'>, error('string cannot contain newlines',))
->> RBItem
-vim.current.buffer[100000000]:(<class 'IndexError'>, IndexError('line number out of range',))
->> RBAsItem
-vim.current.buffer[100000000] = "":(<class 'IndexError'>, IndexError('line number out of range',))
->> BufferAttr
-vim.current.buffer.xxx:(<class 'AttributeError'>, AttributeError("'vim.buffer' object has no attribute 'xxx'",))
->> BufferSetattr
-vim.current.buffer.name = True:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got bool',))
-vim.current.buffer.xxx = True:(<class 'AttributeError'>, AttributeError('xxx',))
->> BufferMark
-vim.current.buffer.mark(0):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
-vim.current.buffer.mark("abcM"):(<class 'ValueError'>, ValueError('mark name must be a single character',))
-vim.current.buffer.mark("!"):(<class 'vim.error'>, error('invalid mark name',))
->> BufferRange
-vim.current.buffer.range(1, 2, 3):(<class 'TypeError'>, TypeError('function takes exactly 2 arguments (3 given)',))
-> BufMap
->> BufMapItem
-vim.buffers[100000000]:(<class 'KeyError'>, KeyError(100000000,))
->>> Testing NumberToLong using vim.buffers[%s]
-vim.buffers[[]]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
-vim.buffers[None]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
-vim.buffers[-1]:(<class 'ValueError'>, ValueError('number must be greater than zero',))
-vim.buffers[0]:(<class 'ValueError'>, ValueError('number must be greater than zero',))
-<<< Finished
-> Current
->> CurrentGetattr
-vim.current.xxx:(<class 'AttributeError'>, AttributeError("'vim.currentdata' object has no attribute 'xxx'",))
->> CurrentSetattr
-vim.current.line = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
-vim.current.buffer = True:(<class 'TypeError'>, TypeError('expected vim.Buffer object, but got bool',))
-vim.current.window = True:(<class 'TypeError'>, TypeError('expected vim.Window object, but got bool',))
-vim.current.tabpage = True:(<class 'TypeError'>, TypeError('expected vim.TabPage object, but got bool',))
-vim.current.xxx = True:(<class 'AttributeError'>, AttributeError('xxx',))
-['.']
-'.'
-3,xx
-before
-after
-pythonx/topmodule/__init__.py
-pythonx/topmodule/submodule/__init__.py
-pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py
-vim.command("throw 'abcN'"):(<class 'vim.error'>, error('abcN',))
-Exe("throw 'def'"):(<class 'vim.error'>, error('def',))
-vim.eval("Exe('throw ''ghi''')"):(<class 'vim.error'>, error('ghi',))
-vim.eval("Exe('echoerr ''jkl''')"):(<class 'vim.error'>, error('Vim(echoerr):jkl',))
-vim.eval("Exe('xxx_non_existent_command_xxx')"):(<class 'vim.error'>, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',))
-vim.eval("xxx_unknown_function_xxx()"):(<class 'vim.error'>, error('Vim:E117: Unknown function: xxx_unknown_function_xxx',))
-vim.bindeval("Exe('xxx_non_existent_command_xxx')"):(<class 'vim.error'>, 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 dae2739..9287835 100644
--- a/src/testdir/test_python2.vim
+++ b/src/testdir/test_python2.vim
@@ -560,11 +560,11 @@
 " Test for calling a function
 func Test_python_function_call()
   func New(...)
-     return ['NewStart'] + a:000 + ['NewEnd']
+    return ['NewStart'] + a:000 + ['NewEnd']
   endfunc
 
   func DictNew(...) dict
-     return ['DictNewStart'] + a:000 + ['DictNewEnd', self]
+    return ['DictNewStart'] + a:000 + ['DictNewEnd', self]
   endfunc
 
   new
@@ -1312,8 +1312,8 @@
 
   " 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("%")'))
+    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
@@ -1364,7 +1364,7 @@
   call assert_equal([''], getline(1, '$'))
 
   augroup BUFS
-     autocmd!
+    autocmd!
   augroup END
   augroup! BUFS
   %bw!
@@ -1516,7 +1516,7 @@
       cb.append('!!!!!! Windows differ')
   EOF
 
-  let expected =<< trim END 
+  let expected =<< trim END
     Number of tabs: 4
     Current tab pages:
       <tabpage 0>(1): 1 windows, current is <window object (unknown)>
@@ -1801,13 +1801,13 @@
     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:
@@ -1931,7 +1931,7 @@
             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))
@@ -1942,7 +1942,7 @@
     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))
@@ -1953,7 +1953,7 @@
     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))
@@ -1964,7 +1964,7 @@
     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))
@@ -1983,9 +1983,9 @@
     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
@@ -2005,7 +2005,7 @@
     del psaB
     del psaC
     del psar
-  
+
     del ecall
   EOF
 
@@ -2140,19 +2140,19 @@
         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
 
@@ -2233,33 +2233,33 @@
     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}')
@@ -2279,19 +2279,19 @@
             '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
@@ -2300,69 +2300,69 @@
             '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')
diff --git a/src/testdir/test_python3.vim b/src/testdir/test_python3.vim
index b4a4a4a..7edf7d0 100644
--- a/src/testdir/test_python3.vim
+++ b/src/testdir/test_python3.vim
@@ -1,9 +1,76 @@
 " Test for python 3 commands.
-" TODO: move tests from test87.in here.
 
 source check.vim
 CheckFeature python3
 
+" This function should be called first. This sets up python functions used by
+" the other tests.
+func Test_AAA_python3_setup()
+  py3 << trim EOF
+    import vim
+    import sys
+    import re
+
+    py33_type_error_pattern = re.compile('^__call__\(\) takes (\d+) positional argument but (\d+) were given$')
+    py37_exception_repr = re.compile(r'([^\(\),])(\)+)$')
+
+    def emsg(ei):
+      return ei[0].__name__ + ':' + repr(ei[1].args)
+
+    def ee(expr, g=globals(), l=locals()):
+        cb = vim.current.buffer
+        try:
+            try:
+                exec(expr, g, l)
+            except Exception as e:
+                if sys.version_info >= (3, 3) and e.__class__ is AttributeError and str(e).find('has no attribute')>=0 and not str(e).startswith("'vim."):
+                    msg = repr((e.__class__, AttributeError(str(e)[str(e).rfind(" '") + 2:-1])))
+                elif sys.version_info >= (3, 3) and e.__class__ is ImportError and str(e).find('No module named \'') >= 0:
+                    msg = repr((e.__class__, ImportError(str(e).replace("'", ''))))
+                elif sys.version_info >= (3, 6) and e.__class__ is ModuleNotFoundError:
+                    # Python 3.6 gives ModuleNotFoundError, change it to an ImportError
+                    msg = repr((ImportError, ImportError(str(e).replace("'", ''))))
+                elif sys.version_info >= (3, 3) and e.__class__ is TypeError:
+                    m = py33_type_error_pattern.search(str(e))
+                    if m:
+                        msg = '__call__() takes exactly {0} positional argument ({1} given)'.format(m.group(1), m.group(2))
+                        msg = repr((e.__class__, TypeError(msg)))
+                    else:
+                        msg = repr((e.__class__, e))
+                        # Messages changed with Python 3.6, change new to old.
+                        newmsg1 = """'argument must be str, bytes or bytearray, not None'"""
+                        oldmsg1 = '''"Can't convert 'NoneType' object to str implicitly"'''
+                        if msg.find(newmsg1) > -1:
+                            msg = msg.replace(newmsg1, oldmsg1)
+                        newmsg2 = """'argument must be str, bytes or bytearray, not int'"""
+                        oldmsg2 = '''"Can't convert 'int' object to str implicitly"'''
+                        if msg.find(newmsg2) > -1:
+                            msg = msg.replace(newmsg2, oldmsg2)
+                elif sys.version_info >= (3, 5) and e.__class__ is ValueError and str(e) == 'embedded null byte':
+                    msg = repr((TypeError, TypeError('expected bytes with no null')))
+                else:
+                    msg = repr((e.__class__, e))
+                    # 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 sys.version_info >= (3, 7):
+                    msg = py37_exception_repr.sub(r'\1,\2', msg)
+                cb.append(expr + ':' + msg)
+            else:
+                cb.append(expr + ':NOT FAILED')
+        except Exception as e:
+            msg = repr((e.__class__, e))
+            if sys.version_info >= (3, 7):
+                msg = py37_exception_repr.sub(r'\1,\2', msg)
+            cb.append(expr + '::' + msg)
+  EOF
+endfunc
+
 func Test_py3do()
   " Check deleting lines does not trigger an ml_get error.
   py3 import vim
@@ -59,6 +126,15 @@
     call assert_false(v:exception)
   endtry
 
+  let caught_vim_err = v:false
+  try
+    let x = py3eval('f.abc')
+  catch
+    call assert_match("AttributeError: 'vim.function' object has no attribute 'abc'", v:exception)
+    let caught_vim_err = v:true
+  endtry
+  call assert_equal(v:true, caught_vim_err)
+
   py3 del f
   delfunc s:foo
 endfunc
@@ -149,7 +225,7 @@
   call assert_equal( line( '.' ), 1 )
 
   bwipe!
-endfunction
+endfunc
 
 func Test_Write_To_Current_Buffer_Fixes_Cursor_Str()
   call _SetUpVisibleBuffer()
@@ -158,7 +234,7 @@
   call assert_equal( line( '.' ), 10 )
 
   bwipe!
-endfunction
+endfunc
 
 func Test_Catch_Exception_Message()
   try
@@ -355,4 +431,3233 @@
   call assert_equal('ABCDE', pyxeval('s'))
 endfunc
 
+" Test for the python List object
+func Test_python3_list()
+  let l = []
+  py3 l = vim.bindeval('l')
+  py3 f = vim.bindeval('function("strlen")')
+  " Extending List directly with different types
+  py3 l += [1, "as'd", [1, 2, f, {'a': 1}]]
+  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
+  py3 l[0] = 0
+  call assert_equal([0, "as'd", [1, 2, function("strlen"), {'a': 1}]], l)
+  py3 l[-2] = f
+  call assert_equal([0, function("strlen"), [1, 2, function("strlen"), {'a': 1}]], l)
+endfunc
+
+" Extending Dictionary directly with different types
+func Test_python3_dict_extend()
+  let d = {}
+  func d.f()
+    return 1
+  endfunc
+
+  py3 f = vim.bindeval('function("strlen")')
+  py3 << 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()
+    dk.sort(key=repr)
+    dv.sort(key=repr)
+    di.sort(key=repr)
+  EOF
+
+  call assert_equal(1, py3eval("d['f'](self={})"))
+  call assert_equal("[b'-1', b'0', b'1', b'b', b'f']", py3eval('repr(dk)'))
+  call assert_equal("[-1, <vim.Function '1'>, <vim.dictionary object at >, <vim.list object at >, b'asd']", substitute(py3eval('repr(dv)'),'0x\x\+','','g'))
+  call assert_equal("[(b'-1', <vim.dictionary object at >), (b'0', -1), (b'1', b'asd'), (b'b', <vim.list object at >), (b'f', <vim.Function '1'>)]", substitute(py3eval('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)))
+  py3 del dk
+  py3 del di
+  py3 del dv
+endfunc
+
+func Test_python3_list_del_items()
+  " removing items with del
+  let l = [0, function("strlen"), [1, 2, function("strlen"), {'a': 1}]]
+  py3 l = vim.bindeval('l')
+  py3 del l[2]
+  call assert_equal("[0, function('strlen')]", string(l))
+
+  let l = range(8)
+  py3 l = vim.bindeval('l')
+  py3 del l[:3]
+  py3 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]
+  py3 l = vim.bindeval('l')
+  py3 del l[2:1]
+  call assert_equal([0, 1, 2, 3], l)
+  py3 del l[2:2]
+  call assert_equal([0, 1, 2, 3], l)
+  py3 del l[2:3]
+  call assert_equal([0, 1, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 del l[2:4]
+  call assert_equal([0, 1], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 del l[2:5]
+  call assert_equal([0, 1], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 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]
+  py3 l = vim.bindeval('l')
+  py3 del l[-1:2]
+  call assert_equal([0, 1, 2, 3], l)
+  py3 del l[-2:2]
+  call assert_equal([0, 1, 2, 3], l)
+  py3 del l[-3:2]
+  call assert_equal([0, 2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 del l[-4:2]
+  call assert_equal([2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 del l[-5:2]
+  call assert_equal([2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 del l[-6:2]
+  call assert_equal([2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 del l[::2]
+  call assert_equal([1, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 del l[3:0:-2]
+  call assert_equal([0, 2], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 del l[2:4:-2]
+  let l = [0, 1, 2, 3]
+endfunc
+
+func Test_python3_dict_del_items()
+  let d = eval("{'0' : -1, '1' : 'asd', 'b' : [1, 2, function('strlen')], 'f' : function('min'), '-1' : {'a': 1}}")
+  py3 d = vim.bindeval('d')
+  py3 del d['-1']
+  py3 del d['f']
+  call assert_equal([1, 2, function('strlen')], py3eval('d.get(''b'', 1)'))
+  call assert_equal([1, 2, function('strlen')], py3eval('d.pop(''b'')'))
+  call assert_equal(1, py3eval('d.get(''b'', 1)'))
+  call assert_equal('asd', py3eval('d.pop(''1'', 2)'))
+  call assert_equal(2, py3eval('d.pop(''1'', 2)'))
+  call assert_equal('True', py3eval('repr(d.has_key(''0''))'))
+  call assert_equal('False', py3eval('repr(d.has_key(''1''))'))
+  call assert_equal('True', py3eval('repr(''0'' in d)'))
+  call assert_equal('False', py3eval('repr(''1'' in d)'))
+  call assert_equal("[b'0']", py3eval('repr(list(iter(d)))'))
+  call assert_equal({'0' : -1}, d)
+  call assert_equal("(b'0', -1)", py3eval('repr(d.popitem())'))
+  call assert_equal('None', py3eval('repr(d.get(''0''))'))
+  call assert_equal('[]', py3eval('repr(list(iter(d)))'))
+endfunc
+
+" Slice assignment to a list
+func Test_python3_slice_assignment()
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 l[0:0] = ['a']
+  call assert_equal(['a', 0, 1, 2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 l[1:2] = ['b']
+  call assert_equal([0, 'b', 2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 l[2:4] = ['c']
+  call assert_equal([0, 1, 'c'], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 l[4:4] = ['d']
+  call assert_equal([0, 1, 2, 3, 'd'], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 l[-1:2] = ['e']
+  call assert_equal([0, 1, 2, 'e', 3], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 l[-10:2] = ['f']
+  call assert_equal(['f', 2, 3], l)
+
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  py3 l[2:-10] = ['g']
+  call assert_equal([0, 1, 'g', 2, 3], l)
+
+  let l = []
+  py3 l = vim.bindeval('l')
+  py3 l[0:0] = ['h']
+  call assert_equal(['h'], l)
+
+  let l = range(8)
+  py3 l = vim.bindeval('l')
+  py3 l[2:6:2] = [10, 20]
+  call assert_equal([0, 1, 10, 3, 20, 5, 6, 7], l)
+
+  let l = range(8)
+  py3 l = vim.bindeval('l')
+  py3 l[6:2:-2] = [10, 20]
+  call assert_equal([0, 1, 2, 3, 20, 5, 10, 7], l)
+
+  let l = range(8)
+  py3 l = vim.bindeval('l')
+  py3 l[6:2] = ()
+  call assert_equal([0, 1, 2, 3, 4, 5, 6, 7], l)
+
+  let l = range(8)
+  py3 l = vim.bindeval('l')
+  py3 l[6:2:1] = ()
+  call assert_equal([0, 1, 2, 3, 4, 5, 6, 7], l)
+
+  let l = range(8)
+  py3 l = vim.bindeval('l')
+  py3 l[2:2:1] = ()
+  call assert_equal([0, 1, 2, 3, 4, 5, 6, 7], l)
+endfunc
+
+" Locked variables
+func Test_python3_lockedvar()
+  new
+  py3 cb = vim.current.buffer
+  let l = [0, 1, 2, 3]
+  py3 l = vim.bindeval('l')
+  lockvar! l
+  py3 << 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_python3_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')]
+  py3 l = vim.bindeval('l')
+  py3 l.extend(list(l[0](1, 2, 3)))
+  call assert_equal([function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd'], l)
+  py3 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)
+  py3 l += [[l[0].name]]
+  call assert_equal([function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, ['New']], l)
+  py3 ee('l[1](1, 2, 3)')
+  call assert_equal("l[1](1, 2, 3):(<class 'vim.error'>, error('Vim:E725: Calling dict function without Dictionary: DictNew',))", getline(2))
+  %d
+  py3 f = l[0]
+  delfunction New
+  py3 ee('f(1, 2, 3)')
+  call assert_equal("f(1, 2, 3):(<class 'vim.error'>, error('Vim:E117: Unknown function: New',))", getline(2))
+  close!
+  delfunction DictNew
+endfunc
+
+func Test_python3_float()
+  CheckFeature float
+  let l = [0.0]
+  py3 l = vim.bindeval('l')
+  py3 l.extend([0.0])
+  call assert_equal([0.0, 0.0], l)
+endfunc
+
+" Test for Dict key errors
+func Test_python3_dict_key_error()
+  let messages = []
+  py3 << trim EOF
+    import sys
+    d = vim.bindeval('{}')
+    m = vim.bindeval('messages')
+    def em(expr, g=globals(), l=locals()):
+      try:
+        exec(expr, g, l)
+      except Exception as e:
+        if sys.version_info >= (3, 5) and e.__class__ is ValueError and str(e) == 'embedded null byte':
+          m.extend([TypeError.__name__])
+        else:
+          m.extend([e.__class__.__name__])
+
+    em('d["abc1"]')
+    em('d["abc1"]="\\0"')
+    em('d["abc1"]=vim')
+    em('d[""]=1')
+    em('d["a\\0b"]=1')
+    em('d[b"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_python3_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 'py3 ' .. name .. ' = vim.bindeval("' .. s .. '")'
+    call add(res, s .. ' : ' .. join(map(['locked', 'scope'],
+          \ 'v:val .. ":" .. py3eval(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
+  py3 d.locked = True
+  py3 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 'py3 ' .. name .. '=vim.bindeval("' .. s .. '")'
+    call add(res, s .. ' : locked:' .. py3eval(name .. '.locked'))
+  endfor
+  call assert_equal(['l : locked:0', 'll : locked:1'], res)
+
+  silent! call extend(l, [0])
+  silent! call extend(ll, [0])
+  py3 l.locked = True
+  py3 ll.locked = False
+  silent! call extend(l, [1])
+  silent! call extend(ll, [1])
+  call assert_equal([0], l)
+  call assert_equal([1], ll)
+  unlet l ll
+endfunc
+
+" Test for py3eval()
+func Test_python3_pyeval()
+  let l = py3eval('[0, 1, 2]')
+  call assert_equal([0, 1, 2], l)
+
+  let d = py3eval('{"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, py3eval('None'))
+  call assert_equal('', v:errmsg)
+
+  if has('float')
+    call assert_equal(0.0, py3eval('0.0'))
+  endif
+
+  " Invalid values:
+  let caught_859 = 0
+  try
+    let v = py3eval('"\0"')
+  catch /E859:/
+    let caught_859 = 1
+  endtry
+  call assert_equal(1, caught_859)
+
+  let caught_859 = 0
+  try
+    let v = py3eval('{"\0" : 1}')
+  catch /E859:/
+    let caught_859 = 1
+  endtry
+  call assert_equal(1, caught_859)
+
+  let caught_nameerr = 0
+  try
+    let v = py3eval("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 = py3eval("vim")
+  catch /E859:/
+    let caught_859 = 1
+  endtry
+  call assert_equal(1, caught_859)
+endfunc
+
+" threading
+" Running py3do 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]
+  py3 l = vim.bindeval('l')
+  py3 << 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
+  py3 t.running = False
+  py3 t.join()
+
+  " Check if the background thread is working.  Count should be 10, but on a
+  " busy system (AppVeyor) it can be much lower.
+  py3 l[0] = t.t > 4
+  py3 del time
+  py3 del threading
+  py3 del t
+  call assert_equal([1], l)
+endfunc
+
+" settrace
+func Test_python3_settrace()
+  let l = []
+  py3 l = vim.bindeval('l')
+  py3 << trim EOF
+    import sys
+
+    def traceit(frame, event, arg):
+      global l
+      if event == "line":
+        l += [frame.f_lineno]
+      return traceit
+
+    def trace_main():
+      for i in range(5):
+        pass
+  EOF
+  py3 sys.settrace(traceit)
+  py3 trace_main()
+  py3 sys.settrace(None)
+  py3 del traceit
+  py3 del trace_main
+  call assert_equal([1, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 1], l)
+endfunc
+
+" Slice
+func Test_python3_list_slice()
+  py3 ll = vim.bindeval('[0, 1, 2, 3, 4, 5]')
+  py3 l = ll[:4]
+  call assert_equal([0, 1, 2, 3], py3eval('l'))
+  py3 l = ll[2:]
+  call assert_equal([2, 3, 4, 5], py3eval('l'))
+  py3 l = ll[:-4]
+  call assert_equal([0, 1], py3eval('l'))
+  py3 l = ll[-2:]
+  call assert_equal([4, 5], py3eval('l'))
+  py3 l = ll[2:4]
+  call assert_equal([2, 3], py3eval('l'))
+  py3 l = ll[4:2]
+  call assert_equal([], py3eval('l'))
+  py3 l = ll[-4:-2]
+  call assert_equal([2, 3], py3eval('l'))
+  py3 l = ll[-2:-4]
+  call assert_equal([], py3eval('l'))
+  py3 l = ll[:]
+  call assert_equal([0, 1, 2, 3, 4, 5], py3eval('l'))
+  py3 l = ll[0:6]
+  call assert_equal([0, 1, 2, 3, 4, 5], py3eval('l'))
+  py3 l = ll[-10:10]
+  call assert_equal([0, 1, 2, 3, 4, 5], py3eval('l'))
+  py3 l = ll[4:2:-1]
+  call assert_equal([4, 3], py3eval('l'))
+  py3 l = ll[::2]
+  call assert_equal([0, 2, 4], py3eval('l'))
+  py3 l = ll[4:2:1]
+  call assert_equal([], py3eval('l'))
+  py3 del l
+endfunc
+
+" Vars
+func Test_python3_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', py3eval('vim.vvars[''exception'']'))
+  endtry
+  call assert_equal('bac', py3eval('vim.vars[''foo'']'))
+  call assert_equal('def', py3eval('vim.current.window.vars[''abc3'']'))
+  call assert_equal('bar', py3eval('vim.current.buffer.vars[''baz'']'))
+  call assert_equal('jkl', py3eval('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_python3_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
+
+  py3 << trim EOF
+    def e(s, g=globals(), l=locals()):
+      try:
+        exec(s, g, l)
+      except Exception as e:
+        vim.command('return ' + repr(e.__class__.__name__))
+
+    def ev(s, g=globals(), l=locals()):
+      try:
+        return eval(s, g, l)
+      except Exception as e:
+        vim.command('let exc=' + repr(e.__class__.__name__))
+        return 0
+  EOF
+
+  func E(s)
+    python3 e(vim.eval('a:s'))
+  endfunc
+
+  func Ev(s)
+    let r = py3eval('ev(vim.eval("a:s"))')
+    if exists('exc')
+      throw exc
+    endif
+    return r
+  endfunc
+
+  py3 gopts1 = vim.options
+  py3 wopts1 = vim.windows[2].options
+  py3 wopts2 = vim.windows[0].options
+  py3 wopts3 = vim.windows[1].options
+  py3 bopts1 = vim.buffers[vim.bindeval("g:bufs")[2]].options
+  py3 bopts2 = vim.buffers[vim.bindeval("g:bufs")[1]].options
+  py3 bopts3 = vim.buffers[vim.bindeval("g:bufs")[0]].options
+  call add(g:res, 'wopts iters equal: ' ..
+        \ py3eval('list(wopts1) == list(wopts2)'))
+  call add(g:res, 'bopts iters equal: ' ..
+        \ py3eval('list(bopts1) == list(bopts2)'))
+  py3 gset = set(iter(gopts1))
+  py3 wset = set(iter(wopts1))
+  py3 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
+    py3 oname = vim.eval('oname')
+    py3 oval1 = vim.bindeval('oval1')
+    py3 oval2 = vim.bindeval('oval2')
+    py3 oval3 = vim.bindeval('oval3')
+    if invval is 0 || invval is 1
+      py3 invval = bool(vim.bindeval('invval'))
+    else
+      py3 invval = vim.bindeval('invval')
+    endif
+    if bool
+      py3 oval1 = bool(oval1)
+      py3 oval2 = bool(oval2)
+      py3 oval3 = bool(oval3)
+    endif
+    call add(g:res, '>>> ' .. oname)
+    call add(g:res, '  g/w/b:' .. py3eval('oname in gset') .. '/' ..
+          \ py3eval('oname in wset') .. '/' .. py3eval('oname in bset'))
+    call add(g:res, '  g/w/b (in):' .. py3eval('oname in gopts1') .. '/' ..
+          \ py3eval('oname in wopts1') .. '/' .. py3eval('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
+  py3 del ev
+  py3 del e
+  only
+  for buf in g:bufs[1:]
+    execute 'bwipeout!' buf
+  endfor
+  py3 del gopts1
+  py3 del wopts1
+  py3 del wopts2
+  py3 del wopts3
+  py3 del bopts1
+  py3 del bopts2
+  py3 del bopts3
+  py3 del oval1
+  py3 del oval2
+  py3 del oval3
+  py3 del oname
+  py3 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: b''
+      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: b''
+      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: b''
+      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: b''
+      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: b'.,..,,'
+      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_python3_buffer()
+  new
+  call setline(1, "Hello\nWorld")
+  call assert_fails("let x = py3eval('vim.current.buffer[0]')", 'E859:')
+  %bw!
+
+  edit Xfile1
+  let bnr1 = bufnr()
+  py3 cb = vim.current.buffer
+  vnew Xfile2
+  let bnr2 = bufnr()
+  call setline(1, ['First line', 'Second line', 'Third line'])
+  py3 b = vim.current.buffer
+  wincmd w
+
+  " Tests BufferAppend and BufferItem
+  py3 cb.append(b[0])
+  call assert_equal(['First line'], getbufline(bnr1, 2))
+  %d
+
+  " Tests BufferSlice and BufferAssSlice
+  py3 cb.append('abc5') # Will be overwritten
+  py3 cb[-1:] = b[:-2]
+  call assert_equal(['First line'], getbufline(bnr1, 2))
+  %d
+
+  " Test BufferLength and BufferAssSlice
+  py3 cb.append('def') # Will not be overwritten
+  py3 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
+  py3 cb.append('ghi') # Will be overwritten
+  py3 cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1]))
+  call assert_equal(['(3, 2)'], getbufline(bnr1, 4))
+  %d
+
+  " Test BufferRepr
+  py3 cb.append(repr(cb) + repr(b))
+  call assert_equal(['<buffer Xfile1><buffer Xfile2>'], getbufline(bnr1, 2))
+  %d
+
+  " Modify foreign buffer
+  py3 << 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 * python3 cb.append(vim.eval('expand("<abuf>")') + ':BufFilePost:' + vim.eval('bufnr("%")'))
+    autocmd BufFilePre * python3 cb.append(vim.eval('expand("<abuf>")') + ':BufFilePre:' + vim.eval('bufnr("%")'))
+  augroup END
+  py3 << 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
+  py3 << 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
+
+  py3 << trim EOF
+    for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc6")'):
+      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_python3_buffers()
+  %bw!
+  edit Xfile
+  py3 cb = vim.current.buffer
+  set hidden
+  edit a
+  buffer #
+  edit b
+  buffer #
+  edit c
+  buffer #
+  py3 << trim EOF
+    # 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
+
+  py3 << 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
+
+  py3 << 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_python3_tabpage_window()
+  %bw
+  edit Xfile
+  py3 cb = vim.current.buffer
+  tabnew 0
+  tabnew 1
+  vnew a.1
+  tabnew 2
+  vnew a.2
+  vnew b.2
+  vnew c.2
+
+  py3 << trim EOF
+    cb.append('Number of tabs: ' + str(len(vim.tabpages)))
+    cb.append('Current tab pages:')
+    def W(w):
+      if '(unknown)' in repr(w):
+        return '<window object (unknown)>'
+      else:
+        return repr(w)
+
+    def Cursor(w, start=len(cb)):
+      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 int:
+              raise TypeError
+            if aval < 0:
+              raise ValueError
+          except Exception as e:
+            cb.append('!!!!!! Error while getting attribute ' + attr + \
+                                            ': ' + e.__class__.__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_python3_vim_current()
+  %bw
+  edit Xfile
+  py3 cb = vim.current.buffer
+  tabnew 0
+  tabnew 1
+  vnew a.1
+  tabnew 2
+  vnew a.2
+  vnew b.2
+  vnew c.2
+
+  py3 << 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
+  py3 << 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')
+  py3 << 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, '$')
+
+  py3 << 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_python3_types()
+  %d
+  py3 cb = vim.current.buffer
+  py3 << 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_python3_dir_method()
+  %d
+  py3 cb = vim.current.buffer
+  py3 << 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__,buffer,line,range,tabpage,window
+    buffer:__dir__,append,mark,name,number,options,range,valid,vars
+    window:__dir__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars,width
+    tabpage:__dir__,number,valid,vars,window,windows
+    range:__dir__,append,end,start
+    dictionary:__dir__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
+    list:__dir__,extend,locked
+    function:__dir__,args,auto_rebind,self,softspace
+    output:__dir__,close,closed,flush,isatty,readable,seekable,softspace,writable,write,writelines
+  END
+  call assert_equal(expected, getline(2, '$'))
+endfunc
+
+" Test vim.*.__new__
+func Test_python3_new()
+  call assert_equal({}, py3eval('vim.Dictionary({})'))
+  call assert_equal({'a': 1}, py3eval('vim.Dictionary(a=1)'))
+  call assert_equal({'a': 1}, py3eval('vim.Dictionary(((''a'', 1),))'))
+  call assert_equal([], py3eval('vim.List()'))
+  call assert_equal(['a', 'b', 'c', '7'], py3eval('vim.List(iter(''abc7''))'))
+  call assert_equal(function('tr'), py3eval('vim.Function(''tr'')'))
+  call assert_equal(function('tr', [123, 3, 4]),
+        \ py3eval('vim.Function(''tr'', args=[123, 3, 4])'))
+  call assert_equal(function('tr'), py3eval('vim.Function(''tr'', args=[])'))
+  call assert_equal(function('tr', {}),
+        \ py3eval('vim.Function(''tr'', self={})'))
+  call assert_equal(function('tr', [123, 3, 4], {}),
+        \ py3eval('vim.Function(''tr'', args=[123, 3, 4], self={})'))
+  call assert_equal(function('tr'),
+        \ py3eval('vim.Function(''tr'', auto_rebind=False)'))
+  call assert_equal(function('tr', [123, 3, 4]),
+        \ py3eval('vim.Function(''tr'', args=[123, 3, 4], auto_rebind=False)'))
+  call assert_equal(function('tr'),
+        \ py3eval('vim.Function(''tr'', args=[], auto_rebind=False)'))
+  call assert_equal(function('tr', {}),
+        \ py3eval('vim.Function(''tr'', self={}, auto_rebind=False)'))
+  call assert_equal(function('tr', [123, 3, 4], {}),
+        \ py3eval('vim.Function(''tr'', args=[123, 3, 4], self={}, auto_rebind=False)'))
+endfunc
+
+" Test vim.Function
+func Test_python3_vim_func()
+  function Args(...)
+    return a:000
+  endfunc
+
+  function SelfArgs(...) dict
+    return [a:000, self]
+  endfunc
+
+  " The following four lines should not crash
+  let Pt = function('tr', [[]], {'l': []})
+  py3 Pt = vim.bindeval('Pt')
+  unlet Pt
+  py3 del Pt
+
+  %bw!
+  py3 cb = vim.current.buffer
+  py3 << 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: ' + str(vim.Function('string')(ret), 'utf-8')
+        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'), py3eval('a'))
+  call assert_equal(function('Args', ['abcArgsPA1']), py3eval('pa1'))
+  call assert_equal(function('Args'), py3eval('pa2'))
+  call assert_equal(function('Args', ['abcArgsPA3'], {'abcSelfPA3': 'abcSelfPA3Val'}), py3eval('pa3'))
+  call assert_equal(function('Args', {'abcSelfPA4': 'abcSelfPA4Val'}), py3eval('pa4'))
+  call assert_equal(function('SelfArgs'), py3eval('sa'))
+  call assert_equal(function('SelfArgs', ['abcArgsPSA1']), py3eval('psa1'))
+  call assert_equal(function('SelfArgs'), py3eval('psa2'))
+  call assert_equal(function('SelfArgs', ['abcArgsPSA3'], {'abcSelfPSA3': 'abcSelfPSA3Val'}), py3eval('psa3'))
+  call assert_equal(function('SelfArgs', {'abcSelfPSA4': 'abcSelfPSA4Val'}), py3eval('psa4'))
+  call assert_equal(function('SelfArgs', {'abcSelfPSA5': 'abcSelfPSA5Val'}), py3eval('psa5'))
+  call assert_equal(function('SelfArgs', ['abcArgsPSA6'], {'abcSelfPSA6': 'abcSelfPSA6Val'}), py3eval('psa6'))
+  call assert_equal(function('SelfArgs', ['abcArgsPSA7']), py3eval('psa7'))
+  call assert_equal(function('SelfArgs'), py3eval('psa8'))
+  call assert_equal(function('SelfArgs', {'abcSelfPSA9': 'abcSelfPSA9Val'}), py3eval('psa9'))
+  call assert_equal(function('SelfArgs', ['abcArgsPSAA'], {'abcSelfPSAA': 'abcSelfPSAAVal'}), py3eval('psaA'))
+  call assert_equal(function('SelfArgs', ['abcArgsPSAB']), py3eval('psaB'))
+  call assert_equal(function('SelfArgs'), py3eval('psaC'))
+
+  let res = []
+  for v in ['sa', 'psa1', 'psa2', 'psa3', 'psa4', 'psa5', 'psa6', 'psa7',
+        \ 'psa8', 'psa9', 'psaA', 'psaB', 'psaC']
+    let d = {'f': py3eval(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)
+
+  py3 ecall('a()', a, )
+  py3 ecall('pa1()', pa1, )
+  py3 ecall('pa2()', pa2, )
+  py3 ecall('pa3()', pa3, )
+  py3 ecall('pa4()', pa4, )
+  py3 ecall('sa()', sa, )
+  py3 ecall('psa1()', psa1, )
+  py3 ecall('psa2()', psa2, )
+  py3 ecall('psa3()', psa3, )
+  py3 ecall('psa4()', psa4, )
+
+  py3 ecall('a(42, 43)', a, 42, 43)
+  py3 ecall('pa1(42, 43)', pa1, 42, 43)
+  py3 ecall('pa2(42, 43)', pa2, 42, 43)
+  py3 ecall('pa3(42, 43)', pa3, 42, 43)
+  py3 ecall('pa4(42, 43)', pa4, 42, 43)
+  py3 ecall('sa(42, 43)', sa, 42, 43)
+  py3 ecall('psa1(42, 43)', psa1, 42, 43)
+  py3 ecall('psa2(42, 43)', psa2, 42, 43)
+  py3 ecall('psa3(42, 43)', psa3, 42, 43)
+  py3 ecall('psa4(42, 43)', psa4, 42, 43)
+
+  py3 ecall('a(42, self={"20": 1})', a, 42, self={'20': 1})
+  py3 ecall('pa1(42, self={"20": 1})', pa1, 42, self={'20': 1})
+  py3 ecall('pa2(42, self={"20": 1})', pa2, 42, self={'20': 1})
+  py3 ecall('pa3(42, self={"20": 1})', pa3, 42, self={'20': 1})
+  py3 ecall('pa4(42, self={"20": 1})', pa4, 42, self={'20': 1})
+  py3 ecall('sa(42, self={"20": 1})', sa, 42, self={'20': 1})
+  py3 ecall('psa1(42, self={"20": 1})', psa1, 42, self={'20': 1})
+  py3 ecall('psa2(42, self={"20": 1})', psa2, 42, self={'20': 1})
+  py3 ecall('psa3(42, self={"20": 1})', psa3, 42, self={'20': 1})
+  py3 ecall('psa4(42, self={"20": 1})', psa4, 42, self={'20': 1})
+
+  py3 ecall('a(self={"20": 1})', a, self={'20': 1})
+  py3 ecall('pa1(self={"20": 1})', pa1, self={'20': 1})
+  py3 ecall('pa2(self={"20": 1})', pa2, self={'20': 1})
+  py3 ecall('pa3(self={"20": 1})', pa3, self={'20': 1})
+  py3 ecall('pa4(self={"20": 1})', pa4, self={'20': 1})
+  py3 ecall('sa(self={"20": 1})', sa, self={'20': 1})
+  py3 ecall('psa1(self={"20": 1})', psa1, self={'20': 1})
+  py3 ecall('psa2(self={"20": 1})', psa2, self={'20': 1})
+  py3 ecall('psa3(self={"20": 1})', psa3, self={'20': 1})
+  py3 ecall('psa4(self={"20": 1})', psa4, self={'20': 1})
+
+  py3 << trim EOF
+    def s(v):
+        if v is None:
+            return repr(v)
+        else:
+            return str(vim.Function('string')(v), 'utf-8')
+
+    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_python3_stdin_stderr()
+  let caught_writeerr = 0
+  let caught_writelineerr = 0
+  redir => messages
+  py3 sys.stdout.write('abc8') ; sys.stdout.write('def')
+  try
+    py3 sys.stderr.write('abc9') ; sys.stderr.write('def')
+  catch /abc9def/
+    let caught_writeerr = 1
+  endtry
+  py3 sys.stdout.writelines(iter('abcA'))
+  try
+    py3 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_python3_subclass()
+  new
+  func Put(...)
+    return a:000
+  endfunc
+
+  py3 << 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(py3eval('dd'))))
+  call assert_equal(['a', 'a'], py3eval('dl'))
+  call assert_equal(['a', 'b', 'c', 'C'], py3eval('dl2'))
+  call assert_equal([2, 2], py3eval('df(2)'))
+  call assert_equal(1, py3eval('dl') is# py3eval('dl'))
+  call assert_equal(1, py3eval('dd') is# py3eval('dd'))
+  call assert_equal(function('Put'), py3eval('df'))
+  delfunction Put
+  py3 << trim EOF
+    del DupDict
+    del DupList
+    del DupFun
+    del dd
+    del dl
+    del dl2
+    del df
+  EOF
+  close!
+endfunc
+
+" Test chdir
+func Test_python3_chdir()
+  new Xfile
+  py3 cb = vim.current.buffer
+  py3 << trim EOF
+    import os
+    fnamemodify = vim.Function('fnamemodify')
+    cb.append(str(fnamemodify('.', ':p:h:t')))
+    cb.append(vim.eval('@%'))
+    os.chdir('..')
+    path = fnamemodify('.', ':p:h:t')
+    if path != b'src':
+      # Running tests from a shadow directory, so move up another level
+      # This will result in @% looking like shadow/testdir/Xfile, hence the
+      # slicing to remove the leading path and path separator
+      os.chdir('..')
+      cb.append(str(fnamemodify('.', ':p:h:t')))
+      cb.append(vim.eval('@%')[len(path)+1:].replace(os.path.sep, '/'))
+      os.chdir(path)
+      del path
+    else:
+      cb.append(str(fnamemodify('.', ':p:h:t')))
+      cb.append(vim.eval('@%').replace(os.path.sep, '/'))
+    del path
+    os.chdir('testdir')
+    cb.append(str(fnamemodify('.', ':p:h:t')))
+    cb.append(vim.eval('@%'))
+    del fnamemodify
+  EOF
+  call assert_equal(["b'testdir'", 'Xfile', "b'src'", 'testdir/Xfile',
+        \"b'testdir'", 'Xfile'], getline(2, '$'))
+  close!
+endfunc
+
+" Test errors
+func Test_python3_errors()
+  func F() dict
+  endfunc
+
+  func D()
+  endfunc
+
+  new
+  py3 cb = vim.current.buffer
+
+  py3 << 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
+            'b"\\0"',  # Fail PyString_AsStringAndSize(object, , NULL) check
+            '"\\0"',   # Fail PyString_AsStringAndSize(bytes, , 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
+            '{b"": 1}',             # Empty key not allowed
+            '{"": 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',
+        ) + (('-1',) if unsigned else ())
+        + (('0',) if natural else ()))
+
+    class FailingTrue(object):
+        def __bool__(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] = "\\na"')
+    ee('vim.current.buffer[0] = b"\\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:(<class 'AttributeError'>, AttributeError('cannot delete OutputObject attributes',))
+    >>> Testing NumberToLong using sys.stdout.softspace = %s
+    sys.stdout.softspace = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+    sys.stdout.softspace = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+    sys.stdout.softspace = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
+    <<< Finished
+    >>> Testing NumberToLong using sys.stderr.softspace = %s
+    sys.stderr.softspace = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+    sys.stderr.softspace = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+    sys.stderr.softspace = -1:(<class 'ValueError'>, 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:(<class 'AttributeError'>, 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):(<class 'TypeError'>, TypeError("Can't convert 'NoneType' object to str implicitly",))
+    >> OutputWriteLines
+    sys.stdout.writelines(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",))
+    sys.stdout.writelines([1]):(<class 'TypeError'>, TypeError("Can't convert 'int' object to str implicitly",))
+    >>> Testing *Iter* using sys.stdout.writelines(%s)
+    sys.stdout.writelines(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+    sys.stdout.writelines(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    > VimCommand
+    >>> Testing StringToChars using vim.command(%s)
+    vim.command(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    vim.command(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    vim.command("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    vim.command("", 2):(<class 'TypeError'>, TypeError('command() takes exactly one argument (2 given)',))
+    > VimToPython
+    > VimEval
+    >>> Testing StringToChars using vim.eval(%s)
+    vim.eval(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    vim.eval(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    vim.eval("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    vim.eval("", FailingTrue()):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
+    > VimEvalPy
+    >>> Testing StringToChars using vim.bindeval(%s)
+    vim.bindeval(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    vim.bindeval(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    vim.bindeval("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    vim.eval("", 2):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
+    > VimStrwidth
+    >>> Testing StringToChars using vim.strwidth(%s)
+    vim.strwidth(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    vim.strwidth(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    vim.strwidth("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    > VimForeachRTP
+    vim.foreach_rtp(None):(<class 'TypeError'>, TypeError("'NoneType' object is not callable",))
+    vim.foreach_rtp(NoArgsCall()):(<class 'TypeError'>, TypeError('__call__() takes exactly 1 positional argument (2 given)',))
+    vim.foreach_rtp(FailingCall()):(<class 'NotImplementedError'>, NotImplementedError('call',))
+    vim.foreach_rtp(int, 2):(<class 'TypeError'>, TypeError('foreach_rtp() takes exactly one argument (2 given)',))
+    > import
+    import xxx_no_such_module_xxx:(<class 'ImportError'>, ImportError('No module named xxx_no_such_module_xxx',))
+    import failing_import:(<class 'ImportError'>, ImportError())
+    import failing:(<class 'NotImplementedError'>, NotImplementedError())
+    > Options
+    >> OptionsItem
+    vim.options["abcQ"]:(<class 'KeyError'>, KeyError('abcQ',))
+    vim.options[""]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    >>> Testing StringToChars using vim.options[%s]
+    vim.options[1]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    vim.options[b"\0"]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    vim.options["\0"]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >> OptionsContains
+    >>> Testing StringToChars using %s in vim.options
+    1 in vim.options:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    b"\0" in vim.options:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    "\0" in vim.options:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    > Dictionary
+    >> DictionaryConstructor
+    vim.Dictionary("abcI"):(<class 'ValueError'>, ValueError('expected sequence element of size 2, but got sequence of size 1',))
+    >> DictionarySetattr
+    del d.locked:(<class 'AttributeError'>, AttributeError('cannot delete vim.Dictionary attributes',))
+    d.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError('bool',))
+    vim.vvars.locked = False:(<class 'TypeError'>, TypeError('cannot modify fixed dictionary',))
+    d.scope = True:(<class 'AttributeError'>, AttributeError('cannot set attribute scope',))
+    d.xxx = True:(<class 'AttributeError'>, AttributeError('cannot set attribute xxx',))
+    >> _DictionaryItem
+    d.get("a", 2, 3):(<class 'TypeError'>, TypeError('function takes at most 2 arguments (3 given)',))
+    >>> Testing StringToChars using d.get(%s)
+    d.get(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.get(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.get("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    d.pop("a"):(<class 'KeyError'>, KeyError('a',))
+    dl.pop("a"):(<class 'vim.error'>, error('dictionary is locked',))
+    >> DictionaryContains
+    "" in d:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    0 in d:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    >> DictionaryIterNext
+    for i in ned: ned["a"] = 1:(<class 'RuntimeError'>, RuntimeError('hashtab changed during iteration',))
+    >> DictionaryAssItem
+    dl["b"] = 1:(<class 'vim.error'>, error('dictionary is locked',))
+    >>> Testing StringToChars using d[%s] = 1
+    d[1] = 1:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d[b"\0"] = 1:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d["\0"] = 1:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d["a"] = {%s : 1}
+    d["a"] = {1 : 1}:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d["a"] = {b"\0" : 1}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d["a"] = {"\0" : 1}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d["a"] = {"abcF" : {%s : 1}}
+    d["a"] = {"abcF" : {1 : 1}}:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d["a"] = {"abcF" : {b"\0" : 1}}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d["a"] = {"abcF" : {"\0" : 1}}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d["a"] = {"abcF" : Mapping({%s : 1})}
+    d["a"] = {"abcF" : Mapping({1 : 1})}:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d["a"] = {"abcF" : Mapping({b"\0" : 1})}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d["a"] = {"abcF" : Mapping({"\0" : 1})}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using d["a"] = {"abcF" : %s}
+    d["a"] = {"abcF" : FailingIter()}:(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    d["a"] = {"abcF" : FailingIterNext()}:(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d["a"] = {"abcF" : %s}
+    d["a"] = {"abcF" : None}:NOT FAILED
+    d["a"] = {"abcF" : {b"": 1}}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d["a"] = {"abcF" : {"": 1}}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d["a"] = {"abcF" : FailingMapping()}:(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    d["a"] = {"abcF" : FailingMappingKey()}:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    d["a"] = {"abcF" : FailingNumber()}:(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing StringToChars using d["a"] = Mapping({%s : 1})
+    d["a"] = Mapping({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d["a"] = Mapping({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d["a"] = Mapping({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d["a"] = Mapping({"abcG" : {%s : 1}})
+    d["a"] = Mapping({"abcG" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d["a"] = Mapping({"abcG" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d["a"] = Mapping({"abcG" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d["a"] = Mapping({"abcG" : Mapping({%s : 1})})
+    d["a"] = Mapping({"abcG" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d["a"] = Mapping({"abcG" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d["a"] = Mapping({"abcG" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using d["a"] = Mapping({"abcG" : %s})
+    d["a"] = Mapping({"abcG" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    d["a"] = Mapping({"abcG" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d["a"] = Mapping({"abcG" : %s})
+    d["a"] = Mapping({"abcG" : None}):NOT FAILED
+    d["a"] = Mapping({"abcG" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d["a"] = Mapping({"abcG" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d["a"] = Mapping({"abcG" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    d["a"] = Mapping({"abcG" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    d["a"] = Mapping({"abcG" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing *Iter* using d["a"] = %s
+    d["a"] = FailingIter():(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    d["a"] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d["a"] = %s
+    d["a"] = None:NOT FAILED
+    d["a"] = {b"": 1}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d["a"] = {"": 1}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d["a"] = FailingMapping():(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    d["a"] = FailingMappingKey():(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    d["a"] = FailingNumber():(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >> DictionaryUpdate
+    >>> kwargs
+    >>> iter
+    d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    d.update([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    d.update([FailingIterNextN(1)]):(<class 'NotImplementedError'>, NotImplementedError('next N',))
+    >>> Testing *Iter* using d.update(%s)
+    d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+    d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing StringToChars using d.update({%s : 1})
+    d.update({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.update({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.update({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d.update({"abcF" : {%s : 1}})
+    d.update({"abcF" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.update({"abcF" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.update({"abcF" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d.update({"abcF" : Mapping({%s : 1})})
+    d.update({"abcF" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.update({"abcF" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.update({"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using d.update({"abcF" : %s})
+    d.update({"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    d.update({"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d.update({"abcF" : %s})
+    d.update({"abcF" : None}):NOT FAILED
+    d.update({"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d.update({"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d.update({"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    d.update({"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    d.update({"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing StringToChars using d.update(Mapping({%s : 1}))
+    d.update(Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.update(Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.update(Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d.update(Mapping({"abcG" : {%s : 1}}))
+    d.update(Mapping({"abcG" : {1 : 1}})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.update(Mapping({"abcG" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.update(Mapping({"abcG" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d.update(Mapping({"abcG" : Mapping({%s : 1})}))
+    d.update(Mapping({"abcG" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.update(Mapping({"abcG" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.update(Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using d.update(Mapping({"abcG" : %s}))
+    d.update(Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    d.update(Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d.update(Mapping({"abcG" : %s}))
+    d.update(Mapping({"abcG" : None})):NOT FAILED
+    d.update(Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d.update(Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d.update(Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    d.update(Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    d.update(Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing *Iter* using d.update(%s)
+    d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+    d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d.update(%s)
+    d.update(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",))
+    d.update({b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d.update({"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    d.update(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    d.update(FailingNumber()):(<class 'TypeError'>, TypeError("'FailingNumber' object is not iterable",))
+    <<< Finished
+    >>> Testing StringToChars using d.update(((%s, 0),))
+    d.update(((1, 0),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.update(((b"\0", 0),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.update((("\0", 0),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d.update((("a", {%s : 1}),))
+    d.update((("a", {1 : 1}),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.update((("a", {b"\0" : 1}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.update((("a", {"\0" : 1}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d.update((("a", {"abcF" : {%s : 1}}),))
+    d.update((("a", {"abcF" : {1 : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.update((("a", {"abcF" : {b"\0" : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.update((("a", {"abcF" : {"\0" : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d.update((("a", {"abcF" : Mapping({%s : 1})}),))
+    d.update((("a", {"abcF" : Mapping({1 : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.update((("a", {"abcF" : Mapping({b"\0" : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.update((("a", {"abcF" : Mapping({"\0" : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using d.update((("a", {"abcF" : %s}),))
+    d.update((("a", {"abcF" : FailingIter()}),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    d.update((("a", {"abcF" : FailingIterNext()}),)):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d.update((("a", {"abcF" : %s}),))
+    d.update((("a", {"abcF" : None}),)):(<class 'vim.error'>, error("failed to add key 'a' to dictionary",))
+    d.update((("a", {"abcF" : {b"": 1}}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d.update((("a", {"abcF" : {"": 1}}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d.update((("a", {"abcF" : FailingMapping()}),)):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    d.update((("a", {"abcF" : FailingMappingKey()}),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    d.update((("a", {"abcF" : FailingNumber()}),)):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),))
+    d.update((("a", Mapping({1 : 1})),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.update((("a", Mapping({b"\0" : 1})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.update((("a", Mapping({"\0" : 1})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d.update((("a", Mapping({"abcG" : {%s : 1}})),))
+    d.update((("a", Mapping({"abcG" : {1 : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.update((("a", Mapping({"abcG" : {b"\0" : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.update((("a", Mapping({"abcG" : {"\0" : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using d.update((("a", Mapping({"abcG" : Mapping({%s : 1})})),))
+    d.update((("a", Mapping({"abcG" : Mapping({1 : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    d.update((("a", Mapping({"abcG" : Mapping({b"\0" : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    d.update((("a", Mapping({"abcG" : Mapping({"\0" : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using d.update((("a", Mapping({"abcG" : %s})),))
+    d.update((("a", Mapping({"abcG" : FailingIter()})),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abcG" : %s})),))
+    d.update((("a", Mapping({"abcG" : None})),)):(<class 'vim.error'>, error("failed to add key 'a' to dictionary",))
+    d.update((("a", Mapping({"abcG" : {b"": 1}})),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d.update((("a", Mapping({"abcG" : {"": 1}})),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d.update((("a", Mapping({"abcG" : FailingMapping()})),)):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    d.update((("a", Mapping({"abcG" : FailingNumber()})),)):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing *Iter* using d.update((("a", %s),))
+    d.update((("a", FailingIter()),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    d.update((("a", FailingIterNext()),)):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using d.update((("a", %s),))
+    d.update((("a", None),)):(<class 'vim.error'>, error("failed to add key 'a' to dictionary",))
+    d.update((("a", {b"": 1}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d.update((("a", {"": 1}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    d.update((("a", FailingMapping()),)):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    d.update((("a", FailingMappingKey()),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    d.update((("a", FailingNumber()),)):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >> DictionaryPopItem
+    d.popitem(1, 2):(<class 'TypeError'>, TypeError('popitem() takes no arguments (2 given)',))
+    >> DictionaryHasKey
+    d.has_key():(<class 'TypeError'>, TypeError('has_key() takes exactly one argument (0 given)',))
+    > List
+    >> ListConstructor
+    vim.List(1, 2):(<class 'TypeError'>, TypeError('function takes at most 1 argument (2 given)',))
+    vim.List(a=1):(<class 'TypeError'>, TypeError('list constructor does not accept keyword arguments',))
+    >>> Testing *Iter* using vim.List(%s)
+    vim.List(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+    vim.List(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing StringToChars using vim.List([{%s : 1}])
+    vim.List([{1 : 1}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    vim.List([{b"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    vim.List([{"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using vim.List([{"abcF" : {%s : 1}}])
+    vim.List([{"abcF" : {1 : 1}}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    vim.List([{"abcF" : {b"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    vim.List([{"abcF" : {"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using vim.List([{"abcF" : Mapping({%s : 1})}])
+    vim.List([{"abcF" : Mapping({1 : 1})}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    vim.List([{"abcF" : Mapping({b"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    vim.List([{"abcF" : Mapping({"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using vim.List([{"abcF" : %s}])
+    vim.List([{"abcF" : FailingIter()}]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    vim.List([{"abcF" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using vim.List([{"abcF" : %s}])
+    vim.List([{"abcF" : None}]):NOT FAILED
+    vim.List([{"abcF" : {b"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    vim.List([{"abcF" : {"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    vim.List([{"abcF" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    vim.List([{"abcF" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    vim.List([{"abcF" : FailingNumber()}]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing StringToChars using vim.List([Mapping({%s : 1})])
+    vim.List([Mapping({1 : 1})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    vim.List([Mapping({b"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    vim.List([Mapping({"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using vim.List([Mapping({"abcG" : {%s : 1}})])
+    vim.List([Mapping({"abcG" : {1 : 1}})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    vim.List([Mapping({"abcG" : {b"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    vim.List([Mapping({"abcG" : {"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using vim.List([Mapping({"abcG" : Mapping({%s : 1})})])
+    vim.List([Mapping({"abcG" : Mapping({1 : 1})})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    vim.List([Mapping({"abcG" : Mapping({b"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    vim.List([Mapping({"abcG" : Mapping({"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using vim.List([Mapping({"abcG" : %s})])
+    vim.List([Mapping({"abcG" : FailingIter()})]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    vim.List([Mapping({"abcG" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using vim.List([Mapping({"abcG" : %s})])
+    vim.List([Mapping({"abcG" : None})]):NOT FAILED
+    vim.List([Mapping({"abcG" : {b"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    vim.List([Mapping({"abcG" : {"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    vim.List([Mapping({"abcG" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    vim.List([Mapping({"abcG" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    vim.List([Mapping({"abcG" : FailingNumber()})]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing *Iter* using vim.List([%s])
+    vim.List([FailingIter()]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    vim.List([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using vim.List([%s])
+    vim.List([None]):NOT FAILED
+    vim.List([{b"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    vim.List([{"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    vim.List([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    vim.List([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    vim.List([FailingNumber()]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >> ListItem
+    l[1000]:(<class 'IndexError'>, IndexError('list index out of range',))
+    >> ListAssItem
+    ll[1] = 2:(<class 'vim.error'>, error('list is locked',))
+    l[1000] = 3:(<class 'IndexError'>, IndexError('list index out of range',))
+    >> ListAssSlice
+    ll[1:100] = "abcJ":(<class 'vim.error'>, error('list is locked',))
+    >>> Testing *Iter* using l[:] = %s
+    l[:] = FailingIter():(<class 'NotImplementedError'>, NotImplementedError('iter',))
+    l[:] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    nel[1:10:2]  = "abcK":(<class 'ValueError'>, ValueError('attempt to assign sequence of size greater than 2 to extended slice',))
+    (b'a', b'b', b'c', b'O')
+    nel[1:10:2]  = "a":(<class 'ValueError'>, ValueError('attempt to assign sequence of size 1 to extended slice of size 2',))
+    (b'a', b'b', b'c', b'O')
+    nel[1:1:-1]  = "a":(<class 'ValueError'>, ValueError('attempt to assign sequence of size greater than 0 to extended slice',))
+    (b'a', b'b', b'c', b'O')
+    nel[:] = FailingIterNextN(2):(<class 'NotImplementedError'>, NotImplementedError('next N',))
+    (b'a', b'b', b'c', b'O')
+    >>> Testing StringToChars using l[:] = [{%s : 1}]
+    l[:] = [{1 : 1}]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    l[:] = [{b"\0" : 1}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    l[:] = [{"\0" : 1}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using l[:] = [{"abcF" : {%s : 1}}]
+    l[:] = [{"abcF" : {1 : 1}}]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    l[:] = [{"abcF" : {b"\0" : 1}}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    l[:] = [{"abcF" : {"\0" : 1}}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using l[:] = [{"abcF" : Mapping({%s : 1})}]
+    l[:] = [{"abcF" : Mapping({1 : 1})}]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    l[:] = [{"abcF" : Mapping({b"\0" : 1})}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    l[:] = [{"abcF" : Mapping({"\0" : 1})}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using l[:] = [{"abcF" : %s}]
+    l[:] = [{"abcF" : FailingIter()}]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    l[:] = [{"abcF" : FailingIterNext()}]:(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using l[:] = [{"abcF" : %s}]
+    l[:] = [{"abcF" : None}]:NOT FAILED
+    l[:] = [{"abcF" : {b"": 1}}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    l[:] = [{"abcF" : {"": 1}}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    l[:] = [{"abcF" : FailingMapping()}]:(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    l[:] = [{"abcF" : FailingMappingKey()}]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    l[:] = [{"abcF" : FailingNumber()}]:(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing StringToChars using l[:] = [Mapping({%s : 1})]
+    l[:] = [Mapping({1 : 1})]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    l[:] = [Mapping({b"\0" : 1})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    l[:] = [Mapping({"\0" : 1})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using l[:] = [Mapping({"abcG" : {%s : 1}})]
+    l[:] = [Mapping({"abcG" : {1 : 1}})]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    l[:] = [Mapping({"abcG" : {b"\0" : 1}})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    l[:] = [Mapping({"abcG" : {"\0" : 1}})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using l[:] = [Mapping({"abcG" : Mapping({%s : 1})})]
+    l[:] = [Mapping({"abcG" : Mapping({1 : 1})})]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    l[:] = [Mapping({"abcG" : Mapping({b"\0" : 1})})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    l[:] = [Mapping({"abcG" : Mapping({"\0" : 1})})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using l[:] = [Mapping({"abcG" : %s})]
+    l[:] = [Mapping({"abcG" : FailingIter()})]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    l[:] = [Mapping({"abcG" : FailingIterNext()})]:(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using l[:] = [Mapping({"abcG" : %s})]
+    l[:] = [Mapping({"abcG" : None})]:NOT FAILED
+    l[:] = [Mapping({"abcG" : {b"": 1}})]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    l[:] = [Mapping({"abcG" : {"": 1}})]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    l[:] = [Mapping({"abcG" : FailingMapping()})]:(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    l[:] = [Mapping({"abcG" : FailingMappingKey()})]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    l[:] = [Mapping({"abcG" : FailingNumber()})]:(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing *Iter* using l[:] = [%s]
+    l[:] = [FailingIter()]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    l[:] = [FailingIterNext()]:(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using l[:] = [%s]
+    l[:] = [None]:NOT FAILED
+    l[:] = [{b"": 1}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    l[:] = [{"": 1}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    l[:] = [FailingMapping()]:(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    l[:] = [FailingMappingKey()]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    l[:] = [FailingNumber()]:(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >> ListConcatInPlace
+    >>> Testing *Iter* using l.extend(%s)
+    l.extend(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+    l.extend(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing StringToChars using l.extend([{%s : 1}])
+    l.extend([{1 : 1}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    l.extend([{b"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    l.extend([{"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using l.extend([{"abcF" : {%s : 1}}])
+    l.extend([{"abcF" : {1 : 1}}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    l.extend([{"abcF" : {b"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    l.extend([{"abcF" : {"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using l.extend([{"abcF" : Mapping({%s : 1})}])
+    l.extend([{"abcF" : Mapping({1 : 1})}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    l.extend([{"abcF" : Mapping({b"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    l.extend([{"abcF" : Mapping({"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using l.extend([{"abcF" : %s}])
+    l.extend([{"abcF" : FailingIter()}]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    l.extend([{"abcF" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using l.extend([{"abcF" : %s}])
+    l.extend([{"abcF" : None}]):NOT FAILED
+    l.extend([{"abcF" : {b"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    l.extend([{"abcF" : {"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    l.extend([{"abcF" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    l.extend([{"abcF" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    l.extend([{"abcF" : FailingNumber()}]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing StringToChars using l.extend([Mapping({%s : 1})])
+    l.extend([Mapping({1 : 1})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    l.extend([Mapping({b"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    l.extend([Mapping({"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using l.extend([Mapping({"abcG" : {%s : 1}})])
+    l.extend([Mapping({"abcG" : {1 : 1}})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    l.extend([Mapping({"abcG" : {b"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    l.extend([Mapping({"abcG" : {"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using l.extend([Mapping({"abcG" : Mapping({%s : 1})})])
+    l.extend([Mapping({"abcG" : Mapping({1 : 1})})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    l.extend([Mapping({"abcG" : Mapping({b"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    l.extend([Mapping({"abcG" : Mapping({"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using l.extend([Mapping({"abcG" : %s})])
+    l.extend([Mapping({"abcG" : FailingIter()})]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    l.extend([Mapping({"abcG" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using l.extend([Mapping({"abcG" : %s})])
+    l.extend([Mapping({"abcG" : None})]):NOT FAILED
+    l.extend([Mapping({"abcG" : {b"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    l.extend([Mapping({"abcG" : {"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    l.extend([Mapping({"abcG" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    l.extend([Mapping({"abcG" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    l.extend([Mapping({"abcG" : FailingNumber()})]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing *Iter* using l.extend([%s])
+    l.extend([FailingIter()]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    l.extend([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using l.extend([%s])
+    l.extend([None]):NOT FAILED
+    l.extend([{b"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    l.extend([{"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    l.extend([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    l.extend([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    l.extend([FailingNumber()]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >> ListSetattr
+    del l.locked:(<class 'AttributeError'>, AttributeError('cannot delete vim.List attributes',))
+    l.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError('bool',))
+    l.xxx = True:(<class 'AttributeError'>, AttributeError('cannot set attribute xxx',))
+    > Function
+    >> FunctionConstructor
+    >>> FunctionConstructor
+    vim.Function("123"):(<class 'ValueError'>, ValueError('unnamed function 123 does not exist',))
+    vim.Function("xxx_non_existent_function_xxx"):(<class 'ValueError'>, 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=[]):(<class 'ValueError'>, ValueError('function xxx_non_existent_function_xxx2 does not exist',))
+    vim.Function("xxx_non_existent_function_xxx3", self={}):(<class 'ValueError'>, ValueError('function xxx_non_existent_function_xxx3 does not exist',))
+    vim.Function("xxx_non_existent_function_xxx4", args=[], self={}):(<class 'ValueError'>, ValueError('function xxx_non_existent_function_xxx4 does not exist',))
+    >>> FunctionNew
+    vim.Function("tr", self="abcFuncSelf"):(<class 'AttributeError'>, AttributeError('keys',))
+    vim.Function("tr", args=427423):(<class 'TypeError'>, TypeError('unable to convert int to a Vim list',))
+    vim.Function("tr", self="abcFuncSelf2", args="abcFuncArgs2"):(<class 'AttributeError'>, AttributeError('keys',))
+    vim.Function(self="abcFuncSelf2", args="abcFuncArgs2"):(<class 'AttributeError'>, AttributeError('keys',))
+    vim.Function("tr", "", self="abcFuncSelf2", args="abcFuncArgs2"):(<class 'AttributeError'>, AttributeError('keys',))
+    vim.Function("tr", ""):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
+    >> FunctionCall
+    >>> Testing StringToChars using f({%s : 1})
+    f({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    f({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    f({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using f({"abcF" : {%s : 1}})
+    f({"abcF" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    f({"abcF" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    f({"abcF" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using f({"abcF" : Mapping({%s : 1})})
+    f({"abcF" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    f({"abcF" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    f({"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using f({"abcF" : %s})
+    f({"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    f({"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using f({"abcF" : %s})
+    f({"abcF" : None}):NOT FAILED
+    f({"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    f({"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    f({"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    f({"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    f({"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing StringToChars using f(Mapping({%s : 1}))
+    f(Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    f(Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    f(Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using f(Mapping({"abcG" : {%s : 1}}))
+    f(Mapping({"abcG" : {1 : 1}})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    f(Mapping({"abcG" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    f(Mapping({"abcG" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using f(Mapping({"abcG" : Mapping({%s : 1})}))
+    f(Mapping({"abcG" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    f(Mapping({"abcG" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    f(Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using f(Mapping({"abcG" : %s}))
+    f(Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    f(Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using f(Mapping({"abcG" : %s}))
+    f(Mapping({"abcG" : None})):NOT FAILED
+    f(Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    f(Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    f(Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    f(Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    f(Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing *Iter* using f(%s)
+    f(FailingIter()):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    f(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using f(%s)
+    f(None):NOT FAILED
+    f({b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    f({"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    f(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    f(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    f(FailingNumber()):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing StringToChars using fd(self={%s : 1})
+    fd(self={1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    fd(self={b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    fd(self={"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using fd(self={"abcF" : {%s : 1}})
+    fd(self={"abcF" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    fd(self={"abcF" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    fd(self={"abcF" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using fd(self={"abcF" : Mapping({%s : 1})})
+    fd(self={"abcF" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    fd(self={"abcF" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    fd(self={"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using fd(self={"abcF" : %s})
+    fd(self={"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    fd(self={"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using fd(self={"abcF" : %s})
+    fd(self={"abcF" : None}):NOT FAILED
+    fd(self={"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    fd(self={"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    fd(self={"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    fd(self={"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    fd(self={"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing StringToChars using fd(self=Mapping({%s : 1}))
+    fd(self=Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    fd(self=Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    fd(self=Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using fd(self=Mapping({"abcG" : {%s : 1}}))
+    fd(self=Mapping({"abcG" : {1 : 1}})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    fd(self=Mapping({"abcG" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    fd(self=Mapping({"abcG" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing StringToChars using fd(self=Mapping({"abcG" : Mapping({%s : 1})}))
+    fd(self=Mapping({"abcG" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    fd(self=Mapping({"abcG" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    fd(self=Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+    <<< Finished
+    >>> Testing *Iter* using fd(self=Mapping({"abcG" : %s}))
+    fd(self=Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim structure',))
+    fd(self=Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using fd(self=Mapping({"abcG" : %s}))
+    fd(self=Mapping({"abcG" : None})):NOT FAILED
+    fd(self=Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    fd(self=Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    fd(self=Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    fd(self=Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    fd(self=Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',))
+    <<< Finished
+    >>> Testing *Iter* using fd(self=%s)
+    fd(self=FailingIter()):(<class 'TypeError'>, TypeError('unable to convert FailingIter to a Vim dictionary',))
+    fd(self=FailingIterNext()):(<class 'TypeError'>, TypeError('unable to convert FailingIterNext to a Vim dictionary',))
+    <<< Finished
+    >>> Testing ConvertFromPyObject using fd(self=%s)
+    fd(self=None):(<class 'TypeError'>, TypeError('unable to convert NoneType to a Vim dictionary',))
+    fd(self={b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    fd(self={"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+    fd(self=FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+    fd(self=FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+    fd(self=FailingNumber()):(<class 'TypeError'>, TypeError('unable to convert FailingNumber to a Vim dictionary',))
+    <<< Finished
+    >>> Testing ConvertFromPyMapping using fd(self=%s)
+    fd(self=[]):(<class 'AttributeError'>, AttributeError('keys',))
+    <<< Finished
+    > TabPage
+    >> TabPageAttr
+    vim.current.tabpage.xxx:(<class 'AttributeError'>, AttributeError("'vim.tabpage' object has no attribute 'xxx'",))
+    > TabList
+    >> TabListItem
+    vim.tabpages[1000]:(<class 'IndexError'>, IndexError('no such tab page',))
+    > Window
+    >> WindowAttr
+    vim.current.window.xxx:(<class 'AttributeError'>, AttributeError("'vim.window' object has no attribute 'xxx'",))
+    >> WindowSetattr
+    vim.current.window.buffer = 0:(<class 'TypeError'>, TypeError('readonly attribute: buffer',))
+    vim.current.window.cursor = (100000000, 100000000):(<class 'vim.error'>, error('cursor position outside buffer',))
+    vim.current.window.cursor = True:(<class 'TypeError'>, TypeError('argument must be 2-item sequence, not bool',))
+    >>> Testing NumberToLong using vim.current.window.height = %s
+    vim.current.window.height = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+    vim.current.window.height = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+    vim.current.window.height = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
+    <<< Finished
+    >>> Testing NumberToLong using vim.current.window.width = %s
+    vim.current.window.width = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+    vim.current.window.width = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+    vim.current.window.width = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
+    <<< Finished
+    vim.current.window.xxxxxx = True:(<class 'AttributeError'>, AttributeError('xxxxxx',))
+    > WinList
+    >> WinListItem
+    vim.windows[1000]:(<class 'IndexError'>, IndexError('no such window',))
+    > Buffer
+    >> StringToLine (indirect)
+    vim.current.buffer[0] = "\na":(<class 'vim.error'>, error('string cannot contain newlines',))
+    vim.current.buffer[0] = b"\na":(<class 'vim.error'>, error('string cannot contain newlines',))
+    >> SetBufferLine (indirect)
+    vim.current.buffer[0] = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
+    >> SetBufferLineList (indirect)
+    vim.current.buffer[:] = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
+    vim.current.buffer[:] = ["\na", "bc"]:(<class 'vim.error'>, error('string cannot contain newlines',))
+    >> InsertBufferLines (indirect)
+    vim.current.buffer.append(None):(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
+    vim.current.buffer.append(["\na", "bc"]):(<class 'vim.error'>, error('string cannot contain newlines',))
+    vim.current.buffer.append("\nbc"):(<class 'vim.error'>, error('string cannot contain newlines',))
+    >> RBItem
+    vim.current.buffer[100000000]:(<class 'IndexError'>, IndexError('line number out of range',))
+    >> RBAsItem
+    vim.current.buffer[100000000] = "":(<class 'IndexError'>, IndexError('line number out of range',))
+    >> BufferAttr
+    vim.current.buffer.xxx:(<class 'AttributeError'>, AttributeError("'vim.buffer' object has no attribute 'xxx'",))
+    >> BufferSetattr
+    vim.current.buffer.name = True:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got bool',))
+    vim.current.buffer.xxx = True:(<class 'AttributeError'>, AttributeError('xxx',))
+    >> BufferMark
+    vim.current.buffer.mark(0):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+    vim.current.buffer.mark("abcM"):(<class 'ValueError'>, ValueError('mark name must be a single character',))
+    vim.current.buffer.mark("!"):(<class 'vim.error'>, error('invalid mark name',))
+    >> BufferRange
+    vim.current.buffer.range(1, 2, 3):(<class 'TypeError'>, TypeError('function takes exactly 2 arguments (3 given)',))
+    > BufMap
+    >> BufMapItem
+    vim.buffers[100000000]:(<class 'KeyError'>, KeyError(100000000,))
+    >>> Testing NumberToLong using vim.buffers[%s]
+    vim.buffers[[]]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+    vim.buffers[None]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+    vim.buffers[-1]:(<class 'ValueError'>, ValueError('number must be greater than zero',))
+    vim.buffers[0]:(<class 'ValueError'>, ValueError('number must be greater than zero',))
+    <<< Finished
+    > Current
+    >> CurrentGetattr
+    vim.current.xxx:(<class 'AttributeError'>, AttributeError("'vim.currentdata' object has no attribute 'xxx'",))
+    >> CurrentSetattr
+    vim.current.line = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
+    vim.current.buffer = True:(<class 'TypeError'>, TypeError('expected vim.Buffer object, but got bool',))
+    vim.current.window = True:(<class 'TypeError'>, TypeError('expected vim.Window object, but got bool',))
+    vim.current.tabpage = True:(<class 'TypeError'>, TypeError('expected vim.TabPage object, but got bool',))
+    vim.current.xxx = True:(<class 'AttributeError'>, AttributeError('xxx',))
+  END
+
+  call assert_equal(expected, getline(2, '$'))
+  close!
+endfunc
+
+" Test import
+func Test_python3_import()
+  new
+  py3 cb = vim.current.buffer
+
+  py3 << 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(os.path.relpath(path))
+    vim.foreach_rtp(callback)
+    cb.append(repr(l))
+    del l
+    def callback(path):
+        return os.path.relpath(path)
+    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(os.path.sep, '/')[-len('modulex/topmodule/__init__.py'):])
+    cb.append(tms.__file__.replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/__init__.py'):])
+    cb.append(tmsss.__file__.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
+    ['.']
+    '.'
+    3,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_python3_exception()
+  func Exe(e)
+    execute a:e
+  endfunc
+
+  new
+  py3 cb = vim.current.buffer
+
+  py3 << 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'"):(<class 'vim.error'>, error('abcN',))
+    Exe("throw 'def'"):(<class 'vim.error'>, error('def',))
+    vim.eval("Exe('throw ''ghi''')"):(<class 'vim.error'>, error('ghi',))
+    vim.eval("Exe('echoerr ''jkl''')"):(<class 'vim.error'>, error('Vim(echoerr):jkl',))
+    vim.eval("Exe('xxx_non_existent_command_xxx')"):(<class 'vim.error'>, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',))
+    vim.eval("xxx_unknown_function_xxx()"):(<class 'vim.error'>, error('Vim:E117: Unknown function: xxx_unknown_function_xxx',))
+    vim.bindeval("Exe('xxx_non_existent_command_xxx')"):(<class 'vim.error'>, 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_python3_keyboard_interrupt()
+  new
+  py3 cb = vim.current.buffer
+  py3 << 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! py3 test_keyboard_interrupt()
+  redir END
+  0 debuggreedy
+  call inputrestore()
+  py3 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
