blob: bc54780b79835fd1558c05d97ebc495707fb11ce [file] [log] [blame]
Eli Benderskydb51f262013-03-23 06:33:09 -07001#-------------------------------------------------------------------------------
2# elftools tests
3#
4# Eli Bendersky (eliben@gmail.com)
5# This code is in the public domain
6#-------------------------------------------------------------------------------
Eli Bendersky62ae3282011-12-24 06:55:59 +02007try:
8 import unittest2 as unittest
9except ImportError:
10 import unittest
11import sys
Eli Benderskya1d61402011-11-28 06:25:52 +020012from random import randint
13
14sys.path.extend(['.', '..'])
Eli Bendersky79271e92012-01-27 10:25:47 +020015from elftools.common.py3compat import int2byte, BytesIO
Eli Benderskya1d61402011-11-28 06:25:52 +020016from elftools.common.utils import (parse_cstring_from_stream,
17 preserve_stream_pos)
18
19
20class Test_parse_cstring_from_stream(unittest.TestCase):
Eli Bendersky79271e92012-01-27 10:25:47 +020021 def _make_random_bytes(self, n):
22 return b''.join(int2byte(randint(32, 127)) for i in range(n))
Eli Benderskydb51f262013-03-23 06:33:09 -070023
Eli Benderskya1d61402011-11-28 06:25:52 +020024 def test_small1(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020025 sio = BytesIO(b'abcdefgh\x0012345')
26 self.assertEqual(parse_cstring_from_stream(sio), b'abcdefgh')
27 self.assertEqual(parse_cstring_from_stream(sio, 2), b'cdefgh')
28 self.assertEqual(parse_cstring_from_stream(sio, 8), b'')
Eli Benderskya1d61402011-11-28 06:25:52 +020029
30 def test_small2(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020031 sio = BytesIO(b'12345\x006789\x00abcdefg\x00iii')
32 self.assertEqual(parse_cstring_from_stream(sio), b'12345')
33 self.assertEqual(parse_cstring_from_stream(sio, 5), b'')
34 self.assertEqual(parse_cstring_from_stream(sio, 6), b'6789')
Eli Benderskya1d61402011-11-28 06:25:52 +020035
36 def test_large1(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020037 text = b'i' * 400 + b'\x00' + b'bb'
38 sio = BytesIO(text)
39 self.assertEqual(parse_cstring_from_stream(sio), b'i' * 400)
40 self.assertEqual(parse_cstring_from_stream(sio, 150), b'i' * 250)
Eli Benderskya1d61402011-11-28 06:25:52 +020041
42 def test_large2(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020043 text = self._make_random_bytes(5000) + b'\x00' + b'jujajaja'
44 sio = BytesIO(text)
Eli Benderskya1d61402011-11-28 06:25:52 +020045 self.assertEqual(parse_cstring_from_stream(sio), text[:5000])
46 self.assertEqual(parse_cstring_from_stream(sio, 2348), text[2348:5000])
47
48
49class Test_preserve_stream_pos(object):
50 def test_basic(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020051 sio = BytesIO('abcdef')
Eli Benderskya1d61402011-11-28 06:25:52 +020052 with preserve_stream_pos(sio):
53 sio.seek(4)
54 self.assertEqual(stream.tell(), 0)
55
56 sio.seek(5)
57 with preserve_stream_pos(sio):
58 sio.seek(0)
59 self.assertEqual(stream.tell(), 5)
60
61
62if __name__ == '__main__':
63 unittest.main()
64
65
66