mirror of
https://github.com/python/cpython.git
synced 2024-11-27 11:55:13 +08:00
Issue #18101: Tcl.split() now process strings nested in a tuple as it
do with byte strings. Added tests for Tcl.split() and Tcl.splitline().
This commit is contained in:
parent
5a33f81348
commit
275d5fdbe4
@ -175,6 +175,66 @@ class TclTest(unittest.TestCase):
|
||||
self.assertEqual(passValue(f), f)
|
||||
self.assertEqual(passValue((1, '2', (3.4,))), (1, '2', (3.4,)))
|
||||
|
||||
def test_splitlist(self):
|
||||
splitlist = self.interp.tk.splitlist
|
||||
call = self.interp.tk.call
|
||||
self.assertRaises(TypeError, splitlist)
|
||||
self.assertRaises(TypeError, splitlist, 'a', 'b')
|
||||
self.assertRaises(TypeError, splitlist, 2)
|
||||
testcases = [
|
||||
('2', ('2',)),
|
||||
('', ()),
|
||||
('{}', ('',)),
|
||||
('""', ('',)),
|
||||
('a\n b\t\r c\n ', ('a', 'b', 'c')),
|
||||
(b'a\n b\t\r c\n ', ('a', 'b', 'c')),
|
||||
('a \u20ac', ('a', '\u20ac')),
|
||||
(b'a \xe2\x82\xac', ('a', '\u20ac')),
|
||||
('a {b c}', ('a', 'b c')),
|
||||
(r'a b\ c', ('a', 'b c')),
|
||||
(('a', 'b c'), ('a', 'b c')),
|
||||
('a 2', ('a', '2')),
|
||||
(('a', 2), ('a', 2)),
|
||||
('a 3.4', ('a', '3.4')),
|
||||
(('a', 3.4), ('a', 3.4)),
|
||||
((), ()),
|
||||
(call('list', 1, '2', (3.4,)), (1, '2', (3.4,))),
|
||||
]
|
||||
for arg, res in testcases:
|
||||
self.assertEqual(splitlist(arg), res, msg=arg)
|
||||
self.assertRaises(TclError, splitlist, '{')
|
||||
|
||||
def test_split(self):
|
||||
split = self.interp.tk.split
|
||||
call = self.interp.tk.call
|
||||
self.assertRaises(TypeError, split)
|
||||
self.assertRaises(TypeError, split, 'a', 'b')
|
||||
self.assertRaises(TypeError, split, 2)
|
||||
testcases = [
|
||||
('2', '2'),
|
||||
('', ''),
|
||||
('{}', ''),
|
||||
('""', ''),
|
||||
('{', '{'),
|
||||
('a\n b\t\r c\n ', ('a', 'b', 'c')),
|
||||
(b'a\n b\t\r c\n ', ('a', 'b', 'c')),
|
||||
('a \u20ac', ('a', '\u20ac')),
|
||||
(b'a \xe2\x82\xac', ('a', '\u20ac')),
|
||||
('a {b c}', ('a', ('b', 'c'))),
|
||||
(r'a b\ c', ('a', ('b', 'c'))),
|
||||
(('a', b'b c'), ('a', ('b', 'c'))),
|
||||
(('a', 'b c'), ('a', ('b', 'c'))),
|
||||
('a 2', ('a', '2')),
|
||||
(('a', 2), ('a', 2)),
|
||||
('a 3.4', ('a', '3.4')),
|
||||
(('a', 3.4), ('a', 3.4)),
|
||||
(('a', (2, 3.4)), ('a', (2, 3.4))),
|
||||
((), ()),
|
||||
(call('list', 1, '2', (3.4,)), (1, '2', (3.4,))),
|
||||
]
|
||||
for arg, res in testcases:
|
||||
self.assertEqual(split(arg), res, msg=arg)
|
||||
|
||||
|
||||
def test_main():
|
||||
support.run_unittest(TclTest, TkinterTest)
|
||||
|
@ -44,6 +44,9 @@ Core and Builtins
|
||||
Library
|
||||
-------
|
||||
|
||||
- Issue #18101: Tcl.split() now process strings nested in a tuple as it
|
||||
do with byte strings.
|
||||
|
||||
- Issue #17198: Fix a NameError in the dbm module. Patch by Valentina
|
||||
Mukhamedzhanova.
|
||||
|
||||
|
@ -519,6 +519,21 @@ SplitObj(PyObject *arg)
|
||||
return result;
|
||||
/* Fall through, returning arg. */
|
||||
}
|
||||
else if (PyUnicode_Check(arg)) {
|
||||
int argc;
|
||||
char **argv;
|
||||
char *list = PyUnicode_AsUTF8(arg);
|
||||
|
||||
if (list == NULL ||
|
||||
Tcl_SplitList((Tcl_Interp *)NULL, list, &argc, &argv) != TCL_OK) {
|
||||
Py_INCREF(arg);
|
||||
return arg;
|
||||
}
|
||||
Tcl_Free(FREECAST argv);
|
||||
if (argc > 1)
|
||||
return Split(list);
|
||||
/* Fall through, returning arg. */
|
||||
}
|
||||
else if (PyBytes_Check(arg)) {
|
||||
int argc;
|
||||
char **argv;
|
||||
|
Loading…
Reference in New Issue
Block a user