199451b44SJordan Rupprecht"""
299451b44SJordan RupprechtTest that commands do not try and hold on to stale CommandInterpreters in a multiple debuggers scenario
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 MultipleDebuggersCommandsTestCase(TestBase):
1299451b44SJordan Rupprecht    @no_debug_info_test
1399451b44SJordan Rupprecht    def test_multipledebuggers_commands(self):
1499451b44SJordan Rupprecht        """Test that commands do not try and hold on to stale CommandInterpreters in a multiple debuggers scenario"""
1599451b44SJordan Rupprecht        source_init_files = False
1699451b44SJordan Rupprecht        magic_text = "The following commands may relate to 'env'"
1799451b44SJordan Rupprecht
1899451b44SJordan Rupprecht        debugger_1 = lldb.SBDebugger.Create(source_init_files)
1999451b44SJordan Rupprecht        interpreter_1 = debugger_1.GetCommandInterpreter()
2099451b44SJordan Rupprecht
2199451b44SJordan Rupprecht        retobj = lldb.SBCommandReturnObject()
2299451b44SJordan Rupprecht        interpreter_1.HandleCommand("apropos env", retobj)
23*9c246882SJordan Rupprecht        self.assertIn(
24*9c246882SJordan Rupprecht            magic_text,
25*9c246882SJordan Rupprecht            str(retobj),
262238dcc3SJonas Devlieghere            "[interpreter_1]: the output does not contain the correct words",
272238dcc3SJonas Devlieghere        )
2899451b44SJordan Rupprecht
2999451b44SJordan Rupprecht        if self.TraceOn():
3099451b44SJordan Rupprecht            print(str(retobj))
3199451b44SJordan Rupprecht
3299451b44SJordan Rupprecht        lldb.SBDebugger.Destroy(debugger_1)
3399451b44SJordan Rupprecht
3499451b44SJordan Rupprecht        # now do this again with a different debugger - we shouldn't crash
3599451b44SJordan Rupprecht
3699451b44SJordan Rupprecht        debugger_2 = lldb.SBDebugger.Create(source_init_files)
3799451b44SJordan Rupprecht        interpreter_2 = debugger_2.GetCommandInterpreter()
3899451b44SJordan Rupprecht
3999451b44SJordan Rupprecht        retobj = lldb.SBCommandReturnObject()
4099451b44SJordan Rupprecht        interpreter_2.HandleCommand("apropos env", retobj)
41*9c246882SJordan Rupprecht        self.assertIn(
42*9c246882SJordan Rupprecht            magic_text,
43*9c246882SJordan Rupprecht            str(retobj),
442238dcc3SJonas Devlieghere            "[interpreter_2]: the output does not contain the correct words",
452238dcc3SJonas Devlieghere        )
4699451b44SJordan Rupprecht
4799451b44SJordan Rupprecht        if self.TraceOn():
4899451b44SJordan Rupprecht            print(str(retobj))
4999451b44SJordan Rupprecht
5099451b44SJordan Rupprecht        lldb.SBDebugger.Destroy(debugger_2)
51