[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