annotate Lib/test/test_bytes.py @ 40898:b58a4374ac21

Make bytes_repr return a string containing a b"" literal.
author Georg Brandl <georg@python.org>
date Sat, 24 Feb 2007 19:41:35 +0000
parents 0ea24f4f2467
children a9e6c73e0fa5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
37927
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 """Unit tests for the bytes type."""
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
37960
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
3 import os
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
4 import re
37927
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 import sys
37960
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
6 import tempfile
37927
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 import unittest
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 import test.test_support
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
10
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 class BytesTest(unittest.TestCase):
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 def test_basics(self):
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 b = bytes()
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 self.assertEqual(type(b), bytes)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 self.assertEqual(b.__class__, bytes)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
17
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 def test_empty_sequence(self):
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 b = bytes()
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 self.assertEqual(len(b), 0)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 self.assertRaises(IndexError, lambda: b[0])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 self.assertRaises(IndexError, lambda: b[1])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 self.assertRaises(IndexError, lambda: b[sys.maxint])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 self.assertRaises(IndexError, lambda: b[sys.maxint+1])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 self.assertRaises(IndexError, lambda: b[10**100])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 self.assertRaises(IndexError, lambda: b[-1])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 self.assertRaises(IndexError, lambda: b[-2])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 self.assertRaises(IndexError, lambda: b[-sys.maxint])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 self.assertRaises(IndexError, lambda: b[-sys.maxint-1])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 self.assertRaises(IndexError, lambda: b[-sys.maxint-2])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 self.assertRaises(IndexError, lambda: b[-10**100])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
32
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 def test_from_list(self):
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 ints = list(range(256))
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 b = bytes(i for i in ints)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 self.assertEqual(len(b), 256)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 self.assertEqual(list(b), ints)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
38
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 def test_from_index(self):
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 class C:
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 def __init__(self, i=0):
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 self.i = i
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 def __index__(self):
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 return self.i
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 b = bytes([C(), C(1), C(254), C(255)])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 self.assertEqual(list(b), [0, 1, 254, 255])
37930
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
47 self.assertRaises(ValueError, bytes, [C(-1)])
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
48 self.assertRaises(ValueError, bytes, [C(256)])
37927
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
49
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 def test_constructor_type_errors(self):
37960
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
51 self.assertRaises(TypeError, bytes, 0.0)
37927
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 class C:
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 pass
37930
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
54 self.assertRaises(TypeError, bytes, ["0"])
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
55 self.assertRaises(TypeError, bytes, [0.0])
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
56 self.assertRaises(TypeError, bytes, [None])
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
57 self.assertRaises(TypeError, bytes, [C()])
37927
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
58
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 def test_constructor_value_errors(self):
37930
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
60 self.assertRaises(ValueError, bytes, [-1])
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
61 self.assertRaises(ValueError, bytes, [-sys.maxint])
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
62 self.assertRaises(ValueError, bytes, [-sys.maxint-1])
39631
8d71f9a6c1c3 Make bytesobject raise ValueError instead of TypeError again (thanks, Nick)
Thomas Wouters <thomas@python.org>
parents: 39610
diff changeset
63 self.assertRaises(ValueError, bytes, [-sys.maxint-2])
8d71f9a6c1c3 Make bytesobject raise ValueError instead of TypeError again (thanks, Nick)
Thomas Wouters <thomas@python.org>
parents: 39610
diff changeset
64 self.assertRaises(ValueError, bytes, [-10**100])
37930
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
65 self.assertRaises(ValueError, bytes, [256])
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
66 self.assertRaises(ValueError, bytes, [257])
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
67 self.assertRaises(ValueError, bytes, [sys.maxint])
39631
8d71f9a6c1c3 Make bytesobject raise ValueError instead of TypeError again (thanks, Nick)
Thomas Wouters <thomas@python.org>
parents: 39610
diff changeset
68 self.assertRaises(ValueError, bytes, [sys.maxint+1])
8d71f9a6c1c3 Make bytesobject raise ValueError instead of TypeError again (thanks, Nick)
Thomas Wouters <thomas@python.org>
parents: 39610
diff changeset
69 self.assertRaises(ValueError, bytes, [10**100])
37927
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
70
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 def test_repr(self):
40898
b58a4374ac21 Make bytes_repr return a string containing a b"" literal.
Georg Brandl <georg@python.org>
parents: 40894
diff changeset
72 self.assertEqual(repr(bytes()), "b''")
b58a4374ac21 Make bytes_repr return a string containing a b"" literal.
Georg Brandl <georg@python.org>
parents: 40894
diff changeset
73 self.assertEqual(repr(bytes([0])), "b'\\0'")
b58a4374ac21 Make bytes_repr return a string containing a b"" literal.
Georg Brandl <georg@python.org>
parents: 40894
diff changeset
74 self.assertEqual(repr(bytes([0, 1, 254, 255])), "b'\\0\\x01\\xfe\\xff'")
b58a4374ac21 Make bytes_repr return a string containing a b"" literal.
Georg Brandl <georg@python.org>
parents: 40894
diff changeset
75 self.assertEqual(repr(bytes('abc')), "b'abc'")
b58a4374ac21 Make bytes_repr return a string containing a b"" literal.
Georg Brandl <georg@python.org>
parents: 40894
diff changeset
76 self.assertEqual(repr(bytes("'")), "b'\\''")
37927
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
77
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 def test_compare(self):
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 b1 = bytes([1, 2, 3])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 b2 = bytes([1, 2, 3])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 b3 = bytes([1, 3])
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
82
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 self.failUnless(b1 == b2)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 self.failUnless(b2 != b3)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 self.failUnless(b1 <= b2)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 self.failUnless(b1 <= b3)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 self.failUnless(b1 < b3)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 self.failUnless(b1 >= b2)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 self.failUnless(b3 >= b2)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 self.failUnless(b3 > b2)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
91
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 self.failIf(b1 != b2)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 self.failIf(b2 == b3)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 self.failIf(b1 > b2)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 self.failIf(b1 > b3)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 self.failIf(b1 >= b3)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 self.failIf(b1 < b2)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 self.failIf(b3 < b2)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 self.failIf(b3 <= b2)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
100
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 def test_nohash(self):
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 self.assertRaises(TypeError, hash, bytes())
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
103
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 def test_doc(self):
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 self.failUnless(bytes.__doc__ != None)
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 self.failUnless(bytes.__doc__.startswith("bytes("))
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
107
37960
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
108 def test_buffer_api(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
109 short_sample = "Hello world\n"
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
110 sample = short_sample + "x"*(20 - len(short_sample))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
111 tfn = tempfile.mktemp()
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
112 try:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
113 # Prepare
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
114 with open(tfn, "wb") as f:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
115 f.write(short_sample)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
116 # Test readinto
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
117 with open(tfn, "rb") as f:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
118 b = bytes([ord('x')]*20)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
119 n = f.readinto(b)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
120 self.assertEqual(n, len(short_sample))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
121 self.assertEqual(list(b), map(ord, sample))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
122 # Test writing in binary mode
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
123 with open(tfn, "wb") as f:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
124 f.write(b)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
125 with open(tfn, "rb") as f:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
126 self.assertEqual(f.read(), sample)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
127 # Test writing in text mode
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
128 with open(tfn, "w") as f:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
129 f.write(b)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
130 with open(tfn, "r") as f:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
131 self.assertEqual(f.read(), sample)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
132 # Can't use readinto in text mode
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
133 with open(tfn, "r") as f:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
134 self.assertRaises(TypeError, f.readinto, b)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
135 finally:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
136 try:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
137 os.remove(tfn)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
138 except os.error:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
139 pass
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
140
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
141 def test_reversed(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
142 input = map(ord, "Hello")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
143 b = bytes(input)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
144 output = list(reversed(b))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
145 input.reverse()
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
146 self.assertEqual(output, input)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
147
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
148 def test_getslice(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
149 def by(s):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
150 return bytes(map(ord, s))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
151 b = by("Hello, world")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
152
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
153 self.assertEqual(b[:5], by("Hello"))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
154 self.assertEqual(b[1:5], by("ello"))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
155 self.assertEqual(b[5:7], by(", "))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
156 self.assertEqual(b[7:], by("world"))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
157 self.assertEqual(b[7:12], by("world"))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
158 self.assertEqual(b[7:100], by("world"))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
159
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
160 self.assertEqual(b[:-7], by("Hello"))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
161 self.assertEqual(b[-11:-7], by("ello"))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
162 self.assertEqual(b[-7:-5], by(", "))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
163 self.assertEqual(b[-5:], by("world"))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
164 self.assertEqual(b[-5:12], by("world"))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
165 self.assertEqual(b[-5:100], by("world"))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
166 self.assertEqual(b[-100:5], by("Hello"))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
167
40472
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
168 def test_extended_getslice(self):
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
169 # Test extended slicing by comparing with list slicing.
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
170 L = list(range(255))
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
171 b = bytes(L)
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
172 indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100)
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
173 for start in indices:
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
174 for stop in indices:
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
175 # Skip step 0 (invalid)
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
176 for step in indices[1:]:
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
177 self.assertEqual(b[start:stop:step], bytes(L[start:stop:step]))
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
178
37960
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
179 def test_regexps(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
180 def by(s):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
181 return bytes(map(ord, s))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
182 b = by("Hello, world")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
183 self.assertEqual(re.findall(r"\w+", b), [by("Hello"), by("world")])
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
184
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
185 def test_setitem(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
186 b = bytes([1, 2, 3])
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
187 b[1] = 100
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
188 self.assertEqual(b, bytes([1, 100, 3]))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
189 b[-1] = 200
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
190 self.assertEqual(b, bytes([1, 100, 200]))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
191 class C:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
192 def __init__(self, i=0):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
193 self.i = i
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
194 def __index__(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
195 return self.i
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
196 b[0] = C(10)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
197 self.assertEqual(b, bytes([10, 100, 200]))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
198 try:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
199 b[3] = 0
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
200 self.fail("Didn't raise IndexError")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
201 except IndexError:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
202 pass
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
203 try:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
204 b[-10] = 0
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
205 self.fail("Didn't raise IndexError")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
206 except IndexError:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
207 pass
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
208 try:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
209 b[0] = 256
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
210 self.fail("Didn't raise ValueError")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
211 except ValueError:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
212 pass
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
213 try:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
214 b[0] = C(-1)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
215 self.fail("Didn't raise ValueError")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
216 except ValueError:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
217 pass
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
218 try:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
219 b[0] = None
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
220 self.fail("Didn't raise TypeError")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
221 except TypeError:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
222 pass
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
223
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
224 def test_delitem(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
225 b = bytes(range(10))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
226 del b[0]
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
227 self.assertEqual(b, bytes(range(1, 10)))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
228 del b[-1]
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
229 self.assertEqual(b, bytes(range(1, 9)))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
230 del b[4]
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
231 self.assertEqual(b, bytes([1, 2, 3, 4, 6, 7, 8]))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
232
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
233 def test_setslice(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
234 b = bytes(range(10))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
235 self.assertEqual(list(b), list(range(10)))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
236
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
237 b[0:5] = bytes([1, 1, 1, 1, 1])
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
238 self.assertEqual(b, bytes([1, 1, 1, 1, 1, 5, 6, 7, 8, 9]))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
239
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
240 del b[0:-5]
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
241 self.assertEqual(b, bytes([5, 6, 7, 8, 9]))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
242
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
243 b[0:0] = bytes([0, 1, 2, 3, 4])
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
244 self.assertEqual(b, bytes(range(10)))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
245
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
246 b[-7:-3] = bytes([100, 101])
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
247 self.assertEqual(b, bytes([0, 1, 2, 100, 101, 7, 8, 9]))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
248
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
249 b[3:5] = [3, 4, 5, 6]
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
250 self.assertEqual(b, bytes(range(10)))
39643
3dd61ffd049e Fix buglet in slice assignment of bytesobjects: assigning to b[3:0] ('stop'
Thomas Wouters <thomas@python.org>
parents: 39631
diff changeset
251
3dd61ffd049e Fix buglet in slice assignment of bytesobjects: assigning to b[3:0] ('stop'
Thomas Wouters <thomas@python.org>
parents: 39631
diff changeset
252 b[3:0] = [42, 42, 42]
3dd61ffd049e Fix buglet in slice assignment of bytesobjects: assigning to b[3:0] ('stop'
Thomas Wouters <thomas@python.org>
parents: 39631
diff changeset
253 self.assertEqual(b, bytes([0, 1, 2, 42, 42, 42, 3, 4, 5, 6, 7, 8, 9]))
37960
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
254
40472
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
255 def test_extended_set_del_slice(self):
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
256 indices = (0, None, 1, 3, 19, 300, -1, -2, -31, -300)
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
257 for start in indices:
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
258 for stop in indices:
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
259 # Skip invalid step 0
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
260 for step in indices[1:]:
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
261 L = list(range(255))
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
262 b = bytes(L)
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
263 # Make sure we have a slice of exactly the right length,
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
264 # but with different data.
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
265 data = L[start:stop:step]
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
266 data.reverse()
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
267 L[start:stop:step] = data
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
268 b[start:stop:step] = data
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
269 self.assertEquals(b, bytes(L))
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
270
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
271 del L[start:stop:step]
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
272 del b[start:stop:step]
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
273 self.assertEquals(b, bytes(L))
9548ca0e6560 Implement extended slicing in bytes objects.
Thomas Wouters <thomas@python.org>
parents: 39643
diff changeset
274
37960
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
275 def test_setslice_trap(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
276 # This test verifies that we correctly handle assigning self
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
277 # to a slice of self (the old Lambert Meertens trap).
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
278 b = bytes(range(256))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
279 b[8:] = b
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
280 self.assertEqual(b, bytes(list(range(8)) + list(range(256))))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
281
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
282 def test_encoding(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
283 sample = u"Hello world\n\u1234\u5678\u9abc\udef0"
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
284 for enc in ("utf8", "utf16"):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
285 b = bytes(sample, enc)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
286 self.assertEqual(b, bytes(map(ord, sample.encode(enc))))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
287 self.assertRaises(UnicodeEncodeError, bytes, sample, "latin1")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
288 b = bytes(sample, "latin1", "ignore")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
289 self.assertEqual(b, bytes(sample[:-4]))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
290
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
291 def test_decode(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
292 sample = u"Hello world\n\u1234\u5678\u9abc\def0\def0"
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
293 for enc in ("utf8", "utf16"):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
294 b = bytes(sample, enc)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
295 self.assertEqual(b.decode(enc), sample)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
296 sample = u"Hello world\n\x80\x81\xfe\xff"
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
297 b = bytes(sample, "latin1")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
298 self.assertRaises(UnicodeDecodeError, b.decode, "utf8")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
299 self.assertEqual(b.decode("utf8", "ignore"), "Hello world\n")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
300
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
301 def test_from_buffer(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
302 sample = "Hello world\n\x80\x81\xfe\xff"
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
303 buf = buffer(sample)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
304 b = bytes(buf)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
305 self.assertEqual(b, bytes(map(ord, sample)))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
306
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
307 def test_to_str(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
308 sample = "Hello world\n\x80\x81\xfe\xff"
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
309 b = bytes(sample)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
310 self.assertEqual(str(b), sample)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
311
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
312 def test_from_int(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
313 b = bytes(0)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
314 self.assertEqual(b, bytes())
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
315 b = bytes(10)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
316 self.assertEqual(b, bytes([0]*10))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
317 b = bytes(10000)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
318 self.assertEqual(b, bytes([0]*10000))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
319
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
320 def test_concat(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
321 b1 = bytes("abc")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
322 b2 = bytes("def")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
323 self.assertEqual(b1 + b2, bytes("abcdef"))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
324 self.assertRaises(TypeError, lambda: b1 + "def")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
325 self.assertRaises(TypeError, lambda: "abc" + b2)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
326
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
327 def test_repeat(self):
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
328 b = bytes("abc")
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
329 self.assertEqual(b * 3, bytes("abcabcabc"))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
330 self.assertEqual(b * 0, bytes())
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
331 self.assertEqual(b * -1, bytes())
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
332 self.assertRaises(TypeError, lambda: b * 3.14)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
333 self.assertRaises(TypeError, lambda: 3.14 * b)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
334 self.assertRaises(MemoryError, lambda: b * sys.maxint)
38017
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
335
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
336 def test_repeat_1char(self):
37960
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
337 self.assertEqual(bytes('x')*100, bytes('x'*100))
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
338
38017
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
339 def test_iconcat(self):
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
340 b = bytes("abc")
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
341 b1 = b
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
342 b += bytes("def")
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
343 self.assertEqual(b, bytes("abcdef"))
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
344 self.assertEqual(b, b1)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
345 self.failUnless(b is b1)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
346
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
347 def test_irepeat(self):
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
348 b = bytes("abc")
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
349 b1 = b
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
350 b *= 3
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
351 self.assertEqual(b, bytes("abcabcabc"))
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
352 self.assertEqual(b, b1)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
353 self.failUnless(b is b1)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
354
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
355 def test_irepeat_1char(self):
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
356 b = bytes("x")
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
357 b1 = b
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
358 b *= 100
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
359 self.assertEqual(b, bytes("x"*100))
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
360 self.assertEqual(b, b1)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
361 self.failUnless(b is b1)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
362
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
363 def test_contains(self):
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
364 b = bytes("abc")
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
365 self.failUnless(ord('a') in b)
40644
1c26505c1de6 Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents: 40472
diff changeset
366 self.failUnless(int(ord('a')) in b)
38017
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
367 self.failIf(200 in b)
40644
1c26505c1de6 Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents: 40472
diff changeset
368 self.failIf(200 in b)
38017
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
369 self.assertRaises(ValueError, lambda: 300 in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
370 self.assertRaises(ValueError, lambda: -1 in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
371 self.assertRaises(TypeError, lambda: None in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
372 self.assertRaises(TypeError, lambda: float(ord('a')) in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
373 self.assertRaises(TypeError, lambda: "a" in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
374 self.failUnless(bytes("") in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
375 self.failUnless(bytes("a") in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
376 self.failUnless(bytes("b") in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
377 self.failUnless(bytes("c") in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
378 self.failUnless(bytes("ab") in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
379 self.failUnless(bytes("bc") in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
380 self.failUnless(bytes("abc") in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
381 self.failIf(bytes("ac") in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
382 self.failIf(bytes("d") in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
383 self.failIf(bytes("dab") in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
384 self.failIf(bytes("abd") in b)
0b8e782b8484 Implement bytes += bytes, bytes *= int, int in bytes, bytes in bytes.
Guido van Rossum <guido@python.org>
parents: 37960
diff changeset
385
38117
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
386 def test_alloc(self):
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
387 b = bytes()
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
388 alloc = b.__alloc__()
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
389 self.assert_(alloc >= 0)
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
390 seq = [alloc]
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
391 for i in range(100):
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
392 b += bytes("x")
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
393 alloc = b.__alloc__()
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
394 self.assert_(alloc >= len(b))
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
395 if alloc not in seq:
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
396 seq.append(alloc)
38398
b1896656f22e Comment out debug print.
Guido van Rossum <guido@python.org>
parents: 38117
diff changeset
397 #print seq
38117
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
398
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
399 def test_join(self):
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
400 self.assertEqual(bytes.join([]), bytes())
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
401 self.assertEqual(bytes.join([bytes()]), bytes())
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
402 for part in [("abc",), ("a", "bc"), ("ab", "c"), ("a", "b", "c")]:
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
403 lst = map(bytes, part)
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
404 self.assertEqual(bytes.join(lst), bytes("abc"))
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
405 self.assertEqual(bytes.join(tuple(lst)), bytes("abc"))
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
406 self.assertEqual(bytes.join(iter(lst)), bytes("abc"))
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
407 # XXX more...
40894
0ea24f4f2467 Bytes literal.
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
408
0ea24f4f2467 Bytes literal.
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
409 def test_literal(self):
0ea24f4f2467 Bytes literal.
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
410 tests = [
0ea24f4f2467 Bytes literal.
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
411 (b"Wonderful spam", u"Wonderful spam"),
0ea24f4f2467 Bytes literal.
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
412 (br"Wonderful spam too", u"Wonderful spam too"),
0ea24f4f2467 Bytes literal.
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
413 (b"\xaa\x00\000\200", u"\xaa\x00\000\200"),
0ea24f4f2467 Bytes literal.
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
414 (br"\xaa\x00\000\200", ur"\xaa\x00\000\200"),
0ea24f4f2467 Bytes literal.
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
415 ]
0ea24f4f2467 Bytes literal.
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
416 for b, s in tests:
0ea24f4f2467 Bytes literal.
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
417 self.assertEqual(b, bytes(s, 'latin-1'))
0ea24f4f2467 Bytes literal.
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
418 for c in range(128, 256):
0ea24f4f2467 Bytes literal.
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
419 self.assertRaises(SyntaxError, eval,
0ea24f4f2467 Bytes literal.
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
420 'b"%s"' % chr(c))
38117
57bd7c7d91e3 Adding bytes.join() -- a class methods that concatenates an iterable of bytes.
Guido van Rossum <guido@python.org>
parents: 38017
diff changeset
421
37960
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
422 # Optimizations:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
423 # __iter__? (optimization)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
424 # __reversed__? (optimization)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
425
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
426 # XXX Some list methods?
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
427 # extended slicing
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
428 # extended slice assignment
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
429 # extend (same as b[len(b):] = src)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
430 # reverse (in-place)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
431 # remove
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
432 # pop
37930
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
433 # NOT sort!
37960
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
434 # With int arg:
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
435 # index
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
436 # count
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
437 # append
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
438 # insert
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
439
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
440 # XXX Some string methods? (Those that don't use character properties)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
441 # startswith
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
442 # endswidth
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
443 # find, rfind
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
444 # index, rindex (bytes arg)
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
445 # join
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
446 # replace
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
447 # translate
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
448 # split, rsplit
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
449 # lstrip, rstrip, strip??
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
450
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
451 # XXX pickle and marshal support?
37930
e1252cea439c Fix a leak and a buglet discovered by Thomas.
Guido van Rossum <guido@python.org>
parents: 37928
diff changeset
452
37927
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
453
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
454 def test_main():
37928
ae6f50600c46 Fix test_main function so test_bytes can be run by regrtest.py.
Thomas Wouters <thomas@python.org>
parents: 37927
diff changeset
455 test.test_support.run_unittest(BytesTest)
37927
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
456
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
457
a7f3765ea464 Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
diff changeset
458 if __name__ == "__main__":
37960
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
459 test_main()
e0b7e34b5971 Added much functionality to the bytes type.
Guido van Rossum <guido@python.org>
parents: 37930
diff changeset
460 ##unittest.main()