mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 7.4.1769
Problem: No "closed", "errors" and "encoding" attribute on Python output. Solution: Add attributes and more tests. (Roland Puntaier, closes #622)
This commit is contained in:
@@ -503,6 +503,7 @@ static struct PyMethodDef OutputMethods[] = {
|
|||||||
{"readable", (PyCFunction)AlwaysFalse, METH_NOARGS, ""},
|
{"readable", (PyCFunction)AlwaysFalse, METH_NOARGS, ""},
|
||||||
{"seekable", (PyCFunction)AlwaysFalse, METH_NOARGS, ""},
|
{"seekable", (PyCFunction)AlwaysFalse, METH_NOARGS, ""},
|
||||||
{"writable", (PyCFunction)AlwaysTrue, METH_NOARGS, ""},
|
{"writable", (PyCFunction)AlwaysTrue, METH_NOARGS, ""},
|
||||||
|
{"closed", (PyCFunction)AlwaysFalse, METH_NOARGS, ""},
|
||||||
{"__dir__", (PyCFunction)OutputDir, METH_NOARGS, ""},
|
{"__dir__", (PyCFunction)OutputDir, METH_NOARGS, ""},
|
||||||
{ NULL, NULL, 0, NULL}
|
{ NULL, NULL, 0, NULL}
|
||||||
};
|
};
|
||||||
|
@@ -1195,7 +1195,10 @@ OutputGetattr(PyObject *self, char *name)
|
|||||||
return PyInt_FromLong(((OutputObject *)(self))->softspace);
|
return PyInt_FromLong(((OutputObject *)(self))->softspace);
|
||||||
else if (strcmp(name, "__members__") == 0)
|
else if (strcmp(name, "__members__") == 0)
|
||||||
return ObjectDir(NULL, OutputAttrs);
|
return ObjectDir(NULL, OutputAttrs);
|
||||||
|
else if (strcmp(name, "errors") == 0)
|
||||||
|
return PyString_FromString("strict");
|
||||||
|
else if (strcmp(name, "encoding") == 0)
|
||||||
|
return PyString_FromString(ENC_OPT);
|
||||||
return Py_FindMethod(OutputMethods, self, name);
|
return Py_FindMethod(OutputMethods, self, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1100,6 +1100,10 @@ OutputGetattro(PyObject *self, PyObject *nameobj)
|
|||||||
|
|
||||||
if (strcmp(name, "softspace") == 0)
|
if (strcmp(name, "softspace") == 0)
|
||||||
return PyLong_FromLong(((OutputObject *)(self))->softspace);
|
return PyLong_FromLong(((OutputObject *)(self))->softspace);
|
||||||
|
else if (strcmp(name, "errors") == 0)
|
||||||
|
return PyString_FromString("strict");
|
||||||
|
else if (strcmp(name, "encoding") == 0)
|
||||||
|
return PyString_FromString(ENC_OPT);
|
||||||
|
|
||||||
return PyObject_GenericGetAttr(self, nameobj);
|
return PyObject_GenericGetAttr(self, nameobj);
|
||||||
}
|
}
|
||||||
|
@@ -1289,6 +1289,11 @@ ee('assert sys.stdout.writable()==True')
|
|||||||
ee('assert sys.stdout.readable()==False')
|
ee('assert sys.stdout.readable()==False')
|
||||||
ee('assert sys.stderr.writable()==True')
|
ee('assert sys.stderr.writable()==True')
|
||||||
ee('assert sys.stderr.readable()==False')
|
ee('assert sys.stderr.readable()==False')
|
||||||
|
ee('assert sys.stdout.closed()==False')
|
||||||
|
ee('assert sys.stderr.closed()==False')
|
||||||
|
ee('assert sys.stdout.errors=="strict"')
|
||||||
|
ee('assert sys.stderr.errors=="strict"')
|
||||||
|
ee('assert sys.stdout.encoding==sys.stderr.encoding')
|
||||||
ee('sys.stdout.write(None)')
|
ee('sys.stdout.write(None)')
|
||||||
cb.append(">> OutputWriteLines")
|
cb.append(">> OutputWriteLines")
|
||||||
ee('sys.stdout.writelines(None)')
|
ee('sys.stdout.writelines(None)')
|
||||||
|
@@ -449,7 +449,7 @@ range:__dir__,__members__,append,end,start
|
|||||||
dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
|
dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
|
||||||
list:__dir__,__members__,extend,locked
|
list:__dir__,__members__,extend,locked
|
||||||
function:__dir__,__members__,args,self,softspace
|
function:__dir__,__members__,args,self,softspace
|
||||||
output:__dir__,__members__,close,flush,isatty,readable,seekable,softspace,writable,write,writelines
|
output:__dir__,__members__,close,closed,flush,isatty,readable,seekable,softspace,writable,write,writelines
|
||||||
{}
|
{}
|
||||||
{'a': 1}
|
{'a': 1}
|
||||||
{'a': 1}
|
{'a': 1}
|
||||||
@@ -600,6 +600,11 @@ assert sys.stdout.writable()==True:NOT FAILED
|
|||||||
assert sys.stdout.readable()==False:NOT FAILED
|
assert sys.stdout.readable()==False:NOT FAILED
|
||||||
assert sys.stderr.writable()==True:NOT FAILED
|
assert sys.stderr.writable()==True:NOT FAILED
|
||||||
assert sys.stderr.readable()==False:NOT FAILED
|
assert sys.stderr.readable()==False:NOT FAILED
|
||||||
|
assert sys.stdout.closed()==False:NOT FAILED
|
||||||
|
assert sys.stderr.closed()==False:NOT FAILED
|
||||||
|
assert sys.stdout.errors=="strict":NOT FAILED
|
||||||
|
assert sys.stderr.errors=="strict":NOT FAILED
|
||||||
|
assert sys.stdout.encoding==sys.stderr.encoding:NOT FAILED
|
||||||
sys.stdout.write(None):TypeError:('coercing to Unicode: need string or buffer, NoneType found',)
|
sys.stdout.write(None):TypeError:('coercing to Unicode: need string or buffer, NoneType found',)
|
||||||
>> OutputWriteLines
|
>> OutputWriteLines
|
||||||
sys.stdout.writelines(None):TypeError:("'NoneType' object is not iterable",)
|
sys.stdout.writelines(None):TypeError:("'NoneType' object is not iterable",)
|
||||||
|
@@ -1283,6 +1283,11 @@ ee('assert sys.stdout.writable()==True')
|
|||||||
ee('assert sys.stdout.readable()==False')
|
ee('assert sys.stdout.readable()==False')
|
||||||
ee('assert sys.stderr.writable()==True')
|
ee('assert sys.stderr.writable()==True')
|
||||||
ee('assert sys.stderr.readable()==False')
|
ee('assert sys.stderr.readable()==False')
|
||||||
|
ee('assert sys.stdout.closed()==False')
|
||||||
|
ee('assert sys.stderr.closed()==False')
|
||||||
|
ee('assert sys.stdout.errors=="strict"')
|
||||||
|
ee('assert sys.stderr.errors=="strict"')
|
||||||
|
ee('assert sys.stdout.encoding==sys.stderr.encoding')
|
||||||
ee('sys.stdout.write(None)')
|
ee('sys.stdout.write(None)')
|
||||||
cb.append(">> OutputWriteLines")
|
cb.append(">> OutputWriteLines")
|
||||||
ee('sys.stdout.writelines(None)')
|
ee('sys.stdout.writelines(None)')
|
||||||
|
@@ -449,7 +449,7 @@ range:__dir__,append,end,start
|
|||||||
dictionary:__dir__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
|
dictionary:__dir__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
|
||||||
list:__dir__,extend,locked
|
list:__dir__,extend,locked
|
||||||
function:__dir__,args,self,softspace
|
function:__dir__,args,self,softspace
|
||||||
output:__dir__,close,flush,isatty,readable,seekable,softspace,writable,write,writelines
|
output:__dir__,close,closed,flush,isatty,readable,seekable,softspace,writable,write,writelines
|
||||||
{}
|
{}
|
||||||
{'a': 1}
|
{'a': 1}
|
||||||
{'a': 1}
|
{'a': 1}
|
||||||
@@ -600,6 +600,11 @@ assert sys.stdout.writable()==True:NOT FAILED
|
|||||||
assert sys.stdout.readable()==False:NOT FAILED
|
assert sys.stdout.readable()==False:NOT FAILED
|
||||||
assert sys.stderr.writable()==True:NOT FAILED
|
assert sys.stderr.writable()==True:NOT FAILED
|
||||||
assert sys.stderr.readable()==False:NOT FAILED
|
assert sys.stderr.readable()==False:NOT FAILED
|
||||||
|
assert sys.stdout.closed()==False:NOT FAILED
|
||||||
|
assert sys.stderr.closed()==False:NOT FAILED
|
||||||
|
assert sys.stdout.errors=="strict":NOT FAILED
|
||||||
|
assert sys.stderr.errors=="strict":NOT FAILED
|
||||||
|
assert sys.stdout.encoding==sys.stderr.encoding:NOT FAILED
|
||||||
sys.stdout.write(None):(<class 'TypeError'>, TypeError("Can't convert 'NoneType' object to str implicitly",))
|
sys.stdout.write(None):(<class 'TypeError'>, TypeError("Can't convert 'NoneType' object to str implicitly",))
|
||||||
>> OutputWriteLines
|
>> OutputWriteLines
|
||||||
sys.stdout.writelines(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",))
|
sys.stdout.writelines(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",))
|
||||||
|
@@ -748,6 +748,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1769,
|
||||||
/**/
|
/**/
|
||||||
1768,
|
1768,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user