149d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice"""
249d5d12b7f3d8d6a0d96a3168794391142032c08Caroline TiceTest lldb breakpoint ids.
349d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice"""
449d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
549d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Ticeimport os, time
649d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Ticeimport unittest2
749d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Ticeimport lldb
849d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Ticefrom lldbtest import *
9431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Inghamimport lldbutil
1049d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
1149d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Ticeclass BreakpointIDTestCase(TestBase):
1249d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
13083e4a9b6c13eb737ca6279bbd7359e674a729a4Johnny Chen    mydir = os.path.join("functionalities", "breakpoint", "breakpoint_ids")
1449d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
1549d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
16a3ed7d834b0e0c6924ac95629e740682bbcd15baJohnny Chen    @dsym_test
1749d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice    def test_with_dsym (self):
1849d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice        self.buildDsym ()
1949d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice        self.breakpoint_id_tests ()
2049d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
21a3ed7d834b0e0c6924ac95629e740682bbcd15baJohnny Chen    @dwarf_test
2249d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice    def test_with_dwarf (self):
2349d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice        self.buildDwarf ()
2449d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice        self.breakpoint_id_tests ()
2549d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
2649d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice    def breakpoint_id_tests (self):
2749d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice        exe = os.path.join (os.getcwd(), "a.out")
2849d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice        self.expect("file " + exe,
2949d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice                    patterns = [ "Current executable set to .*a.out" ])
3049d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
31431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham
32431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham        bpno = lldbutil.run_break_set_by_symbol (self, 'product', num_expected_locations=-1, sym_exact=False)
33431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham        self.assertTrue (bpno == 1, "First breakpoint number is 1.")
3449d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
35431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham        bpno = lldbutil.run_break_set_by_symbol (self, 'sum', num_expected_locations=-1, sym_exact=False)
36431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham        self.assertTrue (bpno == 2, "Second breakpoint number is 2.")
3749d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
38431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham        bpno = lldbutil.run_break_set_by_symbol (self, 'junk', num_expected_locations=0, sym_exact=False)
39431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham        self.assertTrue (bpno == 3, "Third breakpoint number is 3.")
4049d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
41057f70627ce976dd7321c9df36b645ed836c9de4Caroline Tice        self.expect ("breakpoint disable 1.1 - 2.2 ",
4249d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice                     COMMAND_FAILED_AS_EXPECTED, error = True,
4349d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice                     startstr = "error: Invalid range: Ranges that specify particular breakpoint locations must be within the same major breakpoint; you specified two different major breakpoints, 1 and 2.")
4449d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
45057f70627ce976dd7321c9df36b645ed836c9de4Caroline Tice        self.expect ("breakpoint disable 2 - 2.2",
46057f70627ce976dd7321c9df36b645ed836c9de4Caroline Tice                     COMMAND_FAILED_AS_EXPECTED, error = True,
47057f70627ce976dd7321c9df36b645ed836c9de4Caroline Tice                     startstr = "error: Invalid breakpoint id range:  Either both ends of range must specify a breakpoint location, or neither can specify a breakpoint location.")
48057f70627ce976dd7321c9df36b645ed836c9de4Caroline Tice
49057f70627ce976dd7321c9df36b645ed836c9de4Caroline Tice        self.expect ("breakpoint disable 2.1 - 2",
50057f70627ce976dd7321c9df36b645ed836c9de4Caroline Tice                     COMMAND_FAILED_AS_EXPECTED, error = True,
51057f70627ce976dd7321c9df36b645ed836c9de4Caroline Tice                     startstr = "error: Invalid breakpoint id range:  Either both ends of range must specify a breakpoint location, or neither can specify a breakpoint location.")
52057f70627ce976dd7321c9df36b645ed836c9de4Caroline Tice
53057f70627ce976dd7321c9df36b645ed836c9de4Caroline Tice        self.expect ("breakpoint disable 2.1 - 2.2",
5449d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice                     startstr = "2 breakpoints disabled.")
5549d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
56057f70627ce976dd7321c9df36b645ed836c9de4Caroline Tice        self.expect ("breakpoint enable 2.*",
57057f70627ce976dd7321c9df36b645ed836c9de4Caroline Tice                     patterns = [ ".* breakpoints enabled."] )
5849d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
5949d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Ticeif __name__ == '__main__':
6049d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice    import atexit
6149d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice    lldb.SBDebugger.Initialize()
6249d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice    atexit.register(lambda: lldb.SBDebugger.Terminate())
6349d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice    unittest2.main()
6449d5d12b7f3d8d6a0d96a3168794391142032c08Caroline Tice
65