199451b44SJordan Rupprecht"""
299451b44SJordan RupprechtTest SBBreakpoint APIs.
399451b44SJordan Rupprecht"""
499451b44SJordan Rupprecht
599451b44SJordan Rupprechtimport lldb
699451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
799451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
899451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
999451b44SJordan Rupprecht
1099451b44SJordan Rupprecht
1199451b44SJordan Rupprechtclass BreakpointAPITestCase(TestBase):
1299451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
1399451b44SJordan Rupprecht
1499451b44SJordan Rupprecht    def test_breakpoint_is_valid(self):
1599451b44SJordan Rupprecht        """Make sure that if an SBBreakpoint gets deleted its IsValid returns false."""
1699451b44SJordan Rupprecht        self.build()
1799451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
1899451b44SJordan Rupprecht
1999451b44SJordan Rupprecht        # Create a target by the debugger.
2099451b44SJordan Rupprecht        target = self.dbg.CreateTarget(exe)
2199451b44SJordan Rupprecht        self.assertTrue(target, VALID_TARGET)
2299451b44SJordan Rupprecht
2399451b44SJordan Rupprecht        # Now create a breakpoint on main.c by name 'AFunction'.
2499451b44SJordan Rupprecht        breakpoint = target.BreakpointCreateByName('AFunction', 'a.out')
25b321b429SJonas Devlieghere        self.trace("breakpoint:", breakpoint)
2699451b44SJordan Rupprecht        self.assertTrue(breakpoint and
2799451b44SJordan Rupprecht                        breakpoint.GetNumLocations() == 1,
2899451b44SJordan Rupprecht                        VALID_BREAKPOINT)
2999451b44SJordan Rupprecht
3099451b44SJordan Rupprecht        # Now delete it:
3199451b44SJordan Rupprecht        did_delete = target.BreakpointDelete(breakpoint.GetID())
3299451b44SJordan Rupprecht        self.assertTrue(
3399451b44SJordan Rupprecht            did_delete,
3499451b44SJordan Rupprecht            "Did delete the breakpoint we just created.")
3599451b44SJordan Rupprecht
3699451b44SJordan Rupprecht        # Make sure we can't find it:
3799451b44SJordan Rupprecht        del_bkpt = target.FindBreakpointByID(breakpoint.GetID())
3899451b44SJordan Rupprecht        self.assertTrue(not del_bkpt, "We did delete the breakpoint.")
3999451b44SJordan Rupprecht
4099451b44SJordan Rupprecht        # Finally make sure the original breakpoint is no longer valid.
4199451b44SJordan Rupprecht        self.assertTrue(
4299451b44SJordan Rupprecht            not breakpoint,
4399451b44SJordan Rupprecht            "Breakpoint we deleted is no longer valid.")
4499451b44SJordan Rupprecht
4599451b44SJordan Rupprecht    def test_target_delete(self):
4699451b44SJordan Rupprecht        """Make sure that if an SBTarget gets deleted the associated
4799451b44SJordan Rupprecht        Breakpoint's IsValid returns false."""
4899451b44SJordan Rupprecht
4999451b44SJordan Rupprecht        self.build()
5099451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
5199451b44SJordan Rupprecht
5299451b44SJordan Rupprecht        # Create a target by the debugger.
5399451b44SJordan Rupprecht        target = self.dbg.CreateTarget(exe)
5499451b44SJordan Rupprecht        self.assertTrue(target, VALID_TARGET)
5599451b44SJordan Rupprecht
5699451b44SJordan Rupprecht        # Now create a breakpoint on main.c by name 'AFunction'.
5799451b44SJordan Rupprecht        breakpoint = target.BreakpointCreateByName('AFunction', 'a.out')
58b321b429SJonas Devlieghere        self.trace("breakpoint:", breakpoint)
5999451b44SJordan Rupprecht        self.assertTrue(breakpoint and
6099451b44SJordan Rupprecht                        breakpoint.GetNumLocations() == 1,
6199451b44SJordan Rupprecht                        VALID_BREAKPOINT)
6299451b44SJordan Rupprecht        location = breakpoint.GetLocationAtIndex(0)
6399451b44SJordan Rupprecht        self.assertTrue(location.IsValid())
6499451b44SJordan Rupprecht
65*6754caa9SJim Ingham        # Make sure the breakpoint's target is right:
66*6754caa9SJim Ingham        self.assertEqual(target, breakpoint.GetTarget(), "Breakpoint reports its target correctly")
67*6754caa9SJim Ingham
6899451b44SJordan Rupprecht        self.assertTrue(self.dbg.DeleteTarget(target))
6999451b44SJordan Rupprecht        self.assertFalse(breakpoint.IsValid())
7099451b44SJordan Rupprecht        self.assertFalse(location.IsValid())
71