sl@0: /* sl@0: * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. sl@0: * sl@0: * This library is free software; you can redistribute it and/or sl@0: * modify it under the terms of the GNU Lesser General Public sl@0: * License as published by the Free Software Foundation; either sl@0: * version 2 of the License, or (at your option) any later version. sl@0: * sl@0: * This library is distributed in the hope that it will be useful, sl@0: * but WITHOUT ANY WARRANTY; without even the implied warranty of sl@0: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU sl@0: * Lesser General Public License for more details. sl@0: * sl@0: * You should have received a copy of the GNU Lesser General Public sl@0: * License along with this library; if not, write to the sl@0: * Free Software Foundation, Inc., 59 Temple Place - Suite 330, sl@0: * Boston, MA 02111-1307, USA. sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #undef G_LOG_DOMAIN sl@0: sl@0: #undef G_DISABLE_ASSERT sl@0: #undef G_DISABLE_CHECKS sl@0: #undef G_DISABLE_CAST_CHECKS sl@0: sl@0: #undef VERBOSE sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: #include sl@0: sl@0: #include sl@0: #include sl@0: sl@0: #include "testcommon.h" sl@0: #include sl@0: sl@0: #ifdef SYMBIAN sl@0: #include "mrt2_glib2_test.h" sl@0: #endif /*SYMBIAN*/ sl@0: sl@0: typedef struct _BaseObject BaseObject; sl@0: sl@0: struct _EphyModule sl@0: { sl@0: GTypeModule parent_instance; sl@0: sl@0: GModule *library; sl@0: sl@0: char *path; sl@0: GType type; sl@0: guint resident : 1; sl@0: }; sl@0: sl@0: typedef struct _EphyModule EphyModule; sl@0: sl@0: struct _BaseObject sl@0: { sl@0: GObject parent_instance; sl@0: sl@0: gint val1; sl@0: gint val2; sl@0: gint val3; sl@0: gint val4; sl@0: }; sl@0: static guint foo_signal_id = 0; sl@0: static guint bar_signal_id = 0; sl@0: sl@0: static GType test_i_get_type (void); sl@0: static GType test_a_get_type (void); sl@0: static GType test_b_get_type (void); sl@0: static GType test_c_get_type (void); sl@0: sl@0: static void record (const gchar *str); sl@0: sl@0: #define TEST_TYPE_I (test_i_get_type ()) sl@0: #define DERIVED_TYPE_OBJECT (derived_object_get_type ()) sl@0: sl@0: typedef struct _TestI TestI; sl@0: typedef struct _TestIClass TestIClass; sl@0: sl@0: struct _TestIClass sl@0: { sl@0: GTypeInterface base_iface; sl@0: }; sl@0: sl@0: //Added code sl@0: #define TEST_TYPE_IFACE (test_iface_get_type ()) sl@0: #define TEST_IFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_IFACE, TestIface)) sl@0: #define TEST_IS_IFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_IFACE)) sl@0: #define TEST_IFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TEST_TYPE_IFACE, TestIfaceClass)) sl@0: typedef struct _TestIface TestIface; sl@0: typedef struct _TestIfaceClass TestIfaceClass; sl@0: struct _TestIfaceClass sl@0: { sl@0: GTypeInterface base_iface; sl@0: void (*print_string) (TestIface *tiobj, sl@0: const gchar *string); sl@0: }; sl@0: static void iface_base_init (TestIfaceClass *iface); sl@0: static void iface_base_finalize (TestIfaceClass *iface); sl@0: static void print_foo (TestIface *tiobj, sl@0: const gchar *string); sl@0: sl@0: gpointer my_boxed_copy_function(gpointer boxed) sl@0: { sl@0: return boxed; sl@0: } sl@0: sl@0: void my_boxed_free_function(gpointer boxed) sl@0: { sl@0: } sl@0: sl@0: GType sl@0: test_iface_get_type (void) sl@0: { sl@0: static GType test_iface_type = 0; sl@0: sl@0: if (!test_iface_type) sl@0: { sl@0: static const GTypeInfo test_iface_info = sl@0: { sl@0: sizeof (TestIfaceClass), sl@0: (GBaseInitFunc) iface_base_init, /* base_init */ sl@0: (GBaseFinalizeFunc) iface_base_finalize, /* base_finalize */ sl@0: }; sl@0: sl@0: test_iface_type = g_type_register_static (G_TYPE_INTERFACE, "TestIface", &test_iface_info, 0); sl@0: g_type_interface_add_prerequisite (test_iface_type, G_TYPE_OBJECT); sl@0: } sl@0: sl@0: return test_iface_type; sl@0: } sl@0: sl@0: sl@0: static guint iface_base_init_count = 0; sl@0: static void sl@0: iface_base_init (TestIfaceClass *iface) sl@0: { sl@0: iface_base_init_count++; sl@0: if (iface_base_init_count == 1) sl@0: { sl@0: /* add signals here */ sl@0: } sl@0: } sl@0: static void sl@0: iface_base_finalize (TestIfaceClass *iface) sl@0: { sl@0: iface_base_init_count--; sl@0: if (iface_base_init_count == 0) sl@0: { sl@0: /* destroy signals here */ sl@0: } sl@0: } sl@0: static void sl@0: print_foo (TestIface *tiobj, sl@0: const gchar *string) sl@0: { sl@0: if (!string) sl@0: string = ""; sl@0: g_print ("Iface-FOO: \"%s\" from %p\n", string, tiobj); sl@0: } sl@0: static void sl@0: test_object_test_iface_init (gpointer giface, sl@0: gpointer iface_data) sl@0: { sl@0: TestIfaceClass *iface = giface; sl@0: sl@0: g_assert (iface_data == GUINT_TO_POINTER (42)); sl@0: sl@0: g_assert (G_TYPE_FROM_INTERFACE (iface) == TEST_TYPE_IFACE); sl@0: sl@0: /* assert iface_base_init() was already called */ sl@0: g_assert (iface_base_init_count > 0); sl@0: sl@0: /* initialize stuff */ sl@0: iface->print_string = print_foo; sl@0: } sl@0: sl@0: /* --- TestObject --- */ sl@0: #define TEST_TYPE_OBJECT (test_object_get_type ()) sl@0: #define TEST_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), TEST_TYPE_OBJECT, TestObject)) sl@0: #define TEST_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_OBJECT, TestObjectClass)) sl@0: #define TEST_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), TEST_TYPE_OBJECT)) sl@0: #define TEST_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_OBJECT)) sl@0: #define TEST_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_OBJECT, TestObjectClass)) sl@0: #define TEST_OBJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TEST_TYPE_OBJECT, TestObjectPrivate)) sl@0: typedef struct _TestObject TestObject; sl@0: typedef struct _TestObjectClass TestObjectClass; sl@0: typedef struct _TestObjectPrivate TestObjectPrivate; sl@0: struct _TestObject sl@0: { sl@0: GObject parent_instance; sl@0: }; sl@0: sl@0: struct _TestObjectClass sl@0: { sl@0: GObjectClass parent_class; sl@0: sl@0: gchar* (*test_signal) (TestObject *tobject, sl@0: TestIface *iface_object, sl@0: gpointer tdata); sl@0: }; sl@0: struct _TestObjectPrivate sl@0: { sl@0: int dummy1; sl@0: gdouble dummy2; sl@0: }; sl@0: static void test_object_class_init (TestObjectClass *class); sl@0: static void test_object_init (TestObject *tobject); sl@0: static gboolean test_signal_accumulator (GSignalInvocationHint *ihint, sl@0: GValue *return_accu, sl@0: const GValue *handler_return, sl@0: gpointer data); sl@0: static gchar* test_object_test_signal (TestObject *tobject, sl@0: TestIface *iface_object, sl@0: gpointer tdata); sl@0: sl@0: sl@0: GType sl@0: test_object_get_type (void) sl@0: { sl@0: static GType test_object_type = 0; sl@0: sl@0: if (!test_object_type) sl@0: { sl@0: static const GTypeInfo test_object_info = sl@0: { sl@0: sizeof (TestObjectClass), sl@0: NULL, /* base_init */ sl@0: NULL, /* base_finalize */ sl@0: (GClassInitFunc) test_object_class_init, sl@0: NULL, /* class_finalize */ sl@0: NULL, /* class_data */ sl@0: sizeof (TestObject), sl@0: 5, /* n_preallocs */ sl@0: (GInstanceInitFunc) test_object_init, sl@0: }; sl@0: GInterfaceInfo iface_info = { test_object_test_iface_init, NULL, GUINT_TO_POINTER (42) }; sl@0: sl@0: test_object_type = g_type_register_static (G_TYPE_OBJECT, "TestObject", &test_object_info, 0); sl@0: g_type_add_interface_static (test_object_type, TEST_TYPE_IFACE, &iface_info); sl@0: } sl@0: sl@0: return test_object_type; sl@0: } sl@0: sl@0: static void sl@0: test_object_class_init (TestObjectClass *class) sl@0: { sl@0: /* GObjectClass *gobject_class = G_OBJECT_CLASS (class); */ sl@0: guint sig_id; sl@0: GQuark detail; sl@0: gulong hook_id; sl@0: GSignalEmissionHook hook_func; sl@0: gpointer hook_data; sl@0: GDestroyNotify data_destroy; sl@0: gulong handler_id; sl@0: GClosure closure; sl@0: gpointer instance; sl@0: GValue args[2]; sl@0: sl@0: class->test_signal = test_object_test_signal; sl@0: sl@0: sig_id = g_signal_new ("test-signal", sl@0: G_OBJECT_CLASS_TYPE (class), sl@0: G_SIGNAL_RUN_FIRST | G_SIGNAL_RUN_LAST | G_SIGNAL_RUN_CLEANUP | G_SIGNAL_DETAILED, sl@0: G_STRUCT_OFFSET (TestObjectClass, test_signal), sl@0: test_signal_accumulator, NULL, sl@0: g_cclosure_marshal_STRING__OBJECT_POINTER, sl@0: G_TYPE_STRING, 2, TEST_TYPE_IFACE, G_TYPE_POINTER); sl@0: sl@0: hook_id = g_signal_add_emission_hook ( sig_id, sl@0: detail, sl@0: hook_func, sl@0: "Data", sl@0: data_destroy); sl@0: sl@0: sl@0: g_type_class_add_private (class, sizeof (TestObjectPrivate)); sl@0: } sl@0: sl@0: static void sl@0: print_bar (TestIface *tiobj, sl@0: const gchar *string) sl@0: { sl@0: TestIfaceClass *parent_iface; sl@0: sl@0: g_return_if_fail (TEST_IS_IFACE (tiobj)); sl@0: sl@0: if (!string) sl@0: string = ""; sl@0: g_print ("Iface-BAR: \"%s\" from %p\n", string, tiobj); sl@0: sl@0: g_print ("chaining: "); sl@0: parent_iface = g_type_interface_peek_parent (TEST_IFACE_GET_CLASS (tiobj)); sl@0: parent_iface->print_string (tiobj, string); sl@0: sl@0: g_assert (g_type_interface_peek_parent (parent_iface) == NULL); sl@0: } sl@0: static void sl@0: test_object_init (TestObject *tobject) sl@0: { sl@0: TestObjectPrivate *priv; sl@0: sl@0: priv = TEST_OBJECT_GET_PRIVATE (tobject); sl@0: sl@0: g_assert (priv); sl@0: g_assert ((gchar *)priv >= (gchar *)tobject + sizeof (TestObject)); sl@0: sl@0: priv->dummy1 = 54321; sl@0: } sl@0: sl@0: static gchar* sl@0: test_object_test_signal (TestObject *tobject, sl@0: TestIface *iface_object, sl@0: gpointer tdata) sl@0: { sl@0: g_message ("::test_signal default_handler called"); sl@0: sl@0: g_return_val_if_fail (TEST_IS_IFACE (iface_object), NULL); sl@0: sl@0: return g_strdup (""); sl@0: } sl@0: static gboolean sl@0: test_signal_accumulator (GSignalInvocationHint *ihint, sl@0: GValue *return_accu, sl@0: const GValue *handler_return, sl@0: gpointer data) sl@0: { sl@0: const gchar *accu_string = g_value_get_string (return_accu); sl@0: const gchar *new_string = g_value_get_string (handler_return); sl@0: gchar *result_string; sl@0: sl@0: if (accu_string) sl@0: result_string = g_strconcat (accu_string, new_string, NULL); sl@0: else if (new_string) sl@0: result_string = g_strdup (new_string); sl@0: else sl@0: result_string = NULL; sl@0: sl@0: g_value_take_string (return_accu, result_string); sl@0: sl@0: return TRUE; sl@0: } sl@0: sl@0: static void sl@0: derived_object_test_iface_init (gpointer giface, sl@0: gpointer iface_data) sl@0: { sl@0: TestIfaceClass *iface = giface; sl@0: sl@0: g_assert (iface_data == GUINT_TO_POINTER (87)); sl@0: sl@0: g_assert (G_TYPE_FROM_INTERFACE (iface) == TEST_TYPE_IFACE); sl@0: sl@0: /* assert test_object_test_iface_init() was already called */ sl@0: g_assert (iface->print_string == print_foo); sl@0: sl@0: /* override stuff */ sl@0: iface->print_string = print_bar; sl@0: } sl@0: sl@0: /* --- DerivedObject --- */ sl@0: #define DERIVED_TYPE_OBJECT (derived_object_get_type ()) sl@0: #define DERIVED_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), DERIVED_TYPE_OBJECT, DerivedObject)) sl@0: #define DERIVED_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DERIVED_TYPE_OBJECT, DerivedObjectClass)) sl@0: #define DERIVED_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), DERIVED_TYPE_OBJECT)) sl@0: #define DERIVED_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DERIVED_TYPE_OBJECT)) sl@0: #define DERIVED_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DERIVED_TYPE_OBJECT, DerivedObjectClass)) sl@0: #define DERIVED_OBJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), DERIVED_TYPE_OBJECT, DerivedObjectPrivate)) sl@0: sl@0: typedef struct _DerivedObject DerivedObject; sl@0: typedef struct _TestObjectClass DerivedObjectClass; sl@0: typedef struct _DerivedObjectPrivate DerivedObjectPrivate; sl@0: struct _DerivedObject sl@0: { sl@0: TestObject parent_instance; sl@0: int dummy1; sl@0: int dummy2; sl@0: }; sl@0: struct _DerivedObjectPrivate sl@0: { sl@0: char dummy; sl@0: }; sl@0: static void derived_object_class_init (DerivedObjectClass *class); sl@0: static void derived_object_init (DerivedObject *dobject); sl@0: sl@0: sl@0: GType sl@0: derived_object_get_type (void) sl@0: { sl@0: static GType derived_object_type = 0; sl@0: sl@0: if (!derived_object_type) sl@0: { sl@0: static const GTypeInfo derived_object_info = sl@0: { sl@0: sizeof (DerivedObjectClass), sl@0: NULL, /* base_init */ sl@0: NULL, /* base_finalize */ sl@0: (GClassInitFunc) derived_object_class_init, sl@0: NULL, /* class_finalize */ sl@0: NULL, /* class_data */ sl@0: sizeof (DerivedObject), sl@0: 5, /* n_preallocs */ sl@0: (GInstanceInitFunc) derived_object_init, sl@0: }; sl@0: GInterfaceInfo iface_info = { derived_object_test_iface_init, NULL, GUINT_TO_POINTER (87) }; sl@0: sl@0: derived_object_type = g_type_register_static (TEST_TYPE_OBJECT, "DerivedObject", &derived_object_info, 0); sl@0: g_type_add_interface_static (derived_object_type, TEST_TYPE_IFACE, &iface_info); sl@0: } sl@0: sl@0: return derived_object_type; sl@0: } sl@0: sl@0: static void sl@0: derived_object_class_init (DerivedObjectClass *class) sl@0: { sl@0: g_type_class_add_private (class, sizeof (DerivedObjectPrivate)); sl@0: } sl@0: static void sl@0: derived_object_init (DerivedObject *dobject) sl@0: { sl@0: TestObjectPrivate *test_priv; sl@0: DerivedObjectPrivate *derived_priv; sl@0: sl@0: derived_priv = DERIVED_OBJECT_GET_PRIVATE (dobject); sl@0: sl@0: g_assert (derived_priv); sl@0: g_assert ((gchar *)derived_priv >= (gchar *)TEST_OBJECT_GET_PRIVATE (dobject) + sizeof (TestObjectPrivate)); sl@0: sl@0: test_priv = TEST_OBJECT_GET_PRIVATE (dobject); sl@0: sl@0: g_assert (test_priv); sl@0: g_assert ((gchar *)test_priv >= (gchar *)dobject + sizeof (TestObject)); sl@0: sl@0: } sl@0: sl@0: //addition over sl@0: sl@0: static void sl@0: test_i_foo (TestI *self) sl@0: { sl@0: record ("TestI::foo"); sl@0: } sl@0: sl@0: static void sl@0: test_i_default_init (gpointer g_class) sl@0: { sl@0: gint i; sl@0: const char *name; sl@0: GSignalQuery query; sl@0: guint retval; sl@0: guint n_ids[4]; sl@0: foo_signal_id = g_signal_newv ("foo", sl@0: TEST_TYPE_I, sl@0: G_SIGNAL_RUN_LAST, sl@0: g_cclosure_new(G_CALLBACK(test_i_foo), sl@0: NULL, NULL), sl@0: NULL, NULL, sl@0: g_cclosure_marshal_VOID__VOID, sl@0: G_TYPE_NONE, 0, NULL); sl@0: sl@0: g_assert(!strcmp(g_signal_name(foo_signal_id), "foo")); sl@0: g_signal_query (foo_signal_id, &query); sl@0: g_assert(query.signal_id == foo_signal_id); sl@0: retval = g_signal_lookup("foo",TEST_TYPE_I); sl@0: g_assert(retval == foo_signal_id); sl@0: sl@0: g_signal_list_ids (TEST_TYPE_I, sl@0: n_ids); sl@0: g_assert(n_ids[0] == foo_signal_id); sl@0: sl@0: i = foo_signal_id ; sl@0: } sl@0: sl@0: static DEFINE_IFACE (TestI, test_i, NULL, test_i_default_init) sl@0: sl@0: #define TEST_TYPE_A (test_a_get_type()) sl@0: sl@0: typedef struct _TestA TestA; sl@0: typedef struct _TestAClass TestAClass; sl@0: sl@0: struct _TestA { sl@0: GObject parent; sl@0: }; sl@0: struct _TestAClass { sl@0: GObjectClass parent_class; sl@0: sl@0: void (* bar) (TestA *self); sl@0: }; sl@0: sl@0: //Dummy function sl@0: gint GMyCompareDataFunc (gconstpointer a, sl@0: gconstpointer b, sl@0: gpointer user_data) sl@0: { sl@0: sl@0: return 0; sl@0: } sl@0: sl@0: sl@0: sl@0: //Function to test the apis : sl@0: static void sl@0: test_set_val_apis (void) sl@0: { sl@0: GType type; sl@0: gchar c; sl@0: gchar *p="foo"; sl@0: gconstpointer ptr; sl@0: gpointer ret_val = NULL; sl@0: gpointer v_object ; sl@0: gchar *retVal; sl@0: GObject *object; sl@0: GParamFlags flags; sl@0: GParamSpec* paramSpec; sl@0: GParamSpec *gpSpec = (GParamSpec * )g_malloc(sizeof (GParamSpec)); sl@0: GValue orig = { 0, }; sl@0: GValue orig1 = { 1, }; sl@0: GValue xform = { 0, }; sl@0: GValue param1 = { 0, }; sl@0: GTypeModule module ; sl@0: GEnumValue values[] = { {0,"0","0"}, {1,"1","1"}}; sl@0: GValueArray value_array = { sl@0: { sl@0: 0 sl@0: }, sl@0: { sl@0: 0 sl@0: }}; sl@0: sl@0: GValueArray *ret_value_array; sl@0: GCompareFunc compare_func; sl@0: GCompareDataFunc compare_func1 = GMyCompareDataFunc; sl@0: GValue *ret_value; sl@0: gpointer user_data; sl@0: GParamSpec *param; sl@0: GQuark detail; sl@0: GValue *return_value; sl@0: GObject *ret_object; sl@0: guint t; sl@0: guint n_children = 10; sl@0: GType *ret_gtype; sl@0: GTypePlugin * ret_plugin; sl@0: guint n_prerequisites = 1; sl@0: const GInterfaceInfo interface_info; sl@0: GType flag_type,boxed_type; sl@0: GFlagsValue flag_value = {0,"0","0"}; sl@0: int dummy; sl@0: gpointer boxed_value = &dummy; sl@0: GParamSpec *spec; sl@0: gchar *boxed_variable = "abc"; sl@0: sl@0: type = g_enum_register_static ("TestEnum", values); sl@0: g_value_init (&orig, type); sl@0: g_value_set_enum (&orig, 5); sl@0: t = g_value_get_enum(&orig); sl@0: g_assert(t == 5); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_CHAR); sl@0: g_value_set_char (&xform, 10); sl@0: g_assert (xform.data[0].v_int == '\n'); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_DOUBLE); sl@0: g_value_set_double (&xform, 100.00); sl@0: g_assert (xform.data[0].v_double == 100.00); sl@0: g_assert (g_value_get_double (&xform) == 100.00); sl@0: sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_FLOAT); sl@0: g_value_set_float (&xform, 1.0); sl@0: g_assert (xform.data[0].v_float == 1.0); sl@0: g_assert (g_value_get_float(&xform) == 1.0); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_INT64); sl@0: g_value_set_int64 (&xform, 2555); sl@0: g_assert (xform.data[0].v_int64 == 2555); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_LONG); sl@0: g_value_set_long (&xform, 2555); sl@0: g_assert (xform.data[0].v_long == 2555); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_UCHAR); sl@0: g_value_set_uchar (&xform, 10); sl@0: g_assert (xform.data[0].v_uint == '\n'); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_UINT); sl@0: g_value_set_uint (&xform, 100); sl@0: g_assert (xform.data[0].v_uint == 100); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_UINT64); sl@0: g_value_set_uint64 (&xform, 1000000); sl@0: g_assert (xform.data[0].v_uint64 == 1000000); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_ULONG); sl@0: g_value_set_ulong (&xform, 1000000); sl@0: g_assert (xform.data[0].v_ulong == 1000000); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_STRING); sl@0: g_value_set_string (&xform, "Hello"); sl@0: g_assert (!strcmp(xform.data[0].v_pointer , "Hello")); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_STRING); sl@0: g_value_set_static_string (&xform, "Hello"); sl@0: g_assert (!strcmp(xform.data[0].v_pointer , "Hello")); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_POINTER); sl@0: g_value_set_pointer (&xform, p); sl@0: g_assert (xform.data[0].v_pointer == p); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_STRING); sl@0: g_value_set_string (&xform, "World"); sl@0: retVal = g_value_dup_string (&xform); sl@0: g_assert (!strcmp(retVal , "World")); sl@0: sl@0: ret_value_array = g_value_array_copy (&value_array); sl@0: sl@0: g_assert (ret_value_array != NULL ); sl@0: sl@0: g_value_array_free(ret_value_array); sl@0: sl@0: ret_value_array = g_value_array_prepend(&value_array, &orig); sl@0: sl@0: g_assert (ret_value_array != NULL ); sl@0: sl@0: ret_value = g_value_array_get_nth (&value_array, 0); sl@0: sl@0: g_assert (ret_value_array != NULL ); sl@0: sl@0: ret_value_array = g_value_array_sort(&value_array, compare_func); sl@0: sl@0: g_assert (ret_value_array != NULL ); sl@0: sl@0: ret_value_array = g_value_array_sort_with_data (&value_array, sl@0: compare_func1, sl@0: user_data); sl@0: sl@0: g_assert (ret_value_array != NULL ); sl@0: sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_PARAM); sl@0: sl@0: g_value_set_param (&xform, NULL); sl@0: sl@0: g_assert (&xform != NULL ); sl@0: sl@0: g_value_set_param_take_ownership(&xform, NULL); sl@0: sl@0: g_assert (&xform != NULL ); sl@0: sl@0: paramSpec = g_value_dup_param (&xform); sl@0: sl@0: g_assert (paramSpec == NULL ); sl@0: sl@0: //g_signal_emitv (&orig, 1, detail, return_value); sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_POINTER); sl@0: ret_val = g_value_get_pointer(&xform); sl@0: g_assert (ret_val == NULL ); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_OBJECT); sl@0: ret_object = g_value_dup_object(&xform); sl@0: g_assert (ret_object == NULL ); sl@0: g_value_set_object_take_ownership (&xform, NULL); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: flag_type = g_flags_register_static("TestFlag",&flag_value); sl@0: g_value_init(&xform , flag_type); sl@0: g_value_set_flags (&xform , 1); sl@0: t = g_value_get_flags (&xform); sl@0: g_assert (t == 1); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: boxed_type = g_boxed_type_register_static("TestBoxed",my_boxed_copy_function,my_boxed_free_function); sl@0: g_value_init (&xform, boxed_type); sl@0: g_value_set_boxed (&xform,boxed_variable); sl@0: ret_val = g_value_get_boxed (&xform); sl@0: g_assert (ret_val == boxed_variable); sl@0: sl@0: g_value_set_static_boxed (&xform, "abc"); sl@0: g_value_set_boxed_take_ownership (&xform, "abc"); sl@0: g_assert (&xform != NULL); sl@0: ret_val = g_value_dup_boxed (&xform); sl@0: g_assert (ret_val == boxed_variable); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init(&xform,G_TYPE_OBJECT); sl@0: ret_val = g_value_get_object(&xform); sl@0: g_assert (ret_val == NULL); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_PARAM); sl@0: spec = g_param_spec_int sl@0: ( sl@0: "property-a", /* property name */ sl@0: "a", /* nickname */ sl@0: "Mysterty value 1", /* description */ sl@0: 5, /* minimum */ sl@0: 10, /* maximum */ sl@0: 5, /* default */ sl@0: G_PARAM_READABLE |G_PARAM_WRITABLE /* GParamSpecFlags */ sl@0: ); sl@0: g_value_set_param(&xform,spec); sl@0: param = g_value_get_param(&xform); sl@0: g_assert (param == spec); sl@0: sl@0: ret_gtype = g_type_children (G_TYPE_INT, &n_children); sl@0: g_assert (ret_gtype != NULL); sl@0: free(ret_gtype); sl@0: sl@0: ret_plugin = g_type_interface_get_plugin (G_TYPE_INT, G_TYPE_INTERFACE); sl@0: g_assert (ret_plugin == NULL); sl@0: sl@0: ret_gtype = g_type_interface_prerequisites (G_TYPE_INTERFACE,&n_prerequisites); sl@0: g_assert (ret_gtype != NULL); sl@0: free(ret_gtype); sl@0: sl@0: //g_type_module_set_name (&module, "Name"); sl@0: //g_object_set_property (object, sl@0: // NULL, sl@0: // &xform); sl@0: // g_type_class_unref_uncached (NULL);*/ sl@0: sl@0: } sl@0: sl@0: //Function to test the apis sl@0: sl@0: static void sl@0: test_param_spec_apis (void) sl@0: { sl@0: GParamFlags flags; sl@0: GParamSpec* paramSpec; sl@0: gchar *qdata = "abc"; sl@0: GQuark quark = g_quark_from_string(qdata); sl@0: gpointer retVal; sl@0: gpointer data= "MY data"; sl@0: gchar *testData; sl@0: GDestroyNotify destroy; sl@0: GType type; sl@0: gboolean ret; sl@0: GValue orig = { 0, }; sl@0: GValue xform = { 0, }; sl@0: GEnumValue values[] = { {0,"0","0"}, {1,"1","1"}}; sl@0: GFlagsValue flag_value = {1,"1","1"}; sl@0: GType enum_type,flags_type,boxed_type; sl@0: memset (&orig, 0, sizeof (GValue)); sl@0: g_value_init (&orig, G_TYPE_POINTER); sl@0: sl@0: memset (&xform, 0, sizeof (GValue)); sl@0: g_value_init (&xform, G_TYPE_POINTER); sl@0: sl@0: paramSpec = g_param_spec_uchar("String1","Hello","World", 0,100,10, flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->_nick , "Hello")); sl@0: sl@0: paramSpec = g_param_spec_uint("String2","Hello","World", 0,255,50, flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String2")); sl@0: sl@0: paramSpec = g_param_spec_uint64("String3","Hello","World", 0,255555,1000, flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String3")); sl@0: sl@0: paramSpec = g_param_spec_ulong("String4","Hello","World", 0,255,100, flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String4")); sl@0: sl@0: paramSpec = g_param_spec_unichar("String5","Hello","World",'X', flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String5")); sl@0: sl@0: paramSpec = g_param_spec_string("String6","Hello","World","String", flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String6")); sl@0: sl@0: paramSpec = g_param_spec_int64("String7","Hello","World",-100,25555,500, flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String7")); sl@0: sl@0: paramSpec = g_param_spec_long("String8","Hello","World",-100,2555,100, flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String8")); sl@0: sl@0: g_param_spec_set_qdata(paramSpec,quark,qdata); sl@0: retVal = g_param_spec_steal_qdata(paramSpec, quark); sl@0: g_assert (retVal == qdata); sl@0: sl@0: g_param_spec_set_qdata(paramSpec,100, data); sl@0: sl@0: retVal = g_param_spec_get_qdata(paramSpec,100); sl@0: sl@0: testData = (gchar *)retVal; sl@0: sl@0: g_assert (!strcmp(testData , "MY data")); sl@0: sl@0: g_param_spec_set_qdata_full (paramSpec, 200, data, destroy); sl@0: sl@0: retVal = g_param_spec_get_qdata(paramSpec, 200); sl@0: testData = (gchar *)retVal; sl@0: g_assert (!strcmp(testData , "MY data")); sl@0: sl@0: paramSpec = g_param_spec_object("String9","Hello","World",G_TYPE_OBJECT,flags); sl@0: g_assert (!strcmp(paramSpec->name , "String9")); sl@0: sl@0: paramSpec = g_param_spec_param("String10","Hello","World",G_TYPE_PARAM,flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String10")); sl@0: sl@0: paramSpec = g_param_spec_pointer("String11", "Hello", "World", flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String11")); sl@0: sl@0: ret = g_param_value_convert (paramSpec, &orig, &xform, TRUE); sl@0: sl@0: g_assert (ret == TRUE); sl@0: sl@0: ret = g_param_value_defaults(paramSpec , &xform); sl@0: sl@0: g_assert (ret == TRUE); sl@0: sl@0: paramSpec = g_param_spec_value_array ("String12", "Hello", "World", NULL, flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String12")); sl@0: sl@0: paramSpec = g_param_spec_float("String13","Hello", "World",0.00,255.00,100.00,flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String13")); sl@0: sl@0: paramSpec = g_param_spec_flags("String14","Hello", "World",G_TYPE_FLAGS,0,flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String14")); sl@0: sl@0: paramSpec = g_param_spec_double("String15","Hello", "World", 0.00,25554.00,100.00,flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String15")); sl@0: sl@0: paramSpec = g_param_spec_char("String16","Hello", "World", 'a','z','c',flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String16")); sl@0: sl@0: paramSpec = g_param_spec_boolean("String17", "Hello", "World",TRUE,flags); sl@0: sl@0: g_assert (!strcmp(paramSpec->name , "String17")); sl@0: sl@0: flags_type = g_flags_register_static("TestFlag1",&flag_value); sl@0: paramSpec = g_param_spec_flags ("String18", "Hello", "World", flags_type, 1, flags); sl@0: g_assert (!strcmp(paramSpec->name , "String18")); sl@0: sl@0: enum_type = g_enum_register_static("TestEnum1",values); sl@0: paramSpec = g_param_spec_enum ("String19", "Hello", "World", enum_type, 0, flags); sl@0: g_assert (!strcmp(paramSpec->name , "String19")); sl@0: sl@0: boxed_type = g_boxed_type_register_static("TestBoxed1",my_boxed_copy_function,my_boxed_free_function); sl@0: paramSpec = g_param_spec_boxed ("String20", "Hello", "World", boxed_type, flags); sl@0: g_assert (!strcmp(paramSpec->name , "String20")); sl@0: sl@0: } sl@0: sl@0: static void test_object_apis() sl@0: { sl@0: BaseObject *object; sl@0: EphyModule *module; sl@0: GObjectClass *object_class; sl@0: GParamSpec **properties; sl@0: gint n_properties; sl@0: gpointer p = "Hello"; sl@0: sl@0: gint val1, val2, val3, val4; sl@0: sl@0: g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) | sl@0: G_LOG_LEVEL_WARNING | sl@0: G_LOG_LEVEL_CRITICAL); sl@0: sl@0: g_type_init (); sl@0: sl@0: object = g_object_new (DERIVED_TYPE_OBJECT , NULL); sl@0: #if 0 sl@0: module = g_object_new (EPHY_TYPE_MODULE, NULL); sl@0: sl@0: ephy_module_new_object(module); sl@0: g_type_module_set_name (G_TYPE_MODULE (module), sl@0: "name"); sl@0: sl@0: #endif sl@0: sl@0: } sl@0: sl@0: sl@0: sl@0: static void sl@0: test_a_foo (TestI *self) sl@0: { sl@0: GValue args[1] = { { 0, } }; sl@0: sl@0: record ("TestA::foo"); sl@0: sl@0: g_value_init (&args[0], TEST_TYPE_A); sl@0: g_value_set_object (&args[0], self); sl@0: sl@0: g_assert (g_signal_get_invocation_hint (self)->signal_id == foo_signal_id); sl@0: sl@0: g_signal_chain_from_overridden (args, NULL); sl@0: sl@0: g_value_unset (&args[0]); sl@0: } sl@0: sl@0: static void sl@0: test_a_bar (TestA *self) sl@0: { sl@0: record ("TestA::bar"); sl@0: } sl@0: sl@0: static void sl@0: test_a_class_init (TestAClass *class) sl@0: { sl@0: class->bar = test_a_bar; sl@0: sl@0: bar_signal_id = g_signal_new ("bar", sl@0: TEST_TYPE_A, sl@0: G_SIGNAL_RUN_LAST, sl@0: G_STRUCT_OFFSET (TestAClass, bar), sl@0: NULL, NULL, sl@0: g_cclosure_marshal_VOID__VOID, sl@0: G_TYPE_NONE, 0, NULL); sl@0: } sl@0: sl@0: static void sl@0: test_a_interface_init (TestIClass *iface) sl@0: { sl@0: g_signal_override_class_closure (foo_signal_id, sl@0: TEST_TYPE_A, sl@0: g_cclosure_new (G_CALLBACK (test_a_foo), sl@0: NULL, NULL)); sl@0: } sl@0: sl@0: static DEFINE_TYPE_FULL (TestA, test_a, sl@0: test_a_class_init, NULL, NULL, sl@0: G_TYPE_OBJECT, sl@0: INTERFACE (test_a_interface_init, TEST_TYPE_I)) sl@0: sl@0: #define TEST_TYPE_B (test_b_get_type()) sl@0: sl@0: typedef struct _TestB TestB; sl@0: typedef struct _TestBClass TestBClass; sl@0: sl@0: struct _TestB { sl@0: TestA parent; sl@0: }; sl@0: struct _TestBClass { sl@0: TestAClass parent_class; sl@0: }; sl@0: sl@0: static void sl@0: test_b_foo (TestA *self) sl@0: { sl@0: GValue args[1] = { { 0, } }; sl@0: sl@0: record ("TestB::foo"); sl@0: sl@0: g_value_init (&args[0], TEST_TYPE_A); sl@0: g_value_set_object (&args[0], self); sl@0: sl@0: g_assert (g_signal_get_invocation_hint (self)->signal_id == foo_signal_id); sl@0: g_signal_chain_from_overridden (args, NULL); sl@0: sl@0: g_value_unset (&args[0]); sl@0: } sl@0: sl@0: static void sl@0: test_b_bar (TestI *self) sl@0: { sl@0: GValue args[1] = { { 0, } }; sl@0: sl@0: record ("TestB::bar"); sl@0: sl@0: g_value_init (&args[0], TEST_TYPE_A); sl@0: g_value_set_object (&args[0], self); sl@0: sl@0: g_assert (g_signal_get_invocation_hint (self)->signal_id == bar_signal_id); sl@0: g_signal_chain_from_overridden (args, NULL); sl@0: sl@0: g_value_unset (&args[0]); sl@0: } sl@0: sl@0: static void sl@0: test_b_class_init (TestBClass *class) sl@0: { sl@0: g_signal_override_class_closure (foo_signal_id, sl@0: TEST_TYPE_B, sl@0: g_cclosure_new (G_CALLBACK (test_b_foo), sl@0: NULL, NULL)); sl@0: g_signal_override_class_closure (bar_signal_id, sl@0: TEST_TYPE_B, sl@0: g_cclosure_new (G_CALLBACK (test_b_bar), sl@0: NULL, NULL)); sl@0: } sl@0: sl@0: static DEFINE_TYPE (TestB, test_b, sl@0: test_b_class_init, NULL, NULL, sl@0: TEST_TYPE_A) sl@0: sl@0: #define TEST_TYPE_C (test_c_get_type()) sl@0: sl@0: typedef struct _TestC TestC; sl@0: typedef struct _TestCClass TestCClass; sl@0: sl@0: struct _TestC { sl@0: TestB parent; sl@0: }; sl@0: struct _TestCClass { sl@0: TestBClass parent_class; sl@0: }; sl@0: sl@0: static void sl@0: test_c_foo (TestA *self) sl@0: { sl@0: GValue args[1] = { { 0, } }; sl@0: sl@0: record ("TestC::foo"); sl@0: sl@0: g_value_init (&args[0], TEST_TYPE_A); sl@0: g_value_set_object (&args[0], self); sl@0: sl@0: g_assert (g_signal_get_invocation_hint (self)->signal_id == foo_signal_id); sl@0: g_signal_chain_from_overridden (args, NULL); sl@0: sl@0: g_value_unset (&args[0]); sl@0: } sl@0: sl@0: static void sl@0: test_c_bar (TestI *self) sl@0: { sl@0: GValue args[1] = { { 0, } }; sl@0: sl@0: record ("TestC::bar"); sl@0: sl@0: g_value_init (&args[0], TEST_TYPE_A); sl@0: g_value_set_object (&args[0], self); sl@0: sl@0: g_assert (g_signal_get_invocation_hint (self)->signal_id == bar_signal_id); sl@0: g_signal_chain_from_overridden (args, NULL); sl@0: sl@0: g_value_unset (&args[0]); sl@0: } sl@0: sl@0: static void sl@0: test_c_class_init (TestBClass *class) sl@0: { sl@0: g_signal_override_class_closure (foo_signal_id, sl@0: TEST_TYPE_C, sl@0: g_cclosure_new (G_CALLBACK (test_c_foo), sl@0: NULL, NULL)); sl@0: g_signal_override_class_closure (bar_signal_id, sl@0: TEST_TYPE_C, sl@0: g_cclosure_new (G_CALLBACK (test_c_bar), sl@0: NULL, NULL)); sl@0: } sl@0: sl@0: sl@0: static DEFINE_TYPE (TestC, test_c, sl@0: test_c_class_init, NULL, NULL, sl@0: TEST_TYPE_B) sl@0: sl@0: static GString *test_string = NULL; sl@0: gboolean failed = FALSE; sl@0: sl@0: static void sl@0: record (const gchar *str) sl@0: { sl@0: if (test_string->len) sl@0: g_string_append_c (test_string, ','); sl@0: g_string_append (test_string, str); sl@0: } sl@0: sl@0: int sl@0: main (int argc, char **argv) sl@0: { sl@0: gpointer p; sl@0: sl@0: #ifdef SYMBIAN sl@0: g_log_set_handler (NULL, G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, &mrtLogHandler, NULL); sl@0: #endif /*SYMBIAN*/ sl@0: sl@0: g_type_init(); sl@0: sl@0: test_i_default_init(p); sl@0: sl@0: test_set_val_apis(); sl@0: sl@0: test_param_spec_apis(); sl@0: sl@0: test_object_apis(); sl@0: sl@0: #if SYMBIAN sl@0: testResultXml("g_test1"); sl@0: #endif /* EMULATOR */ sl@0: sl@0: return failed ? 1 : 0; sl@0: } sl@0: