brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · db86f48 Raw
122 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 PrintObjectArrayTestCase(TestBase):13    @skipUnlessDarwin14    def test_print_array(self):15        """Test that expr -O -Z works"""16        self.build()17        self.printarray_data_formatter_commands()18 19    @skipUnlessDarwin20    def test_print_array_no_const(self):21        """Test that expr -O -Z works"""22        disable_constant_classes = {23            "USE_SYSTEM_STDLIB": "1",  # See above.24            "CFLAGS_EXTRAS": "-fno-constant-nsnumber-literals "25            + "-fno-constant-nsarray-literals "26            + "-fno-constant-nsdictionary-literals",27        }28        # FIXME: Remove compiler when flags are available upstream.29        self.build(dictionary=disable_constant_classes, compiler="xcrun clang")30        self.printarray_data_formatter_commands()31 32    def setUp(self):33        # Call super's setUp().34        TestBase.setUp(self)35        # Find the line number to break at.36        self.line = line_number("main.mm", "break here")37 38    def printarray_data_formatter_commands(self):39        """Test that expr -O -Z works"""40        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)41 42        lldbutil.run_break_set_by_file_and_line(43            self, "main.mm", self.line, num_expected_locations=1, loc_exact=True44        )45 46        self.runCmd("run", RUN_SUCCEEDED)47 48        # The stop reason of the thread should be breakpoint.49        self.expect(50            "thread list",51            STOPPED_DUE_TO_BREAKPOINT,52            substrs=["stopped", "stop reason = breakpoint"],53        )54 55        # This is the function to remove the custom formats in order to have a56        # clean slate for the next test case.57        def cleanup():58            self.runCmd("type format clear", check=False)59            self.runCmd("type summary clear", check=False)60            self.runCmd("type synth clear", check=False)61 62        # Execute the cleanup function during test case tear down.63        self.addTearDownHook(cleanup)64 65        self.expect(66            "expr --element-count 3 --object-description -- objects",67            substrs=[68                "3735928559",69                "4276993775",70                "3203398366",71                "Hello",72                "World",73                "Two =",74                "1 =",75            ],76        )77        self.expect(78            "poarray 3 objects",79            substrs=[80                "3735928559",81                "4276993775",82                "3203398366",83                "Hello",84                "World",85                "Two =",86                "1 =",87            ],88        )89        self.expect(90            "expr --element-count 3 --object-description --description-verbosity=full -- objects",91            substrs=[92                "[0] =",93                "3735928559",94                "4276993775",95                "3203398366",96                "[1] =",97                "Hello",98                "World",99                "[2] =",100                "Two =",101                "1 =",102            ],103        )104        self.expect("parray 3 objects", substrs=["[0] = 0x", "[1] = 0x", "[2] = 0x"])105        self.expect(106            "expr --element-count 3 -d run -- objects",107            substrs=["3 elements", "2 elements", "2 key/value pairs"],108        )109        self.expect(110            "expr --element-count 3 -d run --ptr-depth=1 -- objects",111            substrs=[112                "3 elements",113                "3735928559",114                "4276993775",115                "3203398366",116                "2 elements",117                '"Hello"',118                '"World"',119                "2 key/value pairs",120            ],121        )122