[Python-checkins] python/dist/src/Lib/test test_binascii.py, 1.16,
1.16.12.1
doerwalter at users.sourceforge.net
doerwalter at users.sourceforge.net
Mon Mar 15 09:22:57 EST 2004
Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11154/Lib/test
Modified Files:
Tag: release23-maint
test_binascii.py
Log Message:
Backport checkin:
Port test_binascii.py to PyUnit and enhance tests.
Code coverage for binascii.c is at 92%.
>From SF patch #736962.
Index: test_binascii.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_binascii.py,v
retrieving revision 1.16
retrieving revision 1.16.12.1
diff -C2 -d -r1.16 -r1.16.12.1
*** test_binascii.py 17 Mar 2003 11:24:29 -0000 1.16
--- test_binascii.py 15 Mar 2004 14:22:55 -0000 1.16.12.1
***************
*** 1,129 ****
"""Test the binascii C module."""
! from test.test_support import verify, verbose, have_unicode
import binascii
! # Show module doc string
! print binascii.__doc__
! # Show module exceptions
! print binascii.Error
! print binascii.Incomplete
! # Check presence and display doc strings of all functions
! funcs = []
! for suffix in "base64", "hqx", "uu":
! prefixes = ["a2b_", "b2a_"]
! if suffix == "hqx":
! prefixes.extend(["crc_", "rlecode_", "rledecode_"])
! for prefix in prefixes:
! name = prefix + suffix
! funcs.append(getattr(binascii, name))
! for func in funcs:
! print "%-15s: %s" % (func.__name__, func.__doc__)
! # Create binary test data
! testdata = "The quick brown fox jumps over the lazy dog.\r\n"
! for i in range(256):
! # Be slow so we don't depend on other modules
! testdata = testdata + chr(i)
! testdata = testdata + "\r\nHello world.\n"
! # Test base64 with valid data
! print "base64 test"
! MAX_BASE64 = 57
! lines = []
! for i in range(0, len(testdata), MAX_BASE64):
! b = testdata[i:i+MAX_BASE64]
! a = binascii.b2a_base64(b)
! lines.append(a)
! print a,
! res = ""
! for line in lines:
! b = binascii.a2b_base64(line)
! res = res + b
! verify(res == testdata)
! # Test base64 with random invalid characters sprinkled throughout
! # (This requires a new version of binascii.)
! fillers = ""
! valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/"
! for i in range(256):
! c = chr(i)
! if c not in valid:
! fillers = fillers + c
! def addnoise(line):
! noise = fillers
! ratio = len(line) // len(noise)
! res = ""
! while line and noise:
! if len(line) // len(noise) > ratio:
! c, line = line[0], line[1:]
! else:
! c, noise = noise[0], noise[1:]
! res = res + c
! return res + noise + line
! res = ""
! for line in map(addnoise, lines):
! b = binascii.a2b_base64(line)
! res = res + b
! verify(res == testdata)
! # Test base64 with just invalid characters, which should return
! # empty strings. TBD: shouldn't it raise an exception instead ?
! verify(binascii.a2b_base64(fillers) == '')
! # Test uu
! print "uu test"
! MAX_UU = 45
! lines = []
! for i in range(0, len(testdata), MAX_UU):
! b = testdata[i:i+MAX_UU]
! a = binascii.b2a_uu(b)
! lines.append(a)
! print a,
! res = ""
! for line in lines:
! b = binascii.a2b_uu(line)
! res = res + b
! verify(res == testdata)
! # Test crc32()
! crc = binascii.crc32("Test the CRC-32 of")
! crc = binascii.crc32(" this string.", crc)
! if crc != 1571220330:
! print "binascii.crc32() failed."
! # The hqx test is in test_binhex.py
! # test hexlification
! s = '{s\005\000\000\000worldi\002\000\000\000s\005\000\000\000helloi\001\000\000\0000'
! t = binascii.b2a_hex(s)
! u = binascii.a2b_hex(t)
! if s != u:
! print 'binascii hexlification failed'
! try:
! binascii.a2b_hex(t[:-1])
! except TypeError:
! pass
! else:
! print 'expected TypeError not raised'
! try:
! binascii.a2b_hex(t[:-1] + 'q')
! except TypeError:
! pass
! else:
! print 'expected TypeError not raised'
! # Verify the treatment of Unicode strings
! if have_unicode:
! verify(binascii.hexlify(unicode('a', 'ascii')) == '61',
! "hexlify failed for Unicode")
! # A test for SF bug 534347 (segfaults without the proper fix)
! try:
! binascii.a2b_qp("", **{1:1})
! except TypeError:
! pass
! else:
! raise TestFailed, "binascii..a2b_qp(**{1:1}) didn't raise TypeError"
--- 1,155 ----
"""Test the binascii C module."""
! from test import test_support
! import unittest
import binascii
! class BinASCIITest(unittest.TestCase):
! # Create binary test data
! data = "The quick brown fox jumps over the lazy dog.\r\n"
! # Be slow so we don't depend on other modules
! data += "".join(map(chr, xrange(256)))
! data += "\r\nHello world.\n"
! def test_exceptions(self):
! # Check module exceptions
! self.assert_(issubclass(binascii.Error, Exception))
! self.assert_(issubclass(binascii.Incomplete, Exception))
! def test_functions(self):
! # Check presence of all functions
! funcs = []
! for suffix in "base64", "hqx", "uu", "hex":
! prefixes = ["a2b_", "b2a_"]
! if suffix == "hqx":
! prefixes.extend(["crc_", "rlecode_", "rledecode_"])
! for prefix in prefixes:
! name = prefix + suffix
! self.assert_(callable(getattr(binascii, name)))
! self.assertRaises(TypeError, getattr(binascii, name))
! for name in ("hexlify", "unhexlify"):
! self.assert_(callable(getattr(binascii, name)))
! self.assertRaises(TypeError, getattr(binascii, name))
! def test_base64valid(self):
! # Test base64 with valid data
! MAX_BASE64 = 57
! lines = []
! for i in range(0, len(self.data), MAX_BASE64):
! b = self.data[i:i+MAX_BASE64]
! a = binascii.b2a_base64(b)
! lines.append(a)
! res = ""
! for line in lines:
! b = binascii.a2b_base64(line)
! res = res + b
! self.assertEqual(res, self.data)
! def test_base64invalid(self):
! # Test base64 with random invalid characters sprinkled throughout
! # (This requires a new version of binascii.)
! MAX_BASE64 = 57
! lines = []
! for i in range(0, len(self.data), MAX_BASE64):
! b = self.data[i:i+MAX_BASE64]
! a = binascii.b2a_base64(b)
! lines.append(a)
! fillers = ""
! valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/"
! for i in xrange(256):
! c = chr(i)
! if c not in valid:
! fillers += c
! def addnoise(line):
! noise = fillers
! ratio = len(line) // len(noise)
! res = ""
! while line and noise:
! if len(line) // len(noise) > ratio:
! c, line = line[0], line[1:]
! else:
! c, noise = noise[0], noise[1:]
! res += c
! return res + noise + line
! res = ""
! for line in map(addnoise, lines):
! b = binascii.a2b_base64(line)
! res += b
! self.assertEqual(res, self.data)
! # Test base64 with just invalid characters, which should return
! # empty strings. TBD: shouldn't it raise an exception instead ?
! self.assertEqual(binascii.a2b_base64(fillers), '')
! def test_uu(self):
! MAX_UU = 45
! lines = []
! for i in range(0, len(self.data), MAX_UU):
! b = self.data[i:i+MAX_UU]
! a = binascii.b2a_uu(b)
! lines.append(a)
! res = ""
! for line in lines:
! b = binascii.a2b_uu(line)
! res += b
! self.assertEqual(res, self.data)
! self.assertEqual(binascii.a2b_uu("\x7f"), "\x00"*31)
! self.assertEqual(binascii.a2b_uu("\x80"), "\x00"*32)
! self.assertEqual(binascii.a2b_uu("\xff"), "\x00"*31)
! self.assertRaises(binascii.Error, binascii.a2b_uu, "\xff\x00")
! self.assertRaises(binascii.Error, binascii.a2b_uu, "!!!!")
!
! self.assertRaises(binascii.Error, binascii.b2a_uu, 46*"!")
! def test_crc32(self):
! crc = binascii.crc32("Test the CRC-32 of")
! crc = binascii.crc32(" this string.", crc)
! self.assertEqual(crc, 1571220330)
! self.assertRaises(TypeError, binascii.crc32)
! # The hqx test is in test_binhex.py
!
! def test_hex(self):
! # test hexlification
! s = '{s\005\000\000\000worldi\002\000\000\000s\005\000\000\000helloi\001\000\000\0000'
! t = binascii.b2a_hex(s)
! u = binascii.a2b_hex(t)
! self.assertEqual(s, u)
! self.assertRaises(TypeError, binascii.a2b_hex, t[:-1])
! self.assertRaises(TypeError, binascii.a2b_hex, t[:-1] + 'q')
!
! # Verify the treatment of Unicode strings
! if test_support.have_unicode:
! self.assertEqual(binascii.hexlify(unicode('a', 'ascii')), '61')
!
! def test_qp(self):
! # A test for SF bug 534347 (segfaults without the proper fix)
! try:
! binascii.a2b_qp("", **{1:1})
! except TypeError:
! pass
! else:
! self.fail("binascii.a2b_qp(**{1:1}) didn't raise TypeError")
! self.assertEqual(binascii.a2b_qp("= "), "")
! self.assertEqual(binascii.a2b_qp("=="), "=")
! self.assertEqual(binascii.a2b_qp("=AX"), "=AX")
! self.assertRaises(TypeError, binascii.b2a_qp, foo="bar")
! self.assertEqual(binascii.a2b_qp("=00\r\n=00"), "\x00\r\n\x00")
! self.assertEqual(
! binascii.b2a_qp("\xff\r\n\xff\n\xff"),
! "=FF\r\n=FF\r\n=FF"
! )
! self.assertEqual(
! binascii.b2a_qp("0"*75+"\xff\r\n\xff\r\n\xff"),
! "0"*75+"=\r\n=FF\r\n=FF\r\n=FF"
! )
!
! def test_main():
! test_support.run_unittest(BinASCIITest)
!
! if __name__ == "__main__":
! test_main()
More information about the Python-checkins
mailing list