1*99451b44SJordan Rupprecht"""
2*99451b44SJordan RupprechtTest SBBreakpoint APIs.
3*99451b44SJordan Rupprecht"""
4*99451b44SJordan Rupprecht
5*99451b44SJordan Rupprechtimport lldb
6*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
7*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
8*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
9*99451b44SJordan Rupprecht
10*99451b44SJordan Rupprecht
11*99451b44SJordan Rupprechtclass BreakpointAPITestCase(TestBase):
12*99451b44SJordan Rupprecht
13*99451b44SJordan Rupprecht    mydir = TestBase.compute_mydir(__file__)
14*99451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
15*99451b44SJordan Rupprecht
16*99451b44SJordan Rupprecht    @add_test_categories(['pyapi'])
17*99451b44SJordan Rupprecht    def test_breakpoint_is_valid(self):
18*99451b44SJordan Rupprecht        """Make sure that if an SBBreakpoint gets deleted its IsValid returns false."""
19*99451b44SJordan Rupprecht        self.build()
20*99451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
21*99451b44SJordan Rupprecht
22*99451b44SJordan Rupprecht        # Create a target by the debugger.
23*99451b44SJordan Rupprecht        target = self.dbg.CreateTarget(exe)
24*99451b44SJordan Rupprecht        self.assertTrue(target, VALID_TARGET)
25*99451b44SJordan Rupprecht
26*99451b44SJordan Rupprecht        # Now create a breakpoint on main.c by name 'AFunction'.
27*99451b44SJordan Rupprecht        breakpoint = target.BreakpointCreateByName('AFunction', 'a.out')
28*99451b44SJordan Rupprecht        #print("breakpoint:", breakpoint)
29*99451b44SJordan Rupprecht        self.assertTrue(breakpoint and
30*99451b44SJordan Rupprecht                        breakpoint.GetNumLocations() == 1,
31*99451b44SJordan Rupprecht                        VALID_BREAKPOINT)
32*99451b44SJordan Rupprecht
33*99451b44SJordan Rupprecht        # Now delete it:
34*99451b44SJordan Rupprecht        did_delete = target.BreakpointDelete(breakpoint.GetID())
35*99451b44SJordan Rupprecht        self.assertTrue(
36*99451b44SJordan Rupprecht            did_delete,
37*99451b44SJordan Rupprecht            "Did delete the breakpoint we just created.")
38*99451b44SJordan Rupprecht
39*99451b44SJordan Rupprecht        # Make sure we can't find it:
40*99451b44SJordan Rupprecht        del_bkpt = target.FindBreakpointByID(breakpoint.GetID())
41*99451b44SJordan Rupprecht        self.assertTrue(not del_bkpt, "We did delete the breakpoint.")
42*99451b44SJordan Rupprecht
43*99451b44SJordan Rupprecht        # Finally make sure the original breakpoint is no longer valid.
44*99451b44SJordan Rupprecht        self.assertTrue(
45*99451b44SJordan Rupprecht            not breakpoint,
46*99451b44SJordan Rupprecht            "Breakpoint we deleted is no longer valid.")
47*99451b44SJordan Rupprecht
48*99451b44SJordan Rupprecht    @add_test_categories(['pyapi'])
49*99451b44SJordan Rupprecht    def test_target_delete(self):
50*99451b44SJordan Rupprecht        """Make sure that if an SBTarget gets deleted the associated
51*99451b44SJordan Rupprecht        Breakpoint's IsValid returns false."""
52*99451b44SJordan Rupprecht
53*99451b44SJordan Rupprecht        self.build()
54*99451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
55*99451b44SJordan Rupprecht
56*99451b44SJordan Rupprecht        # Create a target by the debugger.
57*99451b44SJordan Rupprecht        target = self.dbg.CreateTarget(exe)
58*99451b44SJordan Rupprecht        self.assertTrue(target, VALID_TARGET)
59*99451b44SJordan Rupprecht
60*99451b44SJordan Rupprecht        # Now create a breakpoint on main.c by name 'AFunction'.
61*99451b44SJordan Rupprecht        breakpoint = target.BreakpointCreateByName('AFunction', 'a.out')
62*99451b44SJordan Rupprecht        #print("breakpoint:", breakpoint)
63*99451b44SJordan Rupprecht        self.assertTrue(breakpoint and
64*99451b44SJordan Rupprecht                        breakpoint.GetNumLocations() == 1,
65*99451b44SJordan Rupprecht                        VALID_BREAKPOINT)
66*99451b44SJordan Rupprecht        location = breakpoint.GetLocationAtIndex(0)
67*99451b44SJordan Rupprecht        self.assertTrue(location.IsValid())
68*99451b44SJordan Rupprecht
69*99451b44SJordan Rupprecht        self.assertTrue(self.dbg.DeleteTarget(target))
70*99451b44SJordan Rupprecht        self.assertFalse(breakpoint.IsValid())
71*99451b44SJordan Rupprecht        self.assertFalse(location.IsValid())
72