openfile(): Go back to opening the files in text mode. This undoes
[python/dscho.git] / Lib / test / test_popen2.py
blobcf3a09465a499628e46b1724bbf2d4025abd9169
1 #! /usr/bin/env python
2 """Test script for popen2.py
3 Christian Tismer
4 """
6 import os
7 import sys
8 from test.test_support import TestSkipped
10 # popen2 contains its own testing routine
11 # which is especially useful to see if open files
12 # like stdin can be read successfully by a forked
13 # subprocess.
15 def main():
16 print "Test popen2 module:"
17 if (sys.platform[:4] == 'beos' or sys.platform[:6] == 'atheos') \
18 and __name__ != '__main__':
19 # Locks get messed up or something. Generally we're supposed
20 # to avoid mixing "posix" fork & exec with native threads, and
21 # they may be right about that after all.
22 raise TestSkipped, "popen2() doesn't work during import on " + sys.platform
23 try:
24 from os import popen
25 except ImportError:
26 # if we don't have os.popen, check that
27 # we have os.fork. if not, skip the test
28 # (by raising an ImportError)
29 from os import fork
30 import popen2
31 popen2._test()
34 def _test():
35 # same test as popen2._test(), but using the os.popen*() API
36 print "Testing os module:"
37 import popen2
38 cmd = "cat"
39 teststr = "ab cd\n"
40 if os.name == "nt":
41 cmd = "more"
42 # "more" doesn't act the same way across Windows flavors,
43 # sometimes adding an extra newline at the start or the
44 # end. So we strip whitespace off both ends for comparison.
45 expected = teststr.strip()
46 print "testing popen2..."
47 w, r = os.popen2(cmd)
48 w.write(teststr)
49 w.close()
50 got = r.read()
51 if got.strip() != expected:
52 raise ValueError("wrote %s read %s" % (`teststr`, `got`))
53 print "testing popen3..."
54 try:
55 w, r, e = os.popen3([cmd])
56 except:
57 w, r, e = os.popen3(cmd)
58 w.write(teststr)
59 w.close()
60 got = r.read()
61 if got.strip() != expected:
62 raise ValueError("wrote %s read %s" % (`teststr`, `got`))
63 got = e.read()
64 if got:
65 raise ValueError("unexected %s on stderr" % `got`)
66 for inst in popen2._active[:]:
67 inst.wait()
68 if popen2._active:
69 raise ValueError("_active not empty")
70 print "All OK"
72 main()
73 _test()