mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-10-09 23:20:06 +02:00
build
debian
docs
gio
glib
gmodule
gobject
tests
.gitignore
Makefile.am
binding.c
boxed.c
dynamictests.c
enums.c
ifaceproperties.c
param.c
properties.c
reference.c
signals.c
testcommon.h
threadtests.c
valuearray.c
.gitignore
ChangeLog
Makefile.am
abicheck.sh
gatomicarray.c
gatomicarray.h
gbinding.c
gbinding.h
gboxed.c
gboxed.h
gclosure.c
gclosure.h
genums.c
genums.h
glib-genmarshal.c
glib-mkenums.in
glib-types.h
gmarshal.c
gmarshal.h
gmarshal.list
gobject-query.c
gobject.c
gobject.h
gobject.py
gobject.rc.in
gobject.stp.in
gobject.symbols
gobject_probes.d
gobject_trace.h
gobjectnotifyqueue.c
gparam.c
gparam.h
gparamspecs.c
gparamspecs.h
gsignal.c
gsignal.h
gsourceclosure.c
gsourceclosure.h
gtype-private.h
gtype.c
gtype.h
gtypemodule.c
gtypemodule.h
gtypeplugin.c
gtypeplugin.h
gvalue.c
gvalue.h
gvaluearray.c
gvaluearray.h
gvaluecollector.h
gvaluetransform.c
gvaluetypes.c
gvaluetypes.h
libgobject-gdb.py.in
makefile.msc.in
marshal-genstrings.pl
testgobject.c
gthread
m4macros
po
tests
.gitignore
AUTHORS
COPYING
ChangeLog.pre-1-2
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-14
ChangeLog.pre-2-16
ChangeLog.pre-2-18
ChangeLog.pre-2-2
ChangeLog.pre-2-20
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
HACKING
INSTALL.in
Makefile.am
Makefile.decl
NEWS
NEWS.pre-1-3
README.commits
README.in
README.win32
acglib.m4
acinclude.m4
autogen.sh
config.h.win32.in
configure.ac
gio-2.0.pc.in
gio-unix-2.0.pc.in
gio-windows-2.0.pc.in
glib-2.0.pc.in
glib-gettextize.in
glib-zip.in
glib.doap
gmodule-2.0.pc.in
gmodule-export-2.0.pc.in
gmodule-no-export-2.0.pc.in
gobject-2.0.pc.in
gthread-2.0.pc.in
makefile.msc
mkinstalldirs
msvc_recommended_pragmas.h
sanity_check
win32-fixup.pl
250 lines
6.2 KiB
C
250 lines
6.2 KiB
C
#include <glib-object.h>
|
|
|
|
static void
|
|
test_fundamentals (void)
|
|
{
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_NONE));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_INTERFACE));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_CHAR));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_UCHAR));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_BOOLEAN));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_INT));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_UINT));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_LONG));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_ULONG));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_INT64));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_UINT64));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_ENUM));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_FLAGS));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_FLOAT));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_DOUBLE));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_STRING));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_POINTER));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_BOXED));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_PARAM));
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_OBJECT));
|
|
g_assert (G_TYPE_OBJECT == g_object_get_type ());
|
|
g_assert (G_TYPE_IS_FUNDAMENTAL (G_TYPE_VARIANT));
|
|
g_assert (G_TYPE_VARIANT == g_variant_get_gtype ());
|
|
g_assert (G_TYPE_IS_DERIVED (G_TYPE_INITIALLY_UNOWNED));
|
|
|
|
g_assert (g_type_fundamental_next () == G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_USER_FIRST));
|
|
}
|
|
|
|
static void
|
|
test_type_qdata (void)
|
|
{
|
|
gchar *data;
|
|
|
|
g_type_set_qdata (G_TYPE_ENUM, g_quark_from_string ("bla"), "bla");
|
|
data = g_type_get_qdata (G_TYPE_ENUM, g_quark_from_string ("bla"));
|
|
g_assert_cmpstr (data, ==, "bla");
|
|
}
|
|
|
|
static void
|
|
test_type_query (void)
|
|
{
|
|
GTypeQuery query;
|
|
|
|
g_type_query (G_TYPE_ENUM, &query);
|
|
g_assert_cmpint (query.type, ==, G_TYPE_ENUM);
|
|
g_assert_cmpstr (query.type_name, ==, "GEnum");
|
|
g_assert_cmpint (query.class_size, ==, sizeof (GEnumClass));
|
|
g_assert_cmpint (query.instance_size, ==, 0);
|
|
}
|
|
|
|
typedef struct _MyObject MyObject;
|
|
typedef struct _MyObjectClass MyObjectClass;
|
|
typedef struct _MyObjectClassPrivate MyObjectClassPrivate;
|
|
|
|
struct _MyObject
|
|
{
|
|
GObject parent_instance;
|
|
|
|
gint count;
|
|
};
|
|
|
|
struct _MyObjectClass
|
|
{
|
|
GObjectClass parent_class;
|
|
};
|
|
|
|
struct _MyObjectClassPrivate
|
|
{
|
|
gint secret_class_count;
|
|
};
|
|
|
|
static GType my_object_get_type (void);
|
|
G_DEFINE_TYPE_WITH_CODE (MyObject, my_object, G_TYPE_OBJECT,
|
|
g_type_add_class_private (g_define_type_id, sizeof (MyObjectClassPrivate)) );
|
|
|
|
static void
|
|
my_object_init (MyObject *obj)
|
|
{
|
|
obj->count = 42;
|
|
}
|
|
|
|
static void
|
|
my_object_class_init (MyObjectClass *klass)
|
|
{
|
|
}
|
|
|
|
static void
|
|
test_class_private (void)
|
|
{
|
|
GObject *obj;
|
|
MyObjectClass *class;
|
|
MyObjectClassPrivate *priv;
|
|
|
|
obj = g_object_new (my_object_get_type (), NULL);
|
|
|
|
class = g_type_class_ref (my_object_get_type ());
|
|
priv = G_TYPE_CLASS_GET_PRIVATE (class, my_object_get_type (), MyObjectClassPrivate);
|
|
priv->secret_class_count = 13;
|
|
g_type_class_unref (class);
|
|
|
|
g_object_unref (obj);
|
|
|
|
g_assert_cmpint (g_type_qname (my_object_get_type ()), ==, g_quark_from_string ("MyObject"));
|
|
}
|
|
|
|
static void
|
|
test_clear (void)
|
|
{
|
|
GObject *o = NULL;
|
|
GObject *tmp;
|
|
|
|
g_clear_object (&o);
|
|
g_assert (o == NULL);
|
|
|
|
tmp = g_object_new (G_TYPE_OBJECT, NULL);
|
|
g_assert_cmpint (tmp->ref_count, ==, 1);
|
|
o = g_object_ref (tmp);
|
|
g_assert (o != NULL);
|
|
|
|
g_assert_cmpint (tmp->ref_count, ==, 2);
|
|
g_clear_object (&o);
|
|
g_assert_cmpint (tmp->ref_count, ==, 1);
|
|
g_assert (o == NULL);
|
|
|
|
g_object_unref (tmp);
|
|
}
|
|
|
|
static void
|
|
test_clear_function (void)
|
|
{
|
|
volatile GObject *o = NULL;
|
|
GObject *tmp;
|
|
|
|
(g_clear_object) (&o);
|
|
g_assert (o == NULL);
|
|
|
|
tmp = g_object_new (G_TYPE_OBJECT, NULL);
|
|
g_assert_cmpint (tmp->ref_count, ==, 1);
|
|
o = g_object_ref (tmp);
|
|
g_assert (o != NULL);
|
|
|
|
g_assert_cmpint (tmp->ref_count, ==, 2);
|
|
(g_clear_object) (&o);
|
|
g_assert_cmpint (tmp->ref_count, ==, 1);
|
|
g_assert (o == NULL);
|
|
|
|
g_object_unref (tmp);
|
|
}
|
|
|
|
static void
|
|
test_object_value (void)
|
|
{
|
|
GObject *v;
|
|
GObject *v2;
|
|
GValue value = G_VALUE_INIT;
|
|
|
|
g_value_init (&value, G_TYPE_OBJECT);
|
|
|
|
v = g_object_new (G_TYPE_OBJECT, NULL);
|
|
g_value_take_object (&value, v);
|
|
|
|
v2 = g_value_get_object (&value);
|
|
g_assert (v2 == v);
|
|
|
|
v2 = g_value_dup_object (&value);
|
|
g_assert (v2 == v); /* objects use ref/unref for copy/free */
|
|
g_object_unref (v2);
|
|
|
|
g_value_unset (&value);
|
|
}
|
|
|
|
static void
|
|
test_initially_unowned (void)
|
|
{
|
|
GObject *obj;
|
|
|
|
obj = g_object_new (G_TYPE_INITIALLY_UNOWNED, NULL);
|
|
g_assert (g_object_is_floating (obj));
|
|
g_assert_cmpint (obj->ref_count, ==, 1);
|
|
|
|
g_object_ref_sink (obj);
|
|
g_assert (!g_object_is_floating (obj));
|
|
g_assert_cmpint (obj->ref_count, ==, 1);
|
|
|
|
g_object_ref_sink (obj);
|
|
g_assert (!g_object_is_floating (obj));
|
|
g_assert_cmpint (obj->ref_count, ==, 2);
|
|
|
|
g_object_unref (obj);
|
|
g_assert_cmpint (obj->ref_count, ==, 1);
|
|
|
|
g_object_force_floating (obj);
|
|
g_assert (g_object_is_floating (obj));
|
|
g_assert_cmpint (obj->ref_count, ==, 1);
|
|
|
|
g_object_ref_sink (obj);
|
|
g_object_unref (obj);
|
|
}
|
|
|
|
static void
|
|
test_weak_pointer (void)
|
|
{
|
|
GObject *obj;
|
|
gpointer weak;
|
|
gpointer weak2;
|
|
|
|
weak = weak2 = obj = g_object_new (G_TYPE_OBJECT, NULL);
|
|
g_assert_cmpint (obj->ref_count, ==, 1);
|
|
|
|
g_object_add_weak_pointer (obj, &weak);
|
|
g_object_add_weak_pointer (obj, &weak2);
|
|
g_assert_cmpint (obj->ref_count, ==, 1);
|
|
g_assert (weak == obj);
|
|
g_assert (weak2 == obj);
|
|
|
|
g_object_remove_weak_pointer (obj, &weak2);
|
|
g_assert_cmpint (obj->ref_count, ==, 1);
|
|
g_assert (weak == obj);
|
|
g_assert (weak2 == obj);
|
|
|
|
g_object_unref (obj);
|
|
g_assert (weak == NULL);
|
|
g_assert (weak2 == obj);
|
|
}
|
|
|
|
int
|
|
main (int argc, char **argv)
|
|
{
|
|
g_test_init (&argc, &argv, NULL);
|
|
|
|
g_type_init ();
|
|
|
|
g_test_add_func ("/type/fundamentals", test_fundamentals);
|
|
g_test_add_func ("/type/qdata", test_type_qdata);
|
|
g_test_add_func ("/type/query", test_type_query);
|
|
g_test_add_func ("/type/class-private", test_class_private);
|
|
g_test_add_func ("/object/clear", test_clear);
|
|
g_test_add_func ("/object/clear-function", test_clear_function);
|
|
g_test_add_func ("/object/value", test_object_value);
|
|
g_test_add_func ("/object/initially-unowned", test_initially_unowned);
|
|
g_test_add_func ("/object/weak-pointer", test_weak_pointer);
|
|
|
|
return g_test_run ();
|
|
}
|