These files are a subset of the python-2.7.2.tgz distribution from python.org. Changed files from PyMod-2.7.2 have been copied into the corresponding directories of this tree, replacing the original files in the distribution. Signed-off-by: daryl.mcdaniel@intel.com git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13197 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			131 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #! /usr/bin/env python
 | |
| """Test script for popen2.py"""
 | |
| 
 | |
| import warnings
 | |
| warnings.filterwarnings("ignore", ".*popen2 module is deprecated.*",
 | |
|                         DeprecationWarning)
 | |
| warnings.filterwarnings("ignore", "os\.popen. is deprecated.*",
 | |
|                         DeprecationWarning)
 | |
| 
 | |
| import os
 | |
| import sys
 | |
| import unittest
 | |
| import popen2
 | |
| 
 | |
| from test.test_support import run_unittest, reap_children
 | |
| 
 | |
| if sys.platform[:4] == 'beos' or sys.platform[:6] == 'atheos':
 | |
|     #  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 unittest.SkipTest("popen2() doesn't work on " + sys.platform)
 | |
| 
 | |
| # if we don't have os.popen, check that
 | |
| # we have os.fork.  if not, skip the test
 | |
| # (by raising an ImportError)
 | |
| try:
 | |
|     from os import popen
 | |
|     del popen
 | |
| except ImportError:
 | |
|     from os import fork
 | |
|     del fork
 | |
| 
 | |
| class Popen2Test(unittest.TestCase):
 | |
|     cmd = "cat"
 | |
|     if os.name == "nt":
 | |
|         cmd = "more"
 | |
|     teststr = "ab cd\n"
 | |
|     # "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()
 | |
| 
 | |
|     def setUp(self):
 | |
|         popen2._cleanup()
 | |
|         # When the test runs, there shouldn't be any open pipes
 | |
|         self.assertFalse(popen2._active, "Active pipes when test starts" +
 | |
|             repr([c.cmd for c in popen2._active]))
 | |
| 
 | |
|     def tearDown(self):
 | |
|         for inst in popen2._active:
 | |
|             inst.wait()
 | |
|         popen2._cleanup()
 | |
|         self.assertFalse(popen2._active, "popen2._active not empty")
 | |
|         # The os.popen*() API delegates to the subprocess module (on Unix)
 | |
|         import subprocess
 | |
|         for inst in subprocess._active:
 | |
|             inst.wait()
 | |
|         subprocess._cleanup()
 | |
|         self.assertFalse(subprocess._active, "subprocess._active not empty")
 | |
|         reap_children()
 | |
| 
 | |
|     def validate_output(self, teststr, expected_out, r, w, e=None):
 | |
|         w.write(teststr)
 | |
|         w.close()
 | |
|         got = r.read()
 | |
|         self.assertEqual(expected_out, got.strip(), "wrote %r read %r" %
 | |
|                          (teststr, got))
 | |
| 
 | |
|         if e is not None:
 | |
|             got = e.read()
 | |
|             self.assertFalse(got, "unexpected %r on stderr" % got)
 | |
| 
 | |
|     def test_popen2(self):
 | |
|         r, w = popen2.popen2(self.cmd)
 | |
|         self.validate_output(self.teststr, self.expected, r, w)
 | |
| 
 | |
|     def test_popen3(self):
 | |
|         if os.name == 'posix':
 | |
|             r, w, e = popen2.popen3([self.cmd])
 | |
|             self.validate_output(self.teststr, self.expected, r, w, e)
 | |
| 
 | |
|         r, w, e = popen2.popen3(self.cmd)
 | |
|         self.validate_output(self.teststr, self.expected, r, w, e)
 | |
| 
 | |
|     def test_os_popen2(self):
 | |
|         # same test as test_popen2(), but using the os.popen*() API
 | |
|         if os.name == 'posix':
 | |
|             w, r = os.popen2([self.cmd])
 | |
|             self.validate_output(self.teststr, self.expected, r, w)
 | |
| 
 | |
|             w, r = os.popen2(["echo", self.teststr])
 | |
|             got = r.read()
 | |
|             self.assertEqual(got, self.teststr + "\n")
 | |
| 
 | |
|         w, r = os.popen2(self.cmd)
 | |
|         self.validate_output(self.teststr, self.expected, r, w)
 | |
| 
 | |
|     def test_os_popen3(self):
 | |
|         # same test as test_popen3(), but using the os.popen*() API
 | |
|         if os.name == 'posix':
 | |
|             w, r, e = os.popen3([self.cmd])
 | |
|             self.validate_output(self.teststr, self.expected, r, w, e)
 | |
| 
 | |
|             w, r, e = os.popen3(["echo", self.teststr])
 | |
|             got = r.read()
 | |
|             self.assertEqual(got, self.teststr + "\n")
 | |
|             got = e.read()
 | |
|             self.assertFalse(got, "unexpected %r on stderr" % got)
 | |
| 
 | |
|         w, r, e = os.popen3(self.cmd)
 | |
|         self.validate_output(self.teststr, self.expected, r, w, e)
 | |
| 
 | |
|     def test_os_popen4(self):
 | |
|         if os.name == 'posix':
 | |
|             w, r = os.popen4([self.cmd])
 | |
|             self.validate_output(self.teststr, self.expected, r, w)
 | |
| 
 | |
|             w, r = os.popen4(["echo", self.teststr])
 | |
|             got = r.read()
 | |
|             self.assertEqual(got, self.teststr + "\n")
 | |
| 
 | |
|         w, r = os.popen4(self.cmd)
 | |
|         self.validate_output(self.teststr, self.expected, r, w)
 | |
| 
 | |
| 
 | |
| def test_main():
 | |
|     run_unittest(Popen2Test)
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     test_main()
 |