Guido van Rossum | 4dfe8a1 | 2006-04-22 23:28:04 +0000 | [diff] [blame^] | 1 | """Unit tests for the bytes type.""" |
| 2 | |
| 3 | import sys |
| 4 | import unittest |
| 5 | import test.test_support |
| 6 | |
| 7 | |
| 8 | class 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 | |
| 103 | def test_main(): |
| 104 | test.test_support.run_unittest(XrangeTest) |
| 105 | |
| 106 | |
| 107 | if __name__ == "__main__": |
| 108 | ##test_main() |
| 109 | unittest.main() |