Fix running tests on Travis
[pyelftools.git] / test / test_dwarf_expr.py
1 #-------------------------------------------------------------------------------
2 # elftools tests
3 #
4 # Eli Bendersky (eliben@gmail.com)
5 # This code is in the public domain
6 #-------------------------------------------------------------------------------
7 import unittest
8
9 from elftools.dwarf.descriptions import ExprDumper, set_global_machine_arch
10 from elftools.dwarf.structs import DWARFStructs
11
12
13 class TestExprDumper(unittest.TestCase):
14 structs32 = DWARFStructs(
15 little_endian=True,
16 dwarf_format=32,
17 address_size=4)
18
19 def setUp(self):
20 self.visitor = ExprDumper(self.structs32)
21 set_global_machine_arch('x64')
22
23 def test_basic_single(self):
24 self.visitor.process_expr([0x1b])
25 self.assertEqual(self.visitor.get_str(),
26 'DW_OP_div')
27
28 self.setUp()
29 self.visitor.process_expr([0x74, 0x82, 0x01])
30 self.assertEqual(self.visitor.get_str(),
31 'DW_OP_breg4 (rsi): 130')
32
33 self.setUp()
34 self.visitor.process_expr([0x91, 0x82, 0x01])
35 self.assertEqual(self.visitor.get_str(),
36 'DW_OP_fbreg: 130')
37
38 self.setUp()
39 self.visitor.process_expr([0x51])
40 self.assertEqual(self.visitor.get_str(),
41 'DW_OP_reg1 (rdx)')
42
43 self.setUp()
44 self.visitor.process_expr([0x90, 16])
45 self.assertEqual(self.visitor.get_str(),
46 'DW_OP_regx: 16 (rip)')
47
48 self.setUp()
49 self.visitor.process_expr([0x9d, 0x8f, 0x0A, 0x90, 0x01])
50 self.assertEqual(self.visitor.get_str(),
51 'DW_OP_bit_piece: 1295 144')
52
53 def test_basic_sequence(self):
54 self.visitor.process_expr([0x03, 0x01, 0x02, 0, 0, 0x06, 0x06])
55 self.assertEqual(self.visitor.get_str(),
56 'DW_OP_addr: 201; DW_OP_deref; DW_OP_deref')
57
58 self.setUp()
59 self.visitor.process_expr([0x15, 0xFF, 0x0b, 0xf1, 0xff])
60 self.assertEqual(self.visitor.get_str(),
61 'DW_OP_pick: 255; DW_OP_const2s: -15')
62
63 self.setUp()
64 self.visitor.process_expr([0x1d, 0x1e, 0x1d, 0x1e, 0x1d, 0x1e])
65 self.assertEqual(self.visitor.get_str(),
66 'DW_OP_mod; DW_OP_mul; DW_OP_mod; DW_OP_mul; DW_OP_mod; DW_OP_mul')
67
68
69 if __name__ == '__main__':
70 unittest.main()
71
72