199451b44SJordan Rupprecht"""
299451b44SJordan RupprechtTest lldb breakpoint command for CPP methods & functions in a namespace.
399451b44SJordan Rupprecht"""
499451b44SJordan Rupprecht
599451b44SJordan Rupprecht
699451b44SJordan Rupprecht
799451b44SJordan Rupprechtimport lldb
899451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
1099451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
1199451b44SJordan Rupprecht
1299451b44SJordan Rupprecht
1399451b44SJordan Rupprechtclass CPPBreakpointCommandsTestCase(TestBase):
1499451b44SJordan Rupprecht
1599451b44SJordan Rupprecht    mydir = TestBase.compute_mydir(__file__)
1699451b44SJordan Rupprecht
1799451b44SJordan Rupprecht    def make_breakpoint(self, name, type, expected_num_locations):
1899451b44SJordan Rupprecht        bkpt = self.target.BreakpointCreateByName(name,
1999451b44SJordan Rupprecht                                                  type,
2099451b44SJordan Rupprecht                                                  self.a_out_module,
2199451b44SJordan Rupprecht                                                  self.nested_comp_unit)
2299451b44SJordan Rupprecht        num_locations = bkpt.GetNumLocations()
23*0ed758b2SDave Lee        self.assertEqual(
24*0ed758b2SDave Lee            num_locations, expected_num_locations,
2599451b44SJordan Rupprecht            "Wrong number of locations for '%s', expected: %d got: %d" %
2699451b44SJordan Rupprecht            (name,
2799451b44SJordan Rupprecht             expected_num_locations,
2899451b44SJordan Rupprecht             num_locations))
2999451b44SJordan Rupprecht        return bkpt
3099451b44SJordan Rupprecht
3199451b44SJordan Rupprecht    def test_cpp_breakpoint_cmds(self):
3299451b44SJordan Rupprecht        """Test a sequence of breakpoint command add, list, and delete."""
3399451b44SJordan Rupprecht        self.build()
3499451b44SJordan Rupprecht
3599451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
3699451b44SJordan Rupprecht
3799451b44SJordan Rupprecht        # Create a target from the debugger.
3899451b44SJordan Rupprecht
3999451b44SJordan Rupprecht        self.target = self.dbg.CreateTarget(exe)
4099451b44SJordan Rupprecht        self.assertTrue(self.target, VALID_TARGET)
4199451b44SJordan Rupprecht
4299451b44SJordan Rupprecht        self.a_out_module = lldb.SBFileSpecList()
4399451b44SJordan Rupprecht        self.a_out_module.Append(lldb.SBFileSpec(exe))
4499451b44SJordan Rupprecht
4599451b44SJordan Rupprecht        self.nested_comp_unit = lldb.SBFileSpecList()
4699451b44SJordan Rupprecht        self.nested_comp_unit.Append(lldb.SBFileSpec("nested.cpp"))
4799451b44SJordan Rupprecht
4899451b44SJordan Rupprecht        # First provide ONLY the method name.  This should get everybody...
4999451b44SJordan Rupprecht        self.make_breakpoint("Function",
5099451b44SJordan Rupprecht                             lldb.eFunctionNameTypeAuto,
5199451b44SJordan Rupprecht                             5)
5299451b44SJordan Rupprecht
5399451b44SJordan Rupprecht        # Now add the Baz class specifier.  This should get the version contained in Bar,
5499451b44SJordan Rupprecht        # AND the one contained in ::
5599451b44SJordan Rupprecht        self.make_breakpoint("Baz::Function",
5699451b44SJordan Rupprecht                             lldb.eFunctionNameTypeAuto,
5799451b44SJordan Rupprecht                             2)
5899451b44SJordan Rupprecht
5999451b44SJordan Rupprecht        # Then add the Bar::Baz specifier.  This should get the version
6099451b44SJordan Rupprecht        # contained in Bar only
6199451b44SJordan Rupprecht        self.make_breakpoint("Bar::Baz::Function",
6299451b44SJordan Rupprecht                             lldb.eFunctionNameTypeAuto,
6399451b44SJordan Rupprecht                             1)
6499451b44SJordan Rupprecht
6599451b44SJordan Rupprecht        self.make_breakpoint("Function",
6699451b44SJordan Rupprecht                             lldb.eFunctionNameTypeMethod,
6799451b44SJordan Rupprecht                             3)
6899451b44SJordan Rupprecht
6999451b44SJordan Rupprecht        self.make_breakpoint("Baz::Function",
7099451b44SJordan Rupprecht                             lldb.eFunctionNameTypeMethod,
7199451b44SJordan Rupprecht                             2)
7299451b44SJordan Rupprecht
7399451b44SJordan Rupprecht        self.make_breakpoint("Bar::Baz::Function",
7499451b44SJordan Rupprecht                             lldb.eFunctionNameTypeMethod,
7599451b44SJordan Rupprecht                             1)
7699451b44SJordan Rupprecht
7799451b44SJordan Rupprecht        self.make_breakpoint("Function",
7899451b44SJordan Rupprecht                             lldb.eFunctionNameTypeBase,
7999451b44SJordan Rupprecht                             2)
8099451b44SJordan Rupprecht
8199451b44SJordan Rupprecht        self.make_breakpoint("Bar::Function",
8299451b44SJordan Rupprecht                             lldb.eFunctionNameTypeBase,
8399451b44SJordan Rupprecht                             1)
84