mutter/tests/test-invariants.c
Emmanuele Bassi 6ec5cc538c 2008-06-16 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/clutter-actor.c (clutter_actor_unparent): Reset the
	:show-on-set-parent property to TRUE when unparenting.

	* tests/Makefile.am: Add test-invariant to the build.

	* tests/test-invariants.c: Test the invariants that we are going
	to honour (and document, at some point).
2008-06-16 13:40:39 +00:00

191 lines
3.9 KiB
C

#include <stdlib.h>
#include <string.h>
#include <clutter/clutter.h>
/* dummy unit testing API; to be replaced by GTest in 1.0 */
typedef void (* test_func) (void);
typedef struct _TestUnit TestUnit;
struct _TestUnit
{
gchar *name;
test_func func;
};
static GSList *units = NULL;
static void
test_init (gint *argc,
gchar ***argv)
{
g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL);
g_assert (clutter_init (argc, argv) == CLUTTER_INIT_SUCCESS);
}
static void
test_add_func (const gchar *name,
test_func func)
{
TestUnit *unit;
unit = g_slice_new (TestUnit);
unit->name = g_strdup (name);
unit->func = func;
units = g_slist_prepend (units, unit);
}
static int
test_run (void)
{
GSList *l;
units = g_slist_reverse (units);
for (l = units; l != NULL; l = l->next)
{
TestUnit *u = l->data;
GString *test_name = g_string_sized_new (75);
gsize len, i;
g_string_append (test_name, "Testing: ");
g_string_append (test_name, u->name);
len = 75 - test_name->len;
for (i = 0; i < len; i++)
g_string_append_c (test_name, '.');
g_print ("%s", test_name->str);
u->func ();
g_print ("OK\n");
}
for (l = units; l != NULL; l = l->next)
{
TestUnit *u = l->data;
g_free (u->name);
g_slice_free (TestUnit, u);
}
g_slist_free (units);
return EXIT_SUCCESS;
}
/* test units */
static void
test_initial_state (void)
{
ClutterActor *actor;
actor = clutter_rectangle_new ();
g_assert (!(CLUTTER_ACTOR_IS_REALIZED (actor)));
g_assert (!(CLUTTER_ACTOR_IS_MAPPED (actor)));
g_assert (!(CLUTTER_ACTOR_IS_VISIBLE (actor)));
clutter_actor_destroy (actor);
}
static void
test_realized (void)
{
ClutterActor *actor;
actor = clutter_rectangle_new ();
g_assert (!(CLUTTER_ACTOR_IS_REALIZED (actor)));
clutter_actor_realize (actor);
g_assert (CLUTTER_ACTOR_IS_REALIZED (actor));
g_assert (!(CLUTTER_ACTOR_IS_MAPPED (actor)));
g_assert (!(CLUTTER_ACTOR_IS_VISIBLE (actor)));
clutter_actor_destroy (actor);
}
static void
test_mapped (void)
{
ClutterActor *actor;
actor = clutter_rectangle_new ();
g_assert (!(CLUTTER_ACTOR_IS_REALIZED (actor)));
g_assert (!(CLUTTER_ACTOR_IS_MAPPED (actor)));
clutter_actor_show (actor);
g_assert (CLUTTER_ACTOR_IS_REALIZED (actor));
g_assert (CLUTTER_ACTOR_IS_MAPPED (actor));
g_assert (CLUTTER_ACTOR_IS_VISIBLE (actor));
clutter_actor_destroy (actor);
}
static void
test_show_on_set_parent (void)
{
ClutterActor *actor, *group;
gboolean show_on_set_parent;
group = clutter_group_new ();
g_assert (!(CLUTTER_ACTOR_IS_VISIBLE (group)));
actor = clutter_rectangle_new ();
g_object_get (G_OBJECT (actor),
"show-on-set-parent", &show_on_set_parent,
NULL);
g_assert (!(CLUTTER_ACTOR_IS_VISIBLE (actor)));
g_assert (show_on_set_parent == TRUE);
clutter_group_add (group, actor);
g_object_get (G_OBJECT (actor),
"show-on-set-parent", &show_on_set_parent,
NULL);
g_assert (CLUTTER_ACTOR_IS_VISIBLE (actor));
g_assert (show_on_set_parent == TRUE);
g_object_ref (actor);
clutter_actor_unparent (actor);
g_object_get (G_OBJECT (actor),
"show-on-set-parent", &show_on_set_parent,
NULL);
g_assert (!(CLUTTER_ACTOR_IS_REALIZED (actor)));
g_assert (!(CLUTTER_ACTOR_IS_VISIBLE (actor)));
g_assert (show_on_set_parent == TRUE);
clutter_actor_destroy (actor);
clutter_actor_destroy (group);
}
int
main (int argc,
char *argv[])
{
ClutterActor *stage;
test_init (&argc, &argv);
test_add_func ("/invariants/initial-state", test_initial_state);
test_add_func ("/invariants/realized", test_realized);
test_add_func ("/invariants/mapped", test_mapped);
test_add_func ("/invariants/show-on-set-parent", test_show_on_set_parent);
return test_run ();
}