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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from ctypes import *
  5. import sys
  6. import unittest
  7.  
  8. try:
  9.     WINFUNCTYPE
  10. except NameError:
  11.     WINFUNCTYPE = CFUNCTYPE
  12.  
  13. import _ctypes_test
  14. dll = CDLL(_ctypes_test.__file__)
  15. if sys.platform == 'win32':
  16.     windll = WinDLL(_ctypes_test.__file__)
  17.  
  18.  
  19. class POINT(Structure):
  20.     _fields_ = [
  21.         ('x', c_int),
  22.         ('y', c_int)]
  23.  
  24.  
  25. class RECT(Structure):
  26.     _fields_ = [
  27.         ('left', c_int),
  28.         ('top', c_int),
  29.         ('right', c_int),
  30.         ('bottom', c_int)]
  31.  
  32.  
  33. class FunctionTestCase(unittest.TestCase):
  34.     
  35.     def test_mro(self):
  36.         
  37.         try:
  38.             
  39.             class X(object, Array):
  40.                 _length_ = 5
  41.                 _type_ = 'i'
  42.  
  43.         except TypeError:
  44.             pass
  45.  
  46.         _Pointer = _Pointer
  47.         import _ctypes
  48.         
  49.         try:
  50.             
  51.             class X(object, _Pointer):
  52.                 pass
  53.  
  54.         except TypeError:
  55.             pass
  56.  
  57.         _SimpleCData = _SimpleCData
  58.         import _ctypes
  59.         
  60.         try:
  61.             
  62.             class X(object, _SimpleCData):
  63.                 _type_ = 'i'
  64.  
  65.         except TypeError:
  66.             pass
  67.  
  68.         
  69.         try:
  70.             
  71.             class X(object, Structure):
  72.                 _fields_ = []
  73.  
  74.         except TypeError:
  75.             pass
  76.  
  77.  
  78.     
  79.     def test_wchar_parm(self):
  80.         
  81.         try:
  82.             c_wchar
  83.         except NameError:
  84.             return None
  85.  
  86.         f = dll._testfunc_i_bhilfd
  87.         f.argtypes = [
  88.             c_byte,
  89.             c_wchar,
  90.             c_int,
  91.             c_long,
  92.             c_float,
  93.             c_double]
  94.         result = f(1, u'x', 3, 4, 5, 6)
  95.         self.failUnlessEqual(result, 139)
  96.         self.failUnlessEqual(type(result), int)
  97.  
  98.     
  99.     def test_wchar_result(self):
  100.         
  101.         try:
  102.             c_wchar
  103.         except NameError:
  104.             return None
  105.  
  106.         f = dll._testfunc_i_bhilfd
  107.         f.argtypes = [
  108.             c_byte,
  109.             c_short,
  110.             c_int,
  111.             c_long,
  112.             c_float,
  113.             c_double]
  114.         f.restype = c_wchar
  115.         result = f(0, 0, 0, 0, 0, 0)
  116.         self.failUnlessEqual(result, u'\x00')
  117.  
  118.     
  119.     def test_voidresult(self):
  120.         f = dll._testfunc_v
  121.         f.restype = None
  122.         f.argtypes = [
  123.             c_int,
  124.             c_int,
  125.             POINTER(c_int)]
  126.         result = c_int()
  127.         self.failUnlessEqual(None, f(1, 2, byref(result)))
  128.         self.failUnlessEqual(result.value, 3)
  129.  
  130.     
  131.     def test_intresult(self):
  132.         f = dll._testfunc_i_bhilfd
  133.         f.argtypes = [
  134.             c_byte,
  135.             c_short,
  136.             c_int,
  137.             c_long,
  138.             c_float,
  139.             c_double]
  140.         f.restype = c_int
  141.         result = f(1, 2, 3, 4, 5, 6)
  142.         self.failUnlessEqual(result, 21)
  143.         self.failUnlessEqual(type(result), int)
  144.         result = f(-1, -2, -3, -4, -5, -6)
  145.         self.failUnlessEqual(result, -21)
  146.         self.failUnlessEqual(type(result), int)
  147.         f.restype = c_short
  148.         result = f(1, 2, 3, 4, 5, 6)
  149.         self.failUnlessEqual(result, 21)
  150.         self.failUnlessEqual(type(result), int)
  151.         result = f(1, 2, 3, 65540, 5, 6)
  152.         self.failUnlessEqual(result, 21)
  153.         self.failUnlessEqual(type(result), int)
  154.         self.assertRaises(TypeError, setattr, f, 'restype', 'i')
  155.  
  156.     
  157.     def test_floatresult(self):
  158.         f = dll._testfunc_f_bhilfd
  159.         f.argtypes = [
  160.             c_byte,
  161.             c_short,
  162.             c_int,
  163.             c_long,
  164.             c_float,
  165.             c_double]
  166.         f.restype = c_float
  167.         result = f(1, 2, 3, 4, 5, 6)
  168.         self.failUnlessEqual(result, 21)
  169.         self.failUnlessEqual(type(result), float)
  170.         result = f(-1, -2, -3, -4, -5, -6)
  171.         self.failUnlessEqual(result, -21)
  172.         self.failUnlessEqual(type(result), float)
  173.  
  174.     
  175.     def test_doubleresult(self):
  176.         f = dll._testfunc_d_bhilfd
  177.         f.argtypes = [
  178.             c_byte,
  179.             c_short,
  180.             c_int,
  181.             c_long,
  182.             c_float,
  183.             c_double]
  184.         f.restype = c_double
  185.         result = f(1, 2, 3, 4, 5, 6)
  186.         self.failUnlessEqual(result, 21)
  187.         self.failUnlessEqual(type(result), float)
  188.         result = f(-1, -2, -3, -4, -5, -6)
  189.         self.failUnlessEqual(result, -21)
  190.         self.failUnlessEqual(type(result), float)
  191.  
  192.     
  193.     def test_longdoubleresult(self):
  194.         f = dll._testfunc_D_bhilfD
  195.         f.argtypes = [
  196.             c_byte,
  197.             c_short,
  198.             c_int,
  199.             c_long,
  200.             c_float,
  201.             c_longdouble]
  202.         f.restype = c_longdouble
  203.         result = f(1, 2, 3, 4, 5, 6)
  204.         self.failUnlessEqual(result, 21)
  205.         self.failUnlessEqual(type(result), float)
  206.         result = f(-1, -2, -3, -4, -5, -6)
  207.         self.failUnlessEqual(result, -21)
  208.         self.failUnlessEqual(type(result), float)
  209.  
  210.     
  211.     def test_longlongresult(self):
  212.         
  213.         try:
  214.             c_longlong
  215.         except NameError:
  216.             return None
  217.  
  218.         f = dll._testfunc_q_bhilfd
  219.         f.restype = c_longlong
  220.         f.argtypes = [
  221.             c_byte,
  222.             c_short,
  223.             c_int,
  224.             c_long,
  225.             c_float,
  226.             c_double]
  227.         result = f(1, 2, 3, 4, 5, 6)
  228.         self.failUnlessEqual(result, 21)
  229.         f = dll._testfunc_q_bhilfdq
  230.         f.restype = c_longlong
  231.         f.argtypes = [
  232.             c_byte,
  233.             c_short,
  234.             c_int,
  235.             c_long,
  236.             c_float,
  237.             c_double,
  238.             c_longlong]
  239.         result = f(1, 2, 3, 4, 5, 6, 21)
  240.         self.failUnlessEqual(result, 42)
  241.  
  242.     
  243.     def test_stringresult(self):
  244.         f = dll._testfunc_p_p
  245.         f.argtypes = None
  246.         f.restype = c_char_p
  247.         result = f('123')
  248.         self.failUnlessEqual(result, '123')
  249.         result = f(None)
  250.         self.failUnlessEqual(result, None)
  251.  
  252.     
  253.     def test_pointers(self):
  254.         f = dll._testfunc_p_p
  255.         f.restype = POINTER(c_int)
  256.         f.argtypes = [
  257.             POINTER(c_int)]
  258.         v = c_int(42)
  259.         self.failUnlessEqual(pointer(v).contents.value, 42)
  260.         result = f(pointer(v))
  261.         self.failUnlessEqual(type(result), POINTER(c_int))
  262.         self.failUnlessEqual(result.contents.value, 42)
  263.         result = f(pointer(v))
  264.         self.failUnlessEqual(result.contents.value, v.value)
  265.         p = pointer(c_int(99))
  266.         result = f(p)
  267.         self.failUnlessEqual(result.contents.value, 99)
  268.         arg = byref(v)
  269.         result = f(arg)
  270.         self.failIfEqual(result.contents, v.value)
  271.         self.assertRaises(ArgumentError, f, byref(c_short(22)))
  272.         result = f(byref(c_int(99)))
  273.         self.failIfEqual(result.contents, 99)
  274.  
  275.     
  276.     def test_errors(self):
  277.         f = dll._testfunc_p_p
  278.         f.restype = c_int
  279.         
  280.         class X(Structure):
  281.             _fields_ = [
  282.                 ('y', c_int)]
  283.  
  284.         self.assertRaises(TypeError, f, X())
  285.  
  286.     
  287.     def test_shorts(self):
  288.         f = dll._testfunc_callback_i_if
  289.         args = []
  290.         expected = [
  291.             262144,
  292.             131072,
  293.             65536,
  294.             32768,
  295.             16384,
  296.             8192,
  297.             4096,
  298.             2048,
  299.             1024,
  300.             512,
  301.             256,
  302.             128,
  303.             64,
  304.             32,
  305.             16,
  306.             8,
  307.             4,
  308.             2,
  309.             1]
  310.         
  311.         def callback(v):
  312.             args.append(v)
  313.             return v
  314.  
  315.         CallBack = CFUNCTYPE(c_int, c_int)
  316.         cb = CallBack(callback)
  317.         f(262144, cb)
  318.         self.failUnlessEqual(args, expected)
  319.  
  320.     
  321.     def test_callbacks(self):
  322.         f = dll._testfunc_callback_i_if
  323.         f.restype = c_int
  324.         MyCallback = CFUNCTYPE(c_int, c_int)
  325.         
  326.         def callback(value):
  327.             return value
  328.  
  329.         cb = MyCallback(callback)
  330.         result = f(-10, cb)
  331.         self.failUnlessEqual(result, -18)
  332.         f.argtypes = [
  333.             c_int,
  334.             MyCallback]
  335.         cb = MyCallback(callback)
  336.         result = f(-10, cb)
  337.         self.failUnlessEqual(result, -18)
  338.         AnotherCallback = WINFUNCTYPE(c_int, c_int, c_int, c_int, c_int)
  339.         cb = AnotherCallback(callback)
  340.         self.assertRaises(ArgumentError, f, -10, cb)
  341.  
  342.     
  343.     def test_callbacks_2(self):
  344.         f = dll._testfunc_callback_i_if
  345.         f.restype = c_int
  346.         MyCallback = CFUNCTYPE(c_int, c_int)
  347.         f.argtypes = [
  348.             c_int,
  349.             MyCallback]
  350.         
  351.         def callback(value):
  352.             self.failUnlessEqual(type(value), int)
  353.             return value
  354.  
  355.         cb = MyCallback(callback)
  356.         result = f(-10, cb)
  357.         self.failUnlessEqual(result, -18)
  358.  
  359.     
  360.     def test_longlong_callbacks(self):
  361.         f = dll._testfunc_callback_q_qf
  362.         f.restype = c_longlong
  363.         MyCallback = CFUNCTYPE(c_longlong, c_longlong)
  364.         f.argtypes = [
  365.             c_longlong,
  366.             MyCallback]
  367.         
  368.         def callback(value):
  369.             self.failUnless(isinstance(value, (int, long)))
  370.             return value & 2147483647
  371.  
  372.         cb = MyCallback(callback)
  373.         self.failUnlessEqual(0x3294A1FF3L, f(0xE8D4A51000L, cb))
  374.  
  375.     
  376.     def test_errors(self):
  377.         self.assertRaises(AttributeError, getattr, dll, '_xxx_yyy')
  378.         self.assertRaises(ValueError, c_int.in_dll, dll, '_xxx_yyy')
  379.  
  380.     
  381.     def test_byval(self):
  382.         ptin = POINT(1, 2)
  383.         ptout = POINT()
  384.         result = dll._testfunc_byval(ptin, byref(ptout))
  385.         got = (result, ptout.x, ptout.y)
  386.         expected = (3, 1, 2)
  387.         self.failUnlessEqual(got, expected)
  388.         ptin = POINT(101, 102)
  389.         ptout = POINT()
  390.         dll._testfunc_byval.argtypes = (POINT, POINTER(POINT))
  391.         dll._testfunc_byval.restype = c_int
  392.         result = dll._testfunc_byval(ptin, byref(ptout))
  393.         got = (result, ptout.x, ptout.y)
  394.         expected = (203, 101, 102)
  395.         self.failUnlessEqual(got, expected)
  396.  
  397.     
  398.     def test_struct_return_2H(self):
  399.         
  400.         class S2H(Structure):
  401.             _fields_ = [
  402.                 ('x', c_short),
  403.                 ('y', c_short)]
  404.  
  405.         dll.ret_2h_func.restype = S2H
  406.         dll.ret_2h_func.argtypes = [
  407.             S2H]
  408.         inp = S2H(99, 88)
  409.         s2h = dll.ret_2h_func(inp)
  410.         self.failUnlessEqual((s2h.x, s2h.y), (198, 264))
  411.  
  412.     if sys.platform == 'win32':
  413.         
  414.         def test_struct_return_2H_stdcall(self):
  415.             
  416.             class S2H(Structure):
  417.                 _fields_ = [
  418.                     ('x', c_short),
  419.                     ('y', c_short)]
  420.  
  421.             windll.s_ret_2h_func.restype = S2H
  422.             windll.s_ret_2h_func.argtypes = [
  423.                 S2H]
  424.             s2h = windll.s_ret_2h_func(S2H(99, 88))
  425.             self.failUnlessEqual((s2h.x, s2h.y), (198, 264))
  426.  
  427.     
  428.     
  429.     def test_struct_return_8H(self):
  430.         
  431.         class S8I(Structure):
  432.             _fields_ = [
  433.                 ('a', c_int),
  434.                 ('b', c_int),
  435.                 ('c', c_int),
  436.                 ('d', c_int),
  437.                 ('e', c_int),
  438.                 ('f', c_int),
  439.                 ('g', c_int),
  440.                 ('h', c_int)]
  441.  
  442.         dll.ret_8i_func.restype = S8I
  443.         dll.ret_8i_func.argtypes = [
  444.             S8I]
  445.         inp = S8I(9, 8, 7, 6, 5, 4, 3, 2)
  446.         s8i = dll.ret_8i_func(inp)
  447.         self.failUnlessEqual((s8i.a, s8i.b, s8i.c, s8i.d, s8i.e, s8i.f, s8i.g, s8i.h), (18, 24, 28, 30, 30, 28, 24, 18))
  448.  
  449.     if sys.platform == 'win32':
  450.         
  451.         def test_struct_return_8H_stdcall(self):
  452.             
  453.             class S8I(Structure):
  454.                 _fields_ = [
  455.                     ('a', c_int),
  456.                     ('b', c_int),
  457.                     ('c', c_int),
  458.                     ('d', c_int),
  459.                     ('e', c_int),
  460.                     ('f', c_int),
  461.                     ('g', c_int),
  462.                     ('h', c_int)]
  463.  
  464.             windll.s_ret_8i_func.restype = S8I
  465.             windll.s_ret_8i_func.argtypes = [
  466.                 S8I]
  467.             inp = S8I(9, 8, 7, 6, 5, 4, 3, 2)
  468.             s8i = windll.s_ret_8i_func(inp)
  469.             self.failUnlessEqual((s8i.a, s8i.b, s8i.c, s8i.d, s8i.e, s8i.f, s8i.g, s8i.h), (18, 24, 28, 30, 30, 28, 24, 18))
  470.  
  471.     
  472.     
  473.     def test_sf1651235(self):
  474.         proto = CFUNCTYPE(c_int, RECT, POINT)
  475.         
  476.         def callback(*args):
  477.             return 0
  478.  
  479.         callback = proto(callback)
  480.         self.failUnlessRaises((ArgumentError,), (lambda : callback((1, 2, 3, 4), POINT())))
  481.  
  482.  
  483. if __name__ == '__main__':
  484.     unittest.main()
  485.  
  486.