symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/test_fcntl.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 """Test program for the fcntl C module.
       
     2 
       
     3 OS/2+EMX doesn't support the file locking operations.
       
     4 
       
     5 """
       
     6 import fcntl
       
     7 import os
       
     8 import struct
       
     9 import sys
       
    10 import unittest
       
    11 from test.test_support import verbose, TESTFN, unlink, run_unittest
       
    12 
       
    13 # TODO - Write tests for flock() and lockf().
       
    14 
       
    15 def get_lockdata():
       
    16     if sys.platform.startswith('atheos'):
       
    17         start_len = "qq"
       
    18     else:
       
    19         try:
       
    20             os.O_LARGEFILE
       
    21         except AttributeError:
       
    22             start_len = "ll"
       
    23         else:
       
    24             start_len = "qq"
       
    25 
       
    26     if sys.platform in ('netbsd1', 'netbsd2', 'netbsd3',
       
    27                         'Darwin1.2', 'darwin',
       
    28                         'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
       
    29                         'freebsd6', 'freebsd7', 'freebsd8',
       
    30                         'bsdos2', 'bsdos3', 'bsdos4',
       
    31                         'openbsd', 'openbsd2', 'openbsd3', 'openbsd4'):
       
    32         if struct.calcsize('l') == 8:
       
    33             off_t = 'l'
       
    34             pid_t = 'i'
       
    35         else:
       
    36             off_t = 'lxxxx'
       
    37             pid_t = 'l'
       
    38         lockdata = struct.pack(off_t + off_t + pid_t + 'hh', 0, 0, 0,
       
    39                                fcntl.F_WRLCK, 0)
       
    40     elif sys.platform in ['aix3', 'aix4', 'hp-uxB', 'unixware7']:
       
    41         lockdata = struct.pack('hhlllii', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
       
    42     elif sys.platform in ['os2emx']:
       
    43         lockdata = None
       
    44     else:
       
    45         lockdata = struct.pack('hh'+start_len+'hh', fcntl.F_WRLCK, 0, 0, 0, 0, 0)
       
    46     if lockdata:
       
    47         if verbose:
       
    48             print 'struct.pack: ', repr(lockdata)
       
    49     return lockdata
       
    50 
       
    51 lockdata = get_lockdata()
       
    52 
       
    53 
       
    54 class TestFcntl(unittest.TestCase):
       
    55 
       
    56     def setUp(self):
       
    57         self.f = None
       
    58 
       
    59     def tearDown(self):
       
    60         if not self.f.closed:
       
    61             self.f.close()
       
    62         unlink(TESTFN)
       
    63 
       
    64     def test_fcntl_fileno(self):
       
    65         # the example from the library docs
       
    66         self.f = open(TESTFN, 'w')
       
    67         rv = fcntl.fcntl(self.f.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)
       
    68         if verbose:
       
    69             print 'Status from fcntl with O_NONBLOCK: ', rv
       
    70         if sys.platform not in ['os2emx']:
       
    71             rv = fcntl.fcntl(self.f.fileno(), fcntl.F_SETLKW, lockdata)
       
    72             if verbose:
       
    73                 print 'String from fcntl with F_SETLKW: ', repr(rv)
       
    74         self.f.close()
       
    75 
       
    76     def test_fcntl_file_descriptor(self):
       
    77         # again, but pass the file rather than numeric descriptor
       
    78         self.f = open(TESTFN, 'w')
       
    79         rv = fcntl.fcntl(self.f, fcntl.F_SETFL, os.O_NONBLOCK)
       
    80         if sys.platform not in ['os2emx']:
       
    81             rv = fcntl.fcntl(self.f, fcntl.F_SETLKW, lockdata)
       
    82         self.f.close()
       
    83 
       
    84 
       
    85 def test_main():
       
    86     run_unittest(TestFcntl)
       
    87 
       
    88 if __name__ == '__main__':
       
    89     test_main()