home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import unittest
- import sys
-
- class SimpleTypesTestCase(unittest.TestCase):
-
- def setUp(self):
- import ctypes
-
- try:
- set_conversion_mode = set_conversion_mode
- import _ctypes
- except ImportError:
- pass
-
- self.prev_conv_mode = set_conversion_mode('ascii', 'strict')
-
-
- def tearDown(self):
-
- try:
- set_conversion_mode = set_conversion_mode
- import _ctypes
- except ImportError:
- pass
-
- set_conversion_mode(*self.prev_conv_mode)
-
-
- def test_subclasses(self):
- c_void_p = c_void_p
- c_char_p = c_char_p
- import ctypes
-
- class CVOIDP(c_void_p):
-
- def from_param(cls, value):
- return value * 2
-
- from_param = classmethod(from_param)
-
-
- class CCHARP(c_char_p):
-
- def from_param(cls, value):
- return value * 4
-
- from_param = classmethod(from_param)
-
- self.failUnlessEqual(CVOIDP.from_param('abc'), 'abcabc')
- self.failUnlessEqual(CCHARP.from_param('abc'), 'abcabcabcabc')
-
- try:
- c_wchar_p = c_wchar_p
- import ctypes
- except ImportError:
- return None
-
-
- class CWCHARP(c_wchar_p):
-
- def from_param(cls, value):
- return value * 3
-
- from_param = classmethod(from_param)
-
- self.failUnlessEqual(CWCHARP.from_param('abc'), 'abcabcabc')
-
-
- def test_cstrings(self):
- c_char_p = c_char_p
- byref = byref
- import ctypes
- s = '123'
- self.failUnless(c_char_p.from_param(s)._obj is s)
- self.failUnlessEqual(c_char_p.from_param(u'123')._obj, '123')
- self.assertRaises(UnicodeEncodeError, c_char_p.from_param, u'123├┐')
- self.assertRaises(TypeError, c_char_p.from_param, 42)
- a = c_char_p('123')
- self.failUnless(c_char_p.from_param(a) is a)
-
-
- def test_cw_strings(self):
- byref = byref
- import ctypes
-
- try:
- c_wchar_p = c_wchar_p
- import ctypes
- except ImportError:
- return None
-
- s = u'123'
- if sys.platform == 'win32':
- self.failUnless(c_wchar_p.from_param(s)._obj is s)
- self.assertRaises(TypeError, c_wchar_p.from_param, 42)
- self.failUnlessEqual(c_wchar_p.from_param('123')._obj, u'123')
-
- self.assertRaises(UnicodeDecodeError, c_wchar_p.from_param, '123\xff')
- pa = c_wchar_p.from_param(c_wchar_p(u'123'))
- self.failUnlessEqual(type(pa), c_wchar_p)
-
-
- def test_int_pointers(self):
- c_short = c_short
- c_uint = c_uint
- c_int = c_int
- c_long = c_long
- POINTER = POINTER
- pointer = pointer
- import ctypes
- LPINT = POINTER(c_int)
- x = LPINT.from_param(pointer(c_int(42)))
- self.failUnlessEqual(x.contents.value, 42)
- self.failUnlessEqual(LPINT(c_int(42)).contents.value, 42)
- self.assertEqual(LPINT.from_param(None), None)
- if c_int != c_long:
- self.assertRaises(TypeError, LPINT.from_param, pointer(c_long(42)))
-
- self.assertRaises(TypeError, LPINT.from_param, pointer(c_uint(42)))
- self.assertRaises(TypeError, LPINT.from_param, pointer(c_short(42)))
-
-
- def test_byref_pointer(self):
- c_short = c_short
- c_uint = c_uint
- c_int = c_int
- c_long = c_long
- pointer = pointer
- POINTER = POINTER
- byref = byref
- import ctypes
- LPINT = POINTER(c_int)
- LPINT.from_param(byref(c_int(42)))
- self.assertRaises(TypeError, LPINT.from_param, byref(c_short(22)))
- if c_int != c_long:
- self.assertRaises(TypeError, LPINT.from_param, byref(c_long(22)))
-
- self.assertRaises(TypeError, LPINT.from_param, byref(c_uint(22)))
-
-
- def test_byref_pointerpointer(self):
- c_short = c_short
- c_uint = c_uint
- c_int = c_int
- c_long = c_long
- pointer = pointer
- POINTER = POINTER
- byref = byref
- import ctypes
- LPLPINT = POINTER(POINTER(c_int))
- LPLPINT.from_param(byref(pointer(c_int(42))))
- self.assertRaises(TypeError, LPLPINT.from_param, byref(pointer(c_short(22))))
- if c_int != c_long:
- self.assertRaises(TypeError, LPLPINT.from_param, byref(pointer(c_long(22))))
-
- self.assertRaises(TypeError, LPLPINT.from_param, byref(pointer(c_uint(22))))
-
-
- def test_array_pointers(self):
- c_short = c_short
- c_uint = c_uint
- c_int = c_int
- c_long = c_long
- POINTER = POINTER
- import ctypes
- INTARRAY = c_int * 3
- ia = INTARRAY()
- self.failUnlessEqual(len(ia), 3)
- []([ ia[i] for i in range(3) ], [
- 0,
- 0,
- 0])
- LPINT = POINTER(c_int)
- LPINT.from_param(c_int * 3())
- self.assertRaises(TypeError, LPINT.from_param, c_short * 3)
- self.assertRaises(TypeError, LPINT.from_param, c_long * 3)
- self.assertRaises(TypeError, LPINT.from_param, c_uint * 3)
-
-
- def test_noctypes_argtype(self):
- import _ctypes_test
- CDLL = CDLL
- c_void_p = c_void_p
- ArgumentError = ArgumentError
- import ctypes
- func = CDLL(_ctypes_test.__file__)._testfunc_p_p
- func.restype = c_void_p
- self.assertRaises(TypeError, setattr, func, 'argtypes', (object,))
-
- class Adapter(object):
-
- def from_param(cls, obj):
- pass
-
-
- func.argtypes = (Adapter(),)
- self.failUnlessEqual(func(None), None)
- self.failUnlessEqual(func(object()), None)
-
- class Adapter(object):
-
- def from_param(cls, obj):
- return obj
-
-
- func.argtypes = (Adapter(),)
- self.assertRaises(ArgumentError, func, object())
- self.failUnlessEqual(func(c_void_p(42)), 42)
-
- class Adapter(object):
-
- def from_param(cls, obj):
- raise ValueError(obj)
-
-
- func.argtypes = (Adapter(),)
- self.assertRaises(ArgumentError, func, 99)
-
-
- if __name__ == '__main__':
- unittest.main()
-
-