2 #include <gobject/gmarshal.h>
4 #include "test-thread.h"
5 #include "test-unknown.h"
6 #include "test-floating.h"
8 #include <pyglib-python-compat.h>
10 static PyTypeObject *_PyGObject_Type;
11 #define PyGObject_Type (*_PyGObject_Type)
13 static PyObject * _wrap_TestInterface__do_iface_method(PyObject *cls,
18 test_type_get_type(void)
20 static GType gtype = 0;
28 parent_type = g_type_from_name("PyGObject");
30 g_error("could not get PyGObject from testmodule");
32 type_info = (GTypeInfo *)g_new0(GTypeInfo, 1);
34 g_type_query(parent_type, &query);
35 type_info->class_size = query.class_size;
36 type_info->instance_size = query.instance_size;
38 gtype = g_type_register_static(parent_type,
39 "TestType", type_info, 0);
41 g_error("Could not register TestType");
47 #define TYPE_TEST (test_type_get_type())
50 _wrap_get_test_thread (PyObject * self)
54 test_thread_get_type();
55 g_assert (g_type_is_a (TEST_TYPE_THREAD, G_TYPE_OBJECT));
56 obj = g_object_new (TEST_TYPE_THREAD, NULL);
57 g_assert (obj != NULL);
59 return pygobject_new(obj);
63 _wrap_get_unknown (PyObject * self)
66 obj = g_object_new (TEST_TYPE_UNKNOWN, NULL);
67 return pygobject_new(obj);
71 _wrap_create_test_type (PyObject * self)
75 obj = g_object_new(TYPE_TEST, NULL);
76 rv = pygobject_new(obj);
82 _wrap_test_g_object_new (PyObject * self)
87 obj = g_object_new(g_type_from_name("PyGObject"), NULL);
88 rv = PYGLIB_PyLong_FromLong(obj->ref_count); /* should be == 2 at this point */
95 _wrap_test_interface_iface_method(PyGObject *self, PyObject *args, PyObject *kwargs)
97 static char *kwlist[] = { NULL };
99 if (!PyArg_ParseTupleAndKeywords(args, kwargs,":", kwlist))
102 test_interface_iface_method(TEST_INTERFACE(self->obj));
108 static const PyMethodDef _PyTestInterface_methods[] = {
109 { "iface_method", (PyCFunction)_wrap_test_interface_iface_method, METH_VARARGS|METH_KEYWORDS,
111 { "do_iface_method", (PyCFunction)_wrap_TestInterface__do_iface_method, METH_VARARGS|METH_KEYWORDS|METH_CLASS,
113 { NULL, NULL, 0, NULL }
117 PYGLIB_DEFINE_TYPE("test.Interface", PyTestInterface_Type, PyObject);
120 _wrap_TestInterface__do_iface_method(PyObject *cls, PyObject *args, PyObject *kwargs)
122 TestInterfaceIface *iface;
123 static char *kwlist[] = { "self", NULL };
126 if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!:TestInterface.iface_method", kwlist, &PyTestInterface_Type, &self))
129 iface = g_type_interface_peek(g_type_class_peek(pyg_type_from_object(cls)),
130 TEST_TYPE_INTERFACE);
131 if (iface->iface_method)
132 iface->iface_method(TEST_INTERFACE(self->obj));
134 PyErr_SetString(PyExc_NotImplementedError,
135 "interface method TestInterface.iface_method not implemented");
142 PYGLIB_DEFINE_TYPE("testhelper.Unknown", PyTestUnknown_Type, PyGObject);
145 _wrap_TestInterface__proxy_do_iface_method(TestInterface *self)
147 PyGILState_STATE __py_state;
153 __py_state = pyg_gil_state_ensure();
154 py_self = pygobject_new((GObject *) self);
156 if (PyErr_Occurred())
158 pyg_gil_state_release(__py_state);
161 py_args = PyTuple_New(0);
162 py_method = PyObject_GetAttrString(py_self, "do_iface_method");
164 if (PyErr_Occurred())
168 pyg_gil_state_release(__py_state);
171 py_retval = PyObject_CallObject(py_method, py_args);
173 if (PyErr_Occurred())
175 Py_DECREF(py_method);
178 pyg_gil_state_release(__py_state);
181 if (py_retval != Py_None) {
182 if (PyErr_Occurred())
184 PyErr_SetString(PyExc_TypeError, "retval should be None");
185 Py_DECREF(py_retval);
186 Py_DECREF(py_method);
189 pyg_gil_state_release(__py_state);
193 Py_DECREF(py_retval);
194 Py_DECREF(py_method);
197 pyg_gil_state_release(__py_state);
201 __TestInterface__interface_init(TestInterfaceIface *iface,
202 PyTypeObject *pytype)
204 TestInterfaceIface *parent_iface = g_type_interface_peek_parent(iface);
207 py_method = pytype ? PyObject_GetAttrString((PyObject *) pytype,
208 "do_iface_method") : NULL;
210 if (py_method && !PyObject_TypeCheck(py_method, &PyCFunction_Type)) {
211 iface->iface_method = _wrap_TestInterface__proxy_do_iface_method;
215 iface->iface_method = parent_iface->iface_method;
217 Py_XDECREF(py_method);
221 static const GInterfaceInfo __TestInterface__iinfo = {
222 (GInterfaceInitFunc) __TestInterface__interface_init,
228 PYGLIB_DEFINE_TYPE("testhelper.Floating", PyTestFloating_Type, PyGObject);
230 /* TestOwnedByLibrary */
231 PYGLIB_DEFINE_TYPE("testhelper.OwnedByLibrary", PyTestOwnedByLibrary_Type, PyGObject);
234 _wrap_test_owned_by_library_release (PyGObject *self)
236 test_owned_by_library_release (TEST_OWNED_BY_LIBRARY (self->obj));
240 static const PyMethodDef _PyTestOwnedByLibrary_methods[] = {
241 { "release", (PyCFunction)_wrap_test_owned_by_library_release, METH_NOARGS, NULL },
242 { NULL, NULL, 0, NULL }
245 /* TestFloatingAndSunk */
246 PYGLIB_DEFINE_TYPE("testhelper.FloatingAndSunk", PyTestFloatingAndSunk_Type, PyGObject);
249 _wrap_test_floating_and_sunk_release (PyGObject *self)
251 test_floating_and_sunk_release (TEST_FLOATING_AND_SUNK (self->obj));
255 static const PyMethodDef _PyTestFloatingAndSunk_methods[] = {
256 { "release", (PyCFunction)_wrap_test_floating_and_sunk_release, METH_NOARGS, NULL },
257 { NULL, NULL, 0, NULL }
262 #include <glib-object.h>
265 test1_callback (GObject *object, char *data)
267 g_return_if_fail (G_IS_OBJECT (object));
268 g_return_if_fail (!strcmp (data, "user-data"));
272 test1_callback_swapped (char *data, GObject *object)
274 g_return_if_fail (G_IS_OBJECT (object));
275 g_return_if_fail (!strcmp (data, "user-data"));
279 test2_callback (GObject *object, char *string)
281 g_return_if_fail (G_IS_OBJECT (object));
282 g_return_if_fail (!strcmp (string, "string"));
286 test3_callback (GObject *object, double d)
288 g_return_val_if_fail (G_IS_OBJECT (object), -1);
289 g_return_val_if_fail (d == 42.0, -1);
295 test4_callback (GObject *object,
296 gboolean b, long l, float f, double d, guint uint, gulong ulong,
299 g_return_if_fail (b == TRUE);
300 g_return_if_fail (l == 10L);
301 g_return_if_fail (f <= 3.14001 && f >= 3.13999);
302 g_return_if_fail (d <= 1.78001 && d >= 1.77999);
303 g_return_if_fail (uint == 20);
304 g_return_if_fail (ulong == 30L);
308 test_float_callback (GObject *object, float f)
310 g_return_val_if_fail (G_IS_OBJECT (object), -1);
311 g_return_val_if_fail (f <= 1.234001 && f >= 1.123999, -1);
317 test_double_callback (GObject *object, double d)
319 g_return_val_if_fail (G_IS_OBJECT (object), -1);
320 g_return_val_if_fail (d <= 1.234001 && d >= 1.123999, -1);
326 test_int64_callback (GObject *object, gint64 i)
328 g_return_val_if_fail (G_IS_OBJECT (object), -1);
336 test_string_callback (GObject *object, char *s)
338 g_return_val_if_fail (G_IS_OBJECT (object), NULL);
339 g_return_val_if_fail (!strcmp(s, "str"), NULL);
345 test_object_callback (GObject *object, GObject *o)
347 g_return_val_if_fail (G_IS_OBJECT (object), NULL);
353 test_paramspec_callback (GObject *object)
355 g_return_val_if_fail (G_IS_OBJECT (object), NULL);
357 return g_param_spec_boolean ("test-param", "test", "test boolean", TRUE, G_PARAM_READABLE);
361 test_gvalue_callback (GObject *object, const GValue *v)
363 GValue *ret = g_malloc0 (sizeof (GValue));
365 g_return_val_if_fail (G_IS_OBJECT (object), NULL);
366 g_return_val_if_fail (G_IS_VALUE (v), NULL);
368 g_value_init (ret, G_VALUE_TYPE (v));
369 g_value_copy (v, ret);
374 test_gvalue_ret_callback (GObject *object, GType type)
376 GValue *ret = g_malloc0 (sizeof (GValue));
378 g_return_val_if_fail (G_IS_OBJECT (object), NULL);
380 g_value_init (ret, type);
384 g_value_set_int(ret, G_MAXINT);
387 g_value_set_int64(ret, G_MAXINT64);
390 g_value_set_uint(ret, G_MAXUINT);
393 g_value_set_uint64(ret, G_MAXUINT64);
396 g_value_set_string(ret, "hello");
399 g_critical ("test_gvalue_ret_callback() does not support type %s", g_type_name (type));
406 connectcallbacks (GObject *object)
409 gchar *data = "user-data";
411 g_signal_connect (G_OBJECT (object),
413 G_CALLBACK (test1_callback),
415 g_signal_connect_swapped (G_OBJECT (object),
417 G_CALLBACK (test1_callback_swapped),
419 g_signal_connect (G_OBJECT (object),
421 G_CALLBACK (test2_callback),
423 g_signal_connect (G_OBJECT (object),
425 G_CALLBACK (test3_callback),
427 g_signal_connect (G_OBJECT (object),
429 G_CALLBACK (test4_callback),
431 g_signal_connect (G_OBJECT (object),
433 G_CALLBACK (test_float_callback),
435 g_signal_connect (G_OBJECT (object),
437 G_CALLBACK (test_double_callback),
439 g_signal_connect (G_OBJECT (object),
441 G_CALLBACK (test_int64_callback),
443 g_signal_connect (G_OBJECT (object),
445 G_CALLBACK (test_string_callback),
447 g_signal_connect (G_OBJECT (object),
449 G_CALLBACK (test_object_callback),
451 g_signal_connect (G_OBJECT (object),
453 G_CALLBACK (test_paramspec_callback),
455 g_signal_connect (G_OBJECT (object),
457 G_CALLBACK (test_gvalue_callback),
459 g_signal_connect (G_OBJECT (object),
461 G_CALLBACK (test_gvalue_ret_callback),
466 _wrap_connectcallbacks(PyObject * self, PyObject *args)
470 if (!PyArg_ParseTuple(args, "O", &obj))
473 connectcallbacks (G_OBJECT (obj->obj));
480 _wrap_test_value(PyObject *self, PyObject *args)
482 GValue tvalue = {0,}, *value = &tvalue;
485 if (!PyArg_ParseTuple(args, "O", &obj))
488 g_value_init(value, G_TYPE_VALUE);
489 if (pyg_value_from_pyobject(value, obj)) {
490 PyErr_SetString(PyExc_TypeError, "Could not convert to GValue");
494 return pyg_value_as_pyobject(value, FALSE);
498 _wrap_test_value_array(PyObject *self, PyObject *args)
500 GValue tvalue = {0,}, *value = &tvalue;
503 if (!PyArg_ParseTuple(args, "O", &obj))
506 g_value_init(value, G_TYPE_VALUE_ARRAY);
507 if (pyg_value_from_pyobject(value, obj)) {
508 PyErr_SetString(PyExc_TypeError, "Could not convert to GValueArray");
512 return pyg_value_as_pyobject(value, FALSE);
516 _wrap_test_gerror_exception(PyObject *self, PyObject *args)
523 if (!PyArg_ParseTuple(args, "O", &py_method))
526 py_args = PyTuple_New(0);
527 py_ret = PyObject_CallObject(py_method, py_args);
528 if (pyg_gerror_exception_check(&err)) {
529 pyg_error_check(&err);
533 Py_DECREF(py_method);
542 _wrap_test_owned_by_library_get_instance_list (PyObject *self)
544 PyObject *py_list, *py_obj;
547 list = test_owned_by_library_get_instance_list ();
549 if ((py_list = PyList_New (0)) == NULL) {
552 for (tmp = list; tmp != NULL; tmp = tmp->next) {
553 py_obj = pygobject_new (G_OBJECT (tmp->data));
554 if (py_obj == NULL) {
558 PyList_Append (py_list, py_obj);
565 _wrap_test_floating_and_sunk_get_instance_list (PyObject *self)
567 PyObject *py_list, *py_obj;
570 list = test_floating_and_sunk_get_instance_list ();
572 if ((py_list = PyList_New (0)) == NULL) {
575 for (tmp = list; tmp != NULL; tmp = tmp->next) {
576 py_obj = pygobject_new (G_OBJECT (tmp->data));
577 if (py_obj == NULL) {
581 PyList_Append (py_list, py_obj);
587 static PyMethodDef testhelper_functions[] = {
588 { "get_test_thread", (PyCFunction)_wrap_get_test_thread, METH_NOARGS },
589 { "get_unknown", (PyCFunction)_wrap_get_unknown, METH_NOARGS },
590 { "create_test_type", (PyCFunction)_wrap_create_test_type, METH_NOARGS },
591 { "test_g_object_new", (PyCFunction)_wrap_test_g_object_new, METH_NOARGS },
592 { "connectcallbacks", (PyCFunction)_wrap_connectcallbacks, METH_VARARGS },
593 { "test_value", (PyCFunction)_wrap_test_value, METH_VARARGS },
594 { "test_value_array", (PyCFunction)_wrap_test_value_array, METH_VARARGS },
595 { "test_gerror_exception", (PyCFunction)_wrap_test_gerror_exception, METH_VARARGS },
596 { "owned_by_library_get_instance_list", (PyCFunction)_wrap_test_owned_by_library_get_instance_list, METH_NOARGS },
597 { "floating_and_sunk_get_instance_list", (PyCFunction)_wrap_test_floating_and_sunk_get_instance_list, METH_NOARGS },
601 PYGLIB_MODULE_START(testhelper, "testhelper")
606 pygobject_init(-1, -1, -1);
608 d = PyModule_GetDict(module);
610 if ((m = PyImport_ImportModule("gi._gobject")) != NULL) {
611 PyObject *moddict = PyModule_GetDict(m);
613 _PyGObject_Type = (PyTypeObject *)PyDict_GetItemString(moddict, "GObject");
614 if (_PyGObject_Type == NULL) {
615 PyErr_SetString(PyExc_ImportError,
616 "cannot import name GObject from gobject");
617 return PYGLIB_MODULE_ERROR_RETURN;
620 PyErr_SetString(PyExc_ImportError,
621 "could not import gobject");
622 return PYGLIB_MODULE_ERROR_RETURN;
626 PyTestInterface_Type.tp_methods = (struct PyMethodDef*)_PyTestInterface_methods;
627 PyTestInterface_Type.tp_flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE);
628 pyg_register_interface(d, "Interface", TEST_TYPE_INTERFACE,
629 &PyTestInterface_Type);
630 pyg_register_interface_info(TEST_TYPE_INTERFACE, &__TestInterface__iinfo);
634 PyTestUnknown_Type.tp_flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE);
635 PyTestUnknown_Type.tp_weaklistoffset = offsetof(PyGObject, weakreflist);
636 PyTestUnknown_Type.tp_dictoffset = offsetof(PyGObject, inst_dict);
637 pygobject_register_class(d, "Unknown", TEST_TYPE_UNKNOWN,
641 &PyTestInterface_Type));
644 PyTestFloating_Type.tp_flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE);
645 PyTestFloating_Type.tp_weaklistoffset = offsetof(PyGObject, weakreflist);
646 PyTestFloating_Type.tp_dictoffset = offsetof(PyGObject, inst_dict);
647 pygobject_register_class(d, "Floating", TEST_TYPE_FLOATING,
648 &PyTestFloating_Type,
652 /* TestOwnedByLibrary */
653 PyTestOwnedByLibrary_Type.tp_flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE);
654 PyTestOwnedByLibrary_Type.tp_methods = (struct PyMethodDef*)_PyTestOwnedByLibrary_methods;
655 PyTestOwnedByLibrary_Type.tp_weaklistoffset = offsetof(PyGObject, weakreflist);
656 PyTestOwnedByLibrary_Type.tp_dictoffset = offsetof(PyGObject, inst_dict);
657 pygobject_register_class(d, "OwnedByLibrary", TEST_TYPE_OWNED_BY_LIBRARY,
658 &PyTestOwnedByLibrary_Type,
662 /* TestFloatingAndSunk */
663 PyTestFloatingAndSunk_Type.tp_flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE);
664 PyTestFloatingAndSunk_Type.tp_methods = (struct PyMethodDef*)_PyTestFloatingAndSunk_methods;
665 PyTestFloatingAndSunk_Type.tp_weaklistoffset = offsetof(PyGObject, weakreflist);
666 PyTestFloatingAndSunk_Type.tp_dictoffset = offsetof(PyGObject, inst_dict);
667 pygobject_register_class(d, "FloatingAndSunk", TEST_TYPE_FLOATING_AND_SUNK,
668 &PyTestFloatingAndSunk_Type,