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_ioctl.py < prev    next >
Encoding:
Python Source  |  2011-03-15  |  2.2 KB  |  68 lines

  1. import unittest
  2. from test.test_support import TestSkipped, run_unittest
  3. import os, struct
  4. try:
  5.     import fcntl, termios
  6. except ImportError:
  7.     raise TestSkipped("No fcntl or termios module")
  8. if not hasattr(termios,'TIOCGPGRP'):
  9.     raise TestSkipped("termios module doesn't have TIOCGPGRP")
  10.  
  11. try:
  12.     tty = open("/dev/tty", "r")
  13.     tty.close()
  14. except IOError:
  15.     raise TestSkipped("Unable to open /dev/tty")
  16.  
  17. try:
  18.     import pty
  19. except ImportError:
  20.     pty = None
  21.  
  22. class IoctlTests(unittest.TestCase):
  23.     def test_ioctl(self):
  24.         # If this process has been put into the background, TIOCGPGRP returns
  25.         # the session ID instead of the process group id.
  26.         ids = (os.getpgrp(), os.getsid(0))
  27.         tty = open("/dev/tty", "r")
  28.         r = fcntl.ioctl(tty, termios.TIOCGPGRP, "    ")
  29.         rpgrp = struct.unpack("i", r)[0]
  30.         self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
  31.  
  32.     def test_ioctl_mutate(self):
  33.         import array
  34.         buf = array.array('i', [0])
  35.         ids = (os.getpgrp(), os.getsid(0))
  36.         tty = open("/dev/tty", "r")
  37.         r = fcntl.ioctl(tty, termios.TIOCGPGRP, buf, 1)
  38.         rpgrp = buf[0]
  39.         self.assertEquals(r, 0)
  40.         self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
  41.  
  42.     def test_ioctl_signed_unsigned_code_param(self):
  43.         if not pty:
  44.             raise TestSkipped('pty module required')
  45.         mfd, sfd = pty.openpty()
  46.         try:
  47.             if termios.TIOCSWINSZ < 0:
  48.                 set_winsz_opcode_maybe_neg = termios.TIOCSWINSZ
  49.                 set_winsz_opcode_pos = termios.TIOCSWINSZ & 0xffffffffL
  50.             else:
  51.                 set_winsz_opcode_pos = termios.TIOCSWINSZ
  52.                 set_winsz_opcode_maybe_neg, = struct.unpack("i",
  53.                         struct.pack("I", termios.TIOCSWINSZ))
  54.  
  55.             our_winsz = struct.pack("HHHH",80,25,0,0)
  56.             # test both with a positive and potentially negative ioctl code
  57.             new_winsz = fcntl.ioctl(mfd, set_winsz_opcode_pos, our_winsz)
  58.             new_winsz = fcntl.ioctl(mfd, set_winsz_opcode_maybe_neg, our_winsz)
  59.         finally:
  60.             os.close(mfd)
  61.             os.close(sfd)
  62.  
  63. def test_main():
  64.     run_unittest(IoctlTests)
  65.  
  66. if __name__ == "__main__":
  67.     test_main()
  68.