| """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 |