diff options
author | Walter Dörwald <walter@livinglogic.de> | 2005-11-17 18:51:34 (GMT) |
---|---|---|
committer | Walter Dörwald <walter@livinglogic.de> | 2005-11-17 18:51:34 (GMT) |
commit | 690402ff170abfc9b24269aa7db923eddf60e607 (patch) | |
tree | de6e027bd7e7d55a353e6a47b44f4249d2e62c86 | |
parent | a53899272b71d90a2a2ade76532ff0b96d7ceed1 (diff) | |
download | cpython-690402ff170abfc9b24269aa7db923eddf60e607.zip cpython-690402ff170abfc9b24269aa7db923eddf60e607.tar.gz cpython-690402ff170abfc9b24269aa7db923eddf60e607.tar.bz2 |
Add tests to increase code coverage in Python/codecs.c and Python/exceptions.c.
-rw-r--r-- | Lib/test/test_codeccallbacks.py | 133 | ||||
-rw-r--r-- | Lib/test/test_codecs.py | 19 |
2 files changed, 150 insertions, 2 deletions
diff --git a/Lib/test/test_codeccallbacks.py b/Lib/test/test_codeccallbacks.py index 7d32e59..c6e56c9 100644 --- a/Lib/test/test_codeccallbacks.py +++ b/Lib/test/test_codeccallbacks.py @@ -18,6 +18,66 @@ class PosReturn: self.pos = len(exc.object) return (u"<?>", oldpos) +# A UnicodeEncodeError object without a start attribute +class NoStartUnicodeEncodeError(UnicodeEncodeError): + def __init__(self): + UnicodeEncodeError.__init__(self, "ascii", u"", 0, 1, "bad") + del self.start + +# A UnicodeEncodeError object with a bad start attribute +class BadStartUnicodeEncodeError(UnicodeEncodeError): + def __init__(self): + UnicodeEncodeError.__init__(self, "ascii", u"", 0, 1, "bad") + self.start = [] + +# A UnicodeEncodeError object without an end attribute +class NoEndUnicodeEncodeError(UnicodeEncodeError): + def __init__(self): + UnicodeEncodeError.__init__(self, "ascii", u"", 0, 1, "bad") + del self.end + +# A UnicodeEncodeError object without an object attribute +class NoObjectUnicodeEncodeError(UnicodeEncodeError): + def __init__(self): + UnicodeEncodeError.__init__(self, "ascii", u"", 0, 1, "bad") + del self.object + +# A UnicodeEncodeError object with a bad object attribute +class BadObjectUnicodeEncodeError(UnicodeEncodeError): + def __init__(self): + UnicodeEncodeError.__init__(self, "ascii", u"", 0, 1, "bad") + self.object = [] + +# A UnicodeDecodeError object without an end attribute +class NoEndUnicodeDecodeError(UnicodeDecodeError): + def __init__(self): + UnicodeDecodeError.__init__(self, "ascii", "", 0, 1, "bad") + del self.end + +# A UnicodeDecodeError object with a bad object attribute +class BadObjectUnicodeDecodeError(UnicodeDecodeError): + def __init__(self): + UnicodeDecodeError.__init__(self, "ascii", "", 0, 1, "bad") + self.object = [] + +# A UnicodeTranslateError object without a start attribute +class NoStartUnicodeTranslateError(UnicodeTranslateError): + def __init__(self): + UnicodeTranslateError.__init__(self, u"", 0, 1, "bad") + del self.start + +# A UnicodeTranslateError object without an end attribute +class NoEndUnicodeTranslateError(UnicodeTranslateError): + def __init__(self): + UnicodeTranslateError.__init__(self, u"", 0, 1, "bad") + del self.end + +# A UnicodeTranslateError object without an object attribute +class NoObjectUnicodeTranslateError(UnicodeTranslateError): + def __init__(self): + UnicodeTranslateError.__init__(self, u"", 0, 1, "bad") + del self.object + class CodecCallbackTest(unittest.TestCase): def test_xmlcharrefreplace(self): @@ -417,6 +477,56 @@ class CodecCallbackTest(unittest.TestCase): codecs.replace_errors, UnicodeError("ouch") ) + self.assertRaises( + AttributeError, + codecs.replace_errors, + NoStartUnicodeEncodeError() + ) + self.assertRaises( + TypeError, + codecs.replace_errors, + BadStartUnicodeEncodeError() + ) + self.assertRaises( + AttributeError, + codecs.replace_errors, + NoEndUnicodeEncodeError() + ) + self.assertRaises( + AttributeError, + codecs.replace_errors, + NoObjectUnicodeEncodeError() + ) + self.assertRaises( + TypeError, + codecs.replace_errors, + BadObjectUnicodeEncodeError() + ) + self.assertRaises( + AttributeError, + codecs.replace_errors, + NoEndUnicodeDecodeError() + ) + self.assertRaises( + TypeError, + codecs.replace_errors, + BadObjectUnicodeDecodeError() + ) + self.assertRaises( + AttributeError, + codecs.replace_errors, + NoStartUnicodeTranslateError() + ) + self.assertRaises( + AttributeError, + codecs.replace_errors, + NoEndUnicodeTranslateError() + ) + self.assertRaises( + AttributeError, + codecs.replace_errors, + NoObjectUnicodeTranslateError() + ) # With the correct exception, "replace" returns an "?" or u"\ufffd" replacement self.assertEquals( codecs.replace_errors(UnicodeEncodeError("ascii", u"\u3042", 0, 1, "ouch")), @@ -455,10 +565,29 @@ class CodecCallbackTest(unittest.TestCase): codecs.xmlcharrefreplace_errors, UnicodeTranslateError(u"\u3042", 0, 1, "ouch") ) + self.assertRaises( + AttributeError, + codecs.xmlcharrefreplace_errors, + NoStartUnicodeEncodeError() + ) + self.assertRaises( + AttributeError, + codecs.xmlcharrefreplace_errors, + NoEndUnicodeEncodeError() + ) + self.assertRaises( + AttributeError, + codecs.xmlcharrefreplace_errors, + NoObjectUnicodeEncodeError() + ) # Use the correct exception + cs = (0, 1, 9, 10, 99, 100, 999, 1000, 9999, 10000, 0x3042) + s = "".join(unichr(c) for c in cs) self.assertEquals( - codecs.xmlcharrefreplace_errors(UnicodeEncodeError("ascii", u"\u3042", 0, 1, "ouch")), - (u"&#%d;" % 0x3042, 1) + codecs.xmlcharrefreplace_errors( + UnicodeEncodeError("ascii", s, 0, len(s), "ouch") + ), + (u"".join(u"&#%d;" % ord(c) for c in s), len(s)) ) def test_badandgoodbackslashreplaceexceptions(self): diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py index 336696c..b344f9a 100644 --- a/Lib/test/test_codecs.py +++ b/Lib/test/test_codecs.py @@ -746,15 +746,34 @@ class CodecsModuleTest(unittest.TestCase): self.assertEquals(codecs.encode(u'\xe4\xf6\xfc', 'latin-1'), '\xe4\xf6\xfc') self.assertRaises(TypeError, codecs.encode) + self.assertRaises(LookupError, codecs.encode, "foo", "__spam__") self.assertEquals(codecs.encode(u'abc'), 'abc') self.assertRaises(UnicodeEncodeError, codecs.encode, u'\xffff', 'ascii') def test_register(self): self.assertRaises(TypeError, codecs.register) + self.assertRaises(TypeError, codecs.register, 42) def test_lookup(self): self.assertRaises(TypeError, codecs.lookup) self.assertRaises(LookupError, codecs.lookup, "__spam__") + self.assertRaises(LookupError, codecs.lookup, " ") + + def test_getencoder(self): + self.assertRaises(TypeError, codecs.getencoder) + self.assertRaises(LookupError, codecs.getencoder, "__spam__") + + def test_getdecoder(self): + self.assertRaises(TypeError, codecs.getdecoder) + self.assertRaises(LookupError, codecs.getdecoder, "__spam__") + + def test_getreader(self): + self.assertRaises(TypeError, codecs.getreader) + self.assertRaises(LookupError, codecs.getreader, "__spam__") + + def test_getwriter(self): + self.assertRaises(TypeError, codecs.getwriter) + self.assertRaises(LookupError, codecs.getwriter, "__spam__") class StreamReaderTest(unittest.TestCase): |