# HG changeset patch # User Bram Moolenaar # Date 1369913321 -7200 # Node ID 4c46e1487c634997f4701d8e68ba9ab019f85227 # Parent de7b8aca1be2c278aea387d7e52c039c298597b1 updated for version 7.3.1066 Problem: Python: Insufficient exception and error testing. Solution: Python patch 25. (ZyX) diff --git a/src/testdir/test86.in b/src/testdir/test86.in --- a/src/testdir/test86.in +++ b/src/testdir/test86.in @@ -7,6 +7,7 @@ See http://svn.python.org/view/python/tr STARTTEST :so small.vim +:set encoding=latin1 :if !has('python') | e! test.ok | wq! test.out | endif :lang C :py import vim @@ -785,16 +786,277 @@ EOF :$put =string(pyeval('dl2')) :$put =string(pyeval('df(2)')) :" -:" Test exceptions -:fun Exe(e) -: execute a:e +:" Test errors +:fun F() dict +:endfun +:fun D() :endfun py << EOF def ee(expr, g=globals(), l=locals()): try: exec(expr, g, l) except: - cb.append(repr(sys.exc_info()[:2])) + cb.append(expr + ':' + repr(sys.exc_info()[:2])) + else: + cb.append(expr + ':NOT FAILED') +d = vim.Dictionary() +ned = vim.Dictionary(foo='bar', baz='abc') +dl = vim.Dictionary(a=1) +dl.locked = True +l = vim.List() +ll = vim.List('abc') +ll.locked = True +f = vim.Function('string') +fd = vim.Function('F') +fdel = vim.Function('D') +vim.command('delfunction D') + +def subexpr_test(expr, name, subexprs): + cb.append('>>> Testing %s using %s' % (name, expr)) + for subexpr in subexprs: + ee(expr % subexpr) + cb.append('<<< Finished') + +def stringtochars_test(expr): + return subexpr_test(expr, 'StringToChars', ( + '1', # Fail type checks + 'u"\\0"', # Fail PyString_AsStringAndSize(bytes, , NULL) check + '"\\0"', # Fail PyString_AsStringAndSize(object, , NULL) check + )) + +class Mapping(object): + def __init__(self, d): + self.d = d + + def __getitem__(self, key): + return self.d[key] + + def keys(self): + return self.d.keys() + + def items(self): + return self.d.items() + +def convertfrompyobject_test(expr, recurse=True): + # pydict_to_tv + stringtochars_test(expr % '{%s : 1}') + if recurse: + convertfrompyobject_test(expr % '{"abc" : %s}', False) + # pymap_to_tv + stringtochars_test(expr % 'Mapping({%s : 1})') + if recurse: + convertfrompyobject_test(expr % 'Mapping({"abc" : %s})', False) + # pyseq_to_tv + iter_test(expr) + return subexpr_test(expr, 'ConvertFromPyObject', ( + 'None', # Not conversible + '{"": 1}', # Empty key not allowed + 'FailingMapping()', # + 'FailingMappingKey()', # + )) + +def convertfrompymapping_test(expr): + convertfrompyobject_test(expr) + return subexpr_test(expr, 'ConvertFromPyMapping', ( + '[]', + )) + +def iter_test(expr): + return subexpr_test(expr, '*Iter*', ( + 'FailingIter()', + 'FailingIterNext()', + )) + +class FailingTrue(object): + def __nonzero__(self): + raise NotImplementedError + +class FailingIter(object): + def __iter__(self): + raise NotImplementedError + +class FailingIterNext(object): + def __iter__(self): + return self + + def next(self): + raise NotImplementedError + +class FailingMappingKey(object): + def __getitem__(self, item): + raise NotImplementedError + + def keys(self): + return list("abc") + +class FailingMapping(object): + def __getitem__(self): + raise NotImplementedError + + def keys(self): + raise NotImplementedError + +class FailingList(list): + def __getitem__(self, idx): + if i == 2: + raise NotImplementedError + else: + return super(FailingList, self).__getitem__(idx) + +cb.append("> Output") +cb.append(">> OutputSetattr") +ee('del sys.stdout.softspace') +ee('sys.stdout.softspace = []') +ee('sys.stdout.attr = None') +cb.append(">> OutputWrite") +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") +ee('vim.command(1)') +#! Not checked: vim->python exceptions translating: checked later +cb.append("> VimToPython") +#! Not checked: everything: needs errors in internal python functions +cb.append("> VimEval") +ee('vim.eval(1)') +#! Not checked: everything: needs errors in internal python functions +cb.append("> VimEvalPy") +ee('vim.bindeval(1)') +#! Not checked: vim->python exceptions translating: checked later +cb.append("> VimStrwidth") +ee('vim.strwidth(1)') +cb.append("> Dictionary") +cb.append(">> DictionaryConstructor") +ee('vim.Dictionary("abc")') +##! 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(">> DictionaryIterNext") +ee('for i in ned: ned["a"] = 1') +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()])') +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] = "abc"') +iter_test('l[:] = %s') +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") +ee('vim.Function("123")') +ee('vim.Function("xxx_non_existent_function_xxx")') +ee('vim.Function("xxx#non#existent#function#xxx")') +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 = (10000000000, 100000000)') +ee('vim.current.window.cursor = True') +ee('vim.current.window.height = "abc"') +ee('vim.current.window.width = "abc"') +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"') +cb.append(">> SetBufferLine (indirect)") +ee('vim.current.buffer[0] = True') +cb.append(">> SetBufferLines (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[10000000000]') +cb.append(">> RBAsItem") +ee('vim.current.buffer[10000000000] = ""') +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("abc")') +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[None]') +ee('vim.buffers[100000000]') +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') +EOF +:" +:" Test exceptions +:fun Exe(e) +: execute a:e +:endfun +py << EOF Exe = vim.bindeval('function("Exe")') ee('vim.command("throw \'abc\'")') ee('Exe("throw \'def\'")') diff --git a/src/testdir/test86.ok b/src/testdir/test86.ok --- a/src/testdir/test86.ok +++ b/src/testdir/test86.ok @@ -429,9 +429,653 @@ abc' ['a', 'b', 'c'] [2, 2] [2, 2] -(, error('abc',)) -(, error('def',)) -(, error('ghi',)) -(, error('Vim(echoerr):jkl',)) -(, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)) -(, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)) +> Output +>> OutputSetattr +del sys.stdout.softspace:(, AttributeError("can't delete OutputObject attributes",)) +sys.stdout.softspace = []:(, TypeError('softspace must be an integer',)) +sys.stdout.attr = None:(, AttributeError('invalid attribute',)) +>> OutputWrite +sys.stdout.write(None):(, TypeError('coercing to Unicode: need string or buffer, NoneType found',)) +>> OutputWriteLines +sys.stdout.writelines(None):(, TypeError("'NoneType' object is not iterable",)) +sys.stdout.writelines([1]):(, TypeError('writelines() requires list of strings',)) +>>> Testing *Iter* using sys.stdout.writelines(%s) +sys.stdout.writelines(FailingIter()):(, NotImplementedError()) +sys.stdout.writelines(FailingIterNext()):(, NotImplementedError()) +<<< Finished +> VimCommand +vim.command(1):(, TypeError('must be string, not int',)) +> VimToPython +> VimEval +vim.eval(1):(, TypeError('must be string, not int',)) +> VimEvalPy +vim.bindeval(1):(, TypeError('must be string, not int',)) +> VimStrwidth +vim.strwidth(1):(, TypeError('must be string, not int',)) +> Dictionary +>> DictionaryConstructor +vim.Dictionary("abc"):(, ValueError('expected sequence element of size 2',)) +>> DictionarySetattr +del d.locked:(, AttributeError('cannot delete vim.Dictionary attributes',)) +d.locked = FailingTrue():(, NotImplementedError()) +vim.vvars.locked = False:(, TypeError('cannot modify fixed dictionary',)) +d.scope = True:(, AttributeError('cannot set this attribute',)) +d.xxx = True:(, AttributeError('cannot set this attribute',)) +>> _DictionaryItem +d.get("a", 2, 3):(, TypeError('function takes at most 2 arguments (3 given)',)) +>>> Testing StringToChars using d.get(%s) +d.get(1):(, TypeError('object must be string',)) +d.get(u"\0"):(, TypeError('expected string without null bytes',)) +d.get("\0"):(, TypeError('expected string without null bytes',)) +<<< Finished +d.pop("a"):(, KeyError('a',)) +dl.pop("a"):(, error('dict is locked',)) +>> DictionaryIterNext +for i in ned: ned["a"] = 1:(, RuntimeError('hashtab changed during iteration',)) +>> DictionaryAssItem +dl["b"] = 1:(, error('dict is locked',)) +>>> Testing StringToChars using d[%s] = 1 +d[1] = 1:(, TypeError('object must be string',)) +d[u"\0"] = 1:(, TypeError('expected string without null bytes',)) +d["\0"] = 1:(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d["a"] = {%s : 1} +d["a"] = {1 : 1}:(, TypeError('object must be string',)) +d["a"] = {u"\0" : 1}:(, TypeError('expected string without null bytes',)) +d["a"] = {"\0" : 1}:(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d["a"] = {"abc" : {%s : 1}} +d["a"] = {"abc" : {1 : 1}}:(, TypeError('object must be string',)) +d["a"] = {"abc" : {u"\0" : 1}}:(, TypeError('expected string without null bytes',)) +d["a"] = {"abc" : {"\0" : 1}}:(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d["a"] = {"abc" : Mapping({%s : 1})} +d["a"] = {"abc" : Mapping({1 : 1})}:(, TypeError('object must be string',)) +d["a"] = {"abc" : Mapping({u"\0" : 1})}:(, TypeError('expected string without null bytes',)) +d["a"] = {"abc" : Mapping({"\0" : 1})}:(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using d["a"] = {"abc" : %s} +d["a"] = {"abc" : FailingIter()}:(, TypeError('unable to convert to vim structure',)) +d["a"] = {"abc" : FailingIterNext()}:(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d["a"] = {"abc" : %s} +d["a"] = {"abc" : None}:(, TypeError('unable to convert to vim structure',)) +d["a"] = {"abc" : {"": 1}}:(, ValueError('empty keys are not allowed',)) +d["a"] = {"abc" : FailingMapping()}:(, NotImplementedError()) +d["a"] = {"abc" : FailingMappingKey()}:(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using d["a"] = Mapping({%s : 1}) +d["a"] = Mapping({1 : 1}):(, TypeError('object must be string',)) +d["a"] = Mapping({u"\0" : 1}):(, TypeError('expected string without null bytes',)) +d["a"] = Mapping({"\0" : 1}):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d["a"] = Mapping({"abc" : {%s : 1}}) +d["a"] = Mapping({"abc" : {1 : 1}}):(, TypeError('object must be string',)) +d["a"] = Mapping({"abc" : {u"\0" : 1}}):(, TypeError('expected string without null bytes',)) +d["a"] = Mapping({"abc" : {"\0" : 1}}):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d["a"] = Mapping({"abc" : Mapping({%s : 1})}) +d["a"] = Mapping({"abc" : Mapping({1 : 1})}):(, TypeError('object must be string',)) +d["a"] = Mapping({"abc" : Mapping({u"\0" : 1})}):(, TypeError('expected string without null bytes',)) +d["a"] = Mapping({"abc" : Mapping({"\0" : 1})}):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using d["a"] = Mapping({"abc" : %s}) +d["a"] = Mapping({"abc" : FailingIter()}):(, TypeError('unable to convert to vim structure',)) +d["a"] = Mapping({"abc" : FailingIterNext()}):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d["a"] = Mapping({"abc" : %s}) +d["a"] = Mapping({"abc" : None}):(, TypeError('unable to convert to vim structure',)) +d["a"] = Mapping({"abc" : {"": 1}}):(, ValueError('empty keys are not allowed',)) +d["a"] = Mapping({"abc" : FailingMapping()}):(, NotImplementedError()) +d["a"] = Mapping({"abc" : FailingMappingKey()}):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using d["a"] = %s +d["a"] = FailingIter():(, TypeError('unable to convert to vim structure',)) +d["a"] = FailingIterNext():(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d["a"] = %s +d["a"] = None:(, TypeError('unable to convert to vim structure',)) +d["a"] = {"": 1}:(, ValueError('empty keys are not allowed',)) +d["a"] = FailingMapping():(, NotImplementedError()) +d["a"] = FailingMappingKey():(, NotImplementedError()) +<<< Finished +>> DictionaryUpdate +>>> kwargs +>>> iter +d.update(FailingMapping()):(, NotImplementedError()) +d.update([FailingIterNext()]):(, NotImplementedError()) +>>> Testing *Iter* using d.update(%s) +d.update(FailingIter()):(, NotImplementedError()) +d.update(FailingIterNext()):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using d.update({%s : 1}) +d.update({1 : 1}):(, TypeError('object must be string',)) +d.update({u"\0" : 1}):(, TypeError('expected string without null bytes',)) +d.update({"\0" : 1}):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d.update({"abc" : {%s : 1}}) +d.update({"abc" : {1 : 1}}):(, TypeError('object must be string',)) +d.update({"abc" : {u"\0" : 1}}):(, TypeError('expected string without null bytes',)) +d.update({"abc" : {"\0" : 1}}):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d.update({"abc" : Mapping({%s : 1})}) +d.update({"abc" : Mapping({1 : 1})}):(, TypeError('object must be string',)) +d.update({"abc" : Mapping({u"\0" : 1})}):(, TypeError('expected string without null bytes',)) +d.update({"abc" : Mapping({"\0" : 1})}):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using d.update({"abc" : %s}) +d.update({"abc" : FailingIter()}):(, TypeError('unable to convert to vim structure',)) +d.update({"abc" : FailingIterNext()}):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d.update({"abc" : %s}) +d.update({"abc" : None}):(, TypeError('unable to convert to vim structure',)) +d.update({"abc" : {"": 1}}):(, ValueError('empty keys are not allowed',)) +d.update({"abc" : FailingMapping()}):(, NotImplementedError()) +d.update({"abc" : FailingMappingKey()}):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using d.update(Mapping({%s : 1})) +d.update(Mapping({1 : 1})):(, TypeError('object must be string',)) +d.update(Mapping({u"\0" : 1})):(, TypeError('expected string without null bytes',)) +d.update(Mapping({"\0" : 1})):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d.update(Mapping({"abc" : {%s : 1}})) +d.update(Mapping({"abc" : {1 : 1}})):(, TypeError('object must be string',)) +d.update(Mapping({"abc" : {u"\0" : 1}})):(, TypeError('expected string without null bytes',)) +d.update(Mapping({"abc" : {"\0" : 1}})):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d.update(Mapping({"abc" : Mapping({%s : 1})})) +d.update(Mapping({"abc" : Mapping({1 : 1})})):(, TypeError('object must be string',)) +d.update(Mapping({"abc" : Mapping({u"\0" : 1})})):(, TypeError('expected string without null bytes',)) +d.update(Mapping({"abc" : Mapping({"\0" : 1})})):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using d.update(Mapping({"abc" : %s})) +d.update(Mapping({"abc" : FailingIter()})):(, TypeError('unable to convert to vim structure',)) +d.update(Mapping({"abc" : FailingIterNext()})):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d.update(Mapping({"abc" : %s})) +d.update(Mapping({"abc" : None})):(, TypeError('unable to convert to vim structure',)) +d.update(Mapping({"abc" : {"": 1}})):(, ValueError('empty keys are not allowed',)) +d.update(Mapping({"abc" : FailingMapping()})):(, NotImplementedError()) +d.update(Mapping({"abc" : FailingMappingKey()})):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using d.update(%s) +d.update(FailingIter()):(, NotImplementedError()) +d.update(FailingIterNext()):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d.update(%s) +d.update(None):(, TypeError("'NoneType' object is not iterable",)) +d.update({"": 1}):(, ValueError('empty keys are not allowed',)) +d.update(FailingMapping()):(, NotImplementedError()) +d.update(FailingMappingKey()):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using d.update(((%s, 0),)) +d.update(((1, 0),)):(, TypeError('object must be string',)) +d.update(((u"\0", 0),)):(, TypeError('expected string without null bytes',)) +d.update((("\0", 0),)):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d.update((("a", {%s : 1}),)) +d.update((("a", {1 : 1}),)):(, TypeError('object must be string',)) +d.update((("a", {u"\0" : 1}),)):(, TypeError('expected string without null bytes',)) +d.update((("a", {"\0" : 1}),)):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d.update((("a", {"abc" : {%s : 1}}),)) +d.update((("a", {"abc" : {1 : 1}}),)):(, TypeError('object must be string',)) +d.update((("a", {"abc" : {u"\0" : 1}}),)):(, TypeError('expected string without null bytes',)) +d.update((("a", {"abc" : {"\0" : 1}}),)):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d.update((("a", {"abc" : Mapping({%s : 1})}),)) +d.update((("a", {"abc" : Mapping({1 : 1})}),)):(, TypeError('object must be string',)) +d.update((("a", {"abc" : Mapping({u"\0" : 1})}),)):(, TypeError('expected string without null bytes',)) +d.update((("a", {"abc" : Mapping({"\0" : 1})}),)):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using d.update((("a", {"abc" : %s}),)) +d.update((("a", {"abc" : FailingIter()}),)):(, TypeError('unable to convert to vim structure',)) +d.update((("a", {"abc" : FailingIterNext()}),)):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d.update((("a", {"abc" : %s}),)) +d.update((("a", {"abc" : None}),)):(, TypeError('unable to convert to vim structure',)) +d.update((("a", {"abc" : {"": 1}}),)):(, ValueError('empty keys are not allowed',)) +d.update((("a", {"abc" : FailingMapping()}),)):(, NotImplementedError()) +d.update((("a", {"abc" : FailingMappingKey()}),)):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),)) +d.update((("a", Mapping({1 : 1})),)):(, TypeError('object must be string',)) +d.update((("a", Mapping({u"\0" : 1})),)):(, TypeError('expected string without null bytes',)) +d.update((("a", Mapping({"\0" : 1})),)):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d.update((("a", Mapping({"abc" : {%s : 1}})),)) +d.update((("a", Mapping({"abc" : {1 : 1}})),)):(, TypeError('object must be string',)) +d.update((("a", Mapping({"abc" : {u"\0" : 1}})),)):(, TypeError('expected string without null bytes',)) +d.update((("a", Mapping({"abc" : {"\0" : 1}})),)):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using d.update((("a", Mapping({"abc" : Mapping({%s : 1})})),)) +d.update((("a", Mapping({"abc" : Mapping({1 : 1})})),)):(, TypeError('object must be string',)) +d.update((("a", Mapping({"abc" : Mapping({u"\0" : 1})})),)):(, TypeError('expected string without null bytes',)) +d.update((("a", Mapping({"abc" : Mapping({"\0" : 1})})),)):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using d.update((("a", Mapping({"abc" : %s})),)) +d.update((("a", Mapping({"abc" : FailingIter()})),)):(, TypeError('unable to convert to vim structure',)) +d.update((("a", Mapping({"abc" : FailingIterNext()})),)):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abc" : %s})),)) +d.update((("a", Mapping({"abc" : None})),)):(, TypeError('unable to convert to vim structure',)) +d.update((("a", Mapping({"abc" : {"": 1}})),)):(, ValueError('empty keys are not allowed',)) +d.update((("a", Mapping({"abc" : FailingMapping()})),)):(, NotImplementedError()) +d.update((("a", Mapping({"abc" : FailingMappingKey()})),)):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using d.update((("a", %s),)) +d.update((("a", FailingIter()),)):(, TypeError('unable to convert to vim structure',)) +d.update((("a", FailingIterNext()),)):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d.update((("a", %s),)) +d.update((("a", None),)):(, TypeError('unable to convert to vim structure',)) +d.update((("a", {"": 1}),)):(, ValueError('empty keys are not allowed',)) +d.update((("a", FailingMapping()),)):(, NotImplementedError()) +d.update((("a", FailingMappingKey()),)):(, NotImplementedError()) +<<< Finished +>> DictionaryPopItem +d.popitem(1, 2):(, TypeError('function takes exactly 1 argument (2 given)',)) +>> DictionaryHasKey +d.has_key():(, TypeError('function takes exactly 1 argument (0 given)',)) +> List +>> ListConstructor +vim.List(1, 2):(, TypeError('function takes at most 1 argument (2 given)',)) +vim.List(a=1):(, TypeError('list constructor does not accept keyword arguments',)) +>>> Testing *Iter* using vim.List(%s) +vim.List(FailingIter()):(, NotImplementedError()) +vim.List(FailingIterNext()):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using vim.List([{%s : 1}]) +vim.List([{1 : 1}]):(, TypeError('object must be string',)) +vim.List([{u"\0" : 1}]):(, TypeError('expected string without null bytes',)) +vim.List([{"\0" : 1}]):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using vim.List([{"abc" : {%s : 1}}]) +vim.List([{"abc" : {1 : 1}}]):(, TypeError('object must be string',)) +vim.List([{"abc" : {u"\0" : 1}}]):(, TypeError('expected string without null bytes',)) +vim.List([{"abc" : {"\0" : 1}}]):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using vim.List([{"abc" : Mapping({%s : 1})}]) +vim.List([{"abc" : Mapping({1 : 1})}]):(, TypeError('object must be string',)) +vim.List([{"abc" : Mapping({u"\0" : 1})}]):(, TypeError('expected string without null bytes',)) +vim.List([{"abc" : Mapping({"\0" : 1})}]):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using vim.List([{"abc" : %s}]) +vim.List([{"abc" : FailingIter()}]):(, TypeError('unable to convert to vim structure',)) +vim.List([{"abc" : FailingIterNext()}]):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using vim.List([{"abc" : %s}]) +vim.List([{"abc" : None}]):(, TypeError('unable to convert to vim structure',)) +vim.List([{"abc" : {"": 1}}]):(, ValueError('empty keys are not allowed',)) +vim.List([{"abc" : FailingMapping()}]):(, NotImplementedError()) +vim.List([{"abc" : FailingMappingKey()}]):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using vim.List([Mapping({%s : 1})]) +vim.List([Mapping({1 : 1})]):(, TypeError('object must be string',)) +vim.List([Mapping({u"\0" : 1})]):(, TypeError('expected string without null bytes',)) +vim.List([Mapping({"\0" : 1})]):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using vim.List([Mapping({"abc" : {%s : 1}})]) +vim.List([Mapping({"abc" : {1 : 1}})]):(, TypeError('object must be string',)) +vim.List([Mapping({"abc" : {u"\0" : 1}})]):(, TypeError('expected string without null bytes',)) +vim.List([Mapping({"abc" : {"\0" : 1}})]):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using vim.List([Mapping({"abc" : Mapping({%s : 1})})]) +vim.List([Mapping({"abc" : Mapping({1 : 1})})]):(, TypeError('object must be string',)) +vim.List([Mapping({"abc" : Mapping({u"\0" : 1})})]):(, TypeError('expected string without null bytes',)) +vim.List([Mapping({"abc" : Mapping({"\0" : 1})})]):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using vim.List([Mapping({"abc" : %s})]) +vim.List([Mapping({"abc" : FailingIter()})]):(, TypeError('unable to convert to vim structure',)) +vim.List([Mapping({"abc" : FailingIterNext()})]):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using vim.List([Mapping({"abc" : %s})]) +vim.List([Mapping({"abc" : None})]):(, TypeError('unable to convert to vim structure',)) +vim.List([Mapping({"abc" : {"": 1}})]):(, ValueError('empty keys are not allowed',)) +vim.List([Mapping({"abc" : FailingMapping()})]):(, NotImplementedError()) +vim.List([Mapping({"abc" : FailingMappingKey()})]):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using vim.List([%s]) +vim.List([FailingIter()]):(, TypeError('unable to convert to vim structure',)) +vim.List([FailingIterNext()]):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using vim.List([%s]) +vim.List([None]):(, TypeError('unable to convert to vim structure',)) +vim.List([{"": 1}]):(, ValueError('empty keys are not allowed',)) +vim.List([FailingMapping()]):(, NotImplementedError()) +vim.List([FailingMappingKey()]):(, NotImplementedError()) +<<< Finished +>> ListItem +l[1000]:(, IndexError('list index out of range',)) +>> ListAssItem +ll[1] = 2:(, error('list is locked',)) +l[1000] = 3:(, IndexError('list index out of range',)) +>> ListAssSlice +ll[1:100] = "abc":(, error('list is locked',)) +>>> Testing *Iter* using l[:] = %s +l[:] = FailingIter():(, NotImplementedError()) +l[:] = FailingIterNext():(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using l[:] = [{%s : 1}] +l[:] = [{1 : 1}]:(, TypeError('object must be string',)) +l[:] = [{u"\0" : 1}]:(, TypeError('expected string without null bytes',)) +l[:] = [{"\0" : 1}]:(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using l[:] = [{"abc" : {%s : 1}}] +l[:] = [{"abc" : {1 : 1}}]:(, TypeError('object must be string',)) +l[:] = [{"abc" : {u"\0" : 1}}]:(, TypeError('expected string without null bytes',)) +l[:] = [{"abc" : {"\0" : 1}}]:(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using l[:] = [{"abc" : Mapping({%s : 1})}] +l[:] = [{"abc" : Mapping({1 : 1})}]:(, TypeError('object must be string',)) +l[:] = [{"abc" : Mapping({u"\0" : 1})}]:(, TypeError('expected string without null bytes',)) +l[:] = [{"abc" : Mapping({"\0" : 1})}]:(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using l[:] = [{"abc" : %s}] +l[:] = [{"abc" : FailingIter()}]:(, TypeError('unable to convert to vim structure',)) +l[:] = [{"abc" : FailingIterNext()}]:(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using l[:] = [{"abc" : %s}] +l[:] = [{"abc" : None}]:(, TypeError('unable to convert to vim structure',)) +l[:] = [{"abc" : {"": 1}}]:(, ValueError('empty keys are not allowed',)) +l[:] = [{"abc" : FailingMapping()}]:(, NotImplementedError()) +l[:] = [{"abc" : FailingMappingKey()}]:(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using l[:] = [Mapping({%s : 1})] +l[:] = [Mapping({1 : 1})]:(, TypeError('object must be string',)) +l[:] = [Mapping({u"\0" : 1})]:(, TypeError('expected string without null bytes',)) +l[:] = [Mapping({"\0" : 1})]:(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using l[:] = [Mapping({"abc" : {%s : 1}})] +l[:] = [Mapping({"abc" : {1 : 1}})]:(, TypeError('object must be string',)) +l[:] = [Mapping({"abc" : {u"\0" : 1}})]:(, TypeError('expected string without null bytes',)) +l[:] = [Mapping({"abc" : {"\0" : 1}})]:(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using l[:] = [Mapping({"abc" : Mapping({%s : 1})})] +l[:] = [Mapping({"abc" : Mapping({1 : 1})})]:(, TypeError('object must be string',)) +l[:] = [Mapping({"abc" : Mapping({u"\0" : 1})})]:(, TypeError('expected string without null bytes',)) +l[:] = [Mapping({"abc" : Mapping({"\0" : 1})})]:(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using l[:] = [Mapping({"abc" : %s})] +l[:] = [Mapping({"abc" : FailingIter()})]:(, TypeError('unable to convert to vim structure',)) +l[:] = [Mapping({"abc" : FailingIterNext()})]:(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using l[:] = [Mapping({"abc" : %s})] +l[:] = [Mapping({"abc" : None})]:(, TypeError('unable to convert to vim structure',)) +l[:] = [Mapping({"abc" : {"": 1}})]:(, ValueError('empty keys are not allowed',)) +l[:] = [Mapping({"abc" : FailingMapping()})]:(, NotImplementedError()) +l[:] = [Mapping({"abc" : FailingMappingKey()})]:(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using l[:] = [%s] +l[:] = [FailingIter()]:(, TypeError('unable to convert to vim structure',)) +l[:] = [FailingIterNext()]:(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using l[:] = [%s] +l[:] = [None]:(, TypeError('unable to convert to vim structure',)) +l[:] = [{"": 1}]:(, ValueError('empty keys are not allowed',)) +l[:] = [FailingMapping()]:(, NotImplementedError()) +l[:] = [FailingMappingKey()]:(, NotImplementedError()) +<<< Finished +>> ListConcatInPlace +>>> Testing *Iter* using l.extend(%s) +l.extend(FailingIter()):(, NotImplementedError()) +l.extend(FailingIterNext()):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using l.extend([{%s : 1}]) +l.extend([{1 : 1}]):(, TypeError('object must be string',)) +l.extend([{u"\0" : 1}]):(, TypeError('expected string without null bytes',)) +l.extend([{"\0" : 1}]):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using l.extend([{"abc" : {%s : 1}}]) +l.extend([{"abc" : {1 : 1}}]):(, TypeError('object must be string',)) +l.extend([{"abc" : {u"\0" : 1}}]):(, TypeError('expected string without null bytes',)) +l.extend([{"abc" : {"\0" : 1}}]):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using l.extend([{"abc" : Mapping({%s : 1})}]) +l.extend([{"abc" : Mapping({1 : 1})}]):(, TypeError('object must be string',)) +l.extend([{"abc" : Mapping({u"\0" : 1})}]):(, TypeError('expected string without null bytes',)) +l.extend([{"abc" : Mapping({"\0" : 1})}]):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using l.extend([{"abc" : %s}]) +l.extend([{"abc" : FailingIter()}]):(, TypeError('unable to convert to vim structure',)) +l.extend([{"abc" : FailingIterNext()}]):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using l.extend([{"abc" : %s}]) +l.extend([{"abc" : None}]):(, TypeError('unable to convert to vim structure',)) +l.extend([{"abc" : {"": 1}}]):(, ValueError('empty keys are not allowed',)) +l.extend([{"abc" : FailingMapping()}]):(, NotImplementedError()) +l.extend([{"abc" : FailingMappingKey()}]):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using l.extend([Mapping({%s : 1})]) +l.extend([Mapping({1 : 1})]):(, TypeError('object must be string',)) +l.extend([Mapping({u"\0" : 1})]):(, TypeError('expected string without null bytes',)) +l.extend([Mapping({"\0" : 1})]):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using l.extend([Mapping({"abc" : {%s : 1}})]) +l.extend([Mapping({"abc" : {1 : 1}})]):(, TypeError('object must be string',)) +l.extend([Mapping({"abc" : {u"\0" : 1}})]):(, TypeError('expected string without null bytes',)) +l.extend([Mapping({"abc" : {"\0" : 1}})]):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using l.extend([Mapping({"abc" : Mapping({%s : 1})})]) +l.extend([Mapping({"abc" : Mapping({1 : 1})})]):(, TypeError('object must be string',)) +l.extend([Mapping({"abc" : Mapping({u"\0" : 1})})]):(, TypeError('expected string without null bytes',)) +l.extend([Mapping({"abc" : Mapping({"\0" : 1})})]):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using l.extend([Mapping({"abc" : %s})]) +l.extend([Mapping({"abc" : FailingIter()})]):(, TypeError('unable to convert to vim structure',)) +l.extend([Mapping({"abc" : FailingIterNext()})]):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using l.extend([Mapping({"abc" : %s})]) +l.extend([Mapping({"abc" : None})]):(, TypeError('unable to convert to vim structure',)) +l.extend([Mapping({"abc" : {"": 1}})]):(, ValueError('empty keys are not allowed',)) +l.extend([Mapping({"abc" : FailingMapping()})]):(, NotImplementedError()) +l.extend([Mapping({"abc" : FailingMappingKey()})]):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using l.extend([%s]) +l.extend([FailingIter()]):(, TypeError('unable to convert to vim structure',)) +l.extend([FailingIterNext()]):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using l.extend([%s]) +l.extend([None]):(, TypeError('unable to convert to vim structure',)) +l.extend([{"": 1}]):(, ValueError('empty keys are not allowed',)) +l.extend([FailingMapping()]):(, NotImplementedError()) +l.extend([FailingMappingKey()]):(, NotImplementedError()) +<<< Finished +>> ListSetattr +del l.locked:(, AttributeError('cannot delete vim.List attributes',)) +l.locked = FailingTrue():(, NotImplementedError()) +l.xxx = True:(, AttributeError('cannot set this attribute',)) +> Function +>> FunctionConstructor +vim.Function("123"):(, ValueError('unnamed function does not exist',)) +vim.Function("xxx_non_existent_function_xxx"):(, ValueError('function does not exist',)) +vim.Function("xxx#non#existent#function#xxx"):(, ValueError('function does not exist',)) +>> FunctionCall +>>> Testing StringToChars using f({%s : 1}) +f({1 : 1}):(, TypeError('object must be string',)) +f({u"\0" : 1}):(, TypeError('expected string without null bytes',)) +f({"\0" : 1}):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using f({"abc" : {%s : 1}}) +f({"abc" : {1 : 1}}):(, TypeError('object must be string',)) +f({"abc" : {u"\0" : 1}}):(, TypeError('expected string without null bytes',)) +f({"abc" : {"\0" : 1}}):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using f({"abc" : Mapping({%s : 1})}) +f({"abc" : Mapping({1 : 1})}):(, TypeError('object must be string',)) +f({"abc" : Mapping({u"\0" : 1})}):(, TypeError('expected string without null bytes',)) +f({"abc" : Mapping({"\0" : 1})}):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using f({"abc" : %s}) +f({"abc" : FailingIter()}):(, TypeError('unable to convert to vim structure',)) +f({"abc" : FailingIterNext()}):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using f({"abc" : %s}) +f({"abc" : None}):(, TypeError('unable to convert to vim structure',)) +f({"abc" : {"": 1}}):(, ValueError('empty keys are not allowed',)) +f({"abc" : FailingMapping()}):(, NotImplementedError()) +f({"abc" : FailingMappingKey()}):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using f(Mapping({%s : 1})) +f(Mapping({1 : 1})):(, TypeError('object must be string',)) +f(Mapping({u"\0" : 1})):(, TypeError('expected string without null bytes',)) +f(Mapping({"\0" : 1})):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using f(Mapping({"abc" : {%s : 1}})) +f(Mapping({"abc" : {1 : 1}})):(, TypeError('object must be string',)) +f(Mapping({"abc" : {u"\0" : 1}})):(, TypeError('expected string without null bytes',)) +f(Mapping({"abc" : {"\0" : 1}})):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using f(Mapping({"abc" : Mapping({%s : 1})})) +f(Mapping({"abc" : Mapping({1 : 1})})):(, TypeError('object must be string',)) +f(Mapping({"abc" : Mapping({u"\0" : 1})})):(, TypeError('expected string without null bytes',)) +f(Mapping({"abc" : Mapping({"\0" : 1})})):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using f(Mapping({"abc" : %s})) +f(Mapping({"abc" : FailingIter()})):(, TypeError('unable to convert to vim structure',)) +f(Mapping({"abc" : FailingIterNext()})):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using f(Mapping({"abc" : %s})) +f(Mapping({"abc" : None})):(, TypeError('unable to convert to vim structure',)) +f(Mapping({"abc" : {"": 1}})):(, ValueError('empty keys are not allowed',)) +f(Mapping({"abc" : FailingMapping()})):(, NotImplementedError()) +f(Mapping({"abc" : FailingMappingKey()})):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using f(%s) +f(FailingIter()):(, TypeError('unable to convert to vim structure',)) +f(FailingIterNext()):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using f(%s) +f(None):(, TypeError('unable to convert to vim structure',)) +f({"": 1}):(, ValueError('empty keys are not allowed',)) +f(FailingMapping()):(, NotImplementedError()) +f(FailingMappingKey()):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using fd(self={%s : 1}) +fd(self={1 : 1}):(, TypeError('object must be string',)) +fd(self={u"\0" : 1}):(, TypeError('expected string without null bytes',)) +fd(self={"\0" : 1}):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using fd(self={"abc" : {%s : 1}}) +fd(self={"abc" : {1 : 1}}):(, TypeError('object must be string',)) +fd(self={"abc" : {u"\0" : 1}}):(, TypeError('expected string without null bytes',)) +fd(self={"abc" : {"\0" : 1}}):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using fd(self={"abc" : Mapping({%s : 1})}) +fd(self={"abc" : Mapping({1 : 1})}):(, TypeError('object must be string',)) +fd(self={"abc" : Mapping({u"\0" : 1})}):(, TypeError('expected string without null bytes',)) +fd(self={"abc" : Mapping({"\0" : 1})}):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using fd(self={"abc" : %s}) +fd(self={"abc" : FailingIter()}):(, TypeError('unable to convert to vim structure',)) +fd(self={"abc" : FailingIterNext()}):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using fd(self={"abc" : %s}) +fd(self={"abc" : None}):(, TypeError('unable to convert to vim structure',)) +fd(self={"abc" : {"": 1}}):(, ValueError('empty keys are not allowed',)) +fd(self={"abc" : FailingMapping()}):(, NotImplementedError()) +fd(self={"abc" : FailingMappingKey()}):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using fd(self=Mapping({%s : 1})) +fd(self=Mapping({1 : 1})):(, TypeError('object must be string',)) +fd(self=Mapping({u"\0" : 1})):(, TypeError('expected string without null bytes',)) +fd(self=Mapping({"\0" : 1})):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using fd(self=Mapping({"abc" : {%s : 1}})) +fd(self=Mapping({"abc" : {1 : 1}})):(, TypeError('object must be string',)) +fd(self=Mapping({"abc" : {u"\0" : 1}})):(, TypeError('expected string without null bytes',)) +fd(self=Mapping({"abc" : {"\0" : 1}})):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing StringToChars using fd(self=Mapping({"abc" : Mapping({%s : 1})})) +fd(self=Mapping({"abc" : Mapping({1 : 1})})):(, TypeError('object must be string',)) +fd(self=Mapping({"abc" : Mapping({u"\0" : 1})})):(, TypeError('expected string without null bytes',)) +fd(self=Mapping({"abc" : Mapping({"\0" : 1})})):(, TypeError('expected string without null bytes',)) +<<< Finished +>>> Testing *Iter* using fd(self=Mapping({"abc" : %s})) +fd(self=Mapping({"abc" : FailingIter()})):(, TypeError('unable to convert to vim structure',)) +fd(self=Mapping({"abc" : FailingIterNext()})):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using fd(self=Mapping({"abc" : %s})) +fd(self=Mapping({"abc" : None})):(, TypeError('unable to convert to vim structure',)) +fd(self=Mapping({"abc" : {"": 1}})):(, ValueError('empty keys are not allowed',)) +fd(self=Mapping({"abc" : FailingMapping()})):(, NotImplementedError()) +fd(self=Mapping({"abc" : FailingMappingKey()})):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using fd(self=%s) +fd(self=FailingIter()):(, TypeError('unable to convert object to vim dictionary',)) +fd(self=FailingIterNext()):(, TypeError('unable to convert object to vim dictionary',)) +<<< Finished +>>> Testing ConvertFromPyObject using fd(self=%s) +fd(self=None):(, TypeError('unable to convert object to vim dictionary',)) +fd(self={"": 1}):(, ValueError('empty keys are not allowed',)) +fd(self=FailingMapping()):(, NotImplementedError()) +fd(self=FailingMappingKey()):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyMapping using fd(self=%s) +fd(self=[]):(, TypeError('unable to convert object to vim dictionary',)) +<<< Finished +> TabPage +>> TabPageAttr +vim.current.tabpage.xxx:(, AttributeError('xxx',)) +> TabList +>> TabListItem +vim.tabpages[1000]:(, IndexError('no such tab page',)) +> Window +>> WindowAttr +vim.current.window.xxx:(, AttributeError('xxx',)) +>> WindowSetattr +vim.current.window.buffer = 0:(, TypeError('readonly attribute',)) +vim.current.window.cursor = (10000000000, 100000000):(, error('cursor position outside buffer',)) +vim.current.window.cursor = True:(, TypeError('argument must be 2-item sequence, not bool',)) +vim.current.window.height = "abc":(, TypeError('an integer is required',)) +vim.current.window.width = "abc":(, TypeError('an integer is required',)) +vim.current.window.xxxxxx = True:(, AttributeError('xxxxxx',)) +> WinList +>> WinListItem +vim.windows[1000]:(, IndexError('no such window',)) +> Buffer +>> StringToLine (indirect) +vim.current.buffer[0] = "\na":(, error('string cannot contain newlines',)) +>> SetBufferLine (indirect) +vim.current.buffer[0] = True:(, TypeError('bad argument type for built-in operation',)) +>> SetBufferLines (indirect) +vim.current.buffer[:] = True:(, TypeError('bad argument type for built-in operation',)) +vim.current.buffer[:] = ["\na", "bc"]:(, error('string cannot contain newlines',)) +>> InsertBufferLines (indirect) +vim.current.buffer.append(None):(, TypeError('bad argument type for built-in operation',)) +vim.current.buffer.append(["\na", "bc"]):(, error('string cannot contain newlines',)) +vim.current.buffer.append("\nbc"):(, error('string cannot contain newlines',)) +>> RBItem +vim.current.buffer[10000000000]:(, IndexError('line number out of range',)) +>> RBAsItem +vim.current.buffer[10000000000] = "":(, IndexError('line number out of range',)) +>> BufferAttr +vim.current.buffer.xxx:(, AttributeError('xxx',)) +>> BufferSetattr +vim.current.buffer.name = True:(, TypeError('object must be string',)) +vim.current.buffer.xxx = True:(, AttributeError('xxx',)) +>> BufferMark +vim.current.buffer.mark(0):(, TypeError('must be string, not int',)) +vim.current.buffer.mark("abc"):(, ValueError('mark name must be a single character',)) +vim.current.buffer.mark("!"):(, error('invalid mark name',)) +>> BufferRange +vim.current.buffer.range(1, 2, 3):(, TypeError('function takes exactly 2 arguments (3 given)',)) +> BufMap +>> BufMapItem +vim.buffers[None]:(, TypeError('key must be integer',)) +vim.buffers[100000000]:(, KeyError(100000000,)) +> Current +>> CurrentGetattr +vim.current.xxx:(, AttributeError('xxx',)) +>> CurrentSetattr +vim.current.line = True:(, TypeError('bad argument type for built-in operation',)) +vim.current.buffer = True:(, TypeError('expected vim.Buffer object',)) +vim.current.window = True:(, TypeError('expected vim.Window object',)) +vim.current.tabpage = True:(, TypeError('expected vim.TabPage object',)) +vim.current.xxx = True:(, AttributeError('xxx',)) +vim.command("throw 'abc'"):(, error('abc',)) +Exe("throw 'def'"):(, error('def',)) +vim.eval("Exe('throw ''ghi''')"):(, error('ghi',)) +vim.eval("Exe('echoerr ''jkl''')"):(, error('Vim(echoerr):jkl',)) +vim.eval("Exe('xxx_non_existent_command_xxx')"):(, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)) +vim.bindeval("Exe('xxx_non_existent_command_xxx')"):(, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)) diff --git a/src/testdir/test87.in b/src/testdir/test87.in --- a/src/testdir/test87.in +++ b/src/testdir/test87.in @@ -746,16 +746,281 @@ EOF :$put =string(py3eval('dl2')) :$put =string(py3eval('df(2)')) :" +:" Test errors +:fun F() dict +:endfun +:fun D() +:endfun +py3 << EOF +def ee(expr, g=globals(), l=locals()): + try: + try: + exec(expr, g, l) + except Exception as e: + cb.append(expr + ':' + repr((e.__class__, e))) + else: + cb.append(expr + ':NOT FAILED') + except Exception as e: + cb.append(expr + '::' + repr((e.__class__, e))) + +d = vim.Dictionary() +ned = vim.Dictionary(foo='bar', baz='abc') +dl = vim.Dictionary(a=1) +dl.locked = True +l = vim.List() +ll = vim.List('abc') +ll.locked = True +f = vim.Function('string') +fd = vim.Function('F') +fdel = vim.Function('D') +vim.command('delfunction D') + +def subexpr_test(expr, name, subexprs): + cb.append('>>> Testing %s using %s' % (name, expr)) + for subexpr in subexprs: + ee(expr % subexpr) + cb.append('<<< Finished') + +def stringtochars_test(expr): + return subexpr_test(expr, 'StringToChars', ( + '1', # Fail type checks + 'u"\\0"', # Fail PyString_AsStringAndSize(bytes, , NULL) check + '"\\0"', # Fail PyString_AsStringAndSize(object, , NULL) check + )) + +class Mapping(object): + def __init__(self, d): + self.d = d + + def __getitem__(self, key): + return self.d[key] + + def keys(self): + return self.d.keys() + + def items(self): + return self.d.items() + +def convertfrompyobject_test(expr, recurse=True): + # pydict_to_tv + stringtochars_test(expr % '{%s : 1}') + if recurse: + convertfrompyobject_test(expr % '{"abc" : %s}', False) + # pymap_to_tv + stringtochars_test(expr % 'Mapping({%s : 1})') + if recurse: + convertfrompyobject_test(expr % 'Mapping({"abc" : %s})', False) + # pyseq_to_tv + iter_test(expr) + return subexpr_test(expr, 'ConvertFromPyObject', ( + 'None', # Not conversible + '{"": 1}', # Empty key not allowed + 'FailingMapping()', # + 'FailingMappingKey()', # + )) + +def convertfrompymapping_test(expr): + convertfrompyobject_test(expr) + return subexpr_test(expr, 'ConvertFromPyMapping', ( + '[]', + )) + +def iter_test(expr): + return subexpr_test(expr, '*Iter*', ( + 'FailingIter()', + 'FailingIterNext()', + )) + +class FailingTrue(object): + def __bool__(self): + raise NotImplementedError + +class FailingIter(object): + def __iter__(self): + raise NotImplementedError + +class FailingIterNext(object): + def __iter__(self): + return self + + def __next__(self): + raise NotImplementedError + +class FailingMappingKey(object): + def __getitem__(self, item): + raise NotImplementedError + + def keys(self): + return list("abc") + +class FailingMapping(object): + def __getitem__(self): + raise NotImplementedError + + def keys(self): + raise NotImplementedError + +class FailingList(list): + def __getitem__(self, idx): + if i == 2: + raise NotImplementedError + else: + return super(FailingList, self).__getitem__(idx) + +cb.append("> Output") +cb.append(">> OutputSetattr") +ee('del sys.stdout.softspace') +ee('sys.stdout.softspace = []') +ee('sys.stdout.attr = None') +cb.append(">> OutputWrite") +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") +ee('vim.command(1)') +#! Not checked: vim->python exceptions translating: checked later +cb.append("> VimToPython") +#! Not checked: everything: needs errors in internal python functions +cb.append("> VimEval") +ee('vim.eval(1)') +#! Not checked: everything: needs errors in internal python functions +cb.append("> VimEvalPy") +ee('vim.bindeval(1)') +#! Not checked: vim->python exceptions translating: checked later +cb.append("> VimStrwidth") +ee('vim.strwidth(1)') +cb.append("> Dictionary") +cb.append(">> DictionaryConstructor") +ee('vim.Dictionary("abc")') +##! 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(">> DictionaryIterNext") +ee('for i in ned: ned["a"] = 1') +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()])') +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] = "abc"') +iter_test('l[:] = %s') +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") +ee('vim.Function("123")') +ee('vim.Function("xxx_non_existent_function_xxx")') +ee('vim.Function("xxx#non#existent#function#xxx")') +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 = (10000000000, 100000000)') +ee('vim.current.window.cursor = True') +ee('vim.current.window.height = "abc"') +ee('vim.current.window.width = "abc"') +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"') +cb.append(">> SetBufferLine (indirect)") +ee('vim.current.buffer[0] = True') +cb.append(">> SetBufferLines (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[10000000000]') +cb.append(">> RBAsItem") +ee('vim.current.buffer[10000000000] = ""') +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("abc")') +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[None]') +ee('vim.buffers[100000000]') +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') +EOF +:" :" Test exceptions :fun Exe(e) : execute a:e :endfun py3 << EOF -def ee(expr, g=globals(), l=locals()): - try: - exec(expr, g, l) - except Exception as e: - cb.append(repr((e.__class__, e))) Exe = vim.bindeval('function("Exe")') ee('vim.command("throw \'abc\'")') ee('Exe("throw \'def\'")') diff --git a/src/testdir/test87.ok b/src/testdir/test87.ok --- a/src/testdir/test87.ok +++ b/src/testdir/test87.ok @@ -418,9 +418,653 @@ abc' ['a', 'b', 'c'] [2, 2] [2, 2] -(, error('abc',)) -(, error('def',)) -(, error('ghi',)) -(, error('Vim(echoerr):jkl',)) -(, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)) -(, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)) +> Output +>> OutputSetattr +del sys.stdout.softspace:(, AttributeError("can't delete OutputObject attributes",)) +sys.stdout.softspace = []:(, TypeError('softspace must be an integer',)) +sys.stdout.attr = None:(, AttributeError('invalid attribute',)) +>> OutputWrite +sys.stdout.write(None):(, TypeError("Can't convert 'NoneType' object to str implicitly",)) +>> OutputWriteLines +sys.stdout.writelines(None):(, TypeError("'NoneType' object is not iterable",)) +sys.stdout.writelines([1]):(, TypeError('writelines() requires list of strings',)) +>>> Testing *Iter* using sys.stdout.writelines(%s) +sys.stdout.writelines(FailingIter()):(, NotImplementedError()) +sys.stdout.writelines(FailingIterNext()):(, NotImplementedError()) +<<< Finished +> VimCommand +vim.command(1):(, TypeError('must be str, not int',)) +> VimToPython +> VimEval +vim.eval(1):(, TypeError('must be str, not int',)) +> VimEvalPy +vim.bindeval(1):(, TypeError('must be str, not int',)) +> VimStrwidth +vim.strwidth(1):(, TypeError('must be str, not int',)) +> Dictionary +>> DictionaryConstructor +vim.Dictionary("abc"):(, ValueError('expected sequence element of size 2',)) +>> DictionarySetattr +del d.locked:(, AttributeError('cannot delete vim.Dictionary attributes',)) +d.locked = FailingTrue():(, NotImplementedError()) +vim.vvars.locked = False:(, TypeError('cannot modify fixed dictionary',)) +d.scope = True:(, AttributeError('cannot set this attribute',)) +d.xxx = True:(, AttributeError('cannot set this attribute',)) +>> _DictionaryItem +d.get("a", 2, 3):(, TypeError('function takes at most 2 arguments (3 given)',)) +>>> Testing StringToChars using d.get(%s) +d.get(1):(, TypeError('object must be string',)) +d.get(u"\0"):(, TypeError('expected bytes with no null',)) +d.get("\0"):(, TypeError('expected bytes with no null',)) +<<< Finished +d.pop("a"):(, KeyError('a',)) +dl.pop("a"):(, error('dict is locked',)) +>> DictionaryIterNext +for i in ned: ned["a"] = 1:(, RuntimeError('hashtab changed during iteration',)) +>> DictionaryAssItem +dl["b"] = 1:(, error('dict is locked',)) +>>> Testing StringToChars using d[%s] = 1 +d[1] = 1:(, TypeError('object must be string',)) +d[u"\0"] = 1:(, TypeError('expected bytes with no null',)) +d["\0"] = 1:(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d["a"] = {%s : 1} +d["a"] = {1 : 1}:(, TypeError('object must be string',)) +d["a"] = {u"\0" : 1}:(, TypeError('expected bytes with no null',)) +d["a"] = {"\0" : 1}:(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d["a"] = {"abc" : {%s : 1}} +d["a"] = {"abc" : {1 : 1}}:(, TypeError('object must be string',)) +d["a"] = {"abc" : {u"\0" : 1}}:(, TypeError('expected bytes with no null',)) +d["a"] = {"abc" : {"\0" : 1}}:(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d["a"] = {"abc" : Mapping({%s : 1})} +d["a"] = {"abc" : Mapping({1 : 1})}:(, TypeError('object must be string',)) +d["a"] = {"abc" : Mapping({u"\0" : 1})}:(, TypeError('expected bytes with no null',)) +d["a"] = {"abc" : Mapping({"\0" : 1})}:(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using d["a"] = {"abc" : %s} +d["a"] = {"abc" : FailingIter()}:(, TypeError('unable to convert to vim structure',)) +d["a"] = {"abc" : FailingIterNext()}:(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d["a"] = {"abc" : %s} +d["a"] = {"abc" : None}:(, TypeError('unable to convert to vim structure',)) +d["a"] = {"abc" : {"": 1}}:(, ValueError('empty keys are not allowed',)) +d["a"] = {"abc" : FailingMapping()}:(, NotImplementedError()) +d["a"] = {"abc" : FailingMappingKey()}:(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using d["a"] = Mapping({%s : 1}) +d["a"] = Mapping({1 : 1}):(, TypeError('object must be string',)) +d["a"] = Mapping({u"\0" : 1}):(, TypeError('expected bytes with no null',)) +d["a"] = Mapping({"\0" : 1}):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d["a"] = Mapping({"abc" : {%s : 1}}) +d["a"] = Mapping({"abc" : {1 : 1}}):(, TypeError('object must be string',)) +d["a"] = Mapping({"abc" : {u"\0" : 1}}):(, TypeError('expected bytes with no null',)) +d["a"] = Mapping({"abc" : {"\0" : 1}}):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d["a"] = Mapping({"abc" : Mapping({%s : 1})}) +d["a"] = Mapping({"abc" : Mapping({1 : 1})}):(, TypeError('object must be string',)) +d["a"] = Mapping({"abc" : Mapping({u"\0" : 1})}):(, TypeError('expected bytes with no null',)) +d["a"] = Mapping({"abc" : Mapping({"\0" : 1})}):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using d["a"] = Mapping({"abc" : %s}) +d["a"] = Mapping({"abc" : FailingIter()}):(, TypeError('unable to convert to vim structure',)) +d["a"] = Mapping({"abc" : FailingIterNext()}):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d["a"] = Mapping({"abc" : %s}) +d["a"] = Mapping({"abc" : None}):(, TypeError('unable to convert to vim structure',)) +d["a"] = Mapping({"abc" : {"": 1}}):(, ValueError('empty keys are not allowed',)) +d["a"] = Mapping({"abc" : FailingMapping()}):(, NotImplementedError()) +d["a"] = Mapping({"abc" : FailingMappingKey()}):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using d["a"] = %s +d["a"] = FailingIter():(, TypeError('unable to convert to vim structure',)) +d["a"] = FailingIterNext():(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d["a"] = %s +d["a"] = None:(, TypeError('unable to convert to vim structure',)) +d["a"] = {"": 1}:(, ValueError('empty keys are not allowed',)) +d["a"] = FailingMapping():(, NotImplementedError()) +d["a"] = FailingMappingKey():(, NotImplementedError()) +<<< Finished +>> DictionaryUpdate +>>> kwargs +>>> iter +d.update(FailingMapping()):(, NotImplementedError()) +d.update([FailingIterNext()]):(, NotImplementedError()) +>>> Testing *Iter* using d.update(%s) +d.update(FailingIter()):(, NotImplementedError()) +d.update(FailingIterNext()):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using d.update({%s : 1}) +d.update({1 : 1}):(, TypeError('object must be string',)) +d.update({u"\0" : 1}):(, TypeError('expected bytes with no null',)) +d.update({"\0" : 1}):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d.update({"abc" : {%s : 1}}) +d.update({"abc" : {1 : 1}}):(, TypeError('object must be string',)) +d.update({"abc" : {u"\0" : 1}}):(, TypeError('expected bytes with no null',)) +d.update({"abc" : {"\0" : 1}}):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d.update({"abc" : Mapping({%s : 1})}) +d.update({"abc" : Mapping({1 : 1})}):(, TypeError('object must be string',)) +d.update({"abc" : Mapping({u"\0" : 1})}):(, TypeError('expected bytes with no null',)) +d.update({"abc" : Mapping({"\0" : 1})}):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using d.update({"abc" : %s}) +d.update({"abc" : FailingIter()}):(, TypeError('unable to convert to vim structure',)) +d.update({"abc" : FailingIterNext()}):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d.update({"abc" : %s}) +d.update({"abc" : None}):(, TypeError('unable to convert to vim structure',)) +d.update({"abc" : {"": 1}}):(, ValueError('empty keys are not allowed',)) +d.update({"abc" : FailingMapping()}):(, NotImplementedError()) +d.update({"abc" : FailingMappingKey()}):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using d.update(Mapping({%s : 1})) +d.update(Mapping({1 : 1})):(, TypeError('object must be string',)) +d.update(Mapping({u"\0" : 1})):(, TypeError('expected bytes with no null',)) +d.update(Mapping({"\0" : 1})):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d.update(Mapping({"abc" : {%s : 1}})) +d.update(Mapping({"abc" : {1 : 1}})):(, TypeError('object must be string',)) +d.update(Mapping({"abc" : {u"\0" : 1}})):(, TypeError('expected bytes with no null',)) +d.update(Mapping({"abc" : {"\0" : 1}})):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d.update(Mapping({"abc" : Mapping({%s : 1})})) +d.update(Mapping({"abc" : Mapping({1 : 1})})):(, TypeError('object must be string',)) +d.update(Mapping({"abc" : Mapping({u"\0" : 1})})):(, TypeError('expected bytes with no null',)) +d.update(Mapping({"abc" : Mapping({"\0" : 1})})):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using d.update(Mapping({"abc" : %s})) +d.update(Mapping({"abc" : FailingIter()})):(, TypeError('unable to convert to vim structure',)) +d.update(Mapping({"abc" : FailingIterNext()})):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d.update(Mapping({"abc" : %s})) +d.update(Mapping({"abc" : None})):(, TypeError('unable to convert to vim structure',)) +d.update(Mapping({"abc" : {"": 1}})):(, ValueError('empty keys are not allowed',)) +d.update(Mapping({"abc" : FailingMapping()})):(, NotImplementedError()) +d.update(Mapping({"abc" : FailingMappingKey()})):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using d.update(%s) +d.update(FailingIter()):(, NotImplementedError()) +d.update(FailingIterNext()):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d.update(%s) +d.update(None):(, TypeError("'NoneType' object is not iterable",)) +d.update({"": 1}):(, ValueError('empty keys are not allowed',)) +d.update(FailingMapping()):(, NotImplementedError()) +d.update(FailingMappingKey()):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using d.update(((%s, 0),)) +d.update(((1, 0),)):(, TypeError('object must be string',)) +d.update(((u"\0", 0),)):(, TypeError('expected bytes with no null',)) +d.update((("\0", 0),)):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d.update((("a", {%s : 1}),)) +d.update((("a", {1 : 1}),)):(, TypeError('object must be string',)) +d.update((("a", {u"\0" : 1}),)):(, TypeError('expected bytes with no null',)) +d.update((("a", {"\0" : 1}),)):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d.update((("a", {"abc" : {%s : 1}}),)) +d.update((("a", {"abc" : {1 : 1}}),)):(, TypeError('object must be string',)) +d.update((("a", {"abc" : {u"\0" : 1}}),)):(, TypeError('expected bytes with no null',)) +d.update((("a", {"abc" : {"\0" : 1}}),)):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d.update((("a", {"abc" : Mapping({%s : 1})}),)) +d.update((("a", {"abc" : Mapping({1 : 1})}),)):(, TypeError('object must be string',)) +d.update((("a", {"abc" : Mapping({u"\0" : 1})}),)):(, TypeError('expected bytes with no null',)) +d.update((("a", {"abc" : Mapping({"\0" : 1})}),)):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using d.update((("a", {"abc" : %s}),)) +d.update((("a", {"abc" : FailingIter()}),)):(, TypeError('unable to convert to vim structure',)) +d.update((("a", {"abc" : FailingIterNext()}),)):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d.update((("a", {"abc" : %s}),)) +d.update((("a", {"abc" : None}),)):(, TypeError('unable to convert to vim structure',)) +d.update((("a", {"abc" : {"": 1}}),)):(, ValueError('empty keys are not allowed',)) +d.update((("a", {"abc" : FailingMapping()}),)):(, NotImplementedError()) +d.update((("a", {"abc" : FailingMappingKey()}),)):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),)) +d.update((("a", Mapping({1 : 1})),)):(, TypeError('object must be string',)) +d.update((("a", Mapping({u"\0" : 1})),)):(, TypeError('expected bytes with no null',)) +d.update((("a", Mapping({"\0" : 1})),)):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d.update((("a", Mapping({"abc" : {%s : 1}})),)) +d.update((("a", Mapping({"abc" : {1 : 1}})),)):(, TypeError('object must be string',)) +d.update((("a", Mapping({"abc" : {u"\0" : 1}})),)):(, TypeError('expected bytes with no null',)) +d.update((("a", Mapping({"abc" : {"\0" : 1}})),)):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using d.update((("a", Mapping({"abc" : Mapping({%s : 1})})),)) +d.update((("a", Mapping({"abc" : Mapping({1 : 1})})),)):(, TypeError('object must be string',)) +d.update((("a", Mapping({"abc" : Mapping({u"\0" : 1})})),)):(, TypeError('expected bytes with no null',)) +d.update((("a", Mapping({"abc" : Mapping({"\0" : 1})})),)):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using d.update((("a", Mapping({"abc" : %s})),)) +d.update((("a", Mapping({"abc" : FailingIter()})),)):(, TypeError('unable to convert to vim structure',)) +d.update((("a", Mapping({"abc" : FailingIterNext()})),)):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abc" : %s})),)) +d.update((("a", Mapping({"abc" : None})),)):(, TypeError('unable to convert to vim structure',)) +d.update((("a", Mapping({"abc" : {"": 1}})),)):(, ValueError('empty keys are not allowed',)) +d.update((("a", Mapping({"abc" : FailingMapping()})),)):(, NotImplementedError()) +d.update((("a", Mapping({"abc" : FailingMappingKey()})),)):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using d.update((("a", %s),)) +d.update((("a", FailingIter()),)):(, TypeError('unable to convert to vim structure',)) +d.update((("a", FailingIterNext()),)):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using d.update((("a", %s),)) +d.update((("a", None),)):(, TypeError('unable to convert to vim structure',)) +d.update((("a", {"": 1}),)):(, ValueError('empty keys are not allowed',)) +d.update((("a", FailingMapping()),)):(, NotImplementedError()) +d.update((("a", FailingMappingKey()),)):(, NotImplementedError()) +<<< Finished +>> DictionaryPopItem +d.popitem(1, 2):(, TypeError('function takes exactly 1 argument (2 given)',)) +>> DictionaryHasKey +d.has_key():(, TypeError('function takes exactly 1 argument (0 given)',)) +> List +>> ListConstructor +vim.List(1, 2):(, TypeError('function takes at most 1 argument (2 given)',)) +vim.List(a=1):(, TypeError('list constructor does not accept keyword arguments',)) +>>> Testing *Iter* using vim.List(%s) +vim.List(FailingIter()):(, NotImplementedError()) +vim.List(FailingIterNext()):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using vim.List([{%s : 1}]) +vim.List([{1 : 1}]):(, TypeError('object must be string',)) +vim.List([{u"\0" : 1}]):(, TypeError('expected bytes with no null',)) +vim.List([{"\0" : 1}]):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using vim.List([{"abc" : {%s : 1}}]) +vim.List([{"abc" : {1 : 1}}]):(, TypeError('object must be string',)) +vim.List([{"abc" : {u"\0" : 1}}]):(, TypeError('expected bytes with no null',)) +vim.List([{"abc" : {"\0" : 1}}]):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using vim.List([{"abc" : Mapping({%s : 1})}]) +vim.List([{"abc" : Mapping({1 : 1})}]):(, TypeError('object must be string',)) +vim.List([{"abc" : Mapping({u"\0" : 1})}]):(, TypeError('expected bytes with no null',)) +vim.List([{"abc" : Mapping({"\0" : 1})}]):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using vim.List([{"abc" : %s}]) +vim.List([{"abc" : FailingIter()}]):(, TypeError('unable to convert to vim structure',)) +vim.List([{"abc" : FailingIterNext()}]):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using vim.List([{"abc" : %s}]) +vim.List([{"abc" : None}]):(, TypeError('unable to convert to vim structure',)) +vim.List([{"abc" : {"": 1}}]):(, ValueError('empty keys are not allowed',)) +vim.List([{"abc" : FailingMapping()}]):(, NotImplementedError()) +vim.List([{"abc" : FailingMappingKey()}]):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using vim.List([Mapping({%s : 1})]) +vim.List([Mapping({1 : 1})]):(, TypeError('object must be string',)) +vim.List([Mapping({u"\0" : 1})]):(, TypeError('expected bytes with no null',)) +vim.List([Mapping({"\0" : 1})]):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using vim.List([Mapping({"abc" : {%s : 1}})]) +vim.List([Mapping({"abc" : {1 : 1}})]):(, TypeError('object must be string',)) +vim.List([Mapping({"abc" : {u"\0" : 1}})]):(, TypeError('expected bytes with no null',)) +vim.List([Mapping({"abc" : {"\0" : 1}})]):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using vim.List([Mapping({"abc" : Mapping({%s : 1})})]) +vim.List([Mapping({"abc" : Mapping({1 : 1})})]):(, TypeError('object must be string',)) +vim.List([Mapping({"abc" : Mapping({u"\0" : 1})})]):(, TypeError('expected bytes with no null',)) +vim.List([Mapping({"abc" : Mapping({"\0" : 1})})]):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using vim.List([Mapping({"abc" : %s})]) +vim.List([Mapping({"abc" : FailingIter()})]):(, TypeError('unable to convert to vim structure',)) +vim.List([Mapping({"abc" : FailingIterNext()})]):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using vim.List([Mapping({"abc" : %s})]) +vim.List([Mapping({"abc" : None})]):(, TypeError('unable to convert to vim structure',)) +vim.List([Mapping({"abc" : {"": 1}})]):(, ValueError('empty keys are not allowed',)) +vim.List([Mapping({"abc" : FailingMapping()})]):(, NotImplementedError()) +vim.List([Mapping({"abc" : FailingMappingKey()})]):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using vim.List([%s]) +vim.List([FailingIter()]):(, TypeError('unable to convert to vim structure',)) +vim.List([FailingIterNext()]):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using vim.List([%s]) +vim.List([None]):(, TypeError('unable to convert to vim structure',)) +vim.List([{"": 1}]):(, ValueError('empty keys are not allowed',)) +vim.List([FailingMapping()]):(, NotImplementedError()) +vim.List([FailingMappingKey()]):(, NotImplementedError()) +<<< Finished +>> ListItem +l[1000]:(, IndexError('list index out of range',)) +>> ListAssItem +ll[1] = 2:(, error('list is locked',)) +l[1000] = 3:(, IndexError('list index out of range',)) +>> ListAssSlice +ll[1:100] = "abc":(, error('list is locked',)) +>>> Testing *Iter* using l[:] = %s +l[:] = FailingIter():(, NotImplementedError()) +l[:] = FailingIterNext()::(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using l[:] = [{%s : 1}] +l[:] = [{1 : 1}]:(, TypeError('object must be string',)) +l[:] = [{u"\0" : 1}]:(, TypeError('expected bytes with no null',)) +l[:] = [{"\0" : 1}]:(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using l[:] = [{"abc" : {%s : 1}}] +l[:] = [{"abc" : {1 : 1}}]:(, TypeError('object must be string',)) +l[:] = [{"abc" : {u"\0" : 1}}]:(, TypeError('expected bytes with no null',)) +l[:] = [{"abc" : {"\0" : 1}}]:(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using l[:] = [{"abc" : Mapping({%s : 1})}] +l[:] = [{"abc" : Mapping({1 : 1})}]:(, TypeError('object must be string',)) +l[:] = [{"abc" : Mapping({u"\0" : 1})}]:(, TypeError('expected bytes with no null',)) +l[:] = [{"abc" : Mapping({"\0" : 1})}]:(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using l[:] = [{"abc" : %s}] +l[:] = [{"abc" : FailingIter()}]:(, TypeError('unable to convert to vim structure',)) +l[:] = [{"abc" : FailingIterNext()}]:(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using l[:] = [{"abc" : %s}] +l[:] = [{"abc" : None}]:(, TypeError('unable to convert to vim structure',)) +l[:] = [{"abc" : {"": 1}}]:(, ValueError('empty keys are not allowed',)) +l[:] = [{"abc" : FailingMapping()}]:(, NotImplementedError()) +l[:] = [{"abc" : FailingMappingKey()}]:(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using l[:] = [Mapping({%s : 1})] +l[:] = [Mapping({1 : 1})]:(, TypeError('object must be string',)) +l[:] = [Mapping({u"\0" : 1})]:(, TypeError('expected bytes with no null',)) +l[:] = [Mapping({"\0" : 1})]:(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using l[:] = [Mapping({"abc" : {%s : 1}})] +l[:] = [Mapping({"abc" : {1 : 1}})]:(, TypeError('object must be string',)) +l[:] = [Mapping({"abc" : {u"\0" : 1}})]:(, TypeError('expected bytes with no null',)) +l[:] = [Mapping({"abc" : {"\0" : 1}})]:(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using l[:] = [Mapping({"abc" : Mapping({%s : 1})})] +l[:] = [Mapping({"abc" : Mapping({1 : 1})})]:(, TypeError('object must be string',)) +l[:] = [Mapping({"abc" : Mapping({u"\0" : 1})})]:(, TypeError('expected bytes with no null',)) +l[:] = [Mapping({"abc" : Mapping({"\0" : 1})})]:(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using l[:] = [Mapping({"abc" : %s})] +l[:] = [Mapping({"abc" : FailingIter()})]:(, TypeError('unable to convert to vim structure',)) +l[:] = [Mapping({"abc" : FailingIterNext()})]:(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using l[:] = [Mapping({"abc" : %s})] +l[:] = [Mapping({"abc" : None})]:(, TypeError('unable to convert to vim structure',)) +l[:] = [Mapping({"abc" : {"": 1}})]:(, ValueError('empty keys are not allowed',)) +l[:] = [Mapping({"abc" : FailingMapping()})]:(, NotImplementedError()) +l[:] = [Mapping({"abc" : FailingMappingKey()})]:(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using l[:] = [%s] +l[:] = [FailingIter()]:(, TypeError('unable to convert to vim structure',)) +l[:] = [FailingIterNext()]:(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using l[:] = [%s] +l[:] = [None]:(, TypeError('unable to convert to vim structure',)) +l[:] = [{"": 1}]:(, ValueError('empty keys are not allowed',)) +l[:] = [FailingMapping()]:(, NotImplementedError()) +l[:] = [FailingMappingKey()]:(, NotImplementedError()) +<<< Finished +>> ListConcatInPlace +>>> Testing *Iter* using l.extend(%s) +l.extend(FailingIter()):(, NotImplementedError()) +l.extend(FailingIterNext()):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using l.extend([{%s : 1}]) +l.extend([{1 : 1}]):(, TypeError('object must be string',)) +l.extend([{u"\0" : 1}]):(, TypeError('expected bytes with no null',)) +l.extend([{"\0" : 1}]):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using l.extend([{"abc" : {%s : 1}}]) +l.extend([{"abc" : {1 : 1}}]):(, TypeError('object must be string',)) +l.extend([{"abc" : {u"\0" : 1}}]):(, TypeError('expected bytes with no null',)) +l.extend([{"abc" : {"\0" : 1}}]):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using l.extend([{"abc" : Mapping({%s : 1})}]) +l.extend([{"abc" : Mapping({1 : 1})}]):(, TypeError('object must be string',)) +l.extend([{"abc" : Mapping({u"\0" : 1})}]):(, TypeError('expected bytes with no null',)) +l.extend([{"abc" : Mapping({"\0" : 1})}]):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using l.extend([{"abc" : %s}]) +l.extend([{"abc" : FailingIter()}]):(, TypeError('unable to convert to vim structure',)) +l.extend([{"abc" : FailingIterNext()}]):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using l.extend([{"abc" : %s}]) +l.extend([{"abc" : None}]):(, TypeError('unable to convert to vim structure',)) +l.extend([{"abc" : {"": 1}}]):(, ValueError('empty keys are not allowed',)) +l.extend([{"abc" : FailingMapping()}]):(, NotImplementedError()) +l.extend([{"abc" : FailingMappingKey()}]):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using l.extend([Mapping({%s : 1})]) +l.extend([Mapping({1 : 1})]):(, TypeError('object must be string',)) +l.extend([Mapping({u"\0" : 1})]):(, TypeError('expected bytes with no null',)) +l.extend([Mapping({"\0" : 1})]):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using l.extend([Mapping({"abc" : {%s : 1}})]) +l.extend([Mapping({"abc" : {1 : 1}})]):(, TypeError('object must be string',)) +l.extend([Mapping({"abc" : {u"\0" : 1}})]):(, TypeError('expected bytes with no null',)) +l.extend([Mapping({"abc" : {"\0" : 1}})]):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using l.extend([Mapping({"abc" : Mapping({%s : 1})})]) +l.extend([Mapping({"abc" : Mapping({1 : 1})})]):(, TypeError('object must be string',)) +l.extend([Mapping({"abc" : Mapping({u"\0" : 1})})]):(, TypeError('expected bytes with no null',)) +l.extend([Mapping({"abc" : Mapping({"\0" : 1})})]):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using l.extend([Mapping({"abc" : %s})]) +l.extend([Mapping({"abc" : FailingIter()})]):(, TypeError('unable to convert to vim structure',)) +l.extend([Mapping({"abc" : FailingIterNext()})]):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using l.extend([Mapping({"abc" : %s})]) +l.extend([Mapping({"abc" : None})]):(, TypeError('unable to convert to vim structure',)) +l.extend([Mapping({"abc" : {"": 1}})]):(, ValueError('empty keys are not allowed',)) +l.extend([Mapping({"abc" : FailingMapping()})]):(, NotImplementedError()) +l.extend([Mapping({"abc" : FailingMappingKey()})]):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using l.extend([%s]) +l.extend([FailingIter()]):(, TypeError('unable to convert to vim structure',)) +l.extend([FailingIterNext()]):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using l.extend([%s]) +l.extend([None]):(, TypeError('unable to convert to vim structure',)) +l.extend([{"": 1}]):(, ValueError('empty keys are not allowed',)) +l.extend([FailingMapping()]):(, NotImplementedError()) +l.extend([FailingMappingKey()]):(, NotImplementedError()) +<<< Finished +>> ListSetattr +del l.locked:(, AttributeError('cannot delete vim.List attributes',)) +l.locked = FailingTrue():(, NotImplementedError()) +l.xxx = True:(, AttributeError('cannot set this attribute',)) +> Function +>> FunctionConstructor +vim.Function("123"):(, ValueError('unnamed function does not exist',)) +vim.Function("xxx_non_existent_function_xxx"):(, ValueError('function does not exist',)) +vim.Function("xxx#non#existent#function#xxx"):(, ValueError('function does not exist',)) +>> FunctionCall +>>> Testing StringToChars using f({%s : 1}) +f({1 : 1}):(, TypeError('object must be string',)) +f({u"\0" : 1}):(, TypeError('expected bytes with no null',)) +f({"\0" : 1}):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using f({"abc" : {%s : 1}}) +f({"abc" : {1 : 1}}):(, TypeError('object must be string',)) +f({"abc" : {u"\0" : 1}}):(, TypeError('expected bytes with no null',)) +f({"abc" : {"\0" : 1}}):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using f({"abc" : Mapping({%s : 1})}) +f({"abc" : Mapping({1 : 1})}):(, TypeError('object must be string',)) +f({"abc" : Mapping({u"\0" : 1})}):(, TypeError('expected bytes with no null',)) +f({"abc" : Mapping({"\0" : 1})}):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using f({"abc" : %s}) +f({"abc" : FailingIter()}):(, TypeError('unable to convert to vim structure',)) +f({"abc" : FailingIterNext()}):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using f({"abc" : %s}) +f({"abc" : None}):(, TypeError('unable to convert to vim structure',)) +f({"abc" : {"": 1}}):(, ValueError('empty keys are not allowed',)) +f({"abc" : FailingMapping()}):(, NotImplementedError()) +f({"abc" : FailingMappingKey()}):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using f(Mapping({%s : 1})) +f(Mapping({1 : 1})):(, TypeError('object must be string',)) +f(Mapping({u"\0" : 1})):(, TypeError('expected bytes with no null',)) +f(Mapping({"\0" : 1})):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using f(Mapping({"abc" : {%s : 1}})) +f(Mapping({"abc" : {1 : 1}})):(, TypeError('object must be string',)) +f(Mapping({"abc" : {u"\0" : 1}})):(, TypeError('expected bytes with no null',)) +f(Mapping({"abc" : {"\0" : 1}})):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using f(Mapping({"abc" : Mapping({%s : 1})})) +f(Mapping({"abc" : Mapping({1 : 1})})):(, TypeError('object must be string',)) +f(Mapping({"abc" : Mapping({u"\0" : 1})})):(, TypeError('expected bytes with no null',)) +f(Mapping({"abc" : Mapping({"\0" : 1})})):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using f(Mapping({"abc" : %s})) +f(Mapping({"abc" : FailingIter()})):(, TypeError('unable to convert to vim structure',)) +f(Mapping({"abc" : FailingIterNext()})):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using f(Mapping({"abc" : %s})) +f(Mapping({"abc" : None})):(, TypeError('unable to convert to vim structure',)) +f(Mapping({"abc" : {"": 1}})):(, ValueError('empty keys are not allowed',)) +f(Mapping({"abc" : FailingMapping()})):(, NotImplementedError()) +f(Mapping({"abc" : FailingMappingKey()})):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using f(%s) +f(FailingIter()):(, TypeError('unable to convert to vim structure',)) +f(FailingIterNext()):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using f(%s) +f(None):(, TypeError('unable to convert to vim structure',)) +f({"": 1}):(, ValueError('empty keys are not allowed',)) +f(FailingMapping()):(, NotImplementedError()) +f(FailingMappingKey()):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using fd(self={%s : 1}) +fd(self={1 : 1}):(, TypeError('object must be string',)) +fd(self={u"\0" : 1}):(, TypeError('expected bytes with no null',)) +fd(self={"\0" : 1}):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using fd(self={"abc" : {%s : 1}}) +fd(self={"abc" : {1 : 1}}):(, TypeError('object must be string',)) +fd(self={"abc" : {u"\0" : 1}}):(, TypeError('expected bytes with no null',)) +fd(self={"abc" : {"\0" : 1}}):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using fd(self={"abc" : Mapping({%s : 1})}) +fd(self={"abc" : Mapping({1 : 1})}):(, TypeError('object must be string',)) +fd(self={"abc" : Mapping({u"\0" : 1})}):(, TypeError('expected bytes with no null',)) +fd(self={"abc" : Mapping({"\0" : 1})}):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using fd(self={"abc" : %s}) +fd(self={"abc" : FailingIter()}):(, TypeError('unable to convert to vim structure',)) +fd(self={"abc" : FailingIterNext()}):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using fd(self={"abc" : %s}) +fd(self={"abc" : None}):(, TypeError('unable to convert to vim structure',)) +fd(self={"abc" : {"": 1}}):(, ValueError('empty keys are not allowed',)) +fd(self={"abc" : FailingMapping()}):(, NotImplementedError()) +fd(self={"abc" : FailingMappingKey()}):(, NotImplementedError()) +<<< Finished +>>> Testing StringToChars using fd(self=Mapping({%s : 1})) +fd(self=Mapping({1 : 1})):(, TypeError('object must be string',)) +fd(self=Mapping({u"\0" : 1})):(, TypeError('expected bytes with no null',)) +fd(self=Mapping({"\0" : 1})):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using fd(self=Mapping({"abc" : {%s : 1}})) +fd(self=Mapping({"abc" : {1 : 1}})):(, TypeError('object must be string',)) +fd(self=Mapping({"abc" : {u"\0" : 1}})):(, TypeError('expected bytes with no null',)) +fd(self=Mapping({"abc" : {"\0" : 1}})):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing StringToChars using fd(self=Mapping({"abc" : Mapping({%s : 1})})) +fd(self=Mapping({"abc" : Mapping({1 : 1})})):(, TypeError('object must be string',)) +fd(self=Mapping({"abc" : Mapping({u"\0" : 1})})):(, TypeError('expected bytes with no null',)) +fd(self=Mapping({"abc" : Mapping({"\0" : 1})})):(, TypeError('expected bytes with no null',)) +<<< Finished +>>> Testing *Iter* using fd(self=Mapping({"abc" : %s})) +fd(self=Mapping({"abc" : FailingIter()})):(, TypeError('unable to convert to vim structure',)) +fd(self=Mapping({"abc" : FailingIterNext()})):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyObject using fd(self=Mapping({"abc" : %s})) +fd(self=Mapping({"abc" : None})):(, TypeError('unable to convert to vim structure',)) +fd(self=Mapping({"abc" : {"": 1}})):(, ValueError('empty keys are not allowed',)) +fd(self=Mapping({"abc" : FailingMapping()})):(, NotImplementedError()) +fd(self=Mapping({"abc" : FailingMappingKey()})):(, NotImplementedError()) +<<< Finished +>>> Testing *Iter* using fd(self=%s) +fd(self=FailingIter()):(, TypeError('unable to convert object to vim dictionary',)) +fd(self=FailingIterNext()):(, TypeError('unable to convert object to vim dictionary',)) +<<< Finished +>>> Testing ConvertFromPyObject using fd(self=%s) +fd(self=None):(, TypeError('unable to convert object to vim dictionary',)) +fd(self={"": 1}):(, ValueError('empty keys are not allowed',)) +fd(self=FailingMapping()):(, NotImplementedError()) +fd(self=FailingMappingKey()):(, NotImplementedError()) +<<< Finished +>>> Testing ConvertFromPyMapping using fd(self=%s) +fd(self=[]):(, AttributeError("'list' object has no attribute 'keys'",)) +<<< Finished +> TabPage +>> TabPageAttr +vim.current.tabpage.xxx:(, AttributeError("'vim.tabpage' object has no attribute 'xxx'",)) +> TabList +>> TabListItem +vim.tabpages[1000]:(, IndexError('no such tab page',)) +> Window +>> WindowAttr +vim.current.window.xxx:(, AttributeError("'vim.window' object has no attribute 'xxx'",)) +>> WindowSetattr +vim.current.window.buffer = 0:(, TypeError('readonly attribute',)) +vim.current.window.cursor = (10000000000, 100000000):(, error('cursor position outside buffer',)) +vim.current.window.cursor = True:(, TypeError('argument must be 2-item sequence, not bool',)) +vim.current.window.height = "abc":(, TypeError('an integer is required',)) +vim.current.window.width = "abc":(, TypeError('an integer is required',)) +vim.current.window.xxxxxx = True:(, AttributeError('xxxxxx',)) +> WinList +>> WinListItem +vim.windows[1000]:(, IndexError('no such window',)) +> Buffer +>> StringToLine (indirect) +vim.current.buffer[0] = "\na":(, error('string cannot contain newlines',)) +>> SetBufferLine (indirect) +vim.current.buffer[0] = True:(, TypeError('bad argument type for built-in operation',)) +>> SetBufferLines (indirect) +vim.current.buffer[:] = True:(, TypeError('bad argument type for built-in operation',)) +vim.current.buffer[:] = ["\na", "bc"]:(, error('string cannot contain newlines',)) +>> InsertBufferLines (indirect) +vim.current.buffer.append(None):(, TypeError('bad argument type for built-in operation',)) +vim.current.buffer.append(["\na", "bc"]):(, error('string cannot contain newlines',)) +vim.current.buffer.append("\nbc"):(, error('string cannot contain newlines',)) +>> RBItem +vim.current.buffer[10000000000]:(, IndexError('line number out of range',)) +>> RBAsItem +vim.current.buffer[10000000000] = "":(, IndexError('line number out of range',)) +>> BufferAttr +vim.current.buffer.xxx:(, AttributeError("'vim.buffer' object has no attribute 'xxx'",)) +>> BufferSetattr +vim.current.buffer.name = True:(, TypeError('object must be string',)) +vim.current.buffer.xxx = True:(, AttributeError('xxx',)) +>> BufferMark +vim.current.buffer.mark(0):(, TypeError('must be str, not int',)) +vim.current.buffer.mark("abc"):(, ValueError('mark name must be a single character',)) +vim.current.buffer.mark("!"):(, error('invalid mark name',)) +>> BufferRange +vim.current.buffer.range(1, 2, 3):(, TypeError('function takes exactly 2 arguments (3 given)',)) +> BufMap +>> BufMapItem +vim.buffers[None]:(, TypeError('key must be integer',)) +vim.buffers[100000000]:(, KeyError(100000000,)) +> Current +>> CurrentGetattr +vim.current.xxx:(, AttributeError("'vim.currentdata' object has no attribute 'xxx'",)) +>> CurrentSetattr +vim.current.line = True:(, TypeError('bad argument type for built-in operation',)) +vim.current.buffer = True:(, TypeError('expected vim.Buffer object',)) +vim.current.window = True:(, TypeError('expected vim.Window object',)) +vim.current.tabpage = True:(, TypeError('expected vim.TabPage object',)) +vim.current.xxx = True:(, AttributeError('xxx',)) +vim.command("throw 'abc'"):(, error('abc',)) +Exe("throw 'def'"):(, error('def',)) +vim.eval("Exe('throw ''ghi''')"):(, error('ghi',)) +vim.eval("Exe('echoerr ''jkl''')"):(, error('Vim(echoerr):jkl',)) +vim.eval("Exe('xxx_non_existent_command_xxx')"):(, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)) +vim.bindeval("Exe('xxx_non_existent_command_xxx')"):(, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1066, +/**/ 1065, /**/ 1064,