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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import os
  5. import unittest
  6. from ctypes import *
  7.  
  8. try:
  9.     WINFUNCTYPE
  10. except NameError:
  11.     WINFUNCTYPE = CFUNCTYPE
  12.  
  13. import _ctypes_test
  14. lib = CDLL(_ctypes_test.__file__)
  15.  
  16. class CFuncPtrTestCase(unittest.TestCase):
  17.     
  18.     def test_basic(self):
  19.         X = WINFUNCTYPE(c_int, c_int, c_int)
  20.         
  21.         def func(*args):
  22.             return len(args)
  23.  
  24.         x = X(func)
  25.         self.failUnlessEqual(x.restype, c_int)
  26.         self.failUnlessEqual(x.argtypes, (c_int, c_int))
  27.         self.failUnlessEqual(sizeof(x), sizeof(c_voidp))
  28.         self.failUnlessEqual(sizeof(X), sizeof(c_voidp))
  29.  
  30.     
  31.     def test_first(self):
  32.         StdCallback = WINFUNCTYPE(c_int, c_int, c_int)
  33.         CdeclCallback = CFUNCTYPE(c_int, c_int, c_int)
  34.         
  35.         def func(a, b):
  36.             return a + b
  37.  
  38.         s = StdCallback(func)
  39.         c = CdeclCallback(func)
  40.         self.failUnlessEqual(s(1, 2), 3)
  41.         self.failUnlessEqual(c(1, 2), 3)
  42.         self.failUnlessEqual(c(1, 2, 3, 4, 5, 6), 3)
  43.         if WINFUNCTYPE is not CFUNCTYPE and os.name != 'ce':
  44.             self.assertRaises(TypeError, s, 1, 2, 3)
  45.         
  46.  
  47.     
  48.     def test_structures(self):
  49.         WNDPROC = WINFUNCTYPE(c_long, c_int, c_int, c_int, c_int)
  50.         
  51.         def wndproc(hwnd, msg, wParam, lParam):
  52.             return hwnd + msg + wParam + lParam
  53.  
  54.         HINSTANCE = c_int
  55.         HICON = c_int
  56.         HCURSOR = c_int
  57.         LPCTSTR = c_char_p
  58.         
  59.         class WNDCLASS(None, None, None, 'WNDCLASS', (Structure,)):
  60.             _fields_ = [
  61.                 ('style', c_uint),
  62.                 ('lpfnWndProc', WNDPROC),
  63.                 ('cbClsExtra', c_int),
  64.                 ('cbWndExtra', c_int),
  65.                 ('hInstance', HINSTANCE),
  66.                 ('hIcon', HICON),
  67.                 ('hCursor', HCURSOR),
  68.                 ('lpszMenuName', LPCTSTR),
  69.                 ('lpszClassName', LPCTSTR)]
  70.  
  71.         wndclass = WNDCLASS()
  72.         wndclass.lpfnWndProc = WNDPROC(wndproc)
  73.         WNDPROC_2 = WINFUNCTYPE(c_long, c_int, c_int, c_int, c_int)
  74.         self.failUnless(WNDPROC is WNDPROC_2)
  75.         self.failUnlessEqual(wndclass.lpfnWndProc(1, 2, 3, 4), 10)
  76.         f = wndclass.lpfnWndProc
  77.         del wndclass
  78.         del wndproc
  79.         self.failUnlessEqual(f(10, 11, 12, 13), 46)
  80.  
  81.     
  82.     def test_dllfunctions(self):
  83.         
  84.         def NoNullHandle(value):
  85.             if not value:
  86.                 raise WinError()
  87.             value
  88.             return value
  89.  
  90.         strchr = lib.my_strchr
  91.         strchr.restype = c_char_p
  92.         strchr.argtypes = (c_char_p, c_char)
  93.         self.failUnlessEqual(strchr('abcdefghi', 'b'), 'bcdefghi')
  94.         self.failUnlessEqual(strchr('abcdefghi', 'x'), None)
  95.         strtok = lib.my_strtok
  96.         strtok.restype = c_char_p
  97.         
  98.         def c_string(init):
  99.             size = len(init) + 1
  100.             return c_char * size(*init)
  101.  
  102.         s = 'a\nb\nc'
  103.         b = c_string(s)
  104.         self.failUnlessEqual(strtok(b, '\n'), 'a')
  105.         self.failUnlessEqual(strtok(None, '\n'), 'b')
  106.         self.failUnlessEqual(strtok(None, '\n'), 'c')
  107.         self.failUnlessEqual(strtok(None, '\n'), None)
  108.  
  109.  
  110. if __name__ == '__main__':
  111.     unittest.main()
  112.  
  113.