forked from aniani/vim
patch 7.4.905
Problem: Python interface can produce error "vim.message' object has no attribute 'isatty'". Solution: Add dummy isatty(), readable(), etc. (closes #464)
This commit is contained in:
parent
6407b3e80d
commit
d424747d58
@ -465,20 +465,41 @@ OutputWritelines(OutputObject *self, PyObject *seq)
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
OutputFlush(PyObject *self UNUSED)
|
||||
AlwaysNone(PyObject *self UNUSED)
|
||||
{
|
||||
/* do nothing */
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
AlwaysFalse(PyObject *self UNUSED)
|
||||
{
|
||||
/* do nothing */
|
||||
Py_INCREF(Py_False);
|
||||
return Py_False;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
AlwaysTrue(PyObject *self UNUSED)
|
||||
{
|
||||
/* do nothing */
|
||||
Py_INCREF(Py_True);
|
||||
return Py_True;
|
||||
}
|
||||
|
||||
/***************/
|
||||
|
||||
static struct PyMethodDef OutputMethods[] = {
|
||||
/* name, function, calling, doc */
|
||||
{"write", (PyCFunction)OutputWrite, METH_O, ""},
|
||||
{"writelines", (PyCFunction)OutputWritelines, METH_O, ""},
|
||||
{"flush", (PyCFunction)OutputFlush, METH_NOARGS, ""},
|
||||
{"flush", (PyCFunction)AlwaysNone, METH_NOARGS, ""},
|
||||
{"close", (PyCFunction)AlwaysNone, METH_NOARGS, ""},
|
||||
{"isatty", (PyCFunction)AlwaysFalse, METH_NOARGS, ""},
|
||||
{"readable", (PyCFunction)AlwaysFalse, METH_NOARGS, ""},
|
||||
{"seekable", (PyCFunction)AlwaysFalse, METH_NOARGS, ""},
|
||||
{"writable", (PyCFunction)AlwaysTrue, METH_NOARGS, ""},
|
||||
{"__dir__", (PyCFunction)OutputDir, METH_NOARGS, ""},
|
||||
{ NULL, NULL, 0, NULL}
|
||||
};
|
||||
|
@ -1094,8 +1094,20 @@ cb.append(">> OutputSetattr")
|
||||
ee('del sys.stdout.softspace')
|
||||
number_test('sys.stdout.softspace = %s', unsigned=True)
|
||||
number_test('sys.stderr.softspace = %s', unsigned=True)
|
||||
ee('assert sys.stdout.isatty()==False')
|
||||
ee('assert sys.stdout.seekable()==False')
|
||||
ee('sys.stdout.close()')
|
||||
ee('sys.stdout.flush()')
|
||||
ee('assert sys.stderr.isatty()==False')
|
||||
ee('assert sys.stderr.seekable()==False')
|
||||
ee('sys.stderr.close()')
|
||||
ee('sys.stderr.flush()')
|
||||
ee('sys.stdout.attr = None')
|
||||
cb.append(">> OutputWrite")
|
||||
ee('assert sys.stdout.writable()==True')
|
||||
ee('assert sys.stdout.readable()==False')
|
||||
ee('assert sys.stderr.writable()==True')
|
||||
ee('assert sys.stderr.readable()==False')
|
||||
ee('sys.stdout.write(None)')
|
||||
cb.append(">> OutputWriteLines")
|
||||
ee('sys.stdout.writelines(None)')
|
||||
|
@ -447,7 +447,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__,softspace
|
||||
output:__dir__,__members__,flush,softspace,write,writelines
|
||||
output:__dir__,__members__,close,flush,isatty,readable,seekable,softspace,writable,write,writelines
|
||||
{}
|
||||
{'a': 1}
|
||||
{'a': 1}
|
||||
@ -488,8 +488,20 @@ sys.stderr.softspace = []:TypeError:('expected int(), long() or something suppor
|
||||
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
|
||||
assert sys.stdout.isatty()==False:NOT FAILED
|
||||
assert sys.stdout.seekable()==False:NOT FAILED
|
||||
sys.stdout.close():NOT FAILED
|
||||
sys.stdout.flush():NOT FAILED
|
||||
assert sys.stderr.isatty()==False:NOT FAILED
|
||||
assert sys.stderr.seekable()==False:NOT FAILED
|
||||
sys.stderr.close():NOT FAILED
|
||||
sys.stderr.flush():NOT FAILED
|
||||
sys.stdout.attr = None:AttributeError:('invalid attribute: attr',)
|
||||
>> OutputWrite
|
||||
assert sys.stdout.writable()==True:NOT FAILED
|
||||
assert sys.stdout.readable()==False:NOT FAILED
|
||||
assert sys.stderr.writable()==True:NOT FAILED
|
||||
assert sys.stderr.readable()==False:NOT FAILED
|
||||
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",)
|
||||
|
@ -1071,8 +1071,20 @@ cb.append(">> OutputSetattr")
|
||||
ee('del sys.stdout.softspace')
|
||||
number_test('sys.stdout.softspace = %s', unsigned=True)
|
||||
number_test('sys.stderr.softspace = %s', unsigned=True)
|
||||
ee('assert sys.stdout.isatty()==False')
|
||||
ee('assert sys.stdout.seekable()==False')
|
||||
ee('sys.stdout.close()')
|
||||
ee('sys.stdout.flush()')
|
||||
ee('assert sys.stderr.isatty()==False')
|
||||
ee('assert sys.stderr.seekable()==False')
|
||||
ee('sys.stderr.close()')
|
||||
ee('sys.stderr.flush()')
|
||||
ee('sys.stdout.attr = None')
|
||||
cb.append(">> OutputWrite")
|
||||
ee('assert sys.stdout.writable()==True')
|
||||
ee('assert sys.stdout.readable()==False')
|
||||
ee('assert sys.stderr.writable()==True')
|
||||
ee('assert sys.stderr.readable()==False')
|
||||
ee('sys.stdout.write(None)')
|
||||
cb.append(">> OutputWriteLines")
|
||||
ee('sys.stdout.writelines(None)')
|
||||
|
@ -447,7 +447,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__,softspace
|
||||
output:__dir__,flush,softspace,write,writelines
|
||||
output:__dir__,close,flush,isatty,readable,seekable,softspace,writable,write,writelines
|
||||
{}
|
||||
{'a': 1}
|
||||
{'a': 1}
|
||||
@ -488,8 +488,20 @@ sys.stderr.softspace = []:(<class 'TypeError'>, TypeError('expected int() or som
|
||||
sys.stderr.softspace = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
|
||||
sys.stderr.softspace = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
|
||||
<<< Finished
|
||||
assert sys.stdout.isatty()==False:NOT FAILED
|
||||
assert sys.stdout.seekable()==False:NOT FAILED
|
||||
sys.stdout.close():NOT FAILED
|
||||
sys.stdout.flush():NOT FAILED
|
||||
assert sys.stderr.isatty()==False:NOT FAILED
|
||||
assert sys.stderr.seekable()==False:NOT FAILED
|
||||
sys.stderr.close():NOT FAILED
|
||||
sys.stderr.flush():NOT FAILED
|
||||
sys.stdout.attr = None:(<class 'AttributeError'>, AttributeError('invalid attribute: attr',))
|
||||
>> OutputWrite
|
||||
assert sys.stdout.writable()==True:NOT FAILED
|
||||
assert sys.stdout.readable()==False:NOT FAILED
|
||||
assert sys.stderr.writable()==True:NOT FAILED
|
||||
assert sys.stderr.readable()==False:NOT FAILED
|
||||
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",))
|
||||
|
@ -741,6 +741,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
905,
|
||||
/**/
|
||||
904,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user