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 137606a543SJonas 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 def test_run_session_with_error_and_quit_legacy(self): 3499451b44SJordan Rupprecht """Run non-existing and quit command returns appropriate values""" 3599451b44SJordan Rupprecht 3699451b44SJordan Rupprecht n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter( 3799451b44SJordan Rupprecht True, False, lldb.SBCommandInterpreterRunOptions(), 0, False, 3899451b44SJordan Rupprecht False) 3999451b44SJordan Rupprecht 4099451b44SJordan Rupprecht self.assertGreater(n_errors, 0) 4199451b44SJordan Rupprecht self.assertTrue(quit_requested) 4299451b44SJordan Rupprecht self.assertFalse(has_crashed) 4399451b44SJordan Rupprecht 4499451b44SJordan Rupprecht 4599451b44SJordan Rupprechtclass CommandRunInterpreterAPICase(TestBase): 4699451b44SJordan Rupprecht 4799451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 4899451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 4999451b44SJordan Rupprecht 507606a543SJonas Devlieghere @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented. 5199451b44SJordan Rupprecht def setUp(self): 5299451b44SJordan Rupprecht TestBase.setUp(self) 5399451b44SJordan Rupprecht 5499451b44SJordan Rupprecht self.stdin_path = self.getBuildArtifact("stdin.txt") 5599451b44SJordan Rupprecht 5699451b44SJordan Rupprecht with open(self.stdin_path, 'w') as input_handle: 5799451b44SJordan Rupprecht input_handle.write("nonexistingcommand\nquit") 5899451b44SJordan Rupprecht 5999451b44SJordan Rupprecht self.dbg.SetInputFile(open(self.stdin_path, 'r')) 6099451b44SJordan Rupprecht 6199451b44SJordan Rupprecht # No need to track the output 6299451b44SJordan Rupprecht devnull = open(os.devnull, 'w') 6399451b44SJordan Rupprecht self.dbg.SetOutputFile(devnull) 6499451b44SJordan Rupprecht self.dbg.SetErrorFile(devnull) 6599451b44SJordan Rupprecht 6699451b44SJordan Rupprecht def test_run_session_with_error_and_quit(self): 6799451b44SJordan Rupprecht """Run non-existing and quit command returns appropriate values""" 6899451b44SJordan Rupprecht 6999451b44SJordan Rupprecht n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter( 7099451b44SJordan Rupprecht True, False, lldb.SBCommandInterpreterRunOptions(), 0, False, 7199451b44SJordan Rupprecht False) 7299451b44SJordan Rupprecht 7399451b44SJordan Rupprecht self.assertGreater(n_errors, 0) 7499451b44SJordan Rupprecht self.assertTrue(quit_requested) 7599451b44SJordan Rupprecht self.assertFalse(has_crashed) 76*c9647419SMed Ismail Bennani 77*c9647419SMed Ismail Bennaniclass SBCommandInterpreterRunOptionsCase(TestBase): 78*c9647419SMed Ismail Bennani 79*c9647419SMed Ismail Bennani NO_DEBUG_INFO_TESTCASE = True 80*c9647419SMed Ismail Bennani mydir = TestBase.compute_mydir(__file__) 81*c9647419SMed Ismail Bennani 82*c9647419SMed Ismail Bennani def test_command_interpreter_run_options(self): 83*c9647419SMed Ismail Bennani """Test SBCommandInterpreterRunOptions default values, getters & setters """ 84*c9647419SMed Ismail Bennani 85*c9647419SMed Ismail Bennani opts = lldb.SBCommandInterpreterRunOptions() 86*c9647419SMed Ismail Bennani 87*c9647419SMed Ismail Bennani # Check getters with default values 88*c9647419SMed Ismail Bennani self.assertEqual(opts.GetStopOnContinue(), False) 89*c9647419SMed Ismail Bennani self.assertEqual(opts.GetStopOnError(), False) 90*c9647419SMed Ismail Bennani self.assertEqual(opts.GetStopOnCrash(), False) 91*c9647419SMed Ismail Bennani self.assertEqual(opts.GetEchoCommands(), True) 92*c9647419SMed Ismail Bennani self.assertEqual(opts.GetPrintResults(), True) 93*c9647419SMed Ismail Bennani self.assertEqual(opts.GetPrintErrors(), True) 94*c9647419SMed Ismail Bennani self.assertEqual(opts.GetAddToHistory(), True) 95*c9647419SMed Ismail Bennani 96*c9647419SMed Ismail Bennani # Invert values 97*c9647419SMed Ismail Bennani opts.SetStopOnContinue(not opts.GetStopOnContinue()) 98*c9647419SMed Ismail Bennani opts.SetStopOnError(not opts.GetStopOnError()) 99*c9647419SMed Ismail Bennani opts.SetStopOnCrash(not opts.GetStopOnCrash()) 100*c9647419SMed Ismail Bennani opts.SetEchoCommands(not opts.GetEchoCommands()) 101*c9647419SMed Ismail Bennani opts.SetPrintResults(not opts.GetPrintResults()) 102*c9647419SMed Ismail Bennani opts.SetPrintErrors(not opts.GetPrintErrors()) 103*c9647419SMed Ismail Bennani opts.SetAddToHistory(not opts.GetAddToHistory()) 104*c9647419SMed Ismail Bennani 105*c9647419SMed Ismail Bennani # Check the value changed 106*c9647419SMed Ismail Bennani self.assertEqual(opts.GetStopOnContinue(), True) 107*c9647419SMed Ismail Bennani self.assertEqual(opts.GetStopOnError(), True) 108*c9647419SMed Ismail Bennani self.assertEqual(opts.GetStopOnCrash(), True) 109*c9647419SMed Ismail Bennani self.assertEqual(opts.GetEchoCommands(), False) 110*c9647419SMed Ismail Bennani self.assertEqual(opts.GetPrintResults(), False) 111*c9647419SMed Ismail Bennani self.assertEqual(opts.GetPrintErrors(), False) 112*c9647419SMed Ismail Bennani self.assertEqual(opts.GetAddToHistory(), False) 113