diff options
author | Bram Moolenaar <Bram@vim.org> | 2013-06-23 16:35:47 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2013-06-23 16:35:47 +0200 |
commit | dee2e315d786cbe9d5bba2d388fb72d96ad1a846 (patch) | |
tree | 3a8548edebc6f07c6b08a3d2017dcb877f351bb4 | |
parent | ede3e6383d0bc86c13f039e9013ff72e307937d2 (diff) | |
download | vim-git-dee2e315d786cbe9d5bba2d388fb72d96ad1a846.tar.gz |
updated for version 7.3.1236v7.3.1236
Problem: Python: WindowSetattr() missing support for NUMBER_UNSIGNED.
Solution: Add NUMBER_UNSIGNED, add more tests. Various fixes. (ZyX)
-rw-r--r-- | src/if_py_both.h | 26 | ||||
-rw-r--r-- | src/if_python.c | 3 | ||||
-rw-r--r-- | src/if_python3.c | 2 | ||||
-rw-r--r-- | src/testdir/pythonx/failing.py | 1 | ||||
-rw-r--r-- | src/testdir/pythonx/failing_import.py | 1 | ||||
-rw-r--r-- | src/testdir/pythonx/topmodule/__init__.py | 1 | ||||
-rw-r--r-- | src/testdir/pythonx/topmodule/submodule/__init__.py | 1 | ||||
-rw-r--r-- | src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py | 1 | ||||
-rw-r--r-- | src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py | 1 | ||||
-rw-r--r-- | src/testdir/test86.in | 119 | ||||
-rw-r--r-- | src/testdir/test86.ok | 258 | ||||
-rw-r--r-- | src/testdir/test87.in | 100 | ||||
-rw-r--r-- | src/testdir/test87.ok | 258 | ||||
-rw-r--r-- | src/version.c | 2 |
14 files changed, 549 insertions, 225 deletions
diff --git a/src/if_py_both.h b/src/if_py_both.h index 706794cc5..8f60550f9 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -1611,7 +1611,7 @@ DictionaryContains(DictionaryObject *self, PyObject *keyObject) ret = (rObj == Py_True); - Py_DECREF(Py_True); + Py_DECREF(rObj); return ret; } @@ -1910,7 +1910,7 @@ DictionaryUpdate(DictionaryObject *self, PyObject *args, PyObject *kwargs) PyErr_FORMAT(PyExc_ValueError, N_("expected sequence element of size 2, " "but got sequence of size %d"), - PySequence_Fast_GET_SIZE(fast)); + (int) PySequence_Fast_GET_SIZE(fast)); return NULL; } @@ -2435,6 +2435,10 @@ ListAssSlice(ListObject *self, Py_ssize_t first, Py_ssize_t last, PyObject *obj) clear_tv(&v); } Py_DECREF(iterator); + + if (PyErr_Occurred()) + return -1; + return 0; } @@ -3361,7 +3365,7 @@ WindowSetattr(WindowObject *self, char *name, PyObject *valObject) long height; win_T *savewin; - if (NumberToLong(valObject, &height, NUMBER_INT)) + if (NumberToLong(valObject, &height, NUMBER_INT|NUMBER_UNSIGNED)) return -1; #ifdef FEAT_GUI @@ -3384,7 +3388,7 @@ WindowSetattr(WindowObject *self, char *name, PyObject *valObject) long width; win_T *savewin; - if (NumberToLong(valObject, &width, NUMBER_INT)) + if (NumberToLong(valObject, &width, NUMBER_INT|NUMBER_UNSIGNED)) return -1; #ifdef FEAT_GUI @@ -3518,7 +3522,7 @@ StringToLine(PyObject *obj) char *str; char *save; PyObject *bytes = NULL; - Py_ssize_t len; + Py_ssize_t len = 0; PyInt i; char *p; @@ -5483,6 +5487,7 @@ _ConvertFromPyObject(PyObject *obj, typval_T *tv, PyObject *lookup_dict) #endif else if (PyObject_HasAttrString(obj, "keys")) return convert_dl(obj, tv, pymap_to_tv, lookup_dict); + /* PyObject_GetIter can create built-in iterator for any sequence object */ else if (PyIter_Check(obj) || PySequence_Check(obj)) return convert_dl(obj, tv, pyseq_to_tv, lookup_dict); else if (PyMapping_Check(obj)) @@ -5930,11 +5935,8 @@ static struct object_constant { {"_Loader", (PyObject *)&LoaderType}, }; -typedef int (*object_adder)(PyObject *, const char *, PyObject *); -typedef PyObject *(*attr_getter)(PyObject *, const char *); - #define ADD_OBJECT(m, name, obj) \ - if (add_object(m, name, obj)) \ + if (PyModule_AddObject(m, name, obj)) \ return -1; #define ADD_CHECKED_OBJECT(m, name, obj) \ @@ -5946,7 +5948,7 @@ typedef PyObject *(*attr_getter)(PyObject *, const char *); } static int -populate_module(PyObject *m, object_adder add_object, attr_getter get_attr) +populate_module(PyObject *m) { int i; PyObject *other_module; @@ -5990,7 +5992,7 @@ populate_module(PyObject *m, object_adder add_object, attr_getter get_attr) if (!(py_chdir = PyObject_GetAttrString(other_module, "chdir"))) return -1; ADD_OBJECT(m, "_chdir", py_chdir); - if (!(attr = get_attr(m, "chdir"))) + if (!(attr = PyObject_GetAttrString(m, "chdir"))) return -1; if (PyObject_SetAttrString(other_module, "chdir", attr)) { @@ -6002,7 +6004,7 @@ populate_module(PyObject *m, object_adder add_object, attr_getter get_attr) if ((py_fchdir = PyObject_GetAttrString(other_module, "fchdir"))) { ADD_OBJECT(m, "_fchdir", py_fchdir); - if (!(attr = get_attr(m, "fchdir"))) + if (!(attr = PyObject_GetAttrString(m, "fchdir"))) return -1; if (PyObject_SetAttrString(other_module, "fchdir", attr)) { diff --git a/src/if_python.c b/src/if_python.c index da2783889..d72dbfcb8 100644 --- a/src/if_python.c +++ b/src/if_python.c @@ -1404,8 +1404,7 @@ PythonMod_Init(void) vim_module = Py_InitModule4("vim", VimMethods, (char *)NULL, (PyObject *)NULL, PYTHON_API_VERSION); - if (populate_module(vim_module, PyModule_AddObject, - PyObject_GetAttrString)) + if (populate_module(vim_module)) return -1; if (init_sys_path()) diff --git a/src/if_python3.c b/src/if_python3.c index 3d9a5ee4c..badf015c2 100644 --- a/src/if_python3.c +++ b/src/if_python3.c @@ -1623,7 +1623,7 @@ Py3Init_vim(void) if ((vim_module = PyModule_Create(&vimmodule)) == NULL) return NULL; - if (populate_module(vim_module, PyModule_AddObject, PyObject_GetAttrString)) + if (populate_module(vim_module)) return NULL; if (init_sys_path()) diff --git a/src/testdir/pythonx/failing.py b/src/testdir/pythonx/failing.py new file mode 100644 index 000000000..30e73a045 --- /dev/null +++ b/src/testdir/pythonx/failing.py @@ -0,0 +1 @@ +raise NotImplementedError diff --git a/src/testdir/pythonx/failing_import.py b/src/testdir/pythonx/failing_import.py new file mode 100644 index 000000000..511cae7d7 --- /dev/null +++ b/src/testdir/pythonx/failing_import.py @@ -0,0 +1 @@ +raise ImportError diff --git a/src/testdir/pythonx/topmodule/__init__.py b/src/testdir/pythonx/topmodule/__init__.py new file mode 100644 index 000000000..792d60054 --- /dev/null +++ b/src/testdir/pythonx/topmodule/__init__.py @@ -0,0 +1 @@ +# diff --git a/src/testdir/pythonx/topmodule/submodule/__init__.py b/src/testdir/pythonx/topmodule/submodule/__init__.py new file mode 100644 index 000000000..792d60054 --- /dev/null +++ b/src/testdir/pythonx/topmodule/submodule/__init__.py @@ -0,0 +1 @@ +# diff --git a/src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py b/src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py new file mode 100644 index 000000000..792d60054 --- /dev/null +++ b/src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py @@ -0,0 +1 @@ +# diff --git a/src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py b/src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py new file mode 100644 index 000000000..792d60054 --- /dev/null +++ b/src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py @@ -0,0 +1 @@ +# diff --git a/src/testdir/test86.in b/src/testdir/test86.in index d8afc96d4..61b24ac8c 100644 --- a/src/testdir/test86.in +++ b/src/testdir/test86.in @@ -216,6 +216,7 @@ EOF :let messages=[] :delfunction DictNew py <<EOF +import sys d=vim.bindeval('{}') m=vim.bindeval('messages') def em(expr, g=globals(), l=locals()): @@ -297,7 +298,7 @@ EOF :" threading :let l = [0] :py l=vim.bindeval('l') -:py <<EOF +py <<EOF import threading import time @@ -327,7 +328,7 @@ EOF :" settrace :let l = [] :py l=vim.bindeval('l') -:py <<EOF +py <<EOF import sys def traceit(frame, event, arg): @@ -342,9 +343,9 @@ def trace_main(): EOF :py sys.settrace(traceit) :py trace_main() +:py sys.settrace(None) :py del traceit :py del trace_main -:py sys.settrace(None) :$put =string(l) :" :" Slice @@ -880,10 +881,16 @@ def ee(expr, g=globals(), l=locals()): if expr.find('None') > -1: msg = msg.replace('TypeError:(\'iteration over non-sequence\',)', 'TypeError:("\'NoneType\' object is not iterable",)') + if expr.find('FailingNumber') > -1: + msg = msg.replace(', not \'FailingNumber\'', '').replace('"', '\'') + msg = msg.replace('TypeError:(\'iteration over non-sequence\',)', + 'TypeError:("\'FailingNumber\' object is not iterable",)') + if msg.find('(\'\'') > -1 or msg.find('(\'can\'t') > -1: + msg = msg.replace('(\'', '("').replace('\',)', '",)') if expr == 'fd(self=[])': # HACK: PyMapping_Check changed meaning msg = msg.replace('AttributeError:(\'keys\',)', - 'TypeError:(\'unable to convert object to vim dictionary\',)') + 'TypeError:(\'unable to convert list to vim dictionary\',)') cb.append(expr + ':' + msg) else: cb.append(expr + ':NOT FAILED') @@ -942,6 +949,7 @@ def convertfrompyobject_test(expr, recurse=True): '{u"": 1}', # Same, but with unicode object 'FailingMapping()', # 'FailingMappingKey()', # + 'FailingNumber()', # )) def convertfrompymapping_test(expr): @@ -956,66 +964,104 @@ def iter_test(expr): 'FailingIterNext()', )) +def number_test(expr, natural=False, unsigned=False): + if natural: + unsigned = True + return subexpr_test(expr, 'NumberToLong', ( + '[]', + 'None', + ) + (unsigned and ('-1',) or ()) + + (natural and ('0',) or ())) + class FailingTrue(object): def __nonzero__(self): - raise NotImplementedError + raise NotImplementedError('bool') class FailingIter(object): def __iter__(self): - raise NotImplementedError + raise NotImplementedError('iter') class FailingIterNext(object): def __iter__(self): return self def next(self): - raise NotImplementedError + raise NotImplementedError('next') class FailingMappingKey(object): def __getitem__(self, item): - raise NotImplementedError + raise NotImplementedError('getitem:mappingkey') def keys(self): return list("abcH") class FailingMapping(object): def __getitem__(self): - raise NotImplementedError + raise NotImplementedError('getitem:mapping') def keys(self): - raise NotImplementedError + raise NotImplementedError('keys') class FailingList(list): def __getitem__(self, idx): if i == 2: - raise NotImplementedError + raise NotImplementedError('getitem:list') else: return super(FailingList, self).__getitem__(idx) +class NoArgsCall(object): + def __call__(self): + pass + +class FailingCall(object): + def __call__(self, path): + raise NotImplementedError('call') + +class FailingNumber(object): + def __int__(self): + raise NotImplementedError('int') + cb.append("> Output") cb.append(">> OutputSetattr") ee('del sys.stdout.softspace') -ee('sys.stdout.softspace = []') +number_test('sys.stdout.softspace = %s', unsigned=True) +number_test('sys.stderr.softspace = %s', unsigned=True) 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)') +iter_test('sys.stdout.writelines(%s)') cb.append("> VimCommand") -ee('vim.command(1)') +stringtochars_test('vim.command(%s)') +ee('vim.command("", 2)') #! Not checked: vim->python exceptions translating: checked later cb.append("> VimToPython") #! Not checked: everything: needs errors in internal python functions cb.append("> VimEval") -ee('vim.eval(1)') +stringtochars_test('vim.eval(%s)') +ee('vim.eval("", FailingTrue())') #! Not checked: everything: needs errors in internal python functions cb.append("> VimEvalPy") -ee('vim.bindeval(1)') +stringtochars_test('vim.bindeval(%s)') +ee('vim.eval("", 2)') #! Not checked: vim->python exceptions translating: checked later cb.append("> VimStrwidth") -ee('vim.strwidth(1)') +stringtochars_test('vim.strwidth(%s)') +cb.append("> VimForeachRTP") +ee('vim.foreach_rtp(None)') +ee('vim.foreach_rtp(NoArgsCall())') +ee('vim.foreach_rtp(FailingCall())') +ee('vim.foreach_rtp(int, 2)') +cb.append('> import') +old_rtp = vim.options['rtp'] +vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\') +ee('import xxx_no_such_module_xxx') +ee('import failing_import') +ee('import failing') +vim.options['rtp'] = old_rtp +del old_rtp cb.append("> Dictionary") cb.append(">> DictionaryConstructor") ee('vim.Dictionary("abcI")') @@ -1043,7 +1089,7 @@ cb.append(">>> kwargs") cb.append(">>> iter") ee('d.update(FailingMapping())') ee('d.update([FailingIterNext()])') -#iter_test('d.update(%s)') +iter_test('d.update(%s)') convertfrompyobject_test('d.update(%s)') stringtochars_test('d.update(((%s, 0),))') convertfrompyobject_test('d.update((("a", %s),))') @@ -1055,7 +1101,7 @@ cb.append("> List") cb.append(">> ListConstructor") ee('vim.List(1, 2)') ee('vim.List(a=1)') -#iter_test('vim.List(%s)') +iter_test('vim.List(%s)') convertfrompyobject_test('vim.List([%s])') cb.append(">> ListItem") ee('l[1000]') @@ -1064,10 +1110,10 @@ ee('ll[1] = 2') ee('l[1000] = 3') cb.append(">> ListAssSlice") ee('ll[1:100] = "abcJ"') -#iter_test('l[:] = %s') +iter_test('l[:] = %s') convertfrompyobject_test('l[:] = [%s]') cb.append(">> ListConcatInPlace") -#iter_test('l.extend(%s)') +iter_test('l.extend(%s)') convertfrompyobject_test('l.extend([%s])') cb.append(">> ListSetattr") ee('del l.locked') @@ -1094,14 +1140,15 @@ cb.append(">> WindowSetattr") ee('vim.current.window.buffer = 0') ee('vim.current.window.cursor = (100000000, 100000000)') ee('vim.current.window.cursor = True') -ee('vim.current.window.height = "abcK"') -ee('vim.current.window.width = "abcL"') +number_test('vim.current.window.height = %s', unsigned=True) +number_test('vim.current.window.width = %s', unsigned=True) ee('vim.current.window.xxxxxx = True') cb.append("> WinList") cb.append(">> WinListItem") ee('vim.windows[1000]') cb.append("> Buffer") cb.append(">> StringToLine (indirect)") +ee('vim.current.buffer[0] = u"\\na"') ee('vim.current.buffer[0] = "\\na"') cb.append(">> SetBufferLine (indirect)") ee('vim.current.buffer[0] = True') @@ -1129,8 +1176,8 @@ 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]') +number_test('vim.buffers[%s]', natural=True) cb.append("> Current") cb.append(">> CurrentGetattr") ee('vim.current.xxx') @@ -1154,12 +1201,16 @@ del Mapping del convertfrompyobject_test del convertfrompymapping_test del iter_test +del number_test del FailingTrue del FailingIter del FailingIterNext del FailingMapping del FailingMappingKey del FailingList +del NoArgsCall +del FailingCall +del FailingNumber EOF :delfunction F :" @@ -1168,6 +1219,16 @@ py << EOF sys.path.insert(0, os.path.join(os.getcwd(), 'python_before')) sys.path.append(os.path.join(os.getcwd(), 'python_after')) vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\') +l = [] +def callback(path): + l.append(path[-len('/testdir'):]) +vim.foreach_rtp(callback) +cb.append(repr(l)) +del l +def callback(path): + return path[-len('/testdir'):] +cb.append(repr(vim.foreach_rtp(callback))) +del callback from module import dir as d from modulex import ddir cb.append(d + ',' + ddir) @@ -1175,10 +1236,19 @@ import before cb.append(before.dir) import after cb.append(after.dir) +import topmodule as tm +import topmodule.submodule as tms +import topmodule.submodule.subsubmodule.subsubsubmodule as tmsss +cb.append(tm.__file__.replace('.pyc', '.py')[-len('modulex/topmodule/__init__.py'):]) +cb.append(tms.__file__.replace('.pyc', '.py')[-len('modulex/topmodule/submodule/__init__.py'):]) +cb.append(tmsss.__file__.replace('.pyc', '.py')[-len('modulex/topmodule/submodule/subsubmodule/subsubsubmodule.py'):]) del before del after del d del ddir +del tm +del tms +del tmsss EOF :" :" Test exceptions @@ -1232,6 +1302,7 @@ EOF :call garbagecollect(1) :" :/^start:/,$wq! test.out +:" vim: et ts=4 isk-=\: :call getchar() ENDTEST diff --git a/src/testdir/test86.ok b/src/testdir/test86.ok index b4abcc28c..6fdab0ccf 100644 --- a/src/testdir/test86.ok +++ b/src/testdir/test86.ok @@ -441,28 +441,69 @@ test86.in > Output >> OutputSetattr del sys.stdout.softspace:AttributeError:("can't delete OutputObject attributes",) +>>> Testing NumberToLong using sys.stdout.softspace = %s sys.stdout.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) +sys.stdout.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) +sys.stdout.softspace = -1:ValueError:('number must be greater or equal to zero',) +<<< Finished +>>> Testing NumberToLong using sys.stderr.softspace = %s +sys.stderr.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) +sys.stderr.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) +sys.stderr.softspace = -1:ValueError:('number must be greater or equal to zero',) +<<< Finished sys.stdout.attr = None:AttributeError:('invalid attribute: attr',) >> 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:('coercing to Unicode: need string or buffer, int found',) +>>> Testing *Iter* using sys.stdout.writelines(%s) +sys.stdout.writelines(FailingIter()):NotImplementedError:('iter',) +sys.stdout.writelines(FailingIterNext()):NotImplementedError:('next',) +<<< Finished > VimCommand +>>> Testing StringToChars using vim.command(%s) vim.command(1):TypeError:('expected str() or unicode() instance, but got int',) +vim.command(u"\0"):TypeError:('expected string without null bytes',) +vim.command("\0"):TypeError:('expected string without null bytes',) +<<< Finished +vim.command("", 2):TypeError:('command() takes exactly one argument (2 given)',) > VimToPython > VimEval +>>> Testing StringToChars using vim.eval(%s) vim.eval(1):TypeError:('expected str() or unicode() instance, but got int',) +vim.eval(u"\0"):TypeError:('expected string without null bytes',) +vim.eval("\0"):TypeError:('expected string without null bytes',) +<<< Finished +vim.eval("", FailingTrue()):TypeError:('function takes exactly 1 argument (2 given)',) > VimEvalPy +>>> Testing StringToChars using vim.bindeval(%s) vim.bindeval(1):TypeError:('expected str() or unicode() instance, but got int',) +vim.bindeval(u"\0"):TypeError:('expected string without null bytes',) +vim.bindeval("\0"):TypeError:('expected string without null bytes',) +<<< Finished +vim.eval("", 2):TypeError:('function takes exactly 1 argument (2 given)',) > VimStrwidth +>>> Testing StringToChars using vim.strwidth(%s) vim.strwidth(1):TypeError:('expected str() or unicode() instance, but got int',) +vim.strwidth(u"\0"):TypeError:('expected string without null bytes',) +vim.strwidth("\0"):TypeError:('expected string without null bytes',) +<<< Finished +> VimForeachRTP +vim.foreach_rtp(None):TypeError:("'NoneType' object is not callable",) +vim.foreach_rtp(NoArgsCall()):TypeError:('__call__() takes exactly 1 argument (2 given)',) +vim.foreach_rtp(FailingCall()):NotImplementedError:('call',) +vim.foreach_rtp(int, 2):TypeError:('foreach_rtp() takes exactly one argument (2 given)',) +> import +import xxx_no_such_module_xxx:ImportError:('No module named xxx_no_such_module_xxx',) +import failing_import:ImportError:('No module named failing_import',) +import failing:ImportError:('No module named failing',) > Dictionary >> DictionaryConstructor vim.Dictionary("abcI"):ValueError:('expected sequence element of size 2, but got sequence of size 1',) >> DictionarySetattr del d.locked:AttributeError:('cannot delete vim.Dictionary attributes',) -d.locked = FailingTrue():NotImplementedError:() +d.locked = FailingTrue():NotImplementedError:('bool',) vim.vvars.locked = False:TypeError:('cannot modify fixed dictionary',) d.scope = True:AttributeError:('cannot set attribute scope',) d.xxx = True:AttributeError:('cannot set attribute xxx',) @@ -501,14 +542,15 @@ d["a"] = {"abcF" : Mapping({"\0" : 1})}:TypeError:('expected string without null <<< Finished >>> Testing *Iter* using d["a"] = {"abcF" : %s} d["a"] = {"abcF" : FailingIter()}:TypeError:('unable to convert FailingIter to vim structure',) -d["a"] = {"abcF" : FailingIterNext()}:NotImplementedError:() +d["a"] = {"abcF" : FailingIterNext()}:NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using d["a"] = {"abcF" : %s} d["a"] = {"abcF" : None}:TypeError:('unable to convert NoneType to vim structure',) d["a"] = {"abcF" : {"": 1}}:ValueError:('empty keys are not allowed',) d["a"] = {"abcF" : {u"": 1}}:ValueError:('empty keys are not allowed',) -d["a"] = {"abcF" : FailingMapping()}:NotImplementedError:() -d["a"] = {"abcF" : FailingMappingKey()}:NotImplementedError:() +d["a"] = {"abcF" : FailingMapping()}:NotImplementedError:('keys',) +d["a"] = {"abcF" : FailingMappingKey()}:NotImplementedError:('getitem:mappingkey',) +d["a"] = {"abcF" : FailingNumber()}:TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing StringToChars using d["a"] = Mapping({%s : 1}) d["a"] = Mapping({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',) @@ -527,31 +569,37 @@ d["a"] = Mapping({"abcG" : Mapping({"\0" : 1})}):TypeError:('expected string wit <<< Finished >>> Testing *Iter* using d["a"] = Mapping({"abcG" : %s}) d["a"] = Mapping({"abcG" : FailingIter()}):TypeError:('unable to convert FailingIter to vim structure',) -d["a"] = Mapping({"abcG" : FailingIterNext()}):NotImplementedError:() +d["a"] = Mapping({"abcG" : FailingIterNext()}):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using d["a"] = Mapping({"abcG" : %s}) d["a"] = Mapping({"abcG" : None}):TypeError:('unable to convert NoneType to vim structure',) d["a"] = Mapping({"abcG" : {"": 1}}):ValueError:('empty keys are not allowed',) d["a"] = Mapping({"abcG" : {u"": 1}}):ValueError:('empty keys are not allowed',) -d["a"] = Mapping({"abcG" : FailingMapping()}):NotImplementedError:() -d["a"] = Mapping({"abcG" : FailingMappingKey()}):NotImplementedError:() +d["a"] = Mapping({"abcG" : FailingMapping()}):NotImplementedError:('keys',) +d["a"] = Mapping({"abcG" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',) +d["a"] = Mapping({"abcG" : FailingNumber()}):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing *Iter* using d["a"] = %s d["a"] = FailingIter():TypeError:('unable to convert FailingIter to vim structure',) -d["a"] = FailingIterNext():NotImplementedError:() +d["a"] = FailingIterNext():NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using d["a"] = %s d["a"] = None:TypeError:('unable to convert NoneType to vim structure',) d["a"] = {"": 1}:ValueError:('empty keys are not allowed',) d["a"] = {u"": 1}:ValueError:('empty keys are not allowed',) -d["a"] = FailingMapping():NotImplementedError:() -d["a"] = FailingMappingKey():NotImplementedError:() +d["a"] = FailingMapping():NotImplementedError:('keys',) +d["a"] = FailingMappingKey():NotImplementedError:('getitem:mappingkey',) +d["a"] = FailingNumber():TypeError:('long() argument must be a string or a number',) <<< Finished >> DictionaryUpdate >>> kwargs >>> iter -d.update(FailingMapping()):NotImplementedError:() -d.update([FailingIterNext()]):NotImplementedError:() +d.update(FailingMapping()):NotImplementedError:('keys',) +d.update([FailingIterNext()]):NotImplementedError:('next',) +>>> Testing *Iter* using d.update(%s) +d.update(FailingIter()):NotImplementedError:('iter',) +d.update(FailingIterNext()):NotImplementedError:('next',) +<<< Finished >>> Testing StringToChars using d.update({%s : 1}) d.update({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',) d.update({u"\0" : 1}):TypeError:('expected string without null bytes',) @@ -569,14 +617,15 @@ d.update({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without nul <<< Finished >>> Testing *Iter* using d.update({"abcF" : %s}) d.update({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to vim structure',) -d.update({"abcF" : FailingIterNext()}):NotImplementedError:() +d.update({"abcF" : FailingIterNext()}):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using d.update({"abcF" : %s}) d.update({"abcF" : None}):TypeError:('unable to convert NoneType to vim structure',) d.update({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',) d.update({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',) -d.update({"abcF" : FailingMapping()}):NotImplementedError:() -d.update({"abcF" : FailingMappingKey()}):NotImplementedError:() +d.update({"abcF" : FailingMapping()}):NotImplementedError:('keys',) +d.update({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',) +d.update({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing StringToChars using d.update(Mapping({%s : 1})) d.update(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',) @@ -595,25 +644,27 @@ d.update(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string wi <<< Finished >>> Testing *Iter* using d.update(Mapping({"abcG" : %s})) d.update(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to vim structure',) -d.update(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:() +d.update(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using d.update(Mapping({"abcG" : %s})) d.update(Mapping({"abcG" : None})):TypeError:('unable to convert NoneType to vim structure',) d.update(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',) d.update(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',) -d.update(Mapping({"abcG" : FailingMapping()})):NotImplementedError:() -d.update(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:() +d.update(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',) +d.update(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',) +d.update(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing *Iter* using d.update(%s) -d.update(FailingIter()):NotImplementedError:() -d.update(FailingIterNext()):NotImplementedError:() +d.update(FailingIter()):NotImplementedError:('iter',) +d.update(FailingIterNext()):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using d.update(%s) d.update(None):TypeError:("'NoneType' object is not iterable",) d.update({"": 1}):ValueError:('empty keys are not allowed',) d.update({u"": 1}):ValueError:('empty keys are not allowed',) -d.update(FailingMapping()):NotImplementedError:() -d.update(FailingMappingKey()):NotImplementedError:() +d.update(FailingMapping()):NotImplementedError:('keys',) +d.update(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',) +d.update(FailingNumber()):TypeError:("'FailingNumber' object is not iterable",) <<< Finished >>> Testing StringToChars using d.update(((%s, 0),)) d.update(((1, 0),)):TypeError:('expected str() or unicode() instance, but got int',) @@ -637,14 +688,15 @@ d.update((("a", {"abcF" : Mapping({"\0" : 1})}),)):TypeError:('expected string w <<< Finished >>> Testing *Iter* using d.update((("a", {"abcF" : %s}),)) d.update((("a", {"abcF" : FailingIter()}),)):TypeError:('unable to convert FailingIter to vim structure',) -d.update((("a", {"abcF" : FailingIterNext()}),)):NotImplementedError:() +d.update((("a", {"abcF" : FailingIterNext()}),)):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using d.update((("a", {"abcF" : %s}),)) d.update((("a", {"abcF" : None}),)):TypeError:('unable to convert NoneType to vim structure',) d.update((("a", {"abcF" : {"": 1}}),)):ValueError:('empty keys are not allowed',) d.update((("a", {"abcF" : {u"": 1}}),)):ValueError:('empty keys are not allowed',) -d.update((("a", {"abcF" : FailingMapping()}),)):NotImplementedError:() -d.update((("a", {"abcF" : FailingMappingKey()}),)):NotImplementedError:() +d.update((("a", {"abcF" : FailingMapping()}),)):NotImplementedError:('keys',) +d.update((("a", {"abcF" : FailingMappingKey()}),)):NotImplementedError:('getitem:mappingkey',) +d.update((("a", {"abcF" : FailingNumber()}),)):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),)) d.update((("a", Mapping({1 : 1})),)):TypeError:('expected str() or unicode() instance, but got int',) @@ -663,25 +715,27 @@ d.update((("a", Mapping({"abcG" : Mapping({"\0" : 1})})),)):TypeError:('expected <<< Finished >>> Testing *Iter* using d.update((("a", Mapping({"abcG" : %s})),)) d.update((("a", Mapping({"abcG" : FailingIter()})),)):TypeError:('unable to convert FailingIter to vim structure',) -d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):NotImplementedError:() +d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abcG" : %s})),)) d.update((("a", Mapping({"abcG" : None})),)):TypeError:('unable to convert NoneType to vim structure',) d.update((("a", Mapping({"abcG" : {"": 1}})),)):ValueError:('empty keys are not allowed',) d.update((("a", Mapping({"abcG" : {u"": 1}})),)):ValueError:('empty keys are not allowed',) -d.update((("a", Mapping({"abcG" : FailingMapping()})),)):NotImplementedError:() -d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):NotImplementedError:() +d.update((("a", Mapping({"abcG" : FailingMapping()})),)):NotImplementedError:('keys',) +d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):NotImplementedError:('getitem:mappingkey',) +d.update((("a", Mapping({"abcG" : FailingNumber()})),)):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing *Iter* using d.update((("a", %s),)) d.update((("a", FailingIter()),)):TypeError:('unable to convert FailingIter to vim structure',) -d.update((("a", FailingIterNext()),)):NotImplementedError:() +d.update((("a", FailingIterNext()),)):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using d.update((("a", %s),)) d.update((("a", None),)):TypeError:('unable to convert NoneType to vim structure',) d.update((("a", {"": 1}),)):ValueError:('empty keys are not allowed',) d.update((("a", {u"": 1}),)):ValueError:('empty keys are not allowed',) -d.update((("a", FailingMapping()),)):NotImplementedError:() -d.update((("a", FailingMappingKey()),)):NotImplementedError:() +d.update((("a", FailingMapping()),)):NotImplementedError:('keys',) +d.update((("a", FailingMappingKey()),)):NotImplementedError:('getitem:mappingkey',) +d.update((("a", FailingNumber()),)):TypeError:('long() argument must be a string or a number',) <<< Finished >> DictionaryPopItem d.popitem(1, 2):TypeError:('popitem() takes no arguments (2 given)',) @@ -691,6 +745,10 @@ d.has_key():TypeError:('has_key() takes exactly one argument (0 given)',) >> ListConstructor vim.List(1, 2):TypeError:('function takes at most 1 argument (2 given)',) vim.List(a=1):TypeError:('list constructor does not accept keyword arguments',) +>>> Testing *Iter* using vim.List(%s) +vim.List(FailingIter()):NotImplementedError:('iter',) +vim.List(FailingIterNext()):NotImplementedError:('next',) +<<< Finished >>> Testing StringToChars using vim.List([{%s : 1}]) vim.List([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',) vim.List([{u"\0" : 1}]):TypeError:('expected string without null bytes',) @@ -708,14 +766,15 @@ vim.List([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without n <<< Finished >>> Testing *Iter* using vim.List([{"abcF" : %s}]) vim.List([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to vim structure',) -vim.List([{"abcF" : FailingIterNext()}]):NotImplementedError:() +vim.List([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using vim.List([{"abcF" : %s}]) vim.List([{"abcF" : None}]):TypeError:('unable to convert NoneType to vim structure',) vim.List([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',) vim.List([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',) -vim.List([{"abcF" : FailingMapping()}]):NotImplementedError:() -vim.List([{"abcF" : FailingMappingKey()}]):NotImplementedError:() +vim.List([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',) +vim.List([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',) +vim.List([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing StringToChars using vim.List([Mapping({%s : 1})]) vim.List([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',) @@ -734,25 +793,27 @@ vim.List([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string <<< Finished >>> Testing *Iter* using vim.List([Mapping({"abcG" : %s})]) vim.List([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to vim structure',) -vim.List([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:() +vim.List([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using vim.List([Mapping({"abcG" : %s})]) vim.List([Mapping({"abcG" : None})]):TypeError:('unable to convert NoneType to vim structure',) vim.List([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',) vim.List([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',) -vim.List([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:() -vim.List([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:() +vim.List([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',) +vim.List([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',) +vim.List([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing *Iter* using vim.List([%s]) vim.List([FailingIter()]):TypeError:('unable to convert FailingIter to vim structure',) -vim.List([FailingIterNext()]):NotImplementedError:() +vim.List([FailingIterNext()]):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using vim.List([%s]) vim.List([None]):TypeError:('unable to convert NoneType to vim structure',) vim.List([{"": 1}]):ValueError:('empty keys are not allowed',) vim.List([{u"": 1}]):ValueError:('empty keys are not allowed',) -vim.List([FailingMapping()]):NotImplementedError:() -vim.List([FailingMappingKey()]):NotImplementedError:() +vim.List([FailingMapping()]):NotImplementedError:('keys',) +vim.List([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',) +vim.List([FailingNumber()]):TypeError:('long() argument must be a string or a number',) <<< Finished >> ListItem l[1000]:IndexError:('list index out of range',) @@ -761,6 +822,10 @@ ll[1] = 2:error:('list is locked',) l[1000] = 3:IndexError:('list index out of range',) >> ListAssSlice ll[1:100] = "abcJ":error:('list is locked',) +>>> Testing *Iter* using l[:] = %s +l[:] = FailingIter():NotImplementedError:('iter',) +l[:] = FailingIterNext():NotImplementedError:('next',) +<<< Finished >>> Testing StringToChars using l[:] = [{%s : 1}] l[:] = [{1 : 1}]:TypeError:('expected str() or unicode() instance, but got int',) l[:] = [{u"\0" : 1}]:TypeError:('expected string without null bytes',) @@ -778,14 +843,15 @@ l[:] = [{"abcF" : Mapping({"\0" : 1})}]:TypeError:('expected string without null <<< Finished >>> Testing *Iter* using l[:] = [{"abcF" : %s}] l[:] = [{"abcF" : FailingIter()}]:TypeError:('unable to convert FailingIter to vim structure',) -l[:] = [{"abcF" : FailingIterNext()}]:NotImplementedError:() +l[:] = [{"abcF" : FailingIterNext()}]:NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using l[:] = [{"abcF" : %s}] l[:] = [{"abcF" : None}]:TypeError:('unable to convert NoneType to vim structure',) l[:] = [{"abcF" : {"": 1}}]:ValueError:('empty keys are not allowed',) l[:] = [{"abcF" : {u"": 1}}]:ValueError:('empty keys are not allowed',) -l[:] = [{"abcF" : FailingMapping()}]:NotImplementedError:() -l[:] = [{"abcF" : FailingMappingKey()}]:NotImplementedError:() +l[:] = [{"abcF" : FailingMapping()}]:NotImplementedError:('keys',) +l[:] = [{"abcF" : FailingMappingKey()}]:NotImplementedError:('getitem:mappingkey',) +l[:] = [{"abcF" : FailingNumber()}]:TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing StringToChars using l[:] = [Mapping({%s : 1})] l[:] = [Mapping({1 : 1})]:TypeError:('expected str() or unicode() instance, but got int',) @@ -804,27 +870,33 @@ l[:] = [Mapping({"abcG" : Mapping({"\0" : 1})})]:TypeError:('expected string wit <<< Finished >>> Testing *Iter* using l[:] = [Mapping({"abcG" : %s})] l[:] = [Mapping({"abcG" : FailingIter()})]:TypeError:('unable to convert FailingIter to vim structure',) -l[:] = [Mapping({"abcG" : FailingIterNext()})]:NotImplementedError:() +l[:] = [Mapping({"abcG" : FailingIterNext()})]:NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using l[:] = [Mapping({"abcG" : %s})] l[:] = [Mapping({"abcG" : None})]:TypeError:('unable to convert NoneType to vim structure',) l[:] = [Mapping({"abcG" : {"": 1}})]:ValueError:('empty keys are not allowed',) l[:] = [Mapping({"abcG" : {u"": 1}})]:ValueError:('empty keys are not allowed',) -l[:] = [Mapping({"abcG" : FailingMapping()})]:NotImplementedError:() -l[:] = [Mapping({"abcG" : FailingMappingKey()})]:NotImplementedError:() +l[:] = [Mapping({"abcG" : FailingMapping()})]:NotImplementedError:('keys',) +l[:] = [Mapping({"abcG" : FailingMappingKey()})]:NotImplementedError:('getitem:mappingkey',) +l[:] = [Mapping({"abcG" : FailingNumber()})]:TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing *Iter* using l[:] = [%s] l[:] = [FailingIter()]:TypeError:('unable to convert FailingIter to vim structure',) -l[:] = [FailingIterNext()]:NotImplementedError:() +l[:] = [FailingIterNext()]:NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using l[:] = [%s] l[:] = [None]:TypeError:('unable to convert NoneType to vim structure',) l[:] = [{"": 1}]:ValueError:('empty keys are not allowed',) l[:] = [{u"": 1}]:ValueError:('empty keys are not allowed',) -l[:] = [FailingMapping()]:NotImplementedError:() -l[:] = [FailingMappingKey()]:NotImplementedError:() +l[:] = [FailingMapping()]:NotImplementedError:('keys',) +l[:] = [FailingMappingKey()]:NotImplementedError:('getitem:mappingkey',) +l[:] = [FailingNumber()]:TypeError:('long() argument must be a string or a number',) <<< Finished >> ListConcatInPlace +>>> Testing *Iter* using l.extend(%s) +l.extend(FailingIter()):NotImplementedError:('iter',) +l.extend(FailingIterNext()):NotImplementedError:('next',) +<<< Finished >>> Testing StringToChars using l.extend([{%s : 1}]) l.extend([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',) l.extend([{u"\0" : 1}]):TypeError:('expected string without null bytes',) @@ -842,14 +914,15 @@ l.extend([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without n <<< Finished >>> Testing *Iter* using l.extend([{"abcF" : %s}]) l.extend([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to vim structure',) -l.extend([{"abcF" : FailingIterNext()}]):NotImplementedError:() +l.extend([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using l.extend([{"abcF" : %s}]) l.extend([{"abcF" : None}]):TypeError:('unable to convert NoneType to vim structure',) l.extend([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',) l.extend([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',) -l.extend([{"abcF" : FailingMapping()}]):NotImplementedError:() -l.extend([{"abcF" : FailingMappingKey()}]):NotImplementedError:() +l.extend([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',) +l.extend([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',) +l.extend([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing StringToChars using l.extend([Mapping({%s : 1})]) l.extend([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',) @@ -868,29 +941,31 @@ l.extend([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string <<< Finished >>> Testing *Iter* using l.extend([Mapping({"abcG" : %s})]) l.extend([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to vim structure',) -l.extend([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:() +l.extend([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using l.extend([Mapping({"abcG" : %s})]) l.extend([Mapping({"abcG" : None})]):TypeError:('unable to convert NoneType to vim structure',) l.extend([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',) l.extend([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',) -l.extend([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:() -l.extend([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:() +l.extend([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',) +l.extend([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',) +l.extend([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing *Iter* using l.extend([%s]) l.extend([FailingIter()]):TypeError:('unable to convert FailingIter to vim structure',) -l.extend([FailingIterNext()]):NotImplementedError:() +l.extend([FailingIterNext()]):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using l.extend([%s]) l.extend([None]):TypeError:('unable to convert NoneType to vim structure',) l.extend([{"": 1}]):ValueError:('empty keys are not allowed',) l.extend([{u"": 1}]):ValueError:('empty keys are not allowed',) -l.extend([FailingMapping()]):NotImplementedError:() -l.extend([FailingMappingKey()]):NotImplementedError:() +l.extend([FailingMapping()]):NotImplementedError:('keys',) +l.extend([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',) +l.extend([FailingNumber()]):TypeError:('long() argument must be a string or a number',) <<< Finished >> ListSetattr del l.locked:AttributeError:('cannot delete vim.List attributes',) -l.locked = FailingTrue():NotImplementedError:() +l.locked = FailingTrue():NotImplementedError:('bool',) l.xxx = True:AttributeError:('cannot set attribute xxx',) > Function >> FunctionConstructor @@ -915,14 +990,15 @@ f({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes <<< Finished >>> Testing *Iter* using f({"abcF" : %s}) f({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to vim structure',) -f({"abcF" : FailingIterNext()}):NotImplementedError:() +f({"abcF" : FailingIterNext()}):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using f({"abcF" : %s}) f({"abcF" : None}):TypeError:('unable to convert NoneType to vim structure',) f({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',) f({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',) -f({"abcF" : FailingMapping()}):NotImplementedError:() -f({"abcF" : FailingMappingKey()}):NotImplementedError:() +f({"abcF" : FailingMapping()}):NotImplementedError:('keys',) +f({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',) +f({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing StringToChars using f(Mapping({%s : 1})) f(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',) @@ -941,25 +1017,27 @@ f(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without n <<< Finished >>> Testing *Iter* using f(Mapping({"abcG" : %s})) f(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to vim structure',) -f(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:() +f(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using f(Mapping({"abcG" : %s})) f(Mapping({"abcG" : None})):TypeError:('unable to convert NoneType to vim structure',) f(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',) f(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',) -f(Mapping({"abcG" : FailingMapping()})):NotImplementedError:() -f(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:() +f(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',) +f(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',) +f(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing *Iter* using f(%s) f(FailingIter()):TypeError:('unable to convert FailingIter to vim structure',) -f(FailingIterNext()):NotImplementedError:() +f(FailingIterNext()):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using f(%s) f(None):TypeError:('unable to convert NoneType to vim structure',) f({"": 1}):ValueError:('empty keys are not allowed',) f({u"": 1}):ValueError:('empty keys are not allowed',) -f(FailingMapping()):NotImplementedError:() -f(FailingMappingKey()):NotImplementedError:() +f(FailingMapping()):NotImplementedError:('keys',) +f(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',) +f(FailingNumber()):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing StringToChars using fd(self={%s : 1}) fd(self={1 : 1}):TypeError:('expected str() or unicode() instance, but got int',) @@ -978,14 +1056,15 @@ fd(self={"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null <<< Finished >>> Testing *Iter* using fd(self={"abcF" : %s}) fd(self={"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to vim structure',) -fd(self={"abcF" : FailingIterNext()}):NotImplementedError:() +fd(self={"abcF" : FailingIterNext()}):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using fd(self={"abcF" : %s}) fd(self={"abcF" : None}):TypeError:('unable to convert NoneType to vim structure',) fd(self={"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',) fd(self={"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',) -fd(self={"abcF" : FailingMapping()}):NotImplementedError:() -fd(self={"abcF" : FailingMappingKey()}):NotImplementedError:() +fd(self={"abcF" : FailingMapping()}):NotImplementedError:('keys',) +fd(self={"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',) +fd(self={"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing StringToChars using fd(self=Mapping({%s : 1})) fd(self=Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',) @@ -1004,14 +1083,15 @@ fd(self=Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string wit <<< Finished >>> Testing *Iter* using fd(self=Mapping({"abcG" : %s})) fd(self=Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to vim structure',) -fd(self=Mapping({"abcG" : FailingIterNext()})):NotImplementedError:() +fd(self=Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',) <<< Finished >>> Testing ConvertFromPyObject using fd(self=Mapping({"abcG" : %s})) fd(self=Mapping({"abcG" : None})):TypeError:('unable to convert NoneType to vim structure',) fd(self=Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',) fd(self=Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',) -fd(self=Mapping({"abcG" : FailingMapping()})):NotImplementedError:() -fd(self=Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:() +fd(self=Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',) +fd(self=Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',) +fd(self=Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',) <<< Finished >>> Testing *Iter* using fd(self=%s) fd(self=FailingIter()):TypeError:('unable to convert FailingIter to vim dictionary',) @@ -1021,8 +1101,9 @@ fd(self=FailingIterNext()):TypeError:('unable to convert FailingIterNext to vim fd(self=None):TypeError:('unable to convert NoneType to vim dictionary',) fd(self={"": 1}):ValueError:('empty keys are not allowed',) fd(self={u"": 1}):ValueError:('empty keys are not allowed',) -fd(self=FailingMapping()):NotImplementedError:() -fd(self=FailingMappingKey()):NotImplementedError:() +fd(self=FailingMapping()):NotImplementedError:('keys',) +fd(self=FailingMappingKey()):NotImplementedError:('getitem:mappingkey',) +fd(self=FailingNumber()):TypeError:('unable to convert FailingNumber to vim dictionary',) <<< Finished >>> Testing ConvertFromPyMapping using fd(self=%s) fd(self=[]):TypeError:('unable to convert list to vim dictionary',) @@ -1040,14 +1121,23 @@ vim.current.window.xxx:AttributeError:('xxx',) vim.current.window.buffer = 0:TypeError:('readonly attribute: buffer',) vim.current.window.cursor = (100000000, 100000000):error:('cursor position outside buffer',) vim.current.window.cursor = True:TypeError:('argument must be 2-item sequence, not bool',) -vim.current.window.height = "abcK":TypeError:('expected int(), long() or something supporting coercing to long(), but got str',) -vim.current.window.width = "abcL":TypeError:('expected int(), long() or something supporting coercing to long(), but got str',) +>>> Testing NumberToLong using vim.current.window.height = %s +vim.current.window.height = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) +vim.current.window.height = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) +vim.current.window.height = -1:ValueError:('number must be greater or equal to zero',) +<<< Finished +>>> Testing NumberToLong using vim.current.window.width = %s +vim.current.window.width = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) +vim.current.window.width = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) +vim.current.window.width = -1:ValueError:('number must be greater or equal to zero',) +<<< Finished vim.current.window.xxxxxx = True:AttributeError:('xxxxxx',) > WinList >> WinListItem vim.windows[1000]:IndexError:('no such window',) > Buffer >> StringToLine (indirect) +vim.current.buffer[0] = u"\na":error:('string cannot contain newlines',) vim.current.buffer[0] = "\na":error:('string cannot contain newlines',) >> SetBufferLine (indirect) vim.current.buffer[0] = True:TypeError:('bad argument type for built-in operation',) @@ -1075,8 +1165,13 @@ vim.current.buffer.mark("!"):error:('invalid mark name',) vim.current.buffer.range(1, 2, 3):TypeError:('function takes exactly 2 arguments (3 given)',) > BufMap >> BufMapItem -vim.buffers[None]:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) vim.buffers[100000000]:KeyError:(100000000,) +>>> Testing NumberToLong using vim.buffers[%s] +vim.buffers[[]]:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) +vim.buffers[None]:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) +vim.buffers[-1]:ValueError:('number must be greater then zero',) +vim.buffers[0]:ValueError:('number must be greater then zero',) +<<< Finished > Current >> CurrentGetattr vim.current.xxx:AttributeError:('xxx',) @@ -1086,9 +1181,14 @@ vim.current.buffer = True:TypeError:('expected vim.Buffer object, but got bool', vim.current.window = True:TypeError:('expected vim.Window object, but got bool',) vim.current.tabpage = True:TypeError:('expected vim.TabPage object, but got bool',) vim.current.xxx = True:AttributeError:('xxx',) +['/testdir'] +'/testdir' 2,xx before after +pythonx/topmodule/__init__.py +pythonx/topmodule/submodule/__init__.py +pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py vim.command("throw 'abcN'"):error:('abcN',) Exe("throw 'def'"):error:('def',) vim.eval("Exe('throw ''ghi''')"):error:('ghi',) diff --git a/src/testdir/test87.in b/src/testdir/test87.in index 6b89117be..88a8d88a4 100644 --- a/src/testdir/test87.in +++ b/src/testdir/test87.in @@ -290,7 +290,7 @@ EOF :" threading :let l = [0] :py3 l=vim.bindeval('l') -:py3 <<EOF +py3 <<EOF import threading import time @@ -320,7 +320,7 @@ EOF :" settrace :let l = [] :py3 l=vim.bindeval('l') -:py3 <<EOF +py3 <<EOF import sys def traceit(frame, event, arg): @@ -335,9 +335,9 @@ def trace_main(): EOF :py3 sys.settrace(traceit) :py3 trace_main() +:py3 sys.settrace(None) :py3 del traceit :py3 del trace_main -:py3 sys.settrace(None) :$put =string(l) :" :" Vars @@ -898,6 +898,7 @@ def convertfrompyobject_test(expr, recurse=True): '{"": 1}', # Same, but with unicode object 'FailingMapping()', # 'FailingMappingKey()', # + 'FailingNumber()', # )) def convertfrompymapping_test(expr): @@ -912,46 +913,68 @@ def iter_test(expr): 'FailingIterNext()', )) +def number_test(expr, natural=False, unsigned=False): + if natural: + unsigned = True + return subexpr_test(expr, 'NumberToLong', ( + '[]', + 'None', + ) + (('-1',) if unsigned else ()) + + (('0',) if natural else ())) + class FailingTrue(object): def __bool__(self): - raise NotImplementedError + raise NotImplementedError('bool') class FailingIter(object): def __iter__(self): - raise NotImplementedError + raise NotImplementedError('iter') class FailingIterNext(object): def __iter__(self): return self def __next__(self): - raise NotImplementedError + raise NotImplementedError('next') class FailingMappingKey(object): def __getitem__(self, item): - raise NotImplementedError + raise NotImplementedError('getitem:mappingkey') def keys(self): return list("abcH") class FailingMapping(object): def __getitem__(self): - raise NotImplementedError + raise NotImplementedError('getitem:mapping') def keys(self): - raise NotImplementedError + raise NotImplementedError('keys') class FailingList(list): def __getitem__(self, idx): if i == 2: - raise NotImplementedError + raise NotImplementedError('getitem:list') else: return super(FailingList, self).__getitem__(idx) +class NoArgsCall(object): + def __call__(self): + pass + +class FailingCall(object): + def __call__(self, path): + raise NotImplementedError('call') + +class FailingNumber(object): + def __int__(self): + raise NotImplementedError('int') + cb.append("> Output") cb.append(">> OutputSetattr") ee('del sys.stdout.softspace') -ee('sys.stdout.softspace = []') +number_test('sys.stdout.softspace = %s', unsigned=True) +number_test('sys.stderr.softspace = %s', unsigned=True) ee('sys.stdout.attr = None') cb.append(">> OutputWrite") ee('sys.stdout.write(None)') @@ -960,18 +983,34 @@ ee('sys.stdout.writelines(None)') ee('sys.stdout.writelines([1])') iter_test('sys.stdout.writelines(%s)') cb.append("> VimCommand") -ee('vim.command(1)') +stringtochars_test('vim.command(%s)') +ee('vim.command("", 2)') #! Not checked: vim->python exceptions translating: checked later cb.append("> VimToPython") #! Not checked: everything: needs errors in internal python functions cb.append("> VimEval") -ee('vim.eval(1)') +stringtochars_test('vim.eval(%s)') +ee('vim.eval("", FailingTrue())') #! Not checked: everything: needs errors in internal python functions cb.append("> VimEvalPy") -ee('vim.bindeval(1)') +stringtochars_test('vim.bindeval(%s)') +ee('vim.eval("", 2)') #! Not checked: vim->python exceptions translating: checked later cb.append("> VimStrwidth") -ee('vim.strwidth(1)') +stringtochars_test('vim.strwidth(%s)') +cb.append("> VimForeachRTP") +ee('vim.foreach_rtp(None)') +ee('vim.foreach_rtp(NoArgsCall())') +ee('vim.foreach_rtp(FailingCall())') +ee('vim.foreach_rtp(int, 2)') +cb.append('> import') +old_rtp = vim.options['rtp'] +vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\') +ee('import xxx_no_such_module_xxx') +ee('import failing_import') +ee('import failing') +vim.options['rtp'] = old_rtp +del old_rtp cb.append("> Dictionary") cb.append(">> DictionaryConstructor") ee('vim.Dictionary("abcI")') @@ -1050,8 +1089,8 @@ cb.append(">> WindowSetattr") ee('vim.current.window.buffer = 0') ee('vim.current.window.cursor = (100000000, 100000000)') ee('vim.current.window.cursor = True') -ee('vim.current.window.height = "abcK"') -ee('vim.current.window.width = "abcL"') +number_test('vim.current.window.height = %s', unsigned=True) +number_test('vim.current.window.width = %s', unsigned=True) ee('vim.current.window.xxxxxx = True') cb.append("> WinList") cb.append(">> WinListItem") @@ -1059,6 +1098,7 @@ ee('vim.windows[1000]') cb.append("> Buffer") cb.append(">> StringToLine (indirect)") ee('vim.current.buffer[0] = "\\na"') +ee('vim.current.buffer[0] = b"\\na"') cb.append(">> SetBufferLine (indirect)") ee('vim.current.buffer[0] = True') cb.append(">> SetBufferLineList (indirect)") @@ -1085,8 +1125,8 @@ 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]') +number_test('vim.buffers[%s]', natural=True) cb.append("> Current") cb.append(">> CurrentGetattr") ee('vim.current.xxx') @@ -1110,12 +1150,16 @@ del Mapping del convertfrompyobject_test del convertfrompymapping_test del iter_test +del number_test del FailingTrue del FailingIter del FailingIterNext del FailingMapping del FailingMappingKey del FailingList +del NoArgsCall +del FailingCall +del FailingNumber EOF :delfunction F :" @@ -1124,6 +1168,16 @@ py3 << EOF sys.path.insert(0, os.path.join(os.getcwd(), 'python_before')) sys.path.append(os.path.join(os.getcwd(), 'python_after')) vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\') +l = [] +def callback(path): + l.append(os.path.relpath(path)) +vim.foreach_rtp(callback) +cb.append(repr(l)) +del l +def callback(path): + return os.path.relpath(path) +cb.append(repr(vim.foreach_rtp(callback))) +del callback from module import dir as d from modulex import ddir cb.append(d + ',' + ddir) @@ -1131,10 +1185,19 @@ import before cb.append(before.dir) import after cb.append(after.dir) +import topmodule as tm +import topmodule.submodule as tms +import topmodule.submodule.subsubmodule.subsubsubmodule as tmsss +cb.append(tm.__file__[-len('modulex/topmodule/__init__.py'):]) +cb.append(tms.__file__[-len('modulex/topmodule/submodule/__init__.py'):]) +cb.append(tmsss.__file__[-len('modulex/topmodule/submodule/subsubmodule/subsubsubmodule.py'):]) del before del after del d del ddir +del tm +del tms +del tmsss EOF :" :" Test exceptions @@ -1188,6 +1251,7 @@ EOF :call garbagecollect(1) :" :/^start:/,$wq! test.out +:" vim: et ts=4 isk-=\: :call getchar() ENDTEST diff --git a/src/testdir/test87.ok b/src/testdir/test87.ok index 78b23074a..06c97a3d2 100644 --- a/src/testdir/test87.ok +++ b/src/testdir/test87.ok @@ -430,7 +430,16 @@ test87.in > Output >> OutputSetattr del sys.stdout.softspace:(<class 'AttributeError'>, AttributeError("can't delete OutputObject attributes",)) +>>> Testing NumberToLong using sys.stdout.softspace = %s sys.stdout.softspace = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',)) +sys.stdout.softspace = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',)) +sys.stdout.softspace = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',)) +<<< Finished +>>> Testing NumberToLong using sys.stderr.softspace = %s +sys.stderr.softspace = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',)) +sys.stderr.softspace = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',)) +sys.stderr.softspace = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',)) +<<< Finished sys.stdout.attr = None:(<class 'AttributeError'>, AttributeError('invalid attribute: attr',)) >> OutputWrite sys.stdout.write(None):(<class 'TypeError'>, TypeError("Can't convert 'NoneType' object to str implicitly",)) @@ -438,24 +447,52 @@ sys.stdout.write(None):(<class 'TypeError'>, TypeError("Can't convert 'NoneType' sys.stdout.writelines(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",)) sys.stdout.writelines([1]):(<class 'TypeError'>, TypeError("Can't convert 'int' object to str implicitly",)) >>> Testing *Iter* using sys.stdout.writelines(%s) -sys.stdout.writelines(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError()) -sys.stdout.writelines(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError()) +sys.stdout.writelines(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',)) +sys.stdout.writelines(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished > VimCommand +>>> Testing StringToChars using vim.command(%s) vim.command(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) +vim.command(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',)) +vim.command("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',)) +<<< Finished +vim.command("", 2):(<class 'TypeError'>, TypeError('command() takes exactly one argument (2 given)',)) > VimToPython > VimEval +>>> Testing StringToChars using vim.eval(%s) vim.eval(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) +vim.eval(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',)) +vim.eval("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',)) +<<< Finished +vim.eval("", FailingTrue()):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',)) > VimEvalPy +>>> Testing StringToChars using vim.bindeval(%s) vim.bindeval(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) +vim.bindeval(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',)) +vim.bindeval("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',)) +<<< Finished +vim.eval("", 2):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',)) > VimStrwidth +>>> Testing StringToChars using vim.strwidth(%s) vim.strwidth(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) +vim.strwidth(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',)) +vim.strwidth("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',)) +<<< Finished +> VimForeachRTP +vim.foreach_rtp(None):(<class 'TypeError'>, TypeError("'NoneType' object is not callable",)) +vim.foreach_rtp(NoArgsCall()):(<class 'TypeError'>, TypeError('__call__() takes exactly 1 positional argument (2 given)',)) +vim.foreach_rtp(FailingCall()):(<class 'NotImplementedError'>, NotImplementedError('call',)) +vim.foreach_rtp(int, 2):(<class 'TypeError'>, TypeError('foreach_rtp() takes exactly one argument (2 given)',)) +> import +import xxx_no_such_module_xxx:(<class 'ImportError'>, ImportError('No module named xxx_no_such_module_xxx',)) +import failing_import:(<class 'ImportError'>, ImportError('No module named failing_import',)) +import failing:(<class 'ImportError'>, ImportError('No module named failing',)) > Dictionary >> DictionaryConstructor vim.Dictionary("abcI"):(<class 'ValueError'>, ValueError('expected sequence element of size 2, but got sequence of size 1',)) >> DictionarySetattr del d.locked:(<class 'AttributeError'>, AttributeError('cannot delete vim.Dictionary attributes',)) -d.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError()) +d.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError('bool',)) vim.vvars.locked = False:(<class 'TypeError'>, TypeError('cannot modify fixed dictionary',)) d.scope = True:(<class 'AttributeError'>, AttributeError('cannot set attribute scope',)) d.xxx = True:(<class 'AttributeError'>, AttributeError('cannot set attribute xxx',)) @@ -494,14 +531,15 @@ d["a"] = {"abcF" : Mapping({"\0" : 1})}:(<class 'TypeError'>, TypeError('expecte <<< Finished >>> Testing *Iter* using d["a"] = {"abcF" : %s} d["a"] = {"abcF" : FailingIter()}:(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -d["a"] = {"abcF" : FailingIterNext()}:(<class 'NotImplementedError'>, NotImplementedError()) +d["a"] = {"abcF" : FailingIterNext()}:(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using d["a"] = {"abcF" : %s} d["a"] = {"abcF" : None}:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) d["a"] = {"abcF" : {b"": 1}}:(<class 'ValueError'>, ValueError('empty keys are not allowed',)) d["a"] = {"abcF" : {"": 1}}:(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -d["a"] = {"abcF" : FailingMapping()}:(<class 'NotImplementedError'>, NotImplementedError()) -d["a"] = {"abcF" : FailingMappingKey()}:(<class 'NotImplementedError'>, NotImplementedError()) +d["a"] = {"abcF" : FailingMapping()}:(<class 'NotImplementedError'>, NotImplementedError('keys',)) +d["a"] = {"abcF" : FailingMappingKey()}:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +d["a"] = {"abcF" : FailingNumber()}:(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing StringToChars using d["a"] = Mapping({%s : 1}) d["a"] = Mapping({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -520,34 +558,36 @@ d["a"] = Mapping({"abcG" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError <<< Finished >>> Testing *Iter* using d["a"] = Mapping({"abcG" : %s}) d["a"] = Mapping({"abcG" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -d["a"] = Mapping({"abcG" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError()) +d["a"] = Mapping({"abcG" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using d["a"] = Mapping({"abcG" : %s}) d["a"] = Mapping({"abcG" : None}):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) d["a"] = Mapping({"abcG" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) d["a"] = Mapping({"abcG" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -d["a"] = Mapping({"abcG" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError()) -d["a"] = Mapping({"abcG" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError()) +d["a"] = Mapping({"abcG" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +d["a"] = Mapping({"abcG" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +d["a"] = Mapping({"abcG" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing *Iter* using d["a"] = %s d["a"] = FailingIter():(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -d["a"] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError()) +d["a"] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using d["a"] = %s d["a"] = None:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) d["a"] = {b"": 1}:(<class 'ValueError'>, ValueError('empty keys are not allowed',)) d["a"] = {"": 1}:(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -d["a"] = FailingMapping():(<class 'NotImplementedError'>, NotImplementedError()) -d["a"] = FailingMappingKey():(<class 'NotImplementedError'>, NotImplementedError()) +d["a"] = FailingMapping():(<class 'NotImplementedError'>, NotImplementedError('keys',)) +d["a"] = FailingMappingKey():(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +d["a"] = FailingNumber():(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >> DictionaryUpdate >>> kwargs >>> iter -d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError()) -d.update([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError()) +d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +d.update([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',)) >>> Testing *Iter* using d.update(%s) -d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError()) -d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError()) +d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',)) +d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing StringToChars using d.update({%s : 1}) d.update({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -566,14 +606,15 @@ d.update({"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expect <<< Finished >>> Testing *Iter* using d.update({"abcF" : %s}) d.update({"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -d.update({"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError()) +d.update({"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using d.update({"abcF" : %s}) d.update({"abcF" : None}):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) d.update({"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) d.update({"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -d.update({"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError()) -d.update({"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError()) +d.update({"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +d.update({"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +d.update({"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing StringToChars using d.update(Mapping({%s : 1})) d.update(Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -592,25 +633,27 @@ d.update(Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeErro <<< Finished >>> Testing *Iter* using d.update(Mapping({"abcG" : %s})) d.update(Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -d.update(Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError()) +d.update(Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using d.update(Mapping({"abcG" : %s})) d.update(Mapping({"abcG" : None})):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) d.update(Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) d.update(Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -d.update(Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError()) -d.update(Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError()) +d.update(Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +d.update(Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +d.update(Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing *Iter* using d.update(%s) -d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError()) -d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError()) +d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',)) +d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using d.update(%s) d.update(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",)) d.update({b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) d.update({"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError()) -d.update(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError()) +d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +d.update(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +d.update(FailingNumber()):(<class 'TypeError'>, TypeError("'FailingNumber' object is not iterable",)) <<< Finished >>> Testing StringToChars using d.update(((%s, 0),)) d.update(((1, 0),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -634,14 +677,15 @@ d.update((("a", {"abcF" : Mapping({"\0" : 1})}),)):(<class 'TypeError'>, TypeErr <<< Finished >>> Testing *Iter* using d.update((("a", {"abcF" : %s}),)) d.update((("a", {"abcF" : FailingIter()}),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -d.update((("a", {"abcF" : FailingIterNext()}),)):(<class 'NotImplementedError'>, NotImplementedError()) +d.update((("a", {"abcF" : FailingIterNext()}),)):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using d.update((("a", {"abcF" : %s}),)) d.update((("a", {"abcF" : None}),)):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) d.update((("a", {"abcF" : {b"": 1}}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) d.update((("a", {"abcF" : {"": 1}}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -d.update((("a", {"abcF" : FailingMapping()}),)):(<class 'NotImplementedError'>, NotImplementedError()) -d.update((("a", {"abcF" : FailingMappingKey()}),)):(<class 'NotImplementedError'>, NotImplementedError()) +d.update((("a", {"abcF" : FailingMapping()}),)):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +d.update((("a", {"abcF" : FailingMappingKey()}),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +d.update((("a", {"abcF" : FailingNumber()}),)):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),)) d.update((("a", Mapping({1 : 1})),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -660,25 +704,27 @@ d.update((("a", Mapping({"abcG" : Mapping({"\0" : 1})})),)):(<class 'TypeError'> <<< Finished >>> Testing *Iter* using d.update((("a", Mapping({"abcG" : %s})),)) d.update((("a", Mapping({"abcG" : FailingIter()})),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):(<class 'NotImplementedError'>, NotImplementedError()) +d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abcG" : %s})),)) d.update((("a", Mapping({"abcG" : None})),)):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) d.update((("a", Mapping({"abcG" : {b"": 1}})),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) d.update((("a", Mapping({"abcG" : {"": 1}})),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -d.update((("a", Mapping({"abcG" : FailingMapping()})),)):(<class 'NotImplementedError'>, NotImplementedError()) -d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):(<class 'NotImplementedError'>, NotImplementedError()) +d.update((("a", Mapping({"abcG" : FailingMapping()})),)):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +d.update((("a", Mapping({"abcG" : FailingNumber()})),)):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing *Iter* using d.update((("a", %s),)) d.update((("a", FailingIter()),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -d.update((("a", FailingIterNext()),)):(<class 'NotImplementedError'>, NotImplementedError()) +d.update((("a", FailingIterNext()),)):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using d.update((("a", %s),)) d.update((("a", None),)):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) d.update((("a", {b"": 1}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) d.update((("a", {"": 1}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -d.update((("a", FailingMapping()),)):(<class 'NotImplementedError'>, NotImplementedError()) -d.update((("a", FailingMappingKey()),)):(<class 'NotImplementedError'>, NotImplementedError()) +d.update((("a", FailingMapping()),)):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +d.update((("a", FailingMappingKey()),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +d.update((("a", FailingNumber()),)):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >> DictionaryPopItem d.popitem(1, 2):(<class 'TypeError'>, TypeError('popitem() takes no arguments (2 given)',)) @@ -689,8 +735,8 @@ d.has_key():(<class 'TypeError'>, TypeError('has_key() takes exactly one argumen vim.List(1, 2):(<class 'TypeError'>, TypeError('function takes at most 1 argument (2 given)',)) vim.List(a=1):(<class 'TypeError'>, TypeError('list constructor does not accept keyword arguments',)) >>> Testing *Iter* using vim.List(%s) -vim.List(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError()) -vim.List(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError()) +vim.List(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',)) +vim.List(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing StringToChars using vim.List([{%s : 1}]) vim.List([{1 : 1}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -709,14 +755,15 @@ vim.List([{"abcF" : Mapping({"\0" : 1})}]):(<class 'TypeError'>, TypeError('expe <<< Finished >>> Testing *Iter* using vim.List([{"abcF" : %s}]) vim.List([{"abcF" : FailingIter()}]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -vim.List([{"abcF" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError()) +vim.List([{"abcF" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using vim.List([{"abcF" : %s}]) vim.List([{"abcF" : None}]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) vim.List([{"abcF" : {b"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) vim.List([{"abcF" : {"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -vim.List([{"abcF" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError()) -vim.List([{"abcF" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError()) +vim.List([{"abcF" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +vim.List([{"abcF" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +vim.List([{"abcF" : FailingNumber()}]):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing StringToChars using vim.List([Mapping({%s : 1})]) vim.List([Mapping({1 : 1})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -735,25 +782,27 @@ vim.List([Mapping({"abcG" : Mapping({"\0" : 1})})]):(<class 'TypeError'>, TypeEr <<< Finished >>> Testing *Iter* using vim.List([Mapping({"abcG" : %s})]) vim.List([Mapping({"abcG" : FailingIter()})]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -vim.List([Mapping({"abcG" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError()) +vim.List([Mapping({"abcG" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using vim.List([Mapping({"abcG" : %s})]) vim.List([Mapping({"abcG" : None})]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) vim.List([Mapping({"abcG" : {b"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) vim.List([Mapping({"abcG" : {"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -vim.List([Mapping({"abcG" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError()) -vim.List([Mapping({"abcG" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError()) +vim.List([Mapping({"abcG" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +vim.List([Mapping({"abcG" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +vim.List([Mapping({"abcG" : FailingNumber()})]):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing *Iter* using vim.List([%s]) vim.List([FailingIter()]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -vim.List([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError()) +vim.List([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using vim.List([%s]) vim.List([None]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) vim.List([{b"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) vim.List([{"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -vim.List([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError()) -vim.List([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError()) +vim.List([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +vim.List([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +vim.List([FailingNumber()]):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >> ListItem l[1000]:(<class 'IndexError'>, IndexError('list index out of range',)) @@ -763,8 +812,8 @@ l[1000] = 3:(<class 'IndexError'>, IndexError('list index out of range',)) >> ListAssSlice ll[1:100] = "abcJ":(<class 'vim.error'>, error('list is locked',)) >>> Testing *Iter* using l[:] = %s -l[:] = FailingIter():(<class 'NotImplementedError'>, NotImplementedError()) -l[:] = FailingIterNext()::(<class 'NotImplementedError'>, NotImplementedError()) +l[:] = FailingIter():(<class 'NotImplementedError'>, NotImplementedError('iter',)) +l[:] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing StringToChars using l[:] = [{%s : 1}] l[:] = [{1 : 1}]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -783,14 +832,15 @@ l[:] = [{"abcF" : Mapping({"\0" : 1})}]:(<class 'TypeError'>, TypeError('expecte <<< Finished >>> Testing *Iter* using l[:] = [{"abcF" : %s}] l[:] = [{"abcF" : FailingIter()}]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -l[:] = [{"abcF" : FailingIterNext()}]:(<class 'NotImplementedError'>, NotImplementedError()) +l[:] = [{"abcF" : FailingIterNext()}]:(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using l[:] = [{"abcF" : %s}] l[:] = [{"abcF" : None}]:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) l[:] = [{"abcF" : {b"": 1}}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',)) l[:] = [{"abcF" : {"": 1}}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -l[:] = [{"abcF" : FailingMapping()}]:(<class 'NotImplementedError'>, NotImplementedError()) -l[:] = [{"abcF" : FailingMappingKey()}]:(<class 'NotImplementedError'>, NotImplementedError()) +l[:] = [{"abcF" : FailingMapping()}]:(<class 'NotImplementedError'>, NotImplementedError('keys',)) +l[:] = [{"abcF" : FailingMappingKey()}]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +l[:] = [{"abcF" : FailingNumber()}]:(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing StringToChars using l[:] = [Mapping({%s : 1})] l[:] = [Mapping({1 : 1})]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -809,30 +859,32 @@ l[:] = [Mapping({"abcG" : Mapping({"\0" : 1})})]:(<class 'TypeError'>, TypeError <<< Finished >>> Testing *Iter* using l[:] = [Mapping({"abcG" : %s})] l[:] = [Mapping({"abcG" : FailingIter()})]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -l[:] = [Mapping({"abcG" : FailingIterNext()})]:(<class 'NotImplementedError'>, NotImplementedError()) +l[:] = [Mapping({"abcG" : FailingIterNext()})]:(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using l[:] = [Mapping({"abcG" : %s})] l[:] = [Mapping({"abcG" : None})]:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) l[:] = [Mapping({"abcG" : {b"": 1}})]:(<class 'ValueError'>, ValueError('empty keys are not allowed',)) l[:] = [Mapping({"abcG" : {"": 1}})]:(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -l[:] = [Mapping({"abcG" : FailingMapping()})]:(<class 'NotImplementedError'>, NotImplementedError()) -l[:] = [Mapping({"abcG" : FailingMappingKey()})]:(<class 'NotImplementedError'>, NotImplementedError()) +l[:] = [Mapping({"abcG" : FailingMapping()})]:(<class 'NotImplementedError'>, NotImplementedError('keys',)) +l[:] = [Mapping({"abcG" : FailingMappingKey()})]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +l[:] = [Mapping({"abcG" : FailingNumber()})]:(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing *Iter* using l[:] = [%s] l[:] = [FailingIter()]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -l[:] = [FailingIterNext()]:(<class 'NotImplementedError'>, NotImplementedError()) +l[:] = [FailingIterNext()]:(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using l[:] = [%s] l[:] = [None]:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) l[:] = [{b"": 1}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',)) l[:] = [{"": 1}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -l[:] = [FailingMapping()]:(<class 'NotImplementedError'>, NotImplementedError()) -l[:] = [FailingMappingKey()]:(<class 'NotImplementedError'>, NotImplementedError()) +l[:] = [FailingMapping()]:(<class 'NotImplementedError'>, NotImplementedError('keys',)) +l[:] = [FailingMappingKey()]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +l[:] = [FailingNumber()]:(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >> ListConcatInPlace >>> Testing *Iter* using l.extend(%s) -l.extend(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError()) -l.extend(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError()) +l.extend(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',)) +l.extend(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing StringToChars using l.extend([{%s : 1}]) l.extend([{1 : 1}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -851,14 +903,15 @@ l.extend([{"abcF" : Mapping({"\0" : 1})}]):(<class 'TypeError'>, TypeError('expe <<< Finished >>> Testing *Iter* using l.extend([{"abcF" : %s}]) l.extend([{"abcF" : FailingIter()}]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -l.extend([{"abcF" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError()) +l.extend([{"abcF" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using l.extend([{"abcF" : %s}]) l.extend([{"abcF" : None}]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) l.extend([{"abcF" : {b"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) l.extend([{"abcF" : {"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -l.extend([{"abcF" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError()) -l.extend([{"abcF" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError()) +l.extend([{"abcF" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +l.extend([{"abcF" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +l.extend([{"abcF" : FailingNumber()}]):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing StringToChars using l.extend([Mapping({%s : 1})]) l.extend([Mapping({1 : 1})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -877,29 +930,31 @@ l.extend([Mapping({"abcG" : Mapping({"\0" : 1})})]):(<class 'TypeError'>, TypeEr <<< Finished >>> Testing *Iter* using l.extend([Mapping({"abcG" : %s})]) l.extend([Mapping({"abcG" : FailingIter()})]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -l.extend([Mapping({"abcG" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError()) +l.extend([Mapping({"abcG" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using l.extend([Mapping({"abcG" : %s})]) l.extend([Mapping({"abcG" : None})]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) l.extend([Mapping({"abcG" : {b"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) l.extend([Mapping({"abcG" : {"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -l.extend([Mapping({"abcG" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError()) -l.extend([Mapping({"abcG" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError()) +l.extend([Mapping({"abcG" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +l.extend([Mapping({"abcG" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +l.extend([Mapping({"abcG" : FailingNumber()})]):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing *Iter* using l.extend([%s]) l.extend([FailingIter()]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -l.extend([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError()) +l.extend([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using l.extend([%s]) l.extend([None]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) l.extend([{b"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) l.extend([{"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -l.extend([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError()) -l.extend([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError()) +l.extend([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +l.extend([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +l.extend([FailingNumber()]):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >> ListSetattr del l.locked:(<class 'AttributeError'>, AttributeError('cannot delete vim.List attributes',)) -l.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError()) +l.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError('bool',)) l.xxx = True:(<class 'AttributeError'>, AttributeError('cannot set attribute xxx',)) > Function >> FunctionConstructor @@ -924,14 +979,15 @@ f({"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected byte <<< Finished >>> Testing *Iter* using f({"abcF" : %s}) f({"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -f({"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError()) +f({"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using f({"abcF" : %s}) f({"abcF" : None}):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) f({"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) f({"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -f({"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError()) -f({"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError()) +f({"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +f({"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +f({"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing StringToChars using f(Mapping({%s : 1})) f(Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -950,25 +1006,27 @@ f(Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expe <<< Finished >>> Testing *Iter* using f(Mapping({"abcG" : %s})) f(Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -f(Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError()) +f(Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using f(Mapping({"abcG" : %s})) f(Mapping({"abcG" : None})):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) f(Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) f(Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -f(Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError()) -f(Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError()) +f(Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +f(Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +f(Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing *Iter* using f(%s) f(FailingIter()):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -f(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError()) +f(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using f(%s) f(None):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) f({b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) f({"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -f(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError()) -f(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError()) +f(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +f(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +f(FailingNumber()):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing StringToChars using fd(self={%s : 1}) fd(self={1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -987,14 +1045,15 @@ fd(self={"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expecte <<< Finished >>> Testing *Iter* using fd(self={"abcF" : %s}) fd(self={"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -fd(self={"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError()) +fd(self={"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using fd(self={"abcF" : %s}) fd(self={"abcF" : None}):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) fd(self={"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) fd(self={"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -fd(self={"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError()) -fd(self={"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError()) +fd(self={"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +fd(self={"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +fd(self={"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing StringToChars using fd(self=Mapping({%s : 1})) fd(self=Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',)) @@ -1013,14 +1072,15 @@ fd(self=Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError <<< Finished >>> Testing *Iter* using fd(self=Mapping({"abcG" : %s})) fd(self=Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',)) -fd(self=Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError()) +fd(self=Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',)) <<< Finished >>> Testing ConvertFromPyObject using fd(self=Mapping({"abcG" : %s})) fd(self=Mapping({"abcG" : None})):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',)) fd(self=Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) fd(self=Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -fd(self=Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError()) -fd(self=Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError()) +fd(self=Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +fd(self=Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +fd(self=Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',)) <<< Finished >>> Testing *Iter* using fd(self=%s) fd(self=FailingIter()):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim dictionary',)) @@ -1030,8 +1090,9 @@ fd(self=FailingIterNext()):(<class 'TypeError'>, TypeError('unable to convert Fa fd(self=None):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim dictionary',)) fd(self={b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) fd(self={"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',)) -fd(self=FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError()) -fd(self=FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError()) +fd(self=FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',)) +fd(self=FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',)) +fd(self=FailingNumber()):(<class 'TypeError'>, TypeError('unable to convert FailingNumber to vim dictionary',)) <<< Finished >>> Testing ConvertFromPyMapping using fd(self=%s) fd(self=[]):(<class 'AttributeError'>, AttributeError('keys',)) @@ -1049,8 +1110,16 @@ vim.current.window.xxx:(<class 'AttributeError'>, AttributeError("'vim.window' o vim.current.window.buffer = 0:(<class 'TypeError'>, TypeError('readonly attribute: buffer',)) vim.current.window.cursor = (100000000, 100000000):(<class 'vim.error'>, error('cursor position outside buffer',)) vim.current.window.cursor = True:(<class 'TypeError'>, TypeError('argument must be 2-item sequence, not bool',)) -vim.current.window.height = "abcK":(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got str',)) -vim.current.window.width = "abcL":(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got str',)) +>>> Testing NumberToLong using vim.current.window.height = %s +vim.current.window.height = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',)) +vim.current.window.height = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',)) +vim.current.window.height = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',)) +<<< Finished +>>> Testing NumberToLong using vim.current.window.width = %s +vim.current.window.width = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',)) +vim.current.window.width = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',)) +vim.current.window.width = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',)) +<<< Finished vim.current.window.xxxxxx = True:(<class 'AttributeError'>, AttributeError('xxxxxx',)) > WinList >> WinListItem @@ -1058,6 +1127,7 @@ vim.windows[1000]:(<class 'IndexError'>, IndexError('no such window',)) > Buffer >> StringToLine (indirect) vim.current.buffer[0] = "\na":(<class 'vim.error'>, error('string cannot contain newlines',)) +vim.current.buffer[0] = b"\na":(<class 'vim.error'>, error('string cannot contain newlines',)) >> SetBufferLine (indirect) vim.current.buffer[0] = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',)) >> SetBufferLineList (indirect) @@ -1084,8 +1154,13 @@ vim.current.buffer.mark("!"):(<class 'vim.error'>, error('invalid mark name',)) vim.current.buffer.range(1, 2, 3):(<class 'TypeError'>, TypeError('function takes exactly 2 arguments (3 given)',)) > BufMap >> BufMapItem -vim.buffers[None]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',)) vim.buffers[100000000]:(<class 'KeyError'>, KeyError(100000000,)) +>>> Testing NumberToLong using vim.buffers[%s] +vim.buffers[[]]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',)) +vim.buffers[None]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',)) +vim.buffers[-1]:(<class 'ValueError'>, ValueError('number must be greater then zero',)) +vim.buffers[0]:(<class 'ValueError'>, ValueError('number must be greater then zero',)) +<<< Finished > Current >> CurrentGetattr vim.current.xxx:(<class 'AttributeError'>, AttributeError("'vim.currentdata' object has no attribute 'xxx'",)) @@ -1095,9 +1170,14 @@ vim.current.buffer = True:(<class 'TypeError'>, TypeError('expected vim.Buffer o vim.current.window = True:(<class 'TypeError'>, TypeError('expected vim.Window object, but got bool',)) vim.current.tabpage = True:(<class 'TypeError'>, TypeError('expected vim.TabPage object, but got bool',)) vim.current.xxx = True:(<class 'AttributeError'>, AttributeError('xxx',)) +['.'] +'.' 3,xx before after +pythonx/topmodule/__init__.py +pythonx/topmodule/submodule/__init__.py +pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py vim.command("throw 'abcN'"):(<class 'vim.error'>, error('abcN',)) Exe("throw 'def'"):(<class 'vim.error'>, error('def',)) vim.eval("Exe('throw ''ghi''')"):(<class 'vim.error'>, error('ghi',)) diff --git a/src/version.c b/src/version.c index 2f24c3f44..69603fbc9 100644 --- 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 */ /**/ + 1236, +/**/ 1235, /**/ 1234, |