• Barry Warsaw's avatar
    Complete the absolute import patch for the test suite. All relative · 408b6d34
    Barry Warsaw yazdı
    imports of test modules now import from the test package.  Other
    related oddities are also fixed (like DeprecationWarning filters that
    weren't specifying the full import part, etc.).  Also did a general
    code cleanup to remove all "from test.test_support import *"'s.  Other
    from...import *'s weren't changed.
    408b6d34
test_binascii.py 3.12 KB
"""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 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"