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
1399451b44SJordan Rupprecht    mydir = TestBase.compute_mydir(__file__)
1499451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
1599451b44SJordan Rupprecht
1699451b44SJordan Rupprecht    @add_test_categories(['pyapi'])
1799451b44SJordan Rupprecht    def test_breakpoint_is_valid(self):
1899451b44SJordan Rupprecht        """Make sure that if an SBBreakpoint gets deleted its IsValid returns false."""
1999451b44SJordan Rupprecht        self.build()
2099451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
2199451b44SJordan Rupprecht
2299451b44SJordan Rupprecht        # Create a target by the debugger.
2399451b44SJordan Rupprecht        target = self.dbg.CreateTarget(exe)
2499451b44SJordan Rupprecht        self.assertTrue(target, VALID_TARGET)
2599451b44SJordan Rupprecht
2699451b44SJordan Rupprecht        # Now create a breakpoint on main.c by name 'AFunction'.
2799451b44SJordan Rupprecht        breakpoint = target.BreakpointCreateByName('AFunction', 'a.out')
28*b321b429SJonas Devlieghere        self.trace("breakpoint:", breakpoint)
2999451b44SJordan Rupprecht        self.assertTrue(breakpoint and
3099451b44SJordan Rupprecht                        breakpoint.GetNumLocations() == 1,
3199451b44SJordan Rupprecht                        VALID_BREAKPOINT)
3299451b44SJordan Rupprecht
3399451b44SJordan Rupprecht        # Now delete it:
3499451b44SJordan Rupprecht        did_delete = target.BreakpointDelete(breakpoint.GetID())
3599451b44SJordan Rupprecht        self.assertTrue(
3699451b44SJordan Rupprecht            did_delete,
3799451b44SJordan Rupprecht            "Did delete the breakpoint we just created.")
3899451b44SJordan Rupprecht
3999451b44SJordan Rupprecht        # Make sure we can't find it:
4099451b44SJordan Rupprecht        del_bkpt = target.FindBreakpointByID(breakpoint.GetID())
4199451b44SJordan Rupprecht        self.assertTrue(not del_bkpt, "We did delete the breakpoint.")
4299451b44SJordan Rupprecht
4399451b44SJordan Rupprecht        # Finally make sure the original breakpoint is no longer valid.
4499451b44SJordan Rupprecht        self.assertTrue(
4599451b44SJordan Rupprecht            not breakpoint,
4699451b44SJordan Rupprecht            "Breakpoint we deleted is no longer valid.")
4799451b44SJordan Rupprecht
4899451b44SJordan Rupprecht    @add_test_categories(['pyapi'])
4999451b44SJordan Rupprecht    def test_target_delete(self):
5099451b44SJordan Rupprecht        """Make sure that if an SBTarget gets deleted the associated
5199451b44SJordan Rupprecht        Breakpoint's IsValid returns false."""
5299451b44SJordan Rupprecht
5399451b44SJordan Rupprecht        self.build()
5499451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
5599451b44SJordan Rupprecht
5699451b44SJordan Rupprecht        # Create a target by the debugger.
5799451b44SJordan Rupprecht        target = self.dbg.CreateTarget(exe)
5899451b44SJordan Rupprecht        self.assertTrue(target, VALID_TARGET)
5999451b44SJordan Rupprecht
6099451b44SJordan Rupprecht        # Now create a breakpoint on main.c by name 'AFunction'.
6199451b44SJordan Rupprecht        breakpoint = target.BreakpointCreateByName('AFunction', 'a.out')
62*b321b429SJonas Devlieghere        self.trace("breakpoint:", breakpoint)
6399451b44SJordan Rupprecht        self.assertTrue(breakpoint and
6499451b44SJordan Rupprecht                        breakpoint.GetNumLocations() == 1,
6599451b44SJordan Rupprecht                        VALID_BREAKPOINT)
6699451b44SJordan Rupprecht        location = breakpoint.GetLocationAtIndex(0)
6799451b44SJordan Rupprecht        self.assertTrue(location.IsValid())
6899451b44SJordan Rupprecht
6999451b44SJordan Rupprecht        self.assertTrue(self.dbg.DeleteTarget(target))
7099451b44SJordan Rupprecht        self.assertFalse(breakpoint.IsValid())
7199451b44SJordan Rupprecht        self.assertFalse(location.IsValid())
72