xref: /llvm-project/lldb/test/API/functionalities/data-formatter/poarray/TestPrintObjectArray.py (revision 44fc987ed174e32544a577387ab0df6886495e82)
199451b44SJordan Rupprecht"""
299451b44SJordan RupprechtTest lldb data formatter subsystem.
399451b44SJordan Rupprecht"""
499451b44SJordan Rupprecht
599451b44SJordan Rupprecht
699451b44SJordan Rupprechtimport lldb
799451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
899451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
999451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
1099451b44SJordan Rupprecht
1199451b44SJordan Rupprecht
1299451b44SJordan Rupprechtclass PrintObjectArrayTestCase(TestBase):
1399451b44SJordan Rupprecht    @skipUnlessDarwin
1499451b44SJordan Rupprecht    def test_print_array(self):
1599451b44SJordan Rupprecht        """Test that expr -O -Z works"""
1699451b44SJordan Rupprecht        self.build()
1799451b44SJordan Rupprecht        self.printarray_data_formatter_commands()
1899451b44SJordan Rupprecht
199d5e95d0SJonas Devlieghere    @skipUnlessDarwin
209d5e95d0SJonas Devlieghere    def test_print_array_no_const(self):
219d5e95d0SJonas Devlieghere        """Test that expr -O -Z works"""
229d5e95d0SJonas Devlieghere        disable_constant_classes = {
232238dcc3SJonas Devlieghere            "USE_SYSTEM_STDLIB": "1",  # See above.
242238dcc3SJonas Devlieghere            "CFLAGS_EXTRAS": "-fno-constant-nsnumber-literals "
252238dcc3SJonas Devlieghere            + "-fno-constant-nsarray-literals "
262238dcc3SJonas Devlieghere            + "-fno-constant-nsdictionary-literals",
279d5e95d0SJonas Devlieghere        }
28*44fc987eSVladislav Dzhidzhoev        # FIXME: Remove compiler when flags are available upstream.
29*44fc987eSVladislav Dzhidzhoev        self.build(dictionary=disable_constant_classes, compiler="xcrun clang")
309d5e95d0SJonas Devlieghere        self.printarray_data_formatter_commands()
319d5e95d0SJonas Devlieghere
3299451b44SJordan Rupprecht    def setUp(self):
3399451b44SJordan Rupprecht        # Call super's setUp().
3499451b44SJordan Rupprecht        TestBase.setUp(self)
3599451b44SJordan Rupprecht        # Find the line number to break at.
362238dcc3SJonas Devlieghere        self.line = line_number("main.mm", "break here")
3799451b44SJordan Rupprecht
3899451b44SJordan Rupprecht    def printarray_data_formatter_commands(self):
3999451b44SJordan Rupprecht        """Test that expr -O -Z works"""
4099451b44SJordan Rupprecht        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
4199451b44SJordan Rupprecht
4299451b44SJordan Rupprecht        lldbutil.run_break_set_by_file_and_line(
432238dcc3SJonas Devlieghere            self, "main.mm", self.line, num_expected_locations=1, loc_exact=True
442238dcc3SJonas Devlieghere        )
4599451b44SJordan Rupprecht
4699451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
4799451b44SJordan Rupprecht
4899451b44SJordan Rupprecht        # The stop reason of the thread should be breakpoint.
492238dcc3SJonas Devlieghere        self.expect(
502238dcc3SJonas Devlieghere            "thread list",
512238dcc3SJonas Devlieghere            STOPPED_DUE_TO_BREAKPOINT,
522238dcc3SJonas Devlieghere            substrs=["stopped", "stop reason = breakpoint"],
532238dcc3SJonas Devlieghere        )
5499451b44SJordan Rupprecht
5599451b44SJordan Rupprecht        # This is the function to remove the custom formats in order to have a
5699451b44SJordan Rupprecht        # clean slate for the next test case.
5799451b44SJordan Rupprecht        def cleanup():
582238dcc3SJonas Devlieghere            self.runCmd("type format clear", check=False)
592238dcc3SJonas Devlieghere            self.runCmd("type summary clear", check=False)
602238dcc3SJonas Devlieghere            self.runCmd("type synth clear", check=False)
6199451b44SJordan Rupprecht
6299451b44SJordan Rupprecht        # Execute the cleanup function during test case tear down.
6399451b44SJordan Rupprecht        self.addTearDownHook(cleanup)
6499451b44SJordan Rupprecht
6599451b44SJordan Rupprecht        self.expect(
662238dcc3SJonas Devlieghere            "expr --element-count 3 --object-description -- objects",
6799451b44SJordan Rupprecht            substrs=[
682238dcc3SJonas Devlieghere                "3735928559",
692238dcc3SJonas Devlieghere                "4276993775",
702238dcc3SJonas Devlieghere                "3203398366",
712238dcc3SJonas Devlieghere                "Hello",
722238dcc3SJonas Devlieghere                "World",
732238dcc3SJonas Devlieghere                "Two =",
742238dcc3SJonas Devlieghere                "1 =",
752238dcc3SJonas Devlieghere            ],
762238dcc3SJonas Devlieghere        )
7799451b44SJordan Rupprecht        self.expect(
782238dcc3SJonas Devlieghere            "poarray 3 objects",
7999451b44SJordan Rupprecht            substrs=[
802238dcc3SJonas Devlieghere                "3735928559",
812238dcc3SJonas Devlieghere                "4276993775",
822238dcc3SJonas Devlieghere                "3203398366",
832238dcc3SJonas Devlieghere                "Hello",
842238dcc3SJonas Devlieghere                "World",
852238dcc3SJonas Devlieghere                "Two =",
862238dcc3SJonas Devlieghere                "1 =",
872238dcc3SJonas Devlieghere            ],
882238dcc3SJonas Devlieghere        )
8999451b44SJordan Rupprecht        self.expect(
902238dcc3SJonas Devlieghere            "expr --element-count 3 --object-description --description-verbosity=full -- objects",
9199451b44SJordan Rupprecht            substrs=[
922238dcc3SJonas Devlieghere                "[0] =",
932238dcc3SJonas Devlieghere                "3735928559",
942238dcc3SJonas Devlieghere                "4276993775",
952238dcc3SJonas Devlieghere                "3203398366",
962238dcc3SJonas Devlieghere                "[1] =",
972238dcc3SJonas Devlieghere                "Hello",
982238dcc3SJonas Devlieghere                "World",
992238dcc3SJonas Devlieghere                "[2] =",
1002238dcc3SJonas Devlieghere                "Two =",
1012238dcc3SJonas Devlieghere                "1 =",
1022238dcc3SJonas Devlieghere            ],
1032238dcc3SJonas Devlieghere        )
1042238dcc3SJonas Devlieghere        self.expect("parray 3 objects", substrs=["[0] = 0x", "[1] = 0x", "[2] = 0x"])
10599451b44SJordan Rupprecht        self.expect(
1062238dcc3SJonas Devlieghere            "expr --element-count 3 -d run -- objects",
1072238dcc3SJonas Devlieghere            substrs=["3 elements", "2 elements", "2 key/value pairs"],
1082238dcc3SJonas Devlieghere        )
10999451b44SJordan Rupprecht        self.expect(
1102238dcc3SJonas Devlieghere            "expr --element-count 3 -d run --ptr-depth=1 -- objects",
11199451b44SJordan Rupprecht            substrs=[
1122238dcc3SJonas Devlieghere                "3 elements",
1132238dcc3SJonas Devlieghere                "3735928559",
1142238dcc3SJonas Devlieghere                "4276993775",
1152238dcc3SJonas Devlieghere                "3203398366",
1162238dcc3SJonas Devlieghere                "2 elements",
11799451b44SJordan Rupprecht                '"Hello"',
11899451b44SJordan Rupprecht                '"World"',
1192238dcc3SJonas Devlieghere                "2 key/value pairs",
1202238dcc3SJonas Devlieghere            ],
1212238dcc3SJonas Devlieghere        )
122