Files
llvm/lldb/test/API/python_api/command_script_output/TestCommandScriptOutput.py

48 lines
1.7 KiB
Python

"""
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)