[Python-checkins] cpython (merge 3.4 -> default): Issue #21088: Merge from 3.4.
larry.hastings
python-checkins at python.org
Sun May 4 13:48:29 CEST 2014
http://hg.python.org/cpython/rev/3aa5fae8c313
changeset: 90560:3aa5fae8c313
parent: 90558:a3c345ba3563
parent: 90559:4f26430b03fd
user: Larry Hastings <larry at hastings.org>
date: Sun May 04 04:45:57 2014 -0700
summary:
Issue #21088: Merge from 3.4.
files:
Lib/test/test_curses.py | 30 +++++++++++++++++++++++++++++
Misc/NEWS | 3 ++
Modules/_cursesmodule.c | 24 +++++++++++-----------
3 files changed, 45 insertions(+), 12 deletions(-)
diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py
--- a/Lib/test/test_curses.py
+++ b/Lib/test/test_curses.py
@@ -17,6 +17,7 @@
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 @@
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 @@
test_unget_wch(stdscr)
test_issue10570()
test_encoding(stdscr)
+ test_issue21088(stdscr)
finally:
curses.resetty()
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -69,6 +69,9 @@
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 #10650: Remove the non-standard 'watchexp' parameter from the
Decimal.quantize() method in the Python version. It had never been
present in the C version.
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -560,10 +560,10 @@
curses.window.addch
[
+ y: int
+ Y-coordinate.
x: int
X-coordinate.
- y: int
- Y-coordinate.
]
ch: object
@@ -584,13 +584,13 @@
[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"
+" y\n"
+" Y-coordinate.\n"
" x\n"
" X-coordinate.\n"
-" y\n"
-" Y-coordinate.\n"
" ch\n"
" Character to add.\n"
" attr\n"
@@ -605,15 +605,15 @@
{"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 y = 0;
int x = 0;
- int y = 0;
PyObject *ch;
int group_right_1 = 0;
long attr = 0;
@@ -629,12 +629,12 @@
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 @@
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;
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list