1*99451b44SJordan Rupprecht"""
2*99451b44SJordan RupprechtTest lldb data formatter subsystem.
3*99451b44SJordan Rupprecht"""
4*99451b44SJordan Rupprecht
5*99451b44SJordan Rupprecht
6*99451b44SJordan Rupprecht
7*99451b44SJordan Rupprechtimport lldb
8*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
9*99451b44SJordan Rupprechtimport lldbsuite.test.lldbutil as lldbutil
10*99451b44SJordan Rupprecht
11*99451b44SJordan Rupprecht
12*99451b44SJordan Rupprechtclass DataFormatterHexCapsTestCase(TestBase):
13*99451b44SJordan Rupprecht
14*99451b44SJordan Rupprecht    def setUp(self):
15*99451b44SJordan Rupprecht        # Call super's setUp().
16*99451b44SJordan Rupprecht        TestBase.setUp(self)
17*99451b44SJordan Rupprecht        # Find the line number to break at.
18*99451b44SJordan Rupprecht        self.line = line_number('main.cpp', '// Set break point at this line.')
19*99451b44SJordan Rupprecht
20*99451b44SJordan Rupprecht    def test_with_run_command(self):
21*99451b44SJordan Rupprecht        """Test that that file and class static variables display correctly."""
22*99451b44SJordan Rupprecht        self.build()
23*99451b44SJordan Rupprecht        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
24*99451b44SJordan Rupprecht
25*99451b44SJordan Rupprecht        lldbutil.run_break_set_by_file_and_line(
26*99451b44SJordan Rupprecht            self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True)
27*99451b44SJordan Rupprecht
28*99451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
29*99451b44SJordan Rupprecht
30*99451b44SJordan Rupprecht        # The stop reason of the thread should be breakpoint.
31*99451b44SJordan Rupprecht        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
32*99451b44SJordan Rupprecht                    substrs=['stopped',
33*99451b44SJordan Rupprecht                             'stop reason = breakpoint'])
34*99451b44SJordan Rupprecht
35*99451b44SJordan Rupprecht        # This is the function to remove the custom formats in order to have a
36*99451b44SJordan Rupprecht        # clean slate for the next test case.
37*99451b44SJordan Rupprecht        def cleanup():
38*99451b44SJordan Rupprecht            self.runCmd('type format delete hex', check=False)
39*99451b44SJordan Rupprecht            self.runCmd('type summary clear', check=False)
40*99451b44SJordan Rupprecht
41*99451b44SJordan Rupprecht        # Execute the cleanup function during test case tear down.
42*99451b44SJordan Rupprecht        self.addTearDownHook(cleanup)
43*99451b44SJordan Rupprecht
44*99451b44SJordan Rupprecht        self.runCmd("type format add -f uppercase int")
45*99451b44SJordan Rupprecht
46*99451b44SJordan Rupprecht        self.expect('frame variable mine',
47*99451b44SJordan Rupprecht                    substrs=['mine = ',
48*99451b44SJordan Rupprecht                             'first = 0x001122AA', 'second = 0x1122BB44'])
49*99451b44SJordan Rupprecht
50*99451b44SJordan Rupprecht        self.runCmd("type format add -f hex int")
51*99451b44SJordan Rupprecht
52*99451b44SJordan Rupprecht        self.expect('frame variable mine',
53*99451b44SJordan Rupprecht                    substrs=['mine = ',
54*99451b44SJordan Rupprecht                             'first = 0x001122aa', 'second = 0x1122bb44'])
55*99451b44SJordan Rupprecht
56*99451b44SJordan Rupprecht        self.runCmd("type format delete int")
57*99451b44SJordan Rupprecht
58*99451b44SJordan Rupprecht        self.runCmd(
59*99451b44SJordan Rupprecht            "type summary add -s \"${var.first%X} and ${var.second%x}\" foo")
60*99451b44SJordan Rupprecht
61*99451b44SJordan Rupprecht        self.expect('frame variable mine',
62*99451b44SJordan Rupprecht                    substrs=['(foo) mine = 0x001122AA and 0x1122bb44'])
63*99451b44SJordan Rupprecht
64*99451b44SJordan Rupprecht        self.runCmd(
65*99451b44SJordan Rupprecht            "type summary add -s \"${var.first%X} and ${var.second%X}\" foo")
66*99451b44SJordan Rupprecht        self.runCmd("next")
67*99451b44SJordan Rupprecht        self.runCmd("next")
68*99451b44SJordan Rupprecht        self.expect('frame variable mine',
69*99451b44SJordan Rupprecht                    substrs=['(foo) mine = 0xAABBCCDD and 0x1122BB44'])
70*99451b44SJordan Rupprecht
71*99451b44SJordan Rupprecht        self.runCmd(
72*99451b44SJordan Rupprecht            "type summary add -s \"${var.first%x} and ${var.second%X}\" foo")
73*99451b44SJordan Rupprecht        self.expect('frame variable mine',
74*99451b44SJordan Rupprecht                    substrs=['(foo) mine = 0xaabbccdd and 0x1122BB44'])
75*99451b44SJordan Rupprecht        self.runCmd("next")
76*99451b44SJordan Rupprecht        self.runCmd("next")
77*99451b44SJordan Rupprecht        self.runCmd(
78*99451b44SJordan Rupprecht            "type summary add -s \"${var.first%x} and ${var.second%x}\" foo")
79*99451b44SJordan Rupprecht        self.expect('frame variable mine',
80*99451b44SJordan Rupprecht                    substrs=['(foo) mine = 0xaabbccdd and 0xff00ff00'])
81*99451b44SJordan Rupprecht        self.runCmd(
82*99451b44SJordan Rupprecht            "type summary add -s \"${var.first%X} and ${var.second%X}\" foo")
83*99451b44SJordan Rupprecht        self.expect('frame variable mine',
84*99451b44SJordan Rupprecht                    substrs=['(foo) mine = 0xAABBCCDD and 0xFF00FF00'])
85