diff options
| author | Johnny Chen <johnny.chen@apple.com> | 2011-11-28 21:39:07 +0000 |
|---|---|---|
| committer | Johnny Chen <johnny.chen@apple.com> | 2011-11-28 21:39:07 +0000 |
| commit | 49cb85db64046f0030134cf4eac27b1dbe02cc2c (patch) | |
| tree | bbc3506195df1c8be5a7154df3adc2a7c23ebb70 /lldb/test/python_api/process/io | |
| parent | c086f0f91b775b7342ccea87a849474987c39b27 (diff) | |
| download | bcm5719-llvm-49cb85db64046f0030134cf4eac27b1dbe02cc2c.tar.gz bcm5719-llvm-49cb85db64046f0030134cf4eac27b1dbe02cc2c.zip | |
SBProcess.PutSTDIN() needs to be properly typemapped when swigging,
so that we can do Python scripting like this:
target = self.dbg.CreateTarget(self.exe)
self.dbg.SetAsync(True)
process = target.LaunchSimple(None, None, os.getcwd())
process.PutSTDIN("Line 1 Entered.\n")
process.PutSTDIN("Line 2 Entered.\n")
process.PutSTDIN("Line 3 Entered.\n")
Add TestProcessIO.py to exercise the process IO API: PutSTDIN()/GetSTDOUT()/GetSTDERR().
llvm-svn: 145282
Diffstat (limited to 'lldb/test/python_api/process/io')
| -rw-r--r-- | lldb/test/python_api/process/io/Makefile | 6 | ||||
| -rw-r--r-- | lldb/test/python_api/process/io/TestProcessIO.py | 66 | ||||
| -rw-r--r-- | lldb/test/python_api/process/io/main.c | 12 |
3 files changed, 84 insertions, 0 deletions
diff --git a/lldb/test/python_api/process/io/Makefile b/lldb/test/python_api/process/io/Makefile new file mode 100644 index 00000000000..5361f2a5bbe --- /dev/null +++ b/lldb/test/python_api/process/io/Makefile @@ -0,0 +1,6 @@ +LEVEL = ../../../make + +C_SOURCES := main.c +EXE := process_io + +include $(LEVEL)/Makefile.rules diff --git a/lldb/test/python_api/process/io/TestProcessIO.py b/lldb/test/python_api/process/io/TestProcessIO.py new file mode 100644 index 00000000000..8c494d15174 --- /dev/null +++ b/lldb/test/python_api/process/io/TestProcessIO.py @@ -0,0 +1,66 @@ +"""Test Python APIs for process IO.""" + +import os, sys, time +import unittest2 +import lldb +from lldbtest import * + +class ProcessIOTestCase(TestBase): + + mydir = os.path.join("python_api", "process", "io") + + @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") + @python_api_test + def test_put_stdin_with_dsym(self): + """Exercise SBProcess.PutSTDIN().""" + self.buildDsym() + self.put_stdin() + + @python_api_test + def test_put_stdin_with_dwarf(self): + """Exercise SBProcess.PutSTDIN().""" + self.buildDwarf() + self.put_stdin() + + def setUp(self): + # Call super's setUp(). + TestBase.setUp(self) + # Get the full path to our executable to be debugged. + self.exe = os.path.join(os.getcwd(), "process_io") + + def put_stdin(self): + """Launch a process and use SBProcess.PutSTDIN() to write data to it.""" + + target = self.dbg.CreateTarget(self.exe) + + self.dbg.SetAsync(True) + process = target.LaunchSimple(None, None, os.getcwd()) + if self.TraceOn(): + print "process launched." + + self.assertTrue(process, PROCESS_IS_VALID) + + process.PutSTDIN("Line 1 Entered.\n") + process.PutSTDIN("Line 2 Entered.\n") + process.PutSTDIN("Line 3 Entered.\n") + + for i in range(5): + output = process.GetSTDOUT(500) + error = process.GetSTDERR(500) + if self.TraceOn(): + print "output->|%s|" % output + print "error->|%s|" % error + # We are satisfied once "input line=>1" appears in stderr. + # See also main.c. + #if "input line=>1" in error: + if "input line=>1" in output: + return + time.sleep(5) + + self.fail("Expected output form launched process did not appear?") + +if __name__ == '__main__': + import atexit + lldb.SBDebugger.Initialize() + atexit.register(lambda: lldb.SBDebugger.Terminate()) + unittest2.main() diff --git a/lldb/test/python_api/process/io/main.c b/lldb/test/python_api/process/io/main.c new file mode 100644 index 00000000000..a3d95fe12af --- /dev/null +++ b/lldb/test/python_api/process/io/main.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +int main(int argc, char const *argv[]) { + printf("Hello world.\n"); + char line[100]; + int count = 1; + while (fgets(line, sizeof(line), stdin)) { // Reading from stdin... + fprintf(stderr, "input line=>%d\n", count++); + } + + printf("Exiting now\n"); +} |

