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