]> granicus.if.org Git - python/commitdiff
Fixed #1969: split and rsplit in bytearray are inconsistent
authorChristian Heimes <christian@cheimes.de>
Wed, 30 Jan 2008 09:51:48 +0000 (09:51 +0000)
committerChristian Heimes <christian@cheimes.de>
Wed, 30 Jan 2008 09:51:48 +0000 (09:51 +0000)
Lib/test/test_bytes.py
Misc/NEWS
Objects/bytesobject.c

index 0fd2f76dd951e4fed65f03c7e94e56a5363ed52a..40082c34306fd99a0cd5c9b12df397660997b8c6 100644 (file)
@@ -706,7 +706,7 @@ class BytesTest(unittest.TestCase):
             self.assertEqual(b.rsplit(None, 2), [b'arf', b'barf'])
         self.assertEqual(b'  a  bb  c  '.rsplit(None, 0), [b'  a  bb  c'])
         self.assertEqual(b'  a  bb  c  '.rsplit(None, 1), [b'  a  bb', b'c'])
-        self.assertEqual(b'  a  bb  c  '.rsplit(None,2), [b'  a', b'bb', b'c'])
+        self.assertEqual(b'  a  bb  c  '.rsplit(None, 2), [b'  a', b'bb', b'c'])
         self.assertEqual(b'  a  bb  c  '.rsplit(None, 3), [b'a', b'bb', b'c'])
 
     def test_rsplit_bytearray(self):
@@ -715,6 +715,15 @@ class BytesTest(unittest.TestCase):
     def test_rsplit_string_error(self):
         self.assertRaises(TypeError, b'a b'.rsplit, ' ')
 
+    def test_rsplit_unicodewhitespace(self):
+        b = b"\x09\x0A\x0B\x0C\x0D\x1C\x1D\x1E\x1F"
+        self.assertEqual(b.split(), [b'\x1c\x1d\x1e\x1f'])
+        self.assertEqual(b.rsplit(), [b'\x1c\x1d\x1e\x1f'])
+        ba = bytearray(b)
+        self.assertEqual(ba.split(), [bytearray(b'\x1c\x1d\x1e\x1f')])
+        self.assertEqual(ba.rsplit(), [bytearray(b'\x1c\x1d\x1e\x1f')])
+
+
     def test_partition(self):
         b = b'mississippi'
         self.assertEqual(b.partition(b'ss'), (b'mi', b'ss', b'issippi'))
index d40a42213385522452707aba8214b671b18d92af..a2dbee4d57a4b626a9cc35c65b39d8c2943611f8 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@ What's New in Python 3.0a3?
 Core and Builtins
 -----------------
 
+- Issue #1969: split and rsplit in bytearray are inconsistent
+
 - map() and itertools.imap() no longer accept None for the first argument.
   Use zip() instead.
 
index 45dcb91c1fd5dec9aaf4cbf81f61f8f42caa4572..e0e3cd0eb3af9e9c6f31127425c721944f255261 100644 (file)
@@ -2388,16 +2388,16 @@ rsplit_whitespace(const char *s, Py_ssize_t len, Py_ssize_t maxcount)
 
     for (i = j = len - 1; i >= 0; ) {
         /* find a token */
-        while (i >= 0 && Py_UNICODE_ISSPACE(s[i]))
+        while (i >= 0 && ISSPACE(s[i]))
             i--;
         j = i;
-        while (i >= 0 && !Py_UNICODE_ISSPACE(s[i]))
+        while (i >= 0 && !ISSPACE(s[i]))
             i--;
         if (j > i) {
             if (maxcount-- <= 0)
                 break;
             SPLIT_ADD(s, i + 1, j + 1);
-            while (i >= 0 && Py_UNICODE_ISSPACE(s[i]))
+            while (i >= 0 && ISSPACE(s[i]))
                 i--;
             j = i;
         }