summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Dörwald <walter@livinglogic.de>2005-11-17 08:52:34 (GMT)
committerWalter Dörwald <walter@livinglogic.de>2005-11-17 08:52:34 (GMT)
commite22d339dc53946f384aec1ba3cb70cc53ef621cd (patch)
treeacddf302101212b73f237927ec7df7a11fef002b
parent944d3eb1546e38d4944db5f2f41f5560d55a5053 (diff)
downloadcpython-e22d339dc53946f384aec1ba3cb70cc53ef621cd.zip
cpython-e22d339dc53946f384aec1ba3cb70cc53ef621cd.tar.gz
cpython-e22d339dc53946f384aec1ba3cb70cc53ef621cd.tar.bz2
Add tests for various error cases and for readbuffer_encode() and
charbuffer_encode(). This increases code coverage in Modules/_codecsmodule.c from 83% to 95%.
-rw-r--r--Lib/test/test_codeccallbacks.py5
-rw-r--r--Lib/test/test_codecs.py69
2 files changed, 72 insertions, 2 deletions
diff --git a/Lib/test/test_codeccallbacks.py b/Lib/test/test_codeccallbacks.py
index f8e59cd..7d32e59 100644
--- a/Lib/test/test_codeccallbacks.py
+++ b/Lib/test/test_codeccallbacks.py
@@ -577,6 +577,11 @@ class CodecCallbackTest(unittest.TestCase):
self.assertRaises(TypeError, codecs.register_error, 42)
self.assertRaises(TypeError, codecs.register_error, "test.dummy", 42)
+ def test_badlookupcall(self):
+ # enhance coverage of:
+ # Modules/_codecsmodule.c::lookup_error()
+ self.assertRaises(TypeError, codecs.lookup_error)
+
def test_unknownhandler(self):
# enhance coverage of:
# Modules/_codecsmodule.c::lookup_error()
diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
index 74ad83b..336696c 100644
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -260,6 +260,9 @@ class UTF16Test(ReadTest):
]
)
+ def test_errors(self):
+ self.assertRaises(UnicodeDecodeError, codecs.utf_16_decode, "\xff", "strict", True)
+
class UTF16LETest(ReadTest):
encoding = "utf-16-le"
@@ -278,6 +281,9 @@ class UTF16LETest(ReadTest):
]
)
+ def test_errors(self):
+ self.assertRaises(UnicodeDecodeError, codecs.utf_16_le_decode, "\xff", "strict", True)
+
class UTF16BETest(ReadTest):
encoding = "utf-16-be"
@@ -296,6 +302,9 @@ class UTF16BETest(ReadTest):
]
)
+ def test_errors(self):
+ self.assertRaises(UnicodeDecodeError, codecs.utf_16_be_decode, "\xff", "strict", True)
+
class UTF8Test(ReadTest):
encoding = "utf-8"
@@ -317,8 +326,49 @@ class UTF8Test(ReadTest):
]
)
+class UTF7Test(ReadTest):
+ encoding = "utf-7"
+
+ # No test_partial() yet, because UTF-7 doesn't support it.
+
+class UTF16ExTest(unittest.TestCase):
+
+ def test_errors(self):
+ self.assertRaises(UnicodeDecodeError, codecs.utf_16_ex_decode, "\xff", "strict", 0, True)
+
+ def test_bad_args(self):
+ self.assertRaises(TypeError, codecs.utf_16_ex_decode)
+
+class ReadBufferTest(unittest.TestCase):
+
+ def test_array(self):
+ import array
+ self.assertEqual(
+ codecs.readbuffer_encode(array.array("c", "spam")),
+ ("spam", 4)
+ )
+
+ def test_empty(self):
+ self.assertEqual(codecs.readbuffer_encode(""), ("", 0))
+
+ def test_bad_args(self):
+ self.assertRaises(TypeError, codecs.readbuffer_encode)
+ self.assertRaises(TypeError, codecs.readbuffer_encode, 42)
+
+class CharBufferTest(unittest.TestCase):
+
+ def test_string(self):
+ self.assertEqual(codecs.charbuffer_encode("spam"), ("spam", 4))
+
+ def test_empty(self):
+ self.assertEqual(codecs.charbuffer_encode(""), ("", 0))
+
+ def test_bad_args(self):
+ self.assertRaises(TypeError, codecs.charbuffer_encode)
+ self.assertRaises(TypeError, codecs.charbuffer_encode, 42)
+
class EscapeDecodeTest(unittest.TestCase):
- def test_empty_escape_decode(self):
+ def test_empty(self):
self.assertEquals(codecs.escape_decode(""), ("", 0))
class RecodingTest(unittest.TestCase):
@@ -395,7 +445,6 @@ punycode_testcases = [
u"\u0056\u0069\u1EC7\u0074",
"TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g"),
-
#(L) 3<nen>B<gumi><kinpachi><sensei>
(u"\u0033\u5E74\u0042\u7D44\u91D1\u516B\u5148\u751F",
"3B-ww4c5e180e575a65lsy2b"),
@@ -915,6 +964,18 @@ class BasicUnicodeTest(unittest.TestCase):
line = reader.readline()
self.assertEqual(s[:len(line)], line)
+ def test_bad_decode_args(self):
+ for encoding in all_unicode_encodings:
+ decoder = codecs.getdecoder(encoding)
+ self.assertRaises(TypeError, decoder)
+ if encoding not in ("idna", "punycode"):
+ self.assertRaises(TypeError, decoder, 42)
+
+ def test_bad_encode_args(self):
+ for encoding in all_unicode_encodings:
+ encoder = codecs.getencoder(encoding)
+ self.assertRaises(TypeError, encoder)
+
class BasicStrTest(unittest.TestCase):
def test_basics(self):
s = "abc123"
@@ -964,6 +1025,10 @@ def test_main():
UTF16LETest,
UTF16BETest,
UTF8Test,
+ UTF7Test,
+ UTF16ExTest,
+ ReadBufferTest,
+ CharBufferTest,
EscapeDecodeTest,
RecodingTest,
PunycodeTest,