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 PtrToArrayDataFormatterTestCase(TestBase):
13*99451b44SJordan Rupprecht
14*99451b44SJordan Rupprecht    def test_with_run_command(self):
15*99451b44SJordan Rupprecht        """Test that LLDB handles the clang typeclass Paren correctly."""
16*99451b44SJordan Rupprecht        self.build()
17*99451b44SJordan Rupprecht        self.data_formatter_commands()
18*99451b44SJordan Rupprecht
19*99451b44SJordan Rupprecht    def setUp(self):
20*99451b44SJordan Rupprecht        # Call super's setUp().
21*99451b44SJordan Rupprecht        TestBase.setUp(self)
22*99451b44SJordan Rupprecht        # Find the line number to break at.
23*99451b44SJordan Rupprecht        self.line = line_number('main.cpp', '// Set break point at this line.')
24*99451b44SJordan Rupprecht
25*99451b44SJordan Rupprecht    def data_formatter_commands(self):
26*99451b44SJordan Rupprecht        """Test that LLDB handles the clang typeclass Paren correctly."""
27*99451b44SJordan Rupprecht        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
28*99451b44SJordan Rupprecht
29*99451b44SJordan Rupprecht        lldbutil.run_break_set_by_file_and_line(
30*99451b44SJordan Rupprecht            self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True)
31*99451b44SJordan Rupprecht
32*99451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
33*99451b44SJordan Rupprecht
34*99451b44SJordan Rupprecht        # The stop reason of the thread should be breakpoint.
35*99451b44SJordan Rupprecht        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
36*99451b44SJordan Rupprecht                    substrs=['stopped',
37*99451b44SJordan Rupprecht                             'stop reason = breakpoint'])
38*99451b44SJordan Rupprecht
39*99451b44SJordan Rupprecht        # This is the function to remove the custom formats in order to have a
40*99451b44SJordan Rupprecht        # clean slate for the next test case.
41*99451b44SJordan Rupprecht        def cleanup():
42*99451b44SJordan Rupprecht            self.runCmd('type format delete hex', check=False)
43*99451b44SJordan Rupprecht            self.runCmd('type summary clear', check=False)
44*99451b44SJordan Rupprecht
45*99451b44SJordan Rupprecht        # Execute the cleanup function during test case tear down.
46*99451b44SJordan Rupprecht        self.addTearDownHook(cleanup)
47*99451b44SJordan Rupprecht
48*99451b44SJordan Rupprecht        self.expect('p *(int (*)[3])foo',
49*99451b44SJordan Rupprecht                    substrs=['(int[3]) $', '[0] = 1', '[1] = 2', '[2] = 3'])
50*99451b44SJordan Rupprecht
51*99451b44SJordan Rupprecht        self.expect('p *(int (*)[3])foo', matching=False,
52*99451b44SJordan Rupprecht                    substrs=['01 00 00 00 02 00 00 00 03 00 00 00'])
53*99451b44SJordan Rupprecht        self.expect('p *(int (*)[3])foo', matching=False,
54*99451b44SJordan Rupprecht                    substrs=['0x000000030000000200000001'])
55