]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 7.4.1769 v7.4.1769
authorBram Moolenaar <Bram@vim.org>
Thu, 21 Apr 2016 18:00:56 +0000 (20:00 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 21 Apr 2016 18:00:56 +0000 (20:00 +0200)
Problem:    No "closed", "errors" and "encoding" attribute on Python output.
Solution:   Add attributes and more tests. (Roland Puntaier, closes #622)

src/if_py_both.h
src/if_python.c
src/if_python3.c
src/testdir/test86.in
src/testdir/test86.ok
src/testdir/test87.in
src/testdir/test87.ok
src/version.c

index de3e8680b573cc93d8daf3a0260a6fb2aec1ab7d..a0385f9a5cef41f26028df625fbae83a60846f6b 100644 (file)
@@ -503,6 +503,7 @@ static struct PyMethodDef OutputMethods[] = {
     {"readable",    (PyCFunction)AlwaysFalse,          METH_NOARGS,    ""},
     {"seekable",    (PyCFunction)AlwaysFalse,          METH_NOARGS,    ""},
     {"writable",    (PyCFunction)AlwaysTrue,           METH_NOARGS,    ""},
+    {"closed",      (PyCFunction)AlwaysFalse,          METH_NOARGS,    ""},
     {"__dir__",            (PyCFunction)OutputDir,             METH_NOARGS,    ""},
     { NULL,        NULL,                               0,              NULL}
 };
index a54a0e217dcf40eec7da2fdd6a853f20dbf50254..622634da754fb3bd7818db479706269be011c03b 100644 (file)
@@ -1195,7 +1195,10 @@ OutputGetattr(PyObject *self, char *name)
        return PyInt_FromLong(((OutputObject *)(self))->softspace);
     else if (strcmp(name, "__members__") == 0)
        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);
 }
 
index d2f6066cb8655cdf75768b14af12c21d0fa1375f..10984cdfe8308b5d863af1ccfbab580379e1bbb8 100644 (file)
@@ -1100,6 +1100,10 @@ OutputGetattro(PyObject *self, PyObject *nameobj)
 
     if (strcmp(name, "softspace") == 0)
        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);
 }
index 6f47ff6813acaf6e91b2c2472f280594b78d62ff..71fe920ad2fa807ec53153047349a07e3ce4d5e0 100644 (file)
@@ -1289,6 +1289,11 @@ ee('assert sys.stdout.writable()==True')
 ee('assert sys.stdout.readable()==False')
 ee('assert sys.stderr.writable()==True')
 ee('assert sys.stderr.readable()==False')
+ee('assert sys.stdout.closed()==False')
+ee('assert sys.stderr.closed()==False')
+ee('assert sys.stdout.errors=="strict"')
+ee('assert sys.stderr.errors=="strict"')
+ee('assert sys.stdout.encoding==sys.stderr.encoding')
 ee('sys.stdout.write(None)')
 cb.append(">> OutputWriteLines")
 ee('sys.stdout.writelines(None)')
index fe27c05a7b619a0f6aa2fc09d468720deb542660..85290402ced41f058cff0dc1edc9bad4fd13991b 100644 (file)
@@ -449,7 +449,7 @@ range:__dir__,__members__,append,end,start
 dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
 list:__dir__,__members__,extend,locked
 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}
@@ -600,6 +600,11 @@ assert sys.stdout.writable()==True:NOT FAILED
 assert sys.stdout.readable()==False:NOT FAILED
 assert sys.stderr.writable()==True:NOT FAILED
 assert sys.stderr.readable()==False:NOT FAILED
+assert sys.stdout.closed()==False:NOT FAILED
+assert sys.stderr.closed()==False:NOT FAILED
+assert sys.stdout.errors=="strict":NOT FAILED
+assert sys.stderr.errors=="strict":NOT FAILED
+assert sys.stdout.encoding==sys.stderr.encoding:NOT FAILED
 sys.stdout.write(None):TypeError:('coercing to Unicode: need string or buffer, NoneType found',)
 >> OutputWriteLines
 sys.stdout.writelines(None):TypeError:("'NoneType' object is not iterable",)
index e3bc994ba1fd4ee085bab03c55bb1527d68dd2cf..0df002feba1cb707ed3139a1084948d4ec40718f 100644 (file)
@@ -1283,6 +1283,11 @@ ee('assert sys.stdout.writable()==True')
 ee('assert sys.stdout.readable()==False')
 ee('assert sys.stderr.writable()==True')
 ee('assert sys.stderr.readable()==False')
+ee('assert sys.stdout.closed()==False')
+ee('assert sys.stderr.closed()==False')
+ee('assert sys.stdout.errors=="strict"')
+ee('assert sys.stderr.errors=="strict"')
+ee('assert sys.stdout.encoding==sys.stderr.encoding')
 ee('sys.stdout.write(None)')
 cb.append(">> OutputWriteLines")
 ee('sys.stdout.writelines(None)')
index 25c0b510322b824b57c5b03f3acf63b22b165e34..10069b9959e01003aea3f79a0c48f9db5a2beb78 100644 (file)
@@ -449,7 +449,7 @@ range:__dir__,append,end,start
 dictionary:__dir__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
 list:__dir__,extend,locked
 function:__dir__,args,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}
@@ -600,6 +600,11 @@ assert sys.stdout.writable()==True:NOT FAILED
 assert sys.stdout.readable()==False:NOT FAILED
 assert sys.stderr.writable()==True:NOT FAILED
 assert sys.stderr.readable()==False:NOT FAILED
+assert sys.stdout.closed()==False:NOT FAILED
+assert sys.stderr.closed()==False:NOT FAILED
+assert sys.stdout.errors=="strict":NOT FAILED
+assert sys.stderr.errors=="strict":NOT FAILED
+assert sys.stdout.encoding==sys.stderr.encoding:NOT FAILED
 sys.stdout.write(None):(<class 'TypeError'>, TypeError("Can't convert 'NoneType' object to str implicitly",))
 >> OutputWriteLines
 sys.stdout.writelines(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",))
index 9c0387253c9ad37eebb20e43ba77522024ed2344..4599f8827c963442f54138aae66ad63e3b591925 100644 (file)
@@ -748,6 +748,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1769,
 /**/
     1768,
 /**/