home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 April / PCWorld_2001-04_cd.bin / Software / TemaCD / webclean / !!!python!!! / BeOpen-Python-2.0.exe / TEST_BINASCII.PY < prev    next >
Encoding:
Python Source  |  2000-09-28  |  2.8 KB  |  113 lines

  1. """Test the binascii C module."""
  2.  
  3. from test_support import verbose
  4. import binascii
  5.  
  6. # Show module doc string
  7. print binascii.__doc__
  8.  
  9. # Show module exceptions
  10. print binascii.Error
  11. print binascii.Incomplete
  12.  
  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__)
  24.  
  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"
  31.  
  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. assert res == testdata
  46.  
  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. assert res == testdata
  71.  
  72. # Test uu
  73. print "uu test"
  74. MAX_UU = 45
  75. lines = []
  76. for i in range(0, len(testdata), MAX_UU):
  77.     b = testdata[i:i+MAX_UU]
  78.     a = binascii.b2a_uu(b)
  79.     lines.append(a)
  80.     print a,
  81. res = ""
  82. for line in lines:
  83.     b = binascii.a2b_uu(line)
  84.     res = res + b
  85. assert res == testdata
  86.  
  87. # Test crc32()
  88. crc = binascii.crc32("Test the CRC-32 of")
  89. crc = binascii.crc32(" this string.", crc)
  90. if crc != 1571220330:
  91.     print "binascii.crc32() failed."
  92.  
  93. # The hqx test is in test_binhex.py
  94.  
  95. # test hexlification
  96. s = '{s\005\000\000\000worldi\002\000\000\000s\005\000\000\000helloi\001\000\000\0000'
  97. t = binascii.b2a_hex(s)
  98. u = binascii.a2b_hex(t)
  99. if s <> u:
  100.     print 'binascii hexlification failed'
  101. try:
  102.     binascii.a2b_hex(t[:-1])
  103. except TypeError:
  104.     pass
  105. else:
  106.     print 'expected TypeError not raised'
  107. try:
  108.     binascii.a2b_hex(t[:-1] + 'q')
  109. except TypeError:
  110.     pass
  111. else:
  112.     print 'expected TypeError not raised'
  113.