brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · ab0acd6 Raw
86 lines · python
1"""2Test lldb data formatter subsystem.3"""4 5 6import lldb7from lldbsuite.test.decorators import *8from lldbsuite.test.lldbtest import *9from lldbsuite.test import lldbutil10 11 12class DataFormatterBoolRefPtr(TestBase):13    @skipUnlessDarwin14    def test_boolrefptr_with_run_command(self):15        """Test the formatters we use for BOOL& and BOOL* in Objective-C."""16        self.build()17        self.boolrefptr_data_formatter_commands()18 19    def setUp(self):20        # Call super's setUp().21        TestBase.setUp(self)22        # Find the line number to break at.23        self.line = line_number("main.mm", "// Set break point at this line.")24 25    def boolrefptr_data_formatter_commands(self):26        """Test the formatters we use for BOOL& and BOOL* in Objective-C."""27        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)28 29        lldbutil.run_break_set_by_file_and_line(30            self, "main.mm", self.line, num_expected_locations=1, loc_exact=True31        )32 33        self.runCmd("run", RUN_SUCCEEDED)34 35        # The stop reason of the thread should be breakpoint.36        self.expect(37            "thread list",38            STOPPED_DUE_TO_BREAKPOINT,39            substrs=["stopped", "stop reason = breakpoint"],40        )41 42        # This is the function to remove the custom formats in order to have a43        # clean slate for the next test case.44        def cleanup():45            self.runCmd("type format clear", check=False)46            self.runCmd("type summary clear", check=False)47            self.runCmd("type synth clear", check=False)48 49        # Execute the cleanup function during test case tear down.50        self.addTearDownHook(cleanup)51 52        isArm = "arm" in self.getArchitecture()53 54        # Now check that we use the right summary for BOOL&55        self.expect("frame variable yes_ref", substrs=["YES"])56        self.expect("frame variable no_ref", substrs=["NO"])57        if not (isArm):58            self.expect("frame variable unset_ref", substrs=["12"])59 60        # Now check that we use the right summary for BOOL*61        self.expect("frame variable yes_ptr", substrs=["YES"])62        self.expect("frame variable no_ptr", substrs=["NO"])63        if not (isArm):64            self.expect("frame variable unset_ptr", substrs=["12"])65 66        # Now check that we use the right summary for BOOL67        self.expect("frame variable yes", substrs=["YES"])68        self.expect("frame variable no", substrs=["NO"])69        if not (isArm):70            self.expect("frame variable unset", substrs=["12"])71 72        # BOOL is bool instead of signed char on ARM.73        converted_YES = "-1" if not isArm else "YES"74 75        self.expect_expr(76            "myField",77            result_type="BoolBitFields",78            result_children=[79                ValueCheck(name="fieldOne", summary="NO"),80                ValueCheck(name="fieldTwo", summary=converted_YES),81                ValueCheck(name="fieldThree", summary="NO"),82                ValueCheck(name="fieldFour", summary="NO"),83                ValueCheck(name="fieldFive", summary=converted_YES),84            ],85        )86