1*99451b44SJordan Rupprecht"""
2*99451b44SJordan RupprechtTest that commands do not try and hold on to stale CommandInterpreters in a multiple debuggers scenario
3*99451b44SJordan Rupprecht"""
4*99451b44SJordan Rupprecht
5*99451b44SJordan Rupprechtfrom __future__ import print_function
6*99451b44SJordan Rupprecht
7*99451b44SJordan Rupprecht
8*99451b44SJordan Rupprechtimport lldb
9*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
10*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
11*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
12*99451b44SJordan Rupprecht
13*99451b44SJordan Rupprecht
14*99451b44SJordan Rupprechtclass MultipleDebuggersCommandsTestCase(TestBase):
15*99451b44SJordan Rupprecht
16*99451b44SJordan Rupprecht    @no_debug_info_test
17*99451b44SJordan Rupprecht    def test_multipledebuggers_commands(self):
18*99451b44SJordan Rupprecht        """Test that commands do not try and hold on to stale CommandInterpreters in a multiple debuggers scenario"""
19*99451b44SJordan Rupprecht        source_init_files = False
20*99451b44SJordan Rupprecht        magic_text = "The following commands may relate to 'env'"
21*99451b44SJordan Rupprecht
22*99451b44SJordan Rupprecht        debugger_1 = lldb.SBDebugger.Create(source_init_files)
23*99451b44SJordan Rupprecht        interpreter_1 = debugger_1.GetCommandInterpreter()
24*99451b44SJordan Rupprecht
25*99451b44SJordan Rupprecht        retobj = lldb.SBCommandReturnObject()
26*99451b44SJordan Rupprecht        interpreter_1.HandleCommand("apropos env", retobj)
27*99451b44SJordan Rupprecht        self.assertTrue(
28*99451b44SJordan Rupprecht            magic_text in str(retobj),
29*99451b44SJordan Rupprecht            "[interpreter_1]: the output does not contain the correct words")
30*99451b44SJordan Rupprecht
31*99451b44SJordan Rupprecht        if self.TraceOn():
32*99451b44SJordan Rupprecht            print(str(retobj))
33*99451b44SJordan Rupprecht
34*99451b44SJordan Rupprecht        lldb.SBDebugger.Destroy(debugger_1)
35*99451b44SJordan Rupprecht
36*99451b44SJordan Rupprecht        # now do this again with a different debugger - we shouldn't crash
37*99451b44SJordan Rupprecht
38*99451b44SJordan Rupprecht        debugger_2 = lldb.SBDebugger.Create(source_init_files)
39*99451b44SJordan Rupprecht        interpreter_2 = debugger_2.GetCommandInterpreter()
40*99451b44SJordan Rupprecht
41*99451b44SJordan Rupprecht        retobj = lldb.SBCommandReturnObject()
42*99451b44SJordan Rupprecht        interpreter_2.HandleCommand("apropos env", retobj)
43*99451b44SJordan Rupprecht        self.assertTrue(
44*99451b44SJordan Rupprecht            magic_text in str(retobj),
45*99451b44SJordan Rupprecht            "[interpreter_2]: the output does not contain the correct words")
46*99451b44SJordan Rupprecht
47*99451b44SJordan Rupprecht        if self.TraceOn():
48*99451b44SJordan Rupprecht            print(str(retobj))
49*99451b44SJordan Rupprecht
50*99451b44SJordan Rupprecht        lldb.SBDebugger.Destroy(debugger_2)
51