| @@ -143,19 +143,21 @@ class StringMixIn(object): | |||||
| if not py3k: | if not py3k: | ||||
| @inheritdoc | @inheritdoc | ||||
| def decode(self, encoding=None, errors=None): | def decode(self, encoding=None, errors=None): | ||||
| if errors is None: | |||||
| if encoding is None: | |||||
| return self.__unicode__().decode() | |||||
| return self.__unicode__().decode(encoding) | |||||
| return self.__unicode__().decode(encoding, errors) | |||||
| kwargs = {} | |||||
| if encoding is not None: | |||||
| kwargs["encoding"] = encoding | |||||
| if errors is not None: | |||||
| kwargs["errors"] = errors | |||||
| return self.__unicode__().decode(**kwargs) | |||||
| @inheritdoc | @inheritdoc | ||||
| def encode(self, encoding=None, errors=None): | def encode(self, encoding=None, errors=None): | ||||
| if errors is None: | |||||
| if encoding is None: | |||||
| return self.__unicode__().encode() | |||||
| return self.__unicode__().encode(encoding) | |||||
| return self.__unicode__().encode(encoding, errors) | |||||
| kwargs = {} | |||||
| if encoding is not None: | |||||
| kwargs["encoding"] = encoding | |||||
| if errors is not None: | |||||
| kwargs["errors"] = errors | |||||
| return self.__unicode__().encode(**kwargs) | |||||
| @inheritdoc | @inheritdoc | ||||
| def endswith(self, prefix, start=None, end=None): | def endswith(self, prefix, start=None, end=None): | ||||
| @@ -286,25 +288,45 @@ class StringMixIn(object): | |||||
| def rpartition(self, sep): | def rpartition(self, sep): | ||||
| return self.__unicode__().rpartition(sep) | return self.__unicode__().rpartition(sep) | ||||
| @inheritdoc | |||||
| def rsplit(self, sep=None, maxsplit=None): | |||||
| if maxsplit is None: | |||||
| if sep is None: | |||||
| return self.__unicode__().rsplit() | |||||
| return self.__unicode__().rsplit(sep) | |||||
| return self.__unicode__().rsplit(sep, maxsplit) | |||||
| if py3k: | |||||
| @inheritdoc | |||||
| def rsplit(self, sep=None, maxsplit=None): | |||||
| kwargs = {} | |||||
| if sep is not None: | |||||
| kwargs["sep"] = sep | |||||
| if maxsplit is not None: | |||||
| kwargs["maxsplit"] = maxsplit | |||||
| return self.__unicode__().rsplit(**kwargs) | |||||
| else: | |||||
| @inheritdoc | |||||
| def rsplit(self, sep=None, maxsplit=None): | |||||
| if maxsplit is None: | |||||
| if sep is None: | |||||
| return self.__unicode__().rsplit() | |||||
| return self.__unicode__().rsplit(sep) | |||||
| return self.__unicode__().rsplit(sep, maxsplit) | |||||
| @inheritdoc | @inheritdoc | ||||
| def rstrip(self, chars=None): | def rstrip(self, chars=None): | ||||
| return self.__unicode__().rstrip(chars) | return self.__unicode__().rstrip(chars) | ||||
| @inheritdoc | |||||
| def split(self, sep=None, maxsplit=None): | |||||
| if maxsplit is None: | |||||
| if sep is None: | |||||
| return self.__unicode__().split() | |||||
| return self.__unicode__().split(sep) | |||||
| return self.__unicode__().split(sep, maxsplit) | |||||
| if py3k: | |||||
| @inheritdoc | |||||
| def split(self, sep=None, maxsplit=None): | |||||
| kwargs = {} | |||||
| if sep is not None: | |||||
| kwargs["sep"] = sep | |||||
| if maxsplit is not None: | |||||
| kwargs["maxsplit"] = maxsplit | |||||
| return self.__unicode__().split(**kwargs) | |||||
| else: | |||||
| @inheritdoc | |||||
| def split(self, sep=None, maxsplit=None): | |||||
| if maxsplit is None: | |||||
| if sep is None: | |||||
| return self.__unicode__().split() | |||||
| return self.__unicode__().split(sep) | |||||
| return self.__unicode__().split(sep, maxsplit) | |||||
| @inheritdoc | @inheritdoc | ||||
| def splitlines(self, keepends=None): | def splitlines(self, keepends=None): | ||||
| @@ -189,10 +189,14 @@ class TestStringMixIn(unittest.TestCase): | |||||
| self.assertEquals(b"fake string", str1.encode()) | self.assertEquals(b"fake string", str1.encode()) | ||||
| self.assertEquals(b"\xF0\x90\x8C\xB2\xF0\x90\x8C\xBF\xF0\x90\x8D\x84", | self.assertEquals(b"\xF0\x90\x8C\xB2\xF0\x90\x8C\xBF\xF0\x90\x8D\x84", | ||||
| str3.encode("utf8")) | str3.encode("utf8")) | ||||
| self.assertEquals(b"\xF0\x90\x8C\xB2\xF0\x90\x8C\xBF\xF0\x90\x8D\x84", | |||||
| str3.encode(encoding="utf8")) | |||||
| self.assertRaises(UnicodeEncodeError, str3.encode) | self.assertRaises(UnicodeEncodeError, str3.encode) | ||||
| self.assertRaises(UnicodeEncodeError, str3.encode, "ascii") | self.assertRaises(UnicodeEncodeError, str3.encode, "ascii") | ||||
| self.assertRaises(UnicodeEncodeError, str3.encode, "ascii", "strict") | self.assertRaises(UnicodeEncodeError, str3.encode, "ascii", "strict") | ||||
| self.assertRaises(UnicodeEncodeError, str3.encode, errors="strict") | |||||
| self.assertEquals("", str3.encode("ascii", "ignore")) | self.assertEquals("", str3.encode("ascii", "ignore")) | ||||
| self.assertEquals("", str3.encode(errors="ignore")) | |||||
| self.assertTrue(str1.endswith("ing")) | self.assertTrue(str1.endswith("ing")) | ||||
| self.assertFalse(str1.endswith("ingh")) | self.assertFalse(str1.endswith("ingh")) | ||||
| @@ -358,6 +362,8 @@ class TestStringMixIn(unittest.TestCase): | |||||
| self.assertEquals(actual, str25.rsplit(None, 3)) | self.assertEquals(actual, str25.rsplit(None, 3)) | ||||
| actual = [" this is a sentence with", "", "whitespace", ""] | actual = [" this is a sentence with", "", "whitespace", ""] | ||||
| self.assertEquals(actual, str25.rsplit(" ", 3)) | self.assertEquals(actual, str25.rsplit(" ", 3)) | ||||
| if py3k: | |||||
| self.assertEquals(actual, str25.rsplit(maxsplit=3)) | |||||
| self.assertEquals("fake string", str1.rstrip()) | self.assertEquals("fake string", str1.rstrip()) | ||||
| self.assertEquals(" fake string", str23.rstrip()) | self.assertEquals(" fake string", str23.rstrip()) | ||||
| @@ -373,6 +379,8 @@ class TestStringMixIn(unittest.TestCase): | |||||
| self.assertEquals(actual, str25.split(None, 3)) | self.assertEquals(actual, str25.split(None, 3)) | ||||
| actual = ["", "", "", "this is a sentence with whitespace "] | actual = ["", "", "", "this is a sentence with whitespace "] | ||||
| self.assertEquals(actual, str25.split(" ", 3)) | self.assertEquals(actual, str25.split(" ", 3)) | ||||
| if py3k: | |||||
| self.assertEquals(actual, str25.split(maxsplit=3)) | |||||
| str26 = _FakeString("lines\nof\ntext\r\nare\r\npresented\nhere") | str26 = _FakeString("lines\nof\ntext\r\nare\r\npresented\nhere") | ||||
| self.assertEquals(["lines", "of", "text", "are", "presented", "here"], | self.assertEquals(["lines", "of", "text", "are", "presented", "here"], | ||||