functions: revert the function init order to make pylint happy again. See #217
[pygobject.git] / tests / test_pycapi.py
blob969b78e57544ba17ece6947ec576cc2540ff7cdd
1 from __future__ import absolute_import
3 import sys
4 import unittest
5 import ctypes
6 from ctypes import c_void_p, py_object, c_char_p
8 import gi
9 from gi.repository import Gio
12 def get_capi():
14 if not hasattr(ctypes, "pythonapi"):
15 return
17 class CAPI(ctypes.Structure):
18 _fields_ = [
19 ("", c_void_p),
20 ("", c_void_p),
21 ("", c_void_p),
22 ("newgobj", ctypes.PYFUNCTYPE(py_object, c_void_p)),
25 api_obj = gi._gobject._PyGObject_API
26 if sys.version_info[0] == 2:
27 func_type = ctypes.PYFUNCTYPE(c_void_p, py_object)
28 PyCObject_AsVoidPtr = func_type(
29 ('PyCObject_AsVoidPtr', ctypes.pythonapi))
30 ptr = PyCObject_AsVoidPtr(api_obj)
31 else:
32 func_type = ctypes.PYFUNCTYPE(c_void_p, py_object, c_char_p)
33 PyCapsule_GetPointer = func_type(
34 ('PyCapsule_GetPointer', ctypes.pythonapi))
35 ptr = PyCapsule_GetPointer(api_obj, b"gobject._PyGObject_API")
37 ptr = ctypes.cast(ptr, ctypes.POINTER(CAPI))
38 return ptr.contents
41 API = get_capi()
44 @unittest.skipUnless(API, "no pythonapi support")
45 class TestPythonCAPI(unittest.TestCase):
47 def test_newgobj(self):
48 w = Gio.FileInfo()
49 # XXX: ugh :/
50 ptr = int(repr(w).split()[-1].split(")")[0], 16)
52 capi = get_capi()
53 new_w = capi.newgobj(ptr)
54 assert w == new_w