Issue #19028: Fixed tkinter.Tkapp.merge() for non-string arguments.
This commit is contained in:
parent
587b30571d
commit
369606df2f
|
@ -254,6 +254,37 @@ class TclTest(unittest.TestCase):
|
|||
for arg, res in testcases:
|
||||
self.assertEqual(split(arg), res, msg=arg)
|
||||
|
||||
def test_merge(self):
|
||||
with support.check_warnings(('merge is deprecated',
|
||||
DeprecationWarning)):
|
||||
merge = self.interp.tk.merge
|
||||
call = self.interp.tk.call
|
||||
testcases = [
|
||||
((), ''),
|
||||
(('a',), 'a'),
|
||||
((2,), '2'),
|
||||
(('',), '{}'),
|
||||
('{', '\\{'),
|
||||
(('a', 'b', 'c'), 'a b c'),
|
||||
((' ', '\t', '\r', '\n'), '{ } {\t} {\r} {\n}'),
|
||||
(('a', ' ', 'c'), 'a { } c'),
|
||||
(('a', '€'), 'a €'),
|
||||
(('a', '\U000104a2'), 'a \U000104a2'),
|
||||
(('a', b'\xe2\x82\xac'), 'a €'),
|
||||
(('a', ('b', 'c')), 'a {b c}'),
|
||||
(('a', 2), 'a 2'),
|
||||
(('a', 3.4), 'a 3.4'),
|
||||
(('a', (2, 3.4)), 'a {2 3.4}'),
|
||||
((), ''),
|
||||
((call('list', 1, '2', (3.4,)),), '{1 2 3.4}'),
|
||||
((call('dict', 'create', 12, '\u20ac', b'\xe2\x82\xac', (3.4,)),),
|
||||
'{12 € € 3.4}'),
|
||||
]
|
||||
for args, res in testcases:
|
||||
self.assertEqual(merge(*args), res, msg=args)
|
||||
self.assertRaises(UnicodeDecodeError, merge, b'\x80')
|
||||
self.assertRaises(UnicodeEncodeError, merge, '\udc80')
|
||||
|
||||
|
||||
class BigmemTclTest(unittest.TestCase):
|
||||
|
||||
|
|
|
@ -68,6 +68,8 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #19028: Fixed tkinter.Tkapp.merge() for non-string arguments.
|
||||
|
||||
- Issue #3015: Fixed tkinter with wantobject=False. Any Tcl command call
|
||||
returned empty string.
|
||||
|
||||
|
|
|
@ -331,17 +331,8 @@ AsString(PyObject *value, PyObject *tmp)
|
|||
{
|
||||
if (PyBytes_Check(value))
|
||||
return PyBytes_AsString(value);
|
||||
else if (PyUnicode_Check(value)) {
|
||||
PyObject *v = PyUnicode_AsUTF8String(value);
|
||||
if (v == NULL)
|
||||
return NULL;
|
||||
if (PyList_Append(tmp, v) != 0) {
|
||||
Py_DECREF(v);
|
||||
return NULL;
|
||||
}
|
||||
Py_DECREF(v);
|
||||
return PyBytes_AsString(v);
|
||||
}
|
||||
else if (PyUnicode_Check(value))
|
||||
return PyUnicode_AsUTF8(value);
|
||||
else {
|
||||
PyObject *v = PyObject_Str(value);
|
||||
if (v == NULL)
|
||||
|
@ -351,7 +342,7 @@ AsString(PyObject *value, PyObject *tmp)
|
|||
return NULL;
|
||||
}
|
||||
Py_DECREF(v);
|
||||
return PyBytes_AsString(v);
|
||||
return PyUnicode_AsUTF8(v);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue