Issue #21088: Bugfix for curses.window.addch() regression in 3.4.0.
In porting to Argument Clinic, the first two arguments were reversed.
This commit is contained in:
parent
88b5b6ddf6
commit
9147a9697a
|
@ -17,6 +17,7 @@ import sys, tempfile, os
|
|||
|
||||
import unittest
|
||||
from test.support import requires, import_module
|
||||
import inspect
|
||||
requires('curses')
|
||||
|
||||
# If either of these don't exist, skip the tests.
|
||||
|
@ -331,6 +332,34 @@ def test_encoding(stdscr):
|
|||
else:
|
||||
raise AssertionError("TypeError not raised")
|
||||
|
||||
def test_issue21088(stdscr):
|
||||
#
|
||||
# http://bugs.python.org/issue21088
|
||||
#
|
||||
# the bug:
|
||||
# when converting curses.window.addch to Argument Clinic
|
||||
# the first two parameters were switched.
|
||||
|
||||
# if someday we can represent the signature of addch
|
||||
# we will need to rewrite this test.
|
||||
try:
|
||||
signature = inspect.signature(stdscr.addch)
|
||||
self.assertFalse(signature)
|
||||
except ValueError:
|
||||
# not generating a signature is fine.
|
||||
pass
|
||||
|
||||
# So. No signature for addch.
|
||||
# But Argument Clinic gave us a human-readable equivalent
|
||||
# as the first line of the docstring. So we parse that,
|
||||
# and ensure that the parameters appear in the correct order.
|
||||
# Since this is parsing output from Argument Clinic, we can
|
||||
# be reasonably certain the generated parsing code will be
|
||||
# correct too.
|
||||
human_readable_signature = stdscr.addch.__doc__.split("\n")[0]
|
||||
offset = human_readable_signature.find("[y, x,]")
|
||||
assert offset >= 0, ""
|
||||
|
||||
def main(stdscr):
|
||||
curses.savetty()
|
||||
try:
|
||||
|
@ -344,6 +373,7 @@ def main(stdscr):
|
|||
test_unget_wch(stdscr)
|
||||
test_issue10570()
|
||||
test_encoding(stdscr)
|
||||
test_issue21088(stdscr)
|
||||
finally:
|
||||
curses.resetty()
|
||||
|
||||
|
|
|
@ -39,6 +39,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #21088: Bugfix for curses.window.addch() regression in 3.4.0.
|
||||
In porting to Argument Clinic, the first two arguments were reversed.
|
||||
|
||||
- Issue #21321: itertools.islice() now releases the reference to the source
|
||||
iterator when the slice is exhausted. Patch by Anton Afanasyev.
|
||||
|
||||
|
|
|
@ -560,10 +560,10 @@ PyCursesWindow_Dealloc(PyCursesWindowObject *wo)
|
|||
curses.window.addch
|
||||
|
||||
[
|
||||
x: int
|
||||
X-coordinate.
|
||||
y: int
|
||||
Y-coordinate.
|
||||
x: int
|
||||
X-coordinate.
|
||||
]
|
||||
|
||||
ch: object
|
||||
|
@ -584,13 +584,13 @@ current settings for the window object.
|
|||
[clinic start generated code]*/
|
||||
|
||||
PyDoc_STRVAR(curses_window_addch__doc__,
|
||||
"addch([x, y,] ch, [attr])\n"
|
||||
"addch([y, x,] ch, [attr])\n"
|
||||
"Paint character ch at (y, x) with attributes attr.\n"
|
||||
"\n"
|
||||
" x\n"
|
||||
" X-coordinate.\n"
|
||||
" y\n"
|
||||
" Y-coordinate.\n"
|
||||
" x\n"
|
||||
" X-coordinate.\n"
|
||||
" ch\n"
|
||||
" Character to add.\n"
|
||||
" attr\n"
|
||||
|
@ -605,15 +605,15 @@ PyDoc_STRVAR(curses_window_addch__doc__,
|
|||
{"addch", (PyCFunction)curses_window_addch, METH_VARARGS, curses_window_addch__doc__},
|
||||
|
||||
static PyObject *
|
||||
curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int x, int y, PyObject *ch, int group_right_1, long attr);
|
||||
curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, int x, PyObject *ch, int group_right_1, long attr);
|
||||
|
||||
static PyObject *
|
||||
curses_window_addch(PyCursesWindowObject *self, PyObject *args)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
int group_left_1 = 0;
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
int x = 0;
|
||||
PyObject *ch;
|
||||
int group_right_1 = 0;
|
||||
long attr = 0;
|
||||
|
@ -629,12 +629,12 @@ curses_window_addch(PyCursesWindowObject *self, PyObject *args)
|
|||
group_right_1 = 1;
|
||||
break;
|
||||
case 3:
|
||||
if (!PyArg_ParseTuple(args, "iiO:addch", &x, &y, &ch))
|
||||
if (!PyArg_ParseTuple(args, "iiO:addch", &y, &x, &ch))
|
||||
goto exit;
|
||||
group_left_1 = 1;
|
||||
break;
|
||||
case 4:
|
||||
if (!PyArg_ParseTuple(args, "iiOl:addch", &x, &y, &ch, &attr))
|
||||
if (!PyArg_ParseTuple(args, "iiOl:addch", &y, &x, &ch, &attr))
|
||||
goto exit;
|
||||
group_right_1 = 1;
|
||||
group_left_1 = 1;
|
||||
|
@ -643,15 +643,15 @@ curses_window_addch(PyCursesWindowObject *self, PyObject *args)
|
|||
PyErr_SetString(PyExc_TypeError, "curses.window.addch requires 1 to 4 arguments");
|
||||
goto exit;
|
||||
}
|
||||
return_value = curses_window_addch_impl(self, group_left_1, x, y, ch, group_right_1, attr);
|
||||
return_value = curses_window_addch_impl(self, group_left_1, y, x, ch, group_right_1, attr);
|
||||
|
||||
exit:
|
||||
return return_value;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int x, int y, PyObject *ch, int group_right_1, long attr)
|
||||
/*[clinic end generated code: output=43acb91a5c98f615 input=fe7e3711d5bbf1f6]*/
|
||||
curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, int x, PyObject *ch, int group_right_1, long attr)
|
||||
/*[clinic end generated code: output=d4b97cc287010c54 input=5a41efb34a2de338]*/
|
||||
{
|
||||
PyCursesWindowObject *cwself = (PyCursesWindowObject *)self;
|
||||
int coordinates_group = group_left_1;
|
||||
|
|
Loading…
Reference in New Issue