home *** CD-ROM | disk | FTP | other *** search
- """Test the binascii C module."""
-
- from test_support import verbose
- 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
- assert 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
- assert res == testdata
-
- # 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
- assert 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'
-