[Python-checkins] r61375 - in python/trunk: Lib/test/test_fcntl.py Misc/NEWS

brett.cannon python-checkins at python.org
Thu Mar 13 22:09:29 CET 2008


Author: brett.cannon
Date: Thu Mar 13 22:09:28 2008
New Revision: 61375

Modified:
   python/trunk/Lib/test/test_fcntl.py
   python/trunk/Misc/NEWS
Log:
Convert test_fcntl to unittest.

Closes issue #2055. Thanks Giampaolo Rodola.


Modified: python/trunk/Lib/test/test_fcntl.py
==============================================================================
--- python/trunk/Lib/test/test_fcntl.py	(original)
+++ python/trunk/Lib/test/test_fcntl.py	Thu Mar 13 22:09:28 2008
@@ -1,69 +1,89 @@
-#! /usr/bin/env python
 """Test program for the fcntl C module.
-   OS/2+EMX doesn't support the file locking operations.
-   Roger E. Masse
+
+OS/2+EMX doesn't support the file locking operations.
+
 """
 import struct
 import fcntl
 import os, sys
-from test.test_support import verbose, TESTFN
+import unittest
+from test.test_support import verbose, TESTFN, unlink, run_unittest
+
+# TODO - Write tests for ioctl(), flock() and lockf().
 
-filename = TESTFN
 
-try:
-    os.O_LARGEFILE
-except AttributeError:
-    start_len = "ll"
-else:
-    start_len = "qq"
-
-if sys.platform.startswith('atheos'):
-    start_len = "qq"
-
-if sys.platform in ('netbsd1', 'netbsd2', 'netbsd3',
-                    'Darwin1.2', 'darwin',
-                    'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
-                    'freebsd6', 'freebsd7', 'freebsd8',
-                    'bsdos2', 'bsdos3', 'bsdos4',
-                    'openbsd', 'openbsd2', 'openbsd3', 'openbsd4'):
-    if struct.calcsize('l') == 8:
-        off_t = 'l'
-        pid_t = 'i'
+def get_lockdata():
+    if sys.platform.startswith('atheos'):
+        start_len = "qq"
     else:
-        off_t = 'lxxxx'
-        pid_t = 'l'
-    lockdata = struct.pack(off_t+off_t+pid_t+'hh', 0, 0, 0, fcntl.F_WRLCK, 0)
-elif sys.platform in ['aix3', 'aix4', 'hp-uxB', 'unixware7']:
-    lockdata = struct.pack('hhlllii', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
-elif sys.platform in ['os2emx']:
-    lockdata = None
-else:
-    lockdata = struct.pack('hh'+start_len+'hh', fcntl.F_WRLCK, 0, 0, 0, 0, 0)
-if lockdata:
-    if verbose:
-        print 'struct.pack: ', repr(lockdata)
-
-# the example from the library docs
-f = open(filename, 'w')
-rv = fcntl.fcntl(f.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)
-if verbose:
-    print 'Status from fcntl with O_NONBLOCK: ', rv
-
-if sys.platform not in ['os2emx']:
-    rv = fcntl.fcntl(f.fileno(), fcntl.F_SETLKW, lockdata)
-    if verbose:
-        print 'String from fcntl with F_SETLKW: ', repr(rv)
-
-f.close()
-os.unlink(filename)
-
-
-# Again, but pass the file rather than numeric descriptor:
-f = open(filename, 'w')
-rv = fcntl.fcntl(f, fcntl.F_SETFL, os.O_NONBLOCK)
+        try:
+            os.O_LARGEFILE
+        except AttributeError:
+            start_len = "ll"
+        else:
+            start_len = "qq"
+
+    if sys.platform in ('netbsd1', 'netbsd2', 'netbsd3',
+                        'Darwin1.2', 'darwin',
+                        'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
+                        'freebsd6', 'freebsd7', 'freebsd8',
+                        'bsdos2', 'bsdos3', 'bsdos4',
+                        'openbsd', 'openbsd2', 'openbsd3', 'openbsd4'):
+        if struct.calcsize('l') == 8:
+            off_t = 'l'
+            pid_t = 'i'
+        else:
+            off_t = 'lxxxx'
+            pid_t = 'l'
+        lockdata = struct.pack(off_t + off_t + pid_t + 'hh', 0, 0, 0,
+                               fcntl.F_WRLCK, 0)
+    elif sys.platform in ['aix3', 'aix4', 'hp-uxB', 'unixware7']:
+        lockdata = struct.pack('hhlllii', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
+    elif sys.platform in ['os2emx']:
+        lockdata = None
+    else:
+        lockdata = struct.pack('hh'+start_len+'hh', fcntl.F_WRLCK, 0, 0, 0, 0, 0)
+    if lockdata:
+        if verbose:
+            print 'struct.pack: ', repr(lockdata)
+    return lockdata
+
+lockdata = get_lockdata()
+
+
+class TestFcntl(unittest.TestCase):
+
+    def setUp(self):
+        self.f = None
+
+    def tearDown(self):
+        if not self.f.closed:
+            self.f.close()
+        unlink(TESTFN)
+
+    def test_fcntl_fileno(self):
+        # the example from the library docs
+        self.f = open(TESTFN, 'w')
+        rv = fcntl.fcntl(self.f.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)
+        if verbose:
+            print 'Status from fcntl with O_NONBLOCK: ', rv
+        if sys.platform not in ['os2emx']:
+            rv = fcntl.fcntl(self.f.fileno(), fcntl.F_SETLKW, lockdata)
+            if verbose:
+                print 'String from fcntl with F_SETLKW: ', repr(rv)
+        self.f.close()
+
+    def test_fcntl_file_descriptor(self):
+        # again, but pass the file rather than numeric descriptor
+        self.f = open(TESTFN, 'w')
+        rv = fcntl.fcntl(self.f, fcntl.F_SETFL, os.O_NONBLOCK)
+        if sys.platform not in ['os2emx']:
+            rv = fcntl.fcntl(self.f, fcntl.F_SETLKW, lockdata)
+        self.f.close()
+
 
-if sys.platform not in ['os2emx']:
-    rv = fcntl.fcntl(f, fcntl.F_SETLKW, lockdata)
+def test_main():
+    run_unittest(TestFcntl)
 
-f.close()
-os.unlink(filename)
+if __name__ == '__main__':
+    test_main()

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Thu Mar 13 22:09:28 2008
@@ -50,6 +50,8 @@
 Tests
 -----
 
+- Issue #2055: Convert test_fcntl to unittest.
+
 - Issue 1960: Convert test_gdbm to unittest.
 
 - GHOP 294: Convert test_contains, test_crypt, and test_select to unittest.


More information about the Python-checkins mailing list