1"""
2Test some ARM instruction emulation.
3"""
4
5from __future__ import print_function
6
7
8import os
9import lldb
10from lldbsuite.test.decorators import *
11from lldbsuite.test.lldbtest import *
12from lldbsuite.test import lldbutil
13
14
15class ARMEmulationTestCase(TestBase):
16
17    @no_debug_info_test
18    def test_thumb_emulations(self):
19        test_dir = os.path.join(self.getSourceDir(), "new-test-files")
20        files = os.listdir(test_dir)
21        thumb_files = list()
22        for f in files:
23            if f.endswith('-thumb.dat'):
24                thumb_files.append(f)
25
26        for f in thumb_files:
27            test_file = os.path.join(test_dir, f)
28            self.run_a_single_test(test_file)
29
30    @no_debug_info_test
31    def test_arm_emulations(self):
32        test_dir = os.path.join(self.getSourceDir(), "new-test-files")
33        files = os.listdir(test_dir)
34        arm_files = list()
35        for f in files:
36            if f.endswith('-arm.dat'):
37                arm_files.append(f)
38
39        for f in arm_files:
40            test_file = os.path.join(test_dir, f)
41            self.run_a_single_test(test_file)
42
43    def run_a_single_test(self, filename):
44        insn = lldb.SBInstruction()
45        stream = lldb.SBStream()
46        success = insn.TestEmulation(stream, filename)
47        output = stream.GetData()
48        if self.TraceOn():
49            print('\nRunning test ' + os.path.basename(filename))
50            print(output)
51
52        self.assertTrue(success, 'Emulation test {} failed.'.format(
53                        filename))
54