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