1*99451b44SJordan Rupprecht"""Test the RunCommandInterpreter API."""
2*99451b44SJordan Rupprecht
3*99451b44SJordan Rupprechtimport os
4*99451b44SJordan Rupprechtimport lldb
5*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
6*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
7*99451b44SJordan Rupprecht
8*99451b44SJordan Rupprechtclass CommandRunInterpreterLegacyAPICase(TestBase):
9*99451b44SJordan Rupprecht
10*99451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
11*99451b44SJordan Rupprecht    mydir = TestBase.compute_mydir(__file__)
12*99451b44SJordan Rupprecht
13*99451b44SJordan Rupprecht    def setUp(self):
14*99451b44SJordan Rupprecht        TestBase.setUp(self)
15*99451b44SJordan Rupprecht
16*99451b44SJordan Rupprecht        self.stdin_path = self.getBuildArtifact("stdin.txt")
17*99451b44SJordan Rupprecht
18*99451b44SJordan Rupprecht        with open(self.stdin_path, 'w') as input_handle:
19*99451b44SJordan Rupprecht            input_handle.write("nonexistingcommand\nquit")
20*99451b44SJordan Rupprecht
21*99451b44SJordan Rupprecht        # Python will close the file descriptor if all references
22*99451b44SJordan Rupprecht        # to the filehandle object lapse, so we need to keep one
23*99451b44SJordan Rupprecht        # around.
24*99451b44SJordan Rupprecht        self.filehandle = open(self.stdin_path, 'r')
25*99451b44SJordan Rupprecht        self.dbg.SetInputFileHandle(self.filehandle, False)
26*99451b44SJordan Rupprecht
27*99451b44SJordan Rupprecht        # No need to track the output
28*99451b44SJordan Rupprecht        self.devnull = open(os.devnull, 'w')
29*99451b44SJordan Rupprecht        self.dbg.SetOutputFileHandle(self.devnull, False)
30*99451b44SJordan Rupprecht        self.dbg.SetErrorFileHandle (self.devnull, False)
31*99451b44SJordan Rupprecht
32*99451b44SJordan Rupprecht    @add_test_categories(['pyapi'])
33*99451b44SJordan Rupprecht    def test_run_session_with_error_and_quit_legacy(self):
34*99451b44SJordan Rupprecht        """Run non-existing and quit command returns appropriate values"""
35*99451b44SJordan Rupprecht
36*99451b44SJordan Rupprecht        n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter(
37*99451b44SJordan Rupprecht                True, False, lldb.SBCommandInterpreterRunOptions(), 0, False,
38*99451b44SJordan Rupprecht                False)
39*99451b44SJordan Rupprecht
40*99451b44SJordan Rupprecht        self.assertGreater(n_errors, 0)
41*99451b44SJordan Rupprecht        self.assertTrue(quit_requested)
42*99451b44SJordan Rupprecht        self.assertFalse(has_crashed)
43*99451b44SJordan Rupprecht
44*99451b44SJordan Rupprecht
45*99451b44SJordan Rupprechtclass CommandRunInterpreterAPICase(TestBase):
46*99451b44SJordan Rupprecht
47*99451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
48*99451b44SJordan Rupprecht    mydir = TestBase.compute_mydir(__file__)
49*99451b44SJordan Rupprecht
50*99451b44SJordan Rupprecht    def setUp(self):
51*99451b44SJordan Rupprecht        TestBase.setUp(self)
52*99451b44SJordan Rupprecht
53*99451b44SJordan Rupprecht        self.stdin_path = self.getBuildArtifact("stdin.txt")
54*99451b44SJordan Rupprecht
55*99451b44SJordan Rupprecht        with open(self.stdin_path, 'w') as input_handle:
56*99451b44SJordan Rupprecht            input_handle.write("nonexistingcommand\nquit")
57*99451b44SJordan Rupprecht
58*99451b44SJordan Rupprecht        self.dbg.SetInputFile(open(self.stdin_path, 'r'))
59*99451b44SJordan Rupprecht
60*99451b44SJordan Rupprecht        # No need to track the output
61*99451b44SJordan Rupprecht        devnull = open(os.devnull, 'w')
62*99451b44SJordan Rupprecht        self.dbg.SetOutputFile(devnull)
63*99451b44SJordan Rupprecht        self.dbg.SetErrorFile(devnull)
64*99451b44SJordan Rupprecht
65*99451b44SJordan Rupprecht    @add_test_categories(['pyapi'])
66*99451b44SJordan Rupprecht    def test_run_session_with_error_and_quit(self):
67*99451b44SJordan Rupprecht        """Run non-existing and quit command returns appropriate values"""
68*99451b44SJordan Rupprecht
69*99451b44SJordan Rupprecht        n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter(
70*99451b44SJordan Rupprecht                True, False, lldb.SBCommandInterpreterRunOptions(), 0, False,
71*99451b44SJordan Rupprecht                False)
72*99451b44SJordan Rupprecht
73*99451b44SJordan Rupprecht        self.assertGreater(n_errors, 0)
74*99451b44SJordan Rupprecht        self.assertTrue(quit_requested)
75*99451b44SJordan Rupprecht        self.assertFalse(has_crashed)
76