/Lib/test/test_base64.py

http://unladen-swallow.googlecode.com/ · Python · 190 lines · 160 code · 18 blank · 12 comment · 1 complexity · 9621897256c68b5b98cd4061696042f0 MD5 · raw file

  1. import unittest
  2. from test import test_support
  3. import base64
  4. class LegacyBase64TestCase(unittest.TestCase):
  5. def test_encodestring(self):
  6. eq = self.assertEqual
  7. eq(base64.encodestring("www.python.org"), "d3d3LnB5dGhvbi5vcmc=\n")
  8. eq(base64.encodestring("a"), "YQ==\n")
  9. eq(base64.encodestring("ab"), "YWI=\n")
  10. eq(base64.encodestring("abc"), "YWJj\n")
  11. eq(base64.encodestring(""), "")
  12. eq(base64.encodestring("abcdefghijklmnopqrstuvwxyz"
  13. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  14. "0123456789!@#0^&*();:<>,. []{}"),
  15. "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE"
  16. "RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0\nNT"
  17. "Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==\n")
  18. def test_decodestring(self):
  19. eq = self.assertEqual
  20. eq(base64.decodestring("d3d3LnB5dGhvbi5vcmc=\n"), "www.python.org")
  21. eq(base64.decodestring("YQ==\n"), "a")
  22. eq(base64.decodestring("YWI=\n"), "ab")
  23. eq(base64.decodestring("YWJj\n"), "abc")
  24. eq(base64.decodestring("YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE"
  25. "RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0\nNT"
  26. "Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==\n"),
  27. "abcdefghijklmnopqrstuvwxyz"
  28. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  29. "0123456789!@#0^&*();:<>,. []{}")
  30. eq(base64.decodestring(''), '')
  31. def test_encode(self):
  32. eq = self.assertEqual
  33. from cStringIO import StringIO
  34. infp = StringIO('abcdefghijklmnopqrstuvwxyz'
  35. 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  36. '0123456789!@#0^&*();:<>,. []{}')
  37. outfp = StringIO()
  38. base64.encode(infp, outfp)
  39. eq(outfp.getvalue(),
  40. 'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE'
  41. 'RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0\nNT'
  42. 'Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==\n')
  43. def test_decode(self):
  44. from cStringIO import StringIO
  45. infp = StringIO('d3d3LnB5dGhvbi5vcmc=')
  46. outfp = StringIO()
  47. base64.decode(infp, outfp)
  48. self.assertEqual(outfp.getvalue(), 'www.python.org')
  49. class BaseXYTestCase(unittest.TestCase):
  50. def test_b64encode(self):
  51. eq = self.assertEqual
  52. # Test default alphabet
  53. eq(base64.b64encode("www.python.org"), "d3d3LnB5dGhvbi5vcmc=")
  54. eq(base64.b64encode('\x00'), 'AA==')
  55. eq(base64.b64encode("a"), "YQ==")
  56. eq(base64.b64encode("ab"), "YWI=")
  57. eq(base64.b64encode("abc"), "YWJj")
  58. eq(base64.b64encode(""), "")
  59. eq(base64.b64encode("abcdefghijklmnopqrstuvwxyz"
  60. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  61. "0123456789!@#0^&*();:<>,. []{}"),
  62. "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE"
  63. "RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NT"
  64. "Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==")
  65. # Test with arbitrary alternative characters
  66. eq(base64.b64encode('\xd3V\xbeo\xf7\x1d', altchars='*$'), '01a*b$cd')
  67. # Test standard alphabet
  68. eq(base64.standard_b64encode("www.python.org"), "d3d3LnB5dGhvbi5vcmc=")
  69. eq(base64.standard_b64encode("a"), "YQ==")
  70. eq(base64.standard_b64encode("ab"), "YWI=")
  71. eq(base64.standard_b64encode("abc"), "YWJj")
  72. eq(base64.standard_b64encode(""), "")
  73. eq(base64.standard_b64encode("abcdefghijklmnopqrstuvwxyz"
  74. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  75. "0123456789!@#0^&*();:<>,. []{}"),
  76. "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE"
  77. "RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NT"
  78. "Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==")
  79. # Test with 'URL safe' alternative characters
  80. eq(base64.urlsafe_b64encode('\xd3V\xbeo\xf7\x1d'), '01a-b_cd')
  81. def test_b64decode(self):
  82. eq = self.assertEqual
  83. eq(base64.b64decode("d3d3LnB5dGhvbi5vcmc="), "www.python.org")
  84. eq(base64.b64decode('AA=='), '\x00')
  85. eq(base64.b64decode("YQ=="), "a")
  86. eq(base64.b64decode("YWI="), "ab")
  87. eq(base64.b64decode("YWJj"), "abc")
  88. eq(base64.b64decode("YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE"
  89. "RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0\nNT"
  90. "Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ=="),
  91. "abcdefghijklmnopqrstuvwxyz"
  92. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  93. "0123456789!@#0^&*();:<>,. []{}")
  94. eq(base64.b64decode(''), '')
  95. # Test with arbitrary alternative characters
  96. eq(base64.b64decode('01a*b$cd', altchars='*$'), '\xd3V\xbeo\xf7\x1d')
  97. # Test standard alphabet
  98. eq(base64.standard_b64decode("d3d3LnB5dGhvbi5vcmc="), "www.python.org")
  99. eq(base64.standard_b64decode("YQ=="), "a")
  100. eq(base64.standard_b64decode("YWI="), "ab")
  101. eq(base64.standard_b64decode("YWJj"), "abc")
  102. eq(base64.standard_b64decode(""), "")
  103. eq(base64.standard_b64decode("YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE"
  104. "RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NT"
  105. "Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ=="),
  106. "abcdefghijklmnopqrstuvwxyz"
  107. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  108. "0123456789!@#0^&*();:<>,. []{}")
  109. # Test with 'URL safe' alternative characters
  110. eq(base64.urlsafe_b64decode('01a-b_cd'), '\xd3V\xbeo\xf7\x1d')
  111. def test_b64decode_error(self):
  112. self.assertRaises(TypeError, base64.b64decode, 'abc')
  113. def test_b32encode(self):
  114. eq = self.assertEqual
  115. eq(base64.b32encode(''), '')
  116. eq(base64.b32encode('\x00'), 'AA======')
  117. eq(base64.b32encode('a'), 'ME======')
  118. eq(base64.b32encode('ab'), 'MFRA====')
  119. eq(base64.b32encode('abc'), 'MFRGG===')
  120. eq(base64.b32encode('abcd'), 'MFRGGZA=')
  121. eq(base64.b32encode('abcde'), 'MFRGGZDF')
  122. def test_b32decode(self):
  123. eq = self.assertEqual
  124. eq(base64.b32decode(''), '')
  125. eq(base64.b32decode('AA======'), '\x00')
  126. eq(base64.b32decode('ME======'), 'a')
  127. eq(base64.b32decode('MFRA===='), 'ab')
  128. eq(base64.b32decode('MFRGG==='), 'abc')
  129. eq(base64.b32decode('MFRGGZA='), 'abcd')
  130. eq(base64.b32decode('MFRGGZDF'), 'abcde')
  131. def test_b32decode_casefold(self):
  132. eq = self.assertEqual
  133. eq(base64.b32decode('', True), '')
  134. eq(base64.b32decode('ME======', True), 'a')
  135. eq(base64.b32decode('MFRA====', True), 'ab')
  136. eq(base64.b32decode('MFRGG===', True), 'abc')
  137. eq(base64.b32decode('MFRGGZA=', True), 'abcd')
  138. eq(base64.b32decode('MFRGGZDF', True), 'abcde')
  139. # Lower cases
  140. eq(base64.b32decode('me======', True), 'a')
  141. eq(base64.b32decode('mfra====', True), 'ab')
  142. eq(base64.b32decode('mfrgg===', True), 'abc')
  143. eq(base64.b32decode('mfrggza=', True), 'abcd')
  144. eq(base64.b32decode('mfrggzdf', True), 'abcde')
  145. # Expected exceptions
  146. self.assertRaises(TypeError, base64.b32decode, 'me======')
  147. # Mapping zero and one
  148. eq(base64.b32decode('MLO23456'), 'b\xdd\xad\xf3\xbe')
  149. eq(base64.b32decode('M1023456', map01='L'), 'b\xdd\xad\xf3\xbe')
  150. eq(base64.b32decode('M1023456', map01='I'), 'b\x1d\xad\xf3\xbe')
  151. def test_b32decode_error(self):
  152. self.assertRaises(TypeError, base64.b32decode, 'abc')
  153. self.assertRaises(TypeError, base64.b32decode, 'ABCDEF==')
  154. def test_b16encode(self):
  155. eq = self.assertEqual
  156. eq(base64.b16encode('\x01\x02\xab\xcd\xef'), '0102ABCDEF')
  157. eq(base64.b16encode('\x00'), '00')
  158. def test_b16decode(self):
  159. eq = self.assertEqual
  160. eq(base64.b16decode('0102ABCDEF'), '\x01\x02\xab\xcd\xef')
  161. eq(base64.b16decode('00'), '\x00')
  162. # Lower case is not allowed without a flag
  163. self.assertRaises(TypeError, base64.b16decode, '0102abcdef')
  164. # Case fold
  165. eq(base64.b16decode('0102abcdef', True), '\x01\x02\xab\xcd\xef')
  166. def test_main():
  167. test_support.run_unittest(__name__)
  168. if __name__ == '__main__':
  169. test_main()