symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/test_ioctl.py
changeset 1 2fb8b9db1c86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/test_ioctl.py	Fri Jul 31 15:01:17 2009 +0100
@@ -0,0 +1,67 @@
+import unittest
+from test.test_support import TestSkipped, run_unittest
+import os, struct
+try:
+    import fcntl, termios
+except ImportError:
+    raise TestSkipped("No fcntl or termios module")
+if not hasattr(termios,'TIOCGPGRP'):
+    raise TestSkipped("termios module doesn't have TIOCGPGRP")
+
+try:
+    tty = open("/dev/tty", "r")
+    tty.close()
+except IOError:
+    raise TestSkipped("Unable to open /dev/tty")
+
+try:
+    import pty
+except ImportError:
+    pty = None
+
+class IoctlTests(unittest.TestCase):
+    def test_ioctl(self):
+        # If this process has been put into the background, TIOCGPGRP returns
+        # the session ID instead of the process group id.
+        ids = (os.getpgrp(), os.getsid(0))
+        tty = open("/dev/tty", "r")
+        r = fcntl.ioctl(tty, termios.TIOCGPGRP, "    ")
+        rpgrp = struct.unpack("i", r)[0]
+        self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
+
+    def test_ioctl_mutate(self):
+        import array
+        buf = array.array('i', [0])
+        ids = (os.getpgrp(), os.getsid(0))
+        tty = open("/dev/tty", "r")
+        r = fcntl.ioctl(tty, termios.TIOCGPGRP, buf, 1)
+        rpgrp = buf[0]
+        self.assertEquals(r, 0)
+        self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
+
+    def test_ioctl_signed_unsigned_code_param(self):
+        if not pty:
+            raise TestSkipped('pty module required')
+        mfd, sfd = pty.openpty()
+        try:
+            if termios.TIOCSWINSZ < 0:
+                set_winsz_opcode_maybe_neg = termios.TIOCSWINSZ
+                set_winsz_opcode_pos = termios.TIOCSWINSZ & 0xffffffffL
+            else:
+                set_winsz_opcode_pos = termios.TIOCSWINSZ
+                set_winsz_opcode_maybe_neg, = struct.unpack("i",
+                        struct.pack("I", termios.TIOCSWINSZ))
+
+            our_winsz = struct.pack("HHHH",80,25,0,0)
+            # test both with a positive and potentially negative ioctl code
+            new_winsz = fcntl.ioctl(mfd, set_winsz_opcode_pos, our_winsz)
+            new_winsz = fcntl.ioctl(mfd, set_winsz_opcode_maybe_neg, our_winsz)
+        finally:
+            os.close(mfd)
+            os.close(sfd)
+
+def test_main():
+    run_unittest(IoctlTests)
+
+if __name__ == "__main__":
+    test_main()