199451b44SJordan Rupprecht"""Test the RunCommandInterpreter API."""
299451b44SJordan Rupprecht
399451b44SJordan Rupprechtimport os
499451b44SJordan Rupprechtimport lldb
599451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
699451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
799451b44SJordan Rupprecht
899451b44SJordan Rupprechtclass CommandRunInterpreterLegacyAPICase(TestBase):
999451b44SJordan Rupprecht
1099451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
1199451b44SJordan Rupprecht    mydir = TestBase.compute_mydir(__file__)
1299451b44SJordan Rupprecht
13*7606a543SJonas Devlieghere    @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
1499451b44SJordan Rupprecht    def setUp(self):
1599451b44SJordan Rupprecht        TestBase.setUp(self)
1699451b44SJordan Rupprecht
1799451b44SJordan Rupprecht        self.stdin_path = self.getBuildArtifact("stdin.txt")
1899451b44SJordan Rupprecht
1999451b44SJordan Rupprecht        with open(self.stdin_path, 'w') as input_handle:
2099451b44SJordan Rupprecht            input_handle.write("nonexistingcommand\nquit")
2199451b44SJordan Rupprecht
2299451b44SJordan Rupprecht        # Python will close the file descriptor if all references
2399451b44SJordan Rupprecht        # to the filehandle object lapse, so we need to keep one
2499451b44SJordan Rupprecht        # around.
2599451b44SJordan Rupprecht        self.filehandle = open(self.stdin_path, 'r')
2699451b44SJordan Rupprecht        self.dbg.SetInputFileHandle(self.filehandle, False)
2799451b44SJordan Rupprecht
2899451b44SJordan Rupprecht        # No need to track the output
2999451b44SJordan Rupprecht        self.devnull = open(os.devnull, 'w')
3099451b44SJordan Rupprecht        self.dbg.SetOutputFileHandle(self.devnull, False)
3199451b44SJordan Rupprecht        self.dbg.SetErrorFileHandle (self.devnull, False)
3299451b44SJordan Rupprecht
3399451b44SJordan Rupprecht    @add_test_categories(['pyapi'])
3499451b44SJordan Rupprecht    def test_run_session_with_error_and_quit_legacy(self):
3599451b44SJordan Rupprecht        """Run non-existing and quit command returns appropriate values"""
3699451b44SJordan Rupprecht
3799451b44SJordan Rupprecht        n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter(
3899451b44SJordan Rupprecht                True, False, lldb.SBCommandInterpreterRunOptions(), 0, False,
3999451b44SJordan Rupprecht                False)
4099451b44SJordan Rupprecht
4199451b44SJordan Rupprecht        self.assertGreater(n_errors, 0)
4299451b44SJordan Rupprecht        self.assertTrue(quit_requested)
4399451b44SJordan Rupprecht        self.assertFalse(has_crashed)
4499451b44SJordan Rupprecht
4599451b44SJordan Rupprecht
4699451b44SJordan Rupprechtclass CommandRunInterpreterAPICase(TestBase):
4799451b44SJordan Rupprecht
4899451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
4999451b44SJordan Rupprecht    mydir = TestBase.compute_mydir(__file__)
5099451b44SJordan Rupprecht
51*7606a543SJonas Devlieghere    @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
5299451b44SJordan Rupprecht    def setUp(self):
5399451b44SJordan Rupprecht        TestBase.setUp(self)
5499451b44SJordan Rupprecht
5599451b44SJordan Rupprecht        self.stdin_path = self.getBuildArtifact("stdin.txt")
5699451b44SJordan Rupprecht
5799451b44SJordan Rupprecht        with open(self.stdin_path, 'w') as input_handle:
5899451b44SJordan Rupprecht            input_handle.write("nonexistingcommand\nquit")
5999451b44SJordan Rupprecht
6099451b44SJordan Rupprecht        self.dbg.SetInputFile(open(self.stdin_path, 'r'))
6199451b44SJordan Rupprecht
6299451b44SJordan Rupprecht        # No need to track the output
6399451b44SJordan Rupprecht        devnull = open(os.devnull, 'w')
6499451b44SJordan Rupprecht        self.dbg.SetOutputFile(devnull)
6599451b44SJordan Rupprecht        self.dbg.SetErrorFile(devnull)
6699451b44SJordan Rupprecht
6799451b44SJordan Rupprecht    @add_test_categories(['pyapi'])
6899451b44SJordan Rupprecht    def test_run_session_with_error_and_quit(self):
6999451b44SJordan Rupprecht        """Run non-existing and quit command returns appropriate values"""
7099451b44SJordan Rupprecht
7199451b44SJordan Rupprecht        n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter(
7299451b44SJordan Rupprecht                True, False, lldb.SBCommandInterpreterRunOptions(), 0, False,
7399451b44SJordan Rupprecht                False)
7499451b44SJordan Rupprecht
7599451b44SJordan Rupprecht        self.assertGreater(n_errors, 0)
7699451b44SJordan Rupprecht        self.assertTrue(quit_requested)
7799451b44SJordan Rupprecht        self.assertFalse(has_crashed)
78