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