diff -r 000000000000 -r ae805ac0140d python-2.5.2/win32/Lib/test/test_popen2.py --- /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()