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
1299451b44SJordan Rupprecht    def setUp(self):
1399451b44SJordan Rupprecht        TestBase.setUp(self)
1499451b44SJordan Rupprecht
1599451b44SJordan Rupprecht        self.stdin_path = self.getBuildArtifact("stdin.txt")
1699451b44SJordan Rupprecht
1799451b44SJordan Rupprecht        with open(self.stdin_path, 'w') as input_handle:
1899451b44SJordan Rupprecht            input_handle.write("nonexistingcommand\nquit")
1999451b44SJordan Rupprecht
2099451b44SJordan Rupprecht        # Python will close the file descriptor if all references
2199451b44SJordan Rupprecht        # to the filehandle object lapse, so we need to keep one
2299451b44SJordan Rupprecht        # around.
2399451b44SJordan Rupprecht        self.filehandle = open(self.stdin_path, 'r')
2499451b44SJordan Rupprecht        self.dbg.SetInputFileHandle(self.filehandle, False)
2599451b44SJordan Rupprecht
2699451b44SJordan Rupprecht        # No need to track the output
2799451b44SJordan Rupprecht        self.devnull = open(os.devnull, 'w')
2899451b44SJordan Rupprecht        self.dbg.SetOutputFileHandle(self.devnull, False)
2999451b44SJordan Rupprecht        self.dbg.SetErrorFileHandle (self.devnull, False)
3099451b44SJordan Rupprecht
3199451b44SJordan Rupprecht    def test_run_session_with_error_and_quit_legacy(self):
3299451b44SJordan Rupprecht        """Run non-existing and quit command returns appropriate values"""
3399451b44SJordan Rupprecht
3499451b44SJordan Rupprecht        n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter(
3599451b44SJordan Rupprecht                True, False, lldb.SBCommandInterpreterRunOptions(), 0, False,
3699451b44SJordan Rupprecht                False)
3799451b44SJordan Rupprecht
3899451b44SJordan Rupprecht        self.assertGreater(n_errors, 0)
3999451b44SJordan Rupprecht        self.assertTrue(quit_requested)
4099451b44SJordan Rupprecht        self.assertFalse(has_crashed)
4199451b44SJordan Rupprecht
4299451b44SJordan Rupprecht
4399451b44SJordan Rupprechtclass CommandRunInterpreterAPICase(TestBase):
4499451b44SJordan Rupprecht
4599451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
4699451b44SJordan Rupprecht
4799451b44SJordan Rupprecht    def setUp(self):
4899451b44SJordan Rupprecht        TestBase.setUp(self)
4999451b44SJordan Rupprecht
5099451b44SJordan Rupprecht        self.stdin_path = self.getBuildArtifact("stdin.txt")
5199451b44SJordan Rupprecht
5299451b44SJordan Rupprecht        with open(self.stdin_path, 'w') as input_handle:
5399451b44SJordan Rupprecht            input_handle.write("nonexistingcommand\nquit")
5499451b44SJordan Rupprecht
5599451b44SJordan Rupprecht        self.dbg.SetInputFile(open(self.stdin_path, 'r'))
5699451b44SJordan Rupprecht
5799451b44SJordan Rupprecht        # No need to track the output
5899451b44SJordan Rupprecht        devnull = open(os.devnull, 'w')
5999451b44SJordan Rupprecht        self.dbg.SetOutputFile(devnull)
6099451b44SJordan Rupprecht        self.dbg.SetErrorFile(devnull)
6199451b44SJordan Rupprecht
6299451b44SJordan Rupprecht    def test_run_session_with_error_and_quit(self):
6399451b44SJordan Rupprecht        """Run non-existing and quit command returns appropriate values"""
6499451b44SJordan Rupprecht
6599451b44SJordan Rupprecht        n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter(
6699451b44SJordan Rupprecht                True, False, lldb.SBCommandInterpreterRunOptions(), 0, False,
6799451b44SJordan Rupprecht                False)
6899451b44SJordan Rupprecht
6999451b44SJordan Rupprecht        self.assertGreater(n_errors, 0)
7099451b44SJordan Rupprecht        self.assertTrue(quit_requested)
7199451b44SJordan Rupprecht        self.assertFalse(has_crashed)
72*c9647419SMed Ismail Bennani
73*c9647419SMed Ismail Bennaniclass SBCommandInterpreterRunOptionsCase(TestBase):
74*c9647419SMed Ismail Bennani
75*c9647419SMed Ismail Bennani    NO_DEBUG_INFO_TESTCASE = True
76*c9647419SMed Ismail Bennani
77*c9647419SMed Ismail Bennani    def test_command_interpreter_run_options(self):
78*c9647419SMed Ismail Bennani        """Test SBCommandInterpreterRunOptions default values, getters & setters """
79*c9647419SMed Ismail Bennani
80*c9647419SMed Ismail Bennani        opts = lldb.SBCommandInterpreterRunOptions()
81*c9647419SMed Ismail Bennani
82*c9647419SMed Ismail Bennani        # Check getters with default values
83*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetStopOnContinue(), False)
84*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetStopOnError(), False)
85*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetStopOnCrash(), False)
86*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetEchoCommands(), True)
87*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetPrintResults(), True)
88*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetPrintErrors(), True)
89*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetAddToHistory(), True)
90*c9647419SMed Ismail Bennani
91*c9647419SMed Ismail Bennani        # Invert values
92*c9647419SMed Ismail Bennani        opts.SetStopOnContinue(not opts.GetStopOnContinue())
93*c9647419SMed Ismail Bennani        opts.SetStopOnError(not opts.GetStopOnError())
94*c9647419SMed Ismail Bennani        opts.SetStopOnCrash(not opts.GetStopOnCrash())
95*c9647419SMed Ismail Bennani        opts.SetEchoCommands(not opts.GetEchoCommands())
96*c9647419SMed Ismail Bennani        opts.SetPrintResults(not opts.GetPrintResults())
97*c9647419SMed Ismail Bennani        opts.SetPrintErrors(not opts.GetPrintErrors())
98*c9647419SMed Ismail Bennani        opts.SetAddToHistory(not opts.GetAddToHistory())
99*c9647419SMed Ismail Bennani
100*c9647419SMed Ismail Bennani        # Check the value changed
101*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetStopOnContinue(), True)
102*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetStopOnError(), True)
103*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetStopOnCrash(), True)
104*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetEchoCommands(), False)
105*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetPrintResults(), False)
106*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetPrintErrors(), False)
107*c9647419SMed Ismail Bennani        self.assertEqual(opts.GetAddToHistory(), False)
108