25ecdef5948c4b9840e24ddec0172bf5ce3c953c
[openbsd] /
1 """
2 Test lldb data formatter subsystem.
3 """
4
5
6
7 import lldb
8 from lldbsuite.test.decorators import *
9 from lldbsuite.test.lldbtest import *
10 from lldbsuite.test import lldbutil
11
12
13 class DataFormatterBoolRefPtr(TestBase):
14
15     mydir = TestBase.compute_mydir(__file__)
16
17     @skipUnlessDarwin
18     def test_boolrefptr_with_run_command(self):
19         """Test the formatters we use for BOOL& and BOOL* in Objective-C."""
20         self.build()
21         self.boolrefptr_data_formatter_commands()
22
23     def setUp(self):
24         # Call super's setUp().
25         TestBase.setUp(self)
26         # Find the line number to break at.
27         self.line = line_number('main.mm', '// Set break point at this line.')
28
29     def boolrefptr_data_formatter_commands(self):
30         """Test the formatters we use for BOOL& and BOOL* in Objective-C."""
31         self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
32
33         lldbutil.run_break_set_by_file_and_line(
34             self, "main.mm", self.line, num_expected_locations=1, loc_exact=True)
35
36         self.runCmd("run", RUN_SUCCEEDED)
37
38         # The stop reason of the thread should be breakpoint.
39         self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
40                     substrs=['stopped',
41                              'stop reason = breakpoint'])
42
43         # This is the function to remove the custom formats in order to have a
44         # clean slate for the next test case.
45         def cleanup():
46             self.runCmd('type format clear', check=False)
47             self.runCmd('type summary clear', check=False)
48             self.runCmd('type synth clear', check=False)
49
50         # Execute the cleanup function during test case tear down.
51         self.addTearDownHook(cleanup)
52
53         isiOS = (lldbplatformutil.getPlatform() == 'ios' or lldbplatformutil.getPlatform() == 'watchos')
54
55         # Now check that we use the right summary for BOOL&
56         self.expect('frame variable yes_ref',
57                     substrs=['YES'])
58         self.expect('frame variable no_ref',
59                     substrs=['NO'])
60         if not(isiOS):
61             self.expect('frame variable unset_ref', substrs=['12'])
62
63         # Now check that we use the right summary for BOOL*
64         self.expect('frame variable yes_ptr',
65                     substrs=['YES'])
66         self.expect('frame variable no_ptr',
67                     substrs=['NO'])
68         if not(isiOS):
69             self.expect('frame variable unset_ptr', substrs=['12'])
70
71         # Now check that we use the right summary for BOOL
72         self.expect('frame variable yes',
73                     substrs=['YES'])
74         self.expect('frame variable no',
75                     substrs=['NO'])
76         if not(isiOS):
77             self.expect('frame variable unset', substrs=['12'])