home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 July / maximum-cd-2011-07.iso / DiscContents / LibO_3.3.2_Win_x86_install_multi.exe / libreoffice1.cab / test_popen2.py < prev    next >
Encoding:
Python Source  |  2011-03-15  |  3.1 KB  |  99 lines

  1. #! /usr/bin/env python
  2. """Test script for popen2.py"""
  3.  
  4. import warnings
  5. warnings.filterwarnings("ignore", ".*popen2 module is deprecated.*",
  6.                         DeprecationWarning)
  7. warnings.filterwarnings("ignore", "os\.popen. is deprecated.*",
  8.                         DeprecationWarning)
  9.  
  10. import os
  11. import sys
  12. import unittest
  13. import popen2
  14.  
  15. from test.test_support import TestSkipped, run_unittest, reap_children
  16.  
  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 TestSkipped("popen2() doesn't work on " + sys.platform)
  22.  
  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)
  26. try:
  27.     from os import popen
  28.     del popen
  29. except ImportError:
  30.     from os import fork
  31.     del fork
  32.  
  33. class Popen2Test(unittest.TestCase):
  34.     cmd = "cat"
  35.     if os.name == "nt":
  36.         cmd = "more"
  37.     teststr = "ab cd\n"
  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()
  42.  
  43.     def setUp(self):
  44.         popen2._cleanup()
  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]))
  48.  
  49.     def tearDown(self):
  50.         for inst in popen2._active:
  51.             inst.wait()
  52.         popen2._cleanup()
  53.         self.assertFalse(popen2._active, "_active not empty")
  54.         reap_children()
  55.  
  56.     def validate_output(self, teststr, expected_out, r, w, e=None):
  57.         w.write(teststr)
  58.         w.close()
  59.         got = r.read()
  60.         self.assertEquals(expected_out, got.strip(), "wrote %r read %r" %
  61.                           (teststr, got))
  62.  
  63.         if e is not None:
  64.             got = e.read()
  65.             self.assertFalse(got, "unexpected %r on stderr" % got)
  66.  
  67.     def test_popen2(self):
  68.         r, w = popen2.popen2(self.cmd)
  69.         self.validate_output(self.teststr, self.expected, r, w)
  70.  
  71.     def test_popen3(self):
  72.         if os.name == 'posix':
  73.             r, w, e = popen2.popen3([self.cmd])
  74.             self.validate_output(self.teststr, self.expected, r, w, e)
  75.  
  76.         r, w, e = popen2.popen3(self.cmd)
  77.         self.validate_output(self.teststr, self.expected, r, w, e)
  78.  
  79.     def test_os_popen2(self):
  80.         # same test as test_popen2(), but using the os.popen*() API
  81.         w, r = os.popen2(self.cmd)
  82.         self.validate_output(self.teststr, self.expected, r, w)
  83.  
  84.     def test_os_popen3(self):
  85.         # same test as test_popen3(), but using the os.popen*() API
  86.         if os.name == 'posix':
  87.             w, r, e = os.popen3([self.cmd])
  88.             self.validate_output(self.teststr, self.expected, r, w, e)
  89.  
  90.         w, r, e = os.popen3(self.cmd)
  91.         self.validate_output(self.teststr, self.expected, r, w, e)
  92.  
  93.  
  94. def test_main():
  95.     run_unittest(Popen2Test)
  96.  
  97. if __name__ == "__main__":
  98.     test_main()
  99.