home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_351 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  10.7 KB  |  284 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from ctypes import *
  5. import unittest
  6. import os
  7. import ctypes
  8. import _ctypes_test
  9.  
  10. class BITS(Structure):
  11.     _fields_ = [
  12.         ('A', c_int, 1),
  13.         ('B', c_int, 2),
  14.         ('C', c_int, 3),
  15.         ('D', c_int, 4),
  16.         ('E', c_int, 5),
  17.         ('F', c_int, 6),
  18.         ('G', c_int, 7),
  19.         ('H', c_int, 8),
  20.         ('I', c_int, 9),
  21.         ('M', c_short, 1),
  22.         ('N', c_short, 2),
  23.         ('O', c_short, 3),
  24.         ('P', c_short, 4),
  25.         ('Q', c_short, 5),
  26.         ('R', c_short, 6),
  27.         ('S', c_short, 7)]
  28.  
  29. func = CDLL(_ctypes_test.__file__).unpack_bitfields
  30. func.argtypes = (POINTER(BITS), c_char)
  31.  
  32. class C_Test(unittest.TestCase):
  33.     
  34.     def test_ints(self):
  35.         for i in range(512):
  36.             for name in 'ABCDEFGHI':
  37.                 b = BITS()
  38.                 setattr(b, name, i)
  39.                 self.failUnlessEqual((name, i, getattr(b, name)), (name, i, func(byref(b), name)))
  40.             
  41.         
  42.  
  43.     
  44.     def test_shorts(self):
  45.         for i in range(256):
  46.             for name in 'MNOPQRS':
  47.                 b = BITS()
  48.                 setattr(b, name, i)
  49.                 self.failUnlessEqual((name, i, getattr(b, name)), (name, i, func(byref(b), name)))
  50.             
  51.         
  52.  
  53.  
  54. signed_int_types = (c_byte, c_short, c_int, c_long, c_longlong)
  55. unsigned_int_types = (c_ubyte, c_ushort, c_uint, c_ulong, c_ulonglong)
  56. int_types = unsigned_int_types + signed_int_types
  57.  
  58. class BitFieldTest(unittest.TestCase):
  59.     
  60.     def test_longlong(self):
  61.         
  62.         class X(Structure):
  63.             _fields_ = [
  64.                 ('a', c_longlong, 1),
  65.                 ('b', c_longlong, 62),
  66.                 ('c', c_longlong, 1)]
  67.  
  68.         self.failUnlessEqual(sizeof(X), sizeof(c_longlong))
  69.         x = X()
  70.         (x.a, x.b, x.c) = (-1, 7, -1)
  71.         self.failUnlessEqual((x.a, x.b, x.c), (-1, 7, -1))
  72.  
  73.     
  74.     def test_ulonglong(self):
  75.         
  76.         class X(Structure):
  77.             _fields_ = [
  78.                 ('a', c_ulonglong, 1),
  79.                 ('b', c_ulonglong, 62),
  80.                 ('c', c_ulonglong, 1)]
  81.  
  82.         self.failUnlessEqual(sizeof(X), sizeof(c_longlong))
  83.         x = X()
  84.         self.failUnlessEqual((x.a, x.b, x.c), (0, 0, 0))
  85.         (x.a, x.b, x.c) = (7, 7, 7)
  86.         self.failUnlessEqual((x.a, x.b, x.c), (1, 7, 1))
  87.  
  88.     
  89.     def test_signed(self):
  90.         for X in signed_int_types:
  91.             c_typ = None
  92.             self.failUnlessEqual(sizeof(X), sizeof(c_typ) * 2)
  93.             x = X()
  94.             self.failUnlessEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 0, 0))
  95.             x.a = -1
  96.             self.failUnlessEqual((c_typ, x.a, x.b, x.c), (c_typ, -1, 0, 0))
  97.             (x.a, x.b) = (0, -1)
  98.             self.failUnlessEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, -1, 0))
  99.         
  100.  
  101.     
  102.     def test_unsigned(self):
  103.         for X in unsigned_int_types:
  104.             c_typ = None
  105.             self.failUnlessEqual(sizeof(X), sizeof(c_typ))
  106.             x = X()
  107.             self.failUnlessEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 0, 0))
  108.             x.a = -1
  109.             self.failUnlessEqual((c_typ, x.a, x.b, x.c), (c_typ, 7, 0, 0))
  110.             (x.a, x.b) = (0, -1)
  111.             self.failUnlessEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 7, 0))
  112.         
  113.  
  114.     
  115.     def fail_fields(self, *fields):
  116.         return self.get_except(type(Structure), 'X', (), {
  117.             '_fields_': fields })
  118.  
  119.     
  120.     def test_nonint_types(self):
  121.         result = self.fail_fields(('a', c_char_p, 1))
  122.         self.failUnlessEqual(result, (TypeError, 'bit fields not allowed for type c_char_p'))
  123.         result = self.fail_fields(('a', c_void_p, 1))
  124.         self.failUnlessEqual(result, (TypeError, 'bit fields not allowed for type c_void_p'))
  125.         if c_int != c_long:
  126.             result = self.fail_fields(('a', POINTER(c_int), 1))
  127.             self.failUnlessEqual(result, (TypeError, 'bit fields not allowed for type LP_c_int'))
  128.         
  129.         result = self.fail_fields(('a', c_char, 1))
  130.         self.failUnlessEqual(result, (TypeError, 'bit fields not allowed for type c_char'))
  131.         
  132.         try:
  133.             c_wchar
  134.         except NameError:
  135.             pass
  136.  
  137.         result = self.fail_fields(('a', c_wchar, 1))
  138.         self.failUnlessEqual(result, (TypeError, 'bit fields not allowed for type c_wchar'))
  139.         
  140.         class Dummy(Structure):
  141.             _fields_ = []
  142.  
  143.         result = self.fail_fields(('a', Dummy, 1))
  144.         self.failUnlessEqual(result, (TypeError, 'bit fields not allowed for type Dummy'))
  145.  
  146.     
  147.     def test_single_bitfield_size(self):
  148.         for result in int_types:
  149.             c_typ = None
  150.             self.failUnlessEqual(result, (ValueError, 'number of bits invalid for bit field'))
  151.             result = self.fail_fields(('a', c_typ, 0))
  152.             self.failUnlessEqual(result, (ValueError, 'number of bits invalid for bit field'))
  153.             
  154.             class X((Structure,)):
  155.                 _fields_ = [
  156.                     ('a', c_typ, 1)]
  157.  
  158.             self.failUnlessEqual(sizeof(X), sizeof(c_typ))
  159.             
  160.             class X((Structure,)):
  161.                 _fields_ = [
  162.                     ('a', c_typ, sizeof(c_typ) * 8)]
  163.  
  164.             self.failUnlessEqual(sizeof(X), sizeof(c_typ))
  165.             result = self.fail_fields(('a', c_typ, sizeof(c_typ) * 8 + 1))
  166.             self.failUnlessEqual(result, (ValueError, 'number of bits invalid for bit field'))
  167.         
  168.  
  169.     
  170.     def test_multi_bitfields_size(self):
  171.         
  172.         class X(Structure):
  173.             _fields_ = [
  174.                 ('a', c_short, 1),
  175.                 ('b', c_short, 14),
  176.                 ('c', c_short, 1)]
  177.  
  178.         self.failUnlessEqual(sizeof(X), sizeof(c_short))
  179.         
  180.         class X(Structure):
  181.             _fields_ = [
  182.                 ('a', c_short, 1),
  183.                 ('a1', c_short),
  184.                 ('b', c_short, 14),
  185.                 ('c', c_short, 1)]
  186.  
  187.         self.failUnlessEqual(sizeof(X), sizeof(c_short) * 3)
  188.         self.failUnlessEqual(X.a.offset, 0)
  189.         self.failUnlessEqual(X.a1.offset, sizeof(c_short))
  190.         self.failUnlessEqual(X.b.offset, sizeof(c_short) * 2)
  191.         self.failUnlessEqual(X.c.offset, sizeof(c_short) * 2)
  192.         
  193.         class X(Structure):
  194.             _fields_ = [
  195.                 ('a', c_short, 3),
  196.                 ('b', c_short, 14),
  197.                 ('c', c_short, 14)]
  198.  
  199.         self.failUnlessEqual(sizeof(X), sizeof(c_short) * 3)
  200.         self.failUnlessEqual(X.a.offset, sizeof(c_short) * 0)
  201.         self.failUnlessEqual(X.b.offset, sizeof(c_short) * 1)
  202.         self.failUnlessEqual(X.c.offset, sizeof(c_short) * 2)
  203.  
  204.     
  205.     def get_except(self, func, *args, **kw):
  206.         
  207.         try:
  208.             func(*args, **kw)
  209.         except Exception:
  210.             detail = None
  211.             return (detail.__class__, str(detail))
  212.  
  213.  
  214.     
  215.     def test_mixed_1(self):
  216.         
  217.         class X(Structure):
  218.             _fields_ = [
  219.                 ('a', c_byte, 4),
  220.                 ('b', c_int, 4)]
  221.  
  222.         if os.name in ('nt', 'ce'):
  223.             self.failUnlessEqual(sizeof(X), sizeof(c_int) * 2)
  224.         else:
  225.             self.failUnlessEqual(sizeof(X), sizeof(c_int))
  226.  
  227.     
  228.     def test_mixed_2(self):
  229.         
  230.         class X(Structure):
  231.             _fields_ = [
  232.                 ('a', c_byte, 4),
  233.                 ('b', c_int, 32)]
  234.  
  235.         self.failUnlessEqual(sizeof(X), sizeof(c_int) * 2)
  236.  
  237.     
  238.     def test_mixed_3(self):
  239.         
  240.         class X(Structure):
  241.             _fields_ = [
  242.                 ('a', c_byte, 4),
  243.                 ('b', c_ubyte, 4)]
  244.  
  245.         self.failUnlessEqual(sizeof(X), sizeof(c_byte))
  246.  
  247.     
  248.     def test_mixed_4(self):
  249.         
  250.         class X(Structure):
  251.             _fields_ = [
  252.                 ('a', c_short, 4),
  253.                 ('b', c_short, 4),
  254.                 ('c', c_int, 24),
  255.                 ('d', c_short, 4),
  256.                 ('e', c_short, 4),
  257.                 ('f', c_int, 24)]
  258.  
  259.         if os.name in ('nt', 'ce'):
  260.             self.failUnlessEqual(sizeof(X), sizeof(c_int) * 4)
  261.         else:
  262.             self.failUnlessEqual(sizeof(X), sizeof(c_int) * 2)
  263.  
  264.     
  265.     def test_anon_bitfields(self):
  266.         
  267.         class X(Structure):
  268.             _fields_ = [
  269.                 ('a', c_byte, 4),
  270.                 ('b', c_ubyte, 4)]
  271.  
  272.         
  273.         class Y((Structure,)):
  274.             _anonymous_ = [
  275.                 '_']
  276.             _fields_ = [
  277.                 ('_', X)]
  278.  
  279.  
  280.  
  281. if __name__ == '__main__':
  282.     unittest.main()
  283.  
  284.