| """Unit tests for the bytes type.""" |
| |
| import sys |
| import unittest |
| import test.test_support |
| |
| |
| class BytesTest(unittest.TestCase): |
| |
| def test_basics(self): |
| b = bytes() |
| self.assertEqual(type(b), bytes) |
| self.assertEqual(b.__class__, bytes) |
| |
| def test_empty_sequence(self): |
| b = bytes() |
| self.assertEqual(len(b), 0) |
| self.assertRaises(IndexError, lambda: b[0]) |
| self.assertRaises(IndexError, lambda: b[1]) |
| self.assertRaises(IndexError, lambda: b[sys.maxint]) |
| self.assertRaises(IndexError, lambda: b[sys.maxint+1]) |
| self.assertRaises(IndexError, lambda: b[10**100]) |
| self.assertRaises(IndexError, lambda: b[-1]) |
| self.assertRaises(IndexError, lambda: b[-2]) |
| self.assertRaises(IndexError, lambda: b[-sys.maxint]) |
| self.assertRaises(IndexError, lambda: b[-sys.maxint-1]) |
| self.assertRaises(IndexError, lambda: b[-sys.maxint-2]) |
| self.assertRaises(IndexError, lambda: b[-10**100]) |
| |
| def test_from_list(self): |
| ints = list(range(256)) |
| b = bytes(i for i in ints) |
| self.assertEqual(len(b), 256) |
| self.assertEqual(list(b), ints) |
| |
| def test_from_index(self): |
| class C: |
| def __init__(self, i=0): |
| self.i = i |
| def __index__(self): |
| return self.i |
| b = bytes([C(), C(1), C(254), C(255)]) |
| self.assertEqual(list(b), [0, 1, 254, 255]) |
| self.assertRaises(ValueError, bytes, [C(-1)]) |
| self.assertRaises(ValueError, bytes, [C(256)]) |
| |
| def test_constructor_type_errors(self): |
| self.assertRaises(TypeError, bytes, 0) |
| class C: |
| pass |
| self.assertRaises(TypeError, bytes, ["0"]) |
| self.assertRaises(TypeError, bytes, [0.0]) |
| self.assertRaises(TypeError, bytes, [None]) |
| self.assertRaises(TypeError, bytes, [C()]) |
| |
| def test_constructor_value_errors(self): |
| self.assertRaises(ValueError, bytes, [-1]) |
| self.assertRaises(ValueError, bytes, [-sys.maxint]) |
| self.assertRaises(ValueError, bytes, [-sys.maxint-1]) |
| self.assertRaises(ValueError, bytes, [-sys.maxint-2]) |
| self.assertRaises(ValueError, bytes, [-10**100]) |
| self.assertRaises(ValueError, bytes, [256]) |
| self.assertRaises(ValueError, bytes, [257]) |
| self.assertRaises(ValueError, bytes, [sys.maxint]) |
| self.assertRaises(ValueError, bytes, [sys.maxint+1]) |
| self.assertRaises(ValueError, bytes, [10**100]) |
| |
| def test_repr(self): |
| self.assertEqual(repr(bytes()), "bytes()") |
| self.assertEqual(repr(bytes([0])), "bytes([0x00])") |
| self.assertEqual(repr(bytes([0, 1, 254, 255])), "bytes([0x00, 0x01, 0xfe, 0xff])") |
| |
| def test_compare(self): |
| b1 = bytes([1, 2, 3]) |
| b2 = bytes([1, 2, 3]) |
| b3 = bytes([1, 3]) |
| |
| self.failUnless(b1 == b2) |
| self.failUnless(b2 != b3) |
| self.failUnless(b1 <= b2) |
| self.failUnless(b1 <= b3) |
| self.failUnless(b1 < b3) |
| self.failUnless(b1 >= b2) |
| self.failUnless(b3 >= b2) |
| self.failUnless(b3 > b2) |
| |
| self.failIf(b1 != b2) |
| self.failIf(b2 == b3) |
| self.failIf(b1 > b2) |
| self.failIf(b1 > b3) |
| self.failIf(b1 >= b3) |
| self.failIf(b1 < b2) |
| self.failIf(b3 < b2) |
| self.failIf(b3 <= b2) |
| |
| def test_nohash(self): |
| self.assertRaises(TypeError, hash, bytes()) |
| |
| def test_doc(self): |
| self.failUnless(bytes.__doc__ != None) |
| self.failUnless(bytes.__doc__.startswith("bytes(")) |
| |
| # XXX More stuff to test and build (TDD): |
| # constructor from str: bytes(<str>) == bytes(map(ord, <str>))? |
| # encoding constructor: bytes(<unicode>[, <encoding>[, <errors>]]) |
| # default encoding Latin-1? (Matching ord) |
| # slicing |
| # extended slicing? |
| # item assignment |
| # slice assignment |
| # extended slice assignment? |
| # __contains__ with simple int arg |
| # __contains__ with another bytes arg? |
| # find/index? (int or bytes arg?) |
| # count? (int arg) |
| # concatenation (+) |
| # repeat? |
| # extend? |
| # append? |
| # insert? |
| # pop? |
| # __reversed__? |
| # reverse? (inplace) |
| # NOT sort! |
| # __iter__? (optimization) |
| # __str__? (could return "".join(map(chr, self)) |
| # decode |
| # buffer API |
| # check that regexp searches work |
| # (I suppose re.sub() returns a string) |
| # file.readinto |
| # file.write |
| |
| |
| def test_main(): |
| test.test_support.run_unittest(BytesTest) |
| |
| |
| if __name__ == "__main__": |
| ##test_main() |
| unittest.main() |