Update version number and release date.
[python/dscho.git] / Lib / test / test_binascii.py
blob2764c3c5e52a75b0de436b4053fac54c73fcfde8
1 """Test the binascii C module."""
3 from test.test_support import verify, verbose, have_unicode
4 import binascii
6 # Show module doc string
7 print binascii.__doc__
9 # Show module exceptions
10 print binascii.Error
11 print binascii.Incomplete
13 # Check presence and display doc strings of all functions
14 funcs = []
15 for suffix in "base64", "hqx", "uu":
16 prefixes = ["a2b_", "b2a_"]
17 if suffix == "hqx":
18 prefixes.extend(["crc_", "rlecode_", "rledecode_"])
19 for prefix in prefixes:
20 name = prefix + suffix
21 funcs.append(getattr(binascii, name))
22 for func in funcs:
23 print "%-15s: %s" % (func.__name__, func.__doc__)
25 # Create binary test data
26 testdata = "The quick brown fox jumps over the lazy dog.\r\n"
27 for i in range(256):
28 # Be slow so we don't depend on other modules
29 testdata = testdata + chr(i)
30 testdata = testdata + "\r\nHello world.\n"
32 # Test base64 with valid data
33 print "base64 test"
34 MAX_BASE64 = 57
35 lines = []
36 for i in range(0, len(testdata), MAX_BASE64):
37 b = testdata[i:i+MAX_BASE64]
38 a = binascii.b2a_base64(b)
39 lines.append(a)
40 print a,
41 res = ""
42 for line in lines:
43 b = binascii.a2b_base64(line)
44 res = res + b
45 verify(res == testdata)
47 # Test base64 with random invalid characters sprinkled throughout
48 # (This requires a new version of binascii.)
49 fillers = ""
50 valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/"
51 for i in range(256):
52 c = chr(i)
53 if c not in valid:
54 fillers = fillers + c
55 def addnoise(line):
56 noise = fillers
57 ratio = len(line) // len(noise)
58 res = ""
59 while line and noise:
60 if len(line) // len(noise) > ratio:
61 c, line = line[0], line[1:]
62 else:
63 c, noise = noise[0], noise[1:]
64 res = res + c
65 return res + noise + line
66 res = ""
67 for line in map(addnoise, lines):
68 b = binascii.a2b_base64(line)
69 res = res + b
70 verify(res == testdata)
72 # Test base64 with just invalid characters, which should return
73 # empty strings. TBD: shouldn't it raise an exception instead ?
74 verify(binascii.a2b_base64(fillers) == '')
76 # Test uu
77 print "uu test"
78 MAX_UU = 45
79 lines = []
80 for i in range(0, len(testdata), MAX_UU):
81 b = testdata[i:i+MAX_UU]
82 a = binascii.b2a_uu(b)
83 lines.append(a)
84 print a,
85 res = ""
86 for line in lines:
87 b = binascii.a2b_uu(line)
88 res = res + b
89 verify(res == testdata)
91 # Test crc32()
92 crc = binascii.crc32("Test the CRC-32 of")
93 crc = binascii.crc32(" this string.", crc)
94 if crc != 1571220330:
95 print "binascii.crc32() failed."
97 # The hqx test is in test_binhex.py
99 # test hexlification
100 s = '{s\005\000\000\000worldi\002\000\000\000s\005\000\000\000helloi\001\000\000\0000'
101 t = binascii.b2a_hex(s)
102 u = binascii.a2b_hex(t)
103 if s != u:
104 print 'binascii hexlification failed'
105 try:
106 binascii.a2b_hex(t[:-1])
107 except TypeError:
108 pass
109 else:
110 print 'expected TypeError not raised'
111 try:
112 binascii.a2b_hex(t[:-1] + 'q')
113 except TypeError:
114 pass
115 else:
116 print 'expected TypeError not raised'
118 # Verify the treatment of Unicode strings
119 if have_unicode:
120 verify(binascii.hexlify(unicode('a', 'ascii')) == '61',
121 "hexlify failed for Unicode")
123 # A test for SF bug 534347 (segfaults without the proper fix)
124 try:
125 binascii.a2b_qp("", **{1:1})
126 except TypeError:
127 pass
128 else:
129 raise TestFailed, "binascii..a2b_qp(**{1:1}) didn't raise TypeError"