mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 10:26:02 +00:00 
			
		
		
		
	 9e1c192525
			
		
	
	
		9e1c192525
		
	
	
	
	
		
			
			invalid, rather than returning a string of random garbage of the
    estimated result length. Closes SF patch #703471 by Hye-Shik Chang.
Will backport to 2.2-maint (consider it done.)
		
	
			
		
			
				
	
	
		
			129 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| """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 base64 with just invalid characters, which should return
 | |
| # empty strings. TBD: shouldn't it raise an exception instead ?
 | |
| verify(binascii.a2b_base64(fillers) == '')
 | |
| 
 | |
| # 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"
 |