199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest that the language option for breakpoints works correctly 399451b44SJordan Rupprechtparser. 499451b44SJordan Rupprecht""" 599451b44SJordan Rupprecht 699451b44SJordan Rupprecht 799451b44SJordan Rupprechtimport lldb 899451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 999451b44SJordan Rupprechtimport lldbsuite.test.lldbutil as lldbutil 1099451b44SJordan Rupprecht 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprechtclass TestBreakpointLanguage(TestBase): 1399451b44SJordan Rupprecht def check_location_file(self, bp, loc, test_name): 1499451b44SJordan Rupprecht bp_loc = bp.GetLocationAtIndex(loc) 1599451b44SJordan Rupprecht addr = bp_loc.GetAddress() 1699451b44SJordan Rupprecht comp_unit = addr.GetCompileUnit() 1799451b44SJordan Rupprecht comp_name = comp_unit.GetFileSpec().GetFilename() 1899451b44SJordan Rupprecht return comp_name == test_name 1999451b44SJordan Rupprecht 2099451b44SJordan Rupprecht def test_regex_breakpoint_language(self): 2199451b44SJordan Rupprecht """Test that the name regex breakpoint commands obey the language filter.""" 2299451b44SJordan Rupprecht 2399451b44SJordan Rupprecht self.build() 2499451b44SJordan Rupprecht # Create a target by the debugger. 2599451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 2699451b44SJordan Rupprecht error = lldb.SBError() 2799451b44SJordan Rupprecht # Don't read in dependencies so we don't come across false matches that 2899451b44SJordan Rupprecht # add unwanted breakpoint hits. 2999451b44SJordan Rupprecht self.target = self.dbg.CreateTarget(exe, None, None, False, error) 3099451b44SJordan Rupprecht self.assertTrue(self.target, VALID_TARGET) 3199451b44SJordan Rupprecht 3299451b44SJordan Rupprecht cpp_bp = self.target.BreakpointCreateByRegex( 3399451b44SJordan Rupprecht "func_from", 3499451b44SJordan Rupprecht lldb.eLanguageTypeC_plus_plus, 3599451b44SJordan Rupprecht lldb.SBFileSpecList(), 36*2238dcc3SJonas Devlieghere lldb.SBFileSpecList(), 37*2238dcc3SJonas Devlieghere ) 38*2238dcc3SJonas Devlieghere self.assertEqual(cpp_bp.GetNumLocations(), 1, "Only one C++ symbol matches") 3999451b44SJordan Rupprecht self.assertTrue(self.check_location_file(cpp_bp, 0, "b.cpp")) 4099451b44SJordan Rupprecht 4199451b44SJordan Rupprecht c_bp = self.target.BreakpointCreateByRegex( 4299451b44SJordan Rupprecht "func_from", 4399451b44SJordan Rupprecht lldb.eLanguageTypeC, 4499451b44SJordan Rupprecht lldb.SBFileSpecList(), 45*2238dcc3SJonas Devlieghere lldb.SBFileSpecList(), 46*2238dcc3SJonas Devlieghere ) 47*2238dcc3SJonas Devlieghere self.assertEqual(c_bp.GetNumLocations(), 1, "Only one C symbol matches") 4899451b44SJordan Rupprecht self.assertTrue(self.check_location_file(c_bp, 0, "a.c")) 4999451b44SJordan Rupprecht 5099451b44SJordan Rupprecht objc_bp = self.target.BreakpointCreateByRegex( 5199451b44SJordan Rupprecht "func_from", 5299451b44SJordan Rupprecht lldb.eLanguageTypeObjC, 5399451b44SJordan Rupprecht lldb.SBFileSpecList(), 54*2238dcc3SJonas Devlieghere lldb.SBFileSpecList(), 55*2238dcc3SJonas Devlieghere ) 56*2238dcc3SJonas Devlieghere self.assertEqual(objc_bp.GetNumLocations(), 0, "No ObjC symbol matches") 5799451b44SJordan Rupprecht 5899451b44SJordan Rupprecht def test_by_name_breakpoint_language(self): 5999451b44SJordan Rupprecht """Test that the name regex breakpoint commands obey the language filter.""" 6099451b44SJordan Rupprecht 6199451b44SJordan Rupprecht self.build() 6299451b44SJordan Rupprecht # Create a target by the debugger. 6399451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 6499451b44SJordan Rupprecht error = lldb.SBError() 6599451b44SJordan Rupprecht # Don't read in dependencies so we don't come across false matches that 6699451b44SJordan Rupprecht # add unwanted breakpoint hits. 6799451b44SJordan Rupprecht self.target = self.dbg.CreateTarget(exe, None, None, False, error) 6899451b44SJordan Rupprecht self.assertTrue(self.target, VALID_TARGET) 6999451b44SJordan Rupprecht 7099451b44SJordan Rupprecht cpp_bp = self.target.BreakpointCreateByName( 7199451b44SJordan Rupprecht "func_from_cpp", 7299451b44SJordan Rupprecht lldb.eFunctionNameTypeAuto, 7399451b44SJordan Rupprecht lldb.eLanguageTypeC_plus_plus, 7499451b44SJordan Rupprecht lldb.SBFileSpecList(), 75*2238dcc3SJonas Devlieghere lldb.SBFileSpecList(), 76*2238dcc3SJonas Devlieghere ) 77*2238dcc3SJonas Devlieghere self.assertEqual(cpp_bp.GetNumLocations(), 1, "Only one C++ symbol matches") 7899451b44SJordan Rupprecht self.assertTrue(self.check_location_file(cpp_bp, 0, "b.cpp")) 7999451b44SJordan Rupprecht 8099451b44SJordan Rupprecht no_cpp_bp = self.target.BreakpointCreateByName( 8199451b44SJordan Rupprecht "func_from_c", 8299451b44SJordan Rupprecht lldb.eFunctionNameTypeAuto, 8399451b44SJordan Rupprecht lldb.eLanguageTypeC_plus_plus, 8499451b44SJordan Rupprecht lldb.SBFileSpecList(), 85*2238dcc3SJonas Devlieghere lldb.SBFileSpecList(), 86*2238dcc3SJonas Devlieghere ) 87*2238dcc3SJonas Devlieghere self.assertEqual(no_cpp_bp.GetNumLocations(), 0, "And the C one doesn't match") 8899451b44SJordan Rupprecht 8999451b44SJordan Rupprecht c_bp = self.target.BreakpointCreateByName( 9099451b44SJordan Rupprecht "func_from_c", 9199451b44SJordan Rupprecht lldb.eFunctionNameTypeAuto, 9299451b44SJordan Rupprecht lldb.eLanguageTypeC, 9399451b44SJordan Rupprecht lldb.SBFileSpecList(), 94*2238dcc3SJonas Devlieghere lldb.SBFileSpecList(), 95*2238dcc3SJonas Devlieghere ) 96*2238dcc3SJonas Devlieghere self.assertEqual(c_bp.GetNumLocations(), 1, "Only one C symbol matches") 9799451b44SJordan Rupprecht self.assertTrue(self.check_location_file(c_bp, 0, "a.c")) 9899451b44SJordan Rupprecht 9999451b44SJordan Rupprecht no_c_bp = self.target.BreakpointCreateByName( 10099451b44SJordan Rupprecht "func_from_cpp", 10199451b44SJordan Rupprecht lldb.eFunctionNameTypeAuto, 10299451b44SJordan Rupprecht lldb.eLanguageTypeC, 10399451b44SJordan Rupprecht lldb.SBFileSpecList(), 104*2238dcc3SJonas Devlieghere lldb.SBFileSpecList(), 105*2238dcc3SJonas Devlieghere ) 106*2238dcc3SJonas Devlieghere self.assertEqual(no_c_bp.GetNumLocations(), 0, "And the C++ one doesn't match") 10799451b44SJordan Rupprecht 10899451b44SJordan Rupprecht objc_bp = self.target.BreakpointCreateByName( 10999451b44SJordan Rupprecht "func_from_cpp", 11099451b44SJordan Rupprecht lldb.eFunctionNameTypeAuto, 11199451b44SJordan Rupprecht lldb.eLanguageTypeObjC, 11299451b44SJordan Rupprecht lldb.SBFileSpecList(), 113*2238dcc3SJonas Devlieghere lldb.SBFileSpecList(), 114*2238dcc3SJonas Devlieghere ) 115*2238dcc3SJonas Devlieghere self.assertEqual(objc_bp.GetNumLocations(), 0, "No ObjC symbol matches") 116