python-2.5.2/win32/Lib/test/test_popen2.py
changeset 0 ae805ac0140d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python-2.5.2/win32/Lib/test/test_popen2.py	Fri Apr 03 17:19:34 2009 +0100
@@ -0,0 +1,78 @@
+#! /usr/bin/env python
+"""Test script for popen2.py
+   Christian Tismer
+"""
+
+import os
+import sys
+from test.test_support import TestSkipped, reap_children
+
+# popen2 contains its own testing routine
+# which is especially useful to see if open files
+# like stdin can be read successfully by a forked
+# subprocess.
+
+def main():
+    print "Test popen2 module:"
+    if (sys.platform[:4] == 'beos' or sys.platform[:6] == 'atheos') \
+           and __name__ != '__main__':
+        #  Locks get messed up or something.  Generally we're supposed
+        #  to avoid mixing "posix" fork & exec with native threads, and
+        #  they may be right about that after all.
+        raise TestSkipped, "popen2() doesn't work during import on " + sys.platform
+    try:
+        from os import popen
+    except ImportError:
+        # if we don't have os.popen, check that
+        # we have os.fork.  if not, skip the test
+        # (by raising an ImportError)
+        from os import fork
+    import popen2
+    popen2._test()
+
+
+def _test():
+    # same test as popen2._test(), but using the os.popen*() API
+    print "Testing os module:"
+    import popen2
+    # When the test runs, there shouldn't be any open pipes
+    popen2._cleanup()
+    assert not popen2._active, "Active pipes when test starts " + repr([c.cmd for c in popen2._active])
+    cmd  = "cat"
+    teststr = "ab cd\n"
+    if os.name == "nt":
+        cmd = "more"
+    # "more" doesn't act the same way across Windows flavors,
+    # sometimes adding an extra newline at the start or the
+    # end.  So we strip whitespace off both ends for comparison.
+    expected = teststr.strip()
+    print "testing popen2..."
+    w, r = os.popen2(cmd)
+    w.write(teststr)
+    w.close()
+    got = r.read()
+    if got.strip() != expected:
+        raise ValueError("wrote %r read %r" % (teststr, got))
+    print "testing popen3..."
+    try:
+        w, r, e = os.popen3([cmd])
+    except:
+        w, r, e = os.popen3(cmd)
+    w.write(teststr)
+    w.close()
+    got = r.read()
+    if got.strip() != expected:
+        raise ValueError("wrote %r read %r" % (teststr, got))
+    got = e.read()
+    if got:
+        raise ValueError("unexpected %r on stderr" % (got,))
+    for inst in popen2._active[:]:
+        inst.wait()
+    popen2._cleanup()
+    if popen2._active:
+        raise ValueError("_active not empty")
+    print "All OK"
+
+main()
+_test()
+reap_children()