mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	and replaces them with a new API verify(). As a result the regression suite will also perform its tests in optimization mode. Written by Marc-Andre Lemburg. Copyright assigned to Guido van Rossum.
		
			
				
	
	
		
			112 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
"""Test the binascii C module."""
 | 
						|
 | 
						|
from test_support import verify, 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
 | 
						|
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 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'
 |