3 from cStringIO import StringIO
5 from StringIO import StringIO
6 from random import randint
10 class ElementSizeTests(unittest.TestCase):
11 def assert_roundtrip(self, value, length=None):
12 encoded = encode_element_size(value, length=length)
13 encoded_stream = StringIO(encoded)
14 self.assertEqual(value, read_element_size(encoded_stream)[0])
16 def test_unknown(self):
17 for length in xrange(1, 9):
18 self.assert_roundtrip(None, length=length)
20 def test_base_10(self):
21 for value in (10**exp for exp in xrange(1, 16)):
22 self.assert_roundtrip(value)
24 def test_base_2(self):
25 for value in (2**exp for exp in xrange(1, 56)):
26 self.assert_roundtrip(value)
28 def test_max_base_2(self):
29 for value in ((2**exp) - 2 for exp in xrange(1, 57)):
30 self.assert_roundtrip(value)
32 def test_random(self):
34 for value in (randint(0, maximum) for i in xrange(0, 200)):
35 self.assert_roundtrip(value)
38 class ElementIDTests(unittest.TestCase):
52 def assert_roundtrip(self, value):
53 encoded = encode_element_id(value)
54 encoded_stream = StringIO(encoded)
55 self.assertEqual(value, read_element_id(encoded_stream)[0])
57 def test_ebml_ids(self):
58 for id_ in self.ebml_ids:
59 self.assert_roundtrip(id_)
62 class ValueTestCase(unittest.TestCase):
66 def assert_roundtrip(self, value):
67 if self.encoder is not None and self.reader is not None:
68 encoded = self.encoder(value)
69 encoded_stream = StringIO(encoded)
70 self.assertEqual(value, self.reader(encoded_stream, len(encoded)))
72 raise NotImplementedError
75 class UnsignedIntegerTests(ValueTestCase):
76 encoder = staticmethod(encode_unsigned_integer)
77 reader = staticmethod(read_unsigned_integer)
80 def test_random(self):
81 for value in (randint(0, self.maximum) for i in xrange(0, 10000)):
82 self.assert_roundtrip(value)
84 def test_maximum(self):
85 self.assert_roundtrip(self.maximum)
88 class SignedIntegerTests(ValueTestCase):
89 encoder = staticmethod(encode_signed_integer)
90 reader = staticmethod(read_signed_integer)
94 def test_random(self):
95 for value in (randint(self.minimum, self.maximum) for i in xrange(0, 10000)):
96 self.assert_roundtrip(value)
98 def test_minimum(self):
99 self.assert_roundtrip(self.minimum)
101 def test_maximum(self):
102 self.assert_roundtrip(self.maximum)
105 if __name__ == '__main__':