home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / test_binascii.py < prev    next >
Text File  |  2003-12-30  |  3KB  |  130 lines

  1. """Test the binascii C module."""
  2.  
  3. from test.test_support import verify, verbose, have_unicode
  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. verify(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. verify(res == testdata)
  71.  
  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) == '')
  75.  
  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)
  90.  
  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."
  96.  
  97. # The hqx test is in test_binhex.py
  98.  
  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'
  117.  
  118. # Verify the treatment of Unicode strings
  119. if have_unicode:
  120.     verify(binascii.hexlify(unicode('a', 'ascii')) == '61',
  121.            "hexlify failed for Unicode")
  122.  
  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"
  130.