blob: fc911ac974b02bf35dedd8d14a1305a9e5fb126e [file] [log] [blame]
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00001"""Unit tests for the bytes type."""
2
3import sys
4import unittest
5import test.test_support
6
7
8class BytesTest(unittest.TestCase):
9
10 def test_basics(self):
11 b = bytes()
12 self.assertEqual(type(b), bytes)
13 self.assertEqual(b.__class__, bytes)
14
15 def test_empty_sequence(self):
16 b = bytes()
17 self.assertEqual(len(b), 0)
18 self.assertRaises(IndexError, lambda: b[0])
19 self.assertRaises(IndexError, lambda: b[1])
20 self.assertRaises(IndexError, lambda: b[sys.maxint])
21 self.assertRaises(IndexError, lambda: b[sys.maxint+1])
22 self.assertRaises(IndexError, lambda: b[10**100])
23 self.assertRaises(IndexError, lambda: b[-1])
24 self.assertRaises(IndexError, lambda: b[-2])
25 self.assertRaises(IndexError, lambda: b[-sys.maxint])
26 self.assertRaises(IndexError, lambda: b[-sys.maxint-1])
27 self.assertRaises(IndexError, lambda: b[-sys.maxint-2])
28 self.assertRaises(IndexError, lambda: b[-10**100])
29
30 def test_from_list(self):
31 ints = list(range(256))
32 b = bytes(i for i in ints)
33 self.assertEqual(len(b), 256)
34 self.assertEqual(list(b), ints)
35
36 def test_from_index(self):
37 class C:
38 def __init__(self, i=0):
39 self.i = i
40 def __index__(self):
41 return self.i
42 b = bytes([C(), C(1), C(254), C(255)])
43 self.assertEqual(list(b), [0, 1, 254, 255])
44 self.assertRaises(ValueError, lambda: bytes([C(-1)]))
45 self.assertRaises(ValueError, lambda: bytes([C(256)]))
46
47 def test_constructor_type_errors(self):
48 class C:
49 pass
50 self.assertRaises(TypeError, lambda: bytes(["0"]))
51 self.assertRaises(TypeError, lambda: bytes([0.0]))
52 self.assertRaises(TypeError, lambda: bytes([None]))
53 self.assertRaises(TypeError, lambda: bytes([C()]))
54
55 def test_constructor_value_errors(self):
56 self.assertRaises(ValueError, lambda: bytes([-1]))
57 self.assertRaises(ValueError, lambda: bytes([-sys.maxint]))
58 self.assertRaises(ValueError, lambda: bytes([-sys.maxint-1]))
59 self.assertRaises(ValueError, lambda: bytes([-sys.maxint-2]))
60 self.assertRaises(ValueError, lambda: bytes([-10**100]))
61 self.assertRaises(ValueError, lambda: bytes([256]))
62 self.assertRaises(ValueError, lambda: bytes([257]))
63 self.assertRaises(ValueError, lambda: bytes([sys.maxint]))
64 self.assertRaises(ValueError, lambda: bytes([sys.maxint+1]))
65 self.assertRaises(ValueError, lambda: bytes([10**100]))
66
67 def test_repr(self):
68 self.assertEqual(repr(bytes()), "bytes()")
69 self.assertEqual(repr(bytes([0])), "bytes([0x00])")
70 self.assertEqual(repr(bytes([0, 1, 254, 255])), "bytes([0x00, 0x01, 0xfe, 0xff])")
71
72 def test_compare(self):
73 b1 = bytes([1, 2, 3])
74 b2 = bytes([1, 2, 3])
75 b3 = bytes([1, 3])
76
77 self.failUnless(b1 == b2)
78 self.failUnless(b2 != b3)
79 self.failUnless(b1 <= b2)
80 self.failUnless(b1 <= b3)
81 self.failUnless(b1 < b3)
82 self.failUnless(b1 >= b2)
83 self.failUnless(b3 >= b2)
84 self.failUnless(b3 > b2)
85
86 self.failIf(b1 != b2)
87 self.failIf(b2 == b3)
88 self.failIf(b1 > b2)
89 self.failIf(b1 > b3)
90 self.failIf(b1 >= b3)
91 self.failIf(b1 < b2)
92 self.failIf(b3 < b2)
93 self.failIf(b3 <= b2)
94
95 def test_nohash(self):
96 self.assertRaises(TypeError, hash, bytes())
97
98 def test_doc(self):
99 self.failUnless(bytes.__doc__ != None)
100 self.failUnless(bytes.__doc__.startswith("bytes("))
101
102
103def test_main():
Thomas Wouters5f6f27d2006-04-23 00:19:58 +0000104 test.test_support.run_unittest(BytesTest)
Guido van Rossum4dfe8a12006-04-22 23:28:04 +0000105
106
107if __name__ == "__main__":
108 ##test_main()
109 unittest.main()