blob: f0142d849d1cdf608ef6bb2a944b81378e5e485d [file] [log] [blame]
Eli Bendersky62ae3282011-12-24 06:55:59 +02001try:
2 import unittest2 as unittest
3except ImportError:
4 import unittest
5import sys
Eli Benderskya1d61402011-11-28 06:25:52 +02006from random import randint
7
8sys.path.extend(['.', '..'])
Eli Bendersky79271e92012-01-27 10:25:47 +02009from elftools.common.py3compat import int2byte, BytesIO
Eli Benderskya1d61402011-11-28 06:25:52 +020010from elftools.common.utils import (parse_cstring_from_stream,
11 preserve_stream_pos)
12
13
14class Test_parse_cstring_from_stream(unittest.TestCase):
Eli Bendersky79271e92012-01-27 10:25:47 +020015 def _make_random_bytes(self, n):
16 return b''.join(int2byte(randint(32, 127)) for i in range(n))
Eli Benderskya1d61402011-11-28 06:25:52 +020017
18 def test_small1(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020019 sio = BytesIO(b'abcdefgh\x0012345')
20 self.assertEqual(parse_cstring_from_stream(sio), b'abcdefgh')
21 self.assertEqual(parse_cstring_from_stream(sio, 2), b'cdefgh')
22 self.assertEqual(parse_cstring_from_stream(sio, 8), b'')
Eli Benderskya1d61402011-11-28 06:25:52 +020023
24 def test_small2(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020025 sio = BytesIO(b'12345\x006789\x00abcdefg\x00iii')
26 self.assertEqual(parse_cstring_from_stream(sio), b'12345')
27 self.assertEqual(parse_cstring_from_stream(sio, 5), b'')
28 self.assertEqual(parse_cstring_from_stream(sio, 6), b'6789')
Eli Benderskya1d61402011-11-28 06:25:52 +020029
30 def test_large1(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020031 text = b'i' * 400 + b'\x00' + b'bb'
32 sio = BytesIO(text)
33 self.assertEqual(parse_cstring_from_stream(sio), b'i' * 400)
34 self.assertEqual(parse_cstring_from_stream(sio, 150), b'i' * 250)
Eli Benderskya1d61402011-11-28 06:25:52 +020035
36 def test_large2(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020037 text = self._make_random_bytes(5000) + b'\x00' + b'jujajaja'
38 sio = BytesIO(text)
Eli Benderskya1d61402011-11-28 06:25:52 +020039 self.assertEqual(parse_cstring_from_stream(sio), text[:5000])
40 self.assertEqual(parse_cstring_from_stream(sio, 2348), text[2348:5000])
41
42
43class Test_preserve_stream_pos(object):
44 def test_basic(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020045 sio = BytesIO('abcdef')
Eli Benderskya1d61402011-11-28 06:25:52 +020046 with preserve_stream_pos(sio):
47 sio.seek(4)
48 self.assertEqual(stream.tell(), 0)
49
50 sio.seek(5)
51 with preserve_stream_pos(sio):
52 sio.seek(0)
53 self.assertEqual(stream.tell(), 5)
54
55
56if __name__ == '__main__':
57 unittest.main()
58
59
60