| """ | |
| Test that HandleCommand captures stdout and stderr from script commands. | |
| """ | |
| import lldb | |
| from lldbsuite.test.decorators import * | |
| from lldbsuite.test.lldbtest import * | |
| class CommandScriptOutputTestCase(TestBase): | |
| NO_DEBUG_INFO_TESTCASE = True | |
| def test_script_command_stdout_stderr(self): | |
| """Test that HandleCommand captures stdout and stderr from script commands.""" | |
| ci = self.dbg.GetCommandInterpreter() | |
| self.assertTrue(ci, VALID_COMMAND_INTERPRETER) | |
| res = lldb.SBCommandReturnObject() | |
| # Execute a script command that writes to stdout. | |
| ci.HandleCommand("script print('Hello stdout')", res) | |
| self.assertTrue(res.Succeeded()) | |
| self.assertIn("Hello stdout", res.GetOutput()) | |
| # Execute a script command that writes to stderr. | |
| ci.HandleCommand("script import sys; sys.stderr.write('Hello stderr\\n')", res) | |
| self.assertTrue(res.Succeeded()) | |
| self.assertIn("Hello stderr", res.GetOutput()) | |
| # Execute a script command that writes to both stdout and stderr. | |
| ci.HandleCommand( | |
| "script import sys; print('Output line'); sys.stderr.write('Error line\\n')", | |
| res, | |
| ) | |
| self.assertTrue(res.Succeeded()) | |
| self.assertIn("Output line", res.GetOutput()) | |
| self.assertIn("Error line", res.GetOutput()) | |
| # Test that multiple print statements are captured. | |
| ci.HandleCommand( | |
| "script print('Line 1'); print('Line 2'); print('Line 3')", res | |
| ) | |
| self.assertTrue(res.Succeeded()) | |
| output = res.GetOutput() | |
| self.assertIn("Line 1", output) | |
| self.assertIn("Line 2", output) | |
| self.assertIn("Line 3", output) |