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_fcntl.py < prev    next >
Encoding:
Python Source  |  2011-03-15  |  2.6 KB  |  90 lines

  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()
  90.