2 """Test script for popen2.py"""
5 warnings
.filterwarnings("ignore", ".*popen2 module is deprecated.*",
7 warnings
.filterwarnings("ignore", "os\.popen. is deprecated.*",
15 from test
.test_support
import run_unittest
, reap_children
17 if sys
.platform
[:4] == 'beos' or sys
.platform
[:6] == 'atheos':
18 # Locks get messed up or something. Generally we're supposed
19 # to avoid mixing "posix" fork & exec with native threads, and
20 # they may be right about that after all.
21 raise unittest
.SkipTest("popen2() doesn't work on " + sys
.platform
)
23 # if we don't have os.popen, check that
24 # we have os.fork. if not, skip the test
25 # (by raising an ImportError)
33 class Popen2Test(unittest
.TestCase
):
38 # "more" doesn't act the same way across Windows flavors,
39 # sometimes adding an extra newline at the start or the
40 # end. So we strip whitespace off both ends for comparison.
41 expected
= teststr
.strip()
45 # When the test runs, there shouldn't be any open pipes
46 self
.assertFalse(popen2
._active
, "Active pipes when test starts" +
47 repr([c
.cmd
for c
in popen2
._active
]))
50 for inst
in popen2
._active
:
53 self
.assertFalse(popen2
._active
, "popen2._active not empty")
54 # The os.popen*() API delegates to the subprocess module (on Unix)
56 for inst
in subprocess
._active
:
59 self
.assertFalse(subprocess
._active
, "subprocess._active not empty")
62 def validate_output(self
, teststr
, expected_out
, r
, w
, e
=None):
66 self
.assertEquals(expected_out
, got
.strip(), "wrote %r read %r" %
71 self
.assertFalse(got
, "unexpected %r on stderr" % got
)
73 def test_popen2(self
):
74 r
, w
= popen2
.popen2(self
.cmd
)
75 self
.validate_output(self
.teststr
, self
.expected
, r
, w
)
77 def test_popen3(self
):
78 if os
.name
== 'posix':
79 r
, w
, e
= popen2
.popen3([self
.cmd
])
80 self
.validate_output(self
.teststr
, self
.expected
, r
, w
, e
)
82 r
, w
, e
= popen2
.popen3(self
.cmd
)
83 self
.validate_output(self
.teststr
, self
.expected
, r
, w
, e
)
85 def test_os_popen2(self
):
86 # same test as test_popen2(), but using the os.popen*() API
87 if os
.name
== 'posix':
88 w
, r
= os
.popen2([self
.cmd
])
89 self
.validate_output(self
.teststr
, self
.expected
, r
, w
)
91 w
, r
= os
.popen2(["echo", self
.teststr
])
93 self
.assertEquals(got
, self
.teststr
+ "\n")
95 w
, r
= os
.popen2(self
.cmd
)
96 self
.validate_output(self
.teststr
, self
.expected
, r
, w
)
98 def test_os_popen3(self
):
99 # same test as test_popen3(), but using the os.popen*() API
100 if os
.name
== 'posix':
101 w
, r
, e
= os
.popen3([self
.cmd
])
102 self
.validate_output(self
.teststr
, self
.expected
, r
, w
, e
)
104 w
, r
, e
= os
.popen3(["echo", self
.teststr
])
106 self
.assertEquals(got
, self
.teststr
+ "\n")
108 self
.assertFalse(got
, "unexpected %r on stderr" % got
)
110 w
, r
, e
= os
.popen3(self
.cmd
)
111 self
.validate_output(self
.teststr
, self
.expected
, r
, w
, e
)
113 def test_os_popen4(self
):
114 if os
.name
== 'posix':
115 w
, r
= os
.popen4([self
.cmd
])
116 self
.validate_output(self
.teststr
, self
.expected
, r
, w
)
118 w
, r
= os
.popen4(["echo", self
.teststr
])
120 self
.assertEquals(got
, self
.teststr
+ "\n")
122 w
, r
= os
.popen4(self
.cmd
)
123 self
.validate_output(self
.teststr
, self
.expected
, r
, w
)
127 run_unittest(Popen2Test
)
129 if __name__
== "__main__":