mirror of https://github.com/python/cpython
Issue #13012: Allow 'keepends' to be passed as a keyword argument in str.splitlines, bytes.splitlines and bytearray.splitlines.
This commit is contained in:
parent
a61b053e61
commit
0d5f6adbb3
|
@ -200,7 +200,13 @@ class MixinBytesBufferCommonTests(object):
|
|||
self.marshal(b'abc\ndef\r\nghi\n\r').splitlines())
|
||||
self.assertEqual([b'', b'abc', b'def', b'ghi', b''],
|
||||
self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines())
|
||||
self.assertEqual([b'', b'abc', b'def', b'ghi', b''],
|
||||
self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(False))
|
||||
self.assertEqual([b'\n', b'abc\n', b'def\r\n', b'ghi\n', b'\r'],
|
||||
self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(1))
|
||||
self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(True))
|
||||
self.assertEqual([b'', b'abc', b'def', b'ghi', b''],
|
||||
self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(keepends=False))
|
||||
self.assertEqual([b'\n', b'abc\n', b'def\r\n', b'ghi\n', b'\r'],
|
||||
self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(keepends=True))
|
||||
|
||||
self.assertRaises(TypeError, self.marshal(b'abc').splitlines, 42, 42)
|
||||
|
|
|
@ -47,11 +47,12 @@ class BaseTest(unittest.TestCase):
|
|||
return obj
|
||||
|
||||
# check that obj.method(*args) returns result
|
||||
def checkequal(self, result, obj, methodname, *args):
|
||||
def checkequal(self, result, obj, methodname, *args, **kwargs):
|
||||
result = self.fixtype(result)
|
||||
obj = self.fixtype(obj)
|
||||
args = self.fixtype(args)
|
||||
realresult = getattr(obj, methodname)(*args)
|
||||
kwargs = self.fixtype(kwargs)
|
||||
realresult = getattr(obj, methodname)(*args, **kwargs)
|
||||
self.assertEqual(
|
||||
result,
|
||||
realresult
|
||||
|
@ -908,7 +909,14 @@ class MixinStrUnicodeUserStringTest:
|
|||
self.checkequal(['abc', 'def', 'ghi'], "abc\ndef\r\nghi\n", 'splitlines')
|
||||
self.checkequal(['abc', 'def', 'ghi', ''], "abc\ndef\r\nghi\n\r", 'splitlines')
|
||||
self.checkequal(['', 'abc', 'def', 'ghi', ''], "\nabc\ndef\r\nghi\n\r", 'splitlines')
|
||||
self.checkequal(['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'], "\nabc\ndef\r\nghi\n\r", 'splitlines', 1)
|
||||
self.checkequal(['', 'abc', 'def', 'ghi', ''],
|
||||
"\nabc\ndef\r\nghi\n\r", 'splitlines', False)
|
||||
self.checkequal(['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'],
|
||||
"\nabc\ndef\r\nghi\n\r", 'splitlines', True)
|
||||
self.checkequal(['', 'abc', 'def', 'ghi', ''], "\nabc\ndef\r\nghi\n\r",
|
||||
'splitlines', keepends=False)
|
||||
self.checkequal(['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'],
|
||||
"\nabc\ndef\r\nghi\n\r", 'splitlines', keepends=True)
|
||||
|
||||
self.checkraises(TypeError, 'abc', 'splitlines', 42, 42)
|
||||
|
||||
|
|
|
@ -17,11 +17,11 @@ class UserStringTest(
|
|||
# Overwrite the three testing methods, because UserString
|
||||
# can't cope with arguments propagated to UserString
|
||||
# (and we don't test with subclasses)
|
||||
def checkequal(self, result, object, methodname, *args):
|
||||
def checkequal(self, result, object, methodname, *args, **kwargs):
|
||||
result = self.fixtype(result)
|
||||
object = self.fixtype(object)
|
||||
# we don't fix the arguments, because UserString can't cope with it
|
||||
realresult = getattr(object, methodname)(*args)
|
||||
realresult = getattr(object, methodname)(*args, **kwargs)
|
||||
self.assertEqual(
|
||||
result,
|
||||
realresult
|
||||
|
|
|
@ -10,6 +10,10 @@ What's New in Python 3.3 Alpha 1?
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #13012: The 'keepends' parameter to str.splitlines may now be passed
|
||||
as a keyword argument: "my_string.splitlines(keepends=True)". The same
|
||||
change also applies to bytes.splitlines and bytearray.splitlines.
|
||||
|
||||
- Issue #7732: Don't open a directory as a file anymore while importing a
|
||||
module. Ignore the direcotry if its name matchs the module name (e.g.
|
||||
"__init__.py") and raise a ImportError instead.
|
||||
|
|
|
@ -2608,11 +2608,13 @@ Line breaks are not included in the resulting list unless keepends\n\
|
|||
is given and true.");
|
||||
|
||||
static PyObject*
|
||||
bytearray_splitlines(PyObject *self, PyObject *args)
|
||||
bytearray_splitlines(PyObject *self, PyObject *args, PyObject *kwds)
|
||||
{
|
||||
static char *kwlist[] = {"keepends", 0};
|
||||
int keepends = 0;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "|i:splitlines", &keepends))
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|i:splitlines",
|
||||
kwlist, &keepends))
|
||||
return NULL;
|
||||
|
||||
return stringlib_splitlines(
|
||||
|
@ -2801,8 +2803,8 @@ bytearray_methods[] = {
|
|||
{"rsplit", (PyCFunction)bytearray_rsplit, METH_VARARGS, rsplit__doc__},
|
||||
{"rstrip", (PyCFunction)bytearray_rstrip, METH_VARARGS, rstrip__doc__},
|
||||
{"split", (PyCFunction)bytearray_split, METH_VARARGS, split__doc__},
|
||||
{"splitlines", (PyCFunction)bytearray_splitlines, METH_VARARGS,
|
||||
splitlines__doc__},
|
||||
{"splitlines", (PyCFunction)bytearray_splitlines,
|
||||
METH_VARARGS | METH_KEYWORDS, splitlines__doc__},
|
||||
{"startswith", (PyCFunction)bytearray_startswith, METH_VARARGS ,
|
||||
startswith__doc__},
|
||||
{"strip", (PyCFunction)bytearray_strip, METH_VARARGS, strip__doc__},
|
||||
|
|
|
@ -2312,11 +2312,13 @@ Line breaks are not included in the resulting list unless keepends\n\
|
|||
is given and true.");
|
||||
|
||||
static PyObject*
|
||||
bytes_splitlines(PyObject *self, PyObject *args)
|
||||
bytes_splitlines(PyObject *self, PyObject *args, PyObject *kwds)
|
||||
{
|
||||
static char *kwlist[] = {"keepends", 0};
|
||||
int keepends = 0;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "|i:splitlines", &keepends))
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|i:splitlines",
|
||||
kwlist, &keepends))
|
||||
return NULL;
|
||||
|
||||
return stringlib_splitlines(
|
||||
|
@ -2458,7 +2460,7 @@ bytes_methods[] = {
|
|||
{"rsplit", (PyCFunction)bytes_rsplit, METH_VARARGS, rsplit__doc__},
|
||||
{"rstrip", (PyCFunction)bytes_rstrip, METH_VARARGS, rstrip__doc__},
|
||||
{"split", (PyCFunction)bytes_split, METH_VARARGS, split__doc__},
|
||||
{"splitlines", (PyCFunction)bytes_splitlines, METH_VARARGS,
|
||||
{"splitlines", (PyCFunction)bytes_splitlines, METH_VARARGS | METH_KEYWORDS,
|
||||
splitlines__doc__},
|
||||
{"startswith", (PyCFunction)bytes_startswith, METH_VARARGS,
|
||||
startswith__doc__},
|
||||
|
|
|
@ -8881,11 +8881,13 @@ Line breaks are not included in the resulting list unless keepends\n\
|
|||
is given and true.");
|
||||
|
||||
static PyObject*
|
||||
unicode_splitlines(PyUnicodeObject *self, PyObject *args)
|
||||
unicode_splitlines(PyUnicodeObject *self, PyObject *args, PyObject *kwds)
|
||||
{
|
||||
static char *kwlist[] = {"keepends", 0};
|
||||
int keepends = 0;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "|i:splitlines", &keepends))
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|i:splitlines",
|
||||
kwlist, &keepends))
|
||||
return NULL;
|
||||
|
||||
return PyUnicode_Splitlines((PyObject *)self, keepends);
|
||||
|
@ -9273,7 +9275,7 @@ static PyMethodDef unicode_methods[] = {
|
|||
{"rjust", (PyCFunction) unicode_rjust, METH_VARARGS, rjust__doc__},
|
||||
{"rstrip", (PyCFunction) unicode_rstrip, METH_VARARGS, rstrip__doc__},
|
||||
{"rpartition", (PyCFunction) unicode_rpartition, METH_O, rpartition__doc__},
|
||||
{"splitlines", (PyCFunction) unicode_splitlines, METH_VARARGS, splitlines__doc__},
|
||||
{"splitlines", (PyCFunction) unicode_splitlines, METH_VARARGS | METH_KEYWORDS, splitlines__doc__},
|
||||
{"strip", (PyCFunction) unicode_strip, METH_VARARGS, strip__doc__},
|
||||
{"swapcase", (PyCFunction) unicode_swapcase, METH_NOARGS, swapcase__doc__},
|
||||
{"translate", (PyCFunction) unicode_translate, METH_O, translate__doc__},
|
||||
|
|
Loading…
Reference in New Issue