diff --git a/src/Makefile b/src/Makefile
index 9166662..2b10024 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -2308,7 +2308,6 @@
 	test42 test44 test49 \
 	test52 test59 \
 	test70 \
-	test87 \
 	test99:
 	cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
 
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index 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
diff --git a/src/version.c b/src/version.c
index 00aca2b..6908662 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1123,
+/**/
     1122,
 /**/
     1121,
