conform: Check that iterators work post-assignment
It should be possible to copy a ClutterActorIter just by copying its contents (either via assignment or memcpy).
This commit is contained in:
parent
a8c829019f
commit
1ca4937f1e
@ -127,3 +127,80 @@ actor_iter_traverse_remove (TestConformSimpleFixture *fixture G_GNUC_UNUSED,
|
||||
g_assert_cmpint (i, ==, n_actors);
|
||||
g_assert_cmpint (0, ==, clutter_actor_get_n_children (actor));
|
||||
}
|
||||
|
||||
void
|
||||
actor_iter_assignment (TestConformSimpleFixture *fixure G_GNUC_UNUSED,
|
||||
gconstpointer dummy G_GNUC_UNUSED)
|
||||
{
|
||||
ClutterActorIter iter_a, iter_b;
|
||||
ClutterActor *actor;
|
||||
ClutterActor *child;
|
||||
int i, n_actors;
|
||||
|
||||
actor = clutter_actor_new ();
|
||||
clutter_actor_set_name (actor, "root");
|
||||
g_object_ref_sink (actor);
|
||||
|
||||
n_actors = g_random_int_range (10, 50);
|
||||
for (i = 0; i < n_actors; i++)
|
||||
{
|
||||
char *name;
|
||||
|
||||
name = g_strdup_printf ("actor[%02d]", i);
|
||||
child = clutter_actor_new ();
|
||||
clutter_actor_set_name (child, name);
|
||||
|
||||
clutter_actor_add_child (actor, child);
|
||||
|
||||
g_free (name);
|
||||
}
|
||||
|
||||
g_assert_cmpint (clutter_actor_get_n_children (actor), ==, n_actors);
|
||||
|
||||
i = 0;
|
||||
|
||||
clutter_actor_iter_init (&iter_a, actor);
|
||||
|
||||
iter_b = iter_a;
|
||||
|
||||
while (clutter_actor_iter_next (&iter_a, &child))
|
||||
{
|
||||
g_assert (CLUTTER_IS_ACTOR (child));
|
||||
g_assert (clutter_actor_get_parent (child) == actor);
|
||||
|
||||
if (g_test_verbose ())
|
||||
g_print ("actor %2d = '%s'\n", i, clutter_actor_get_name (child));
|
||||
|
||||
if (i == 0)
|
||||
g_assert (child == clutter_actor_get_first_child (actor));
|
||||
|
||||
if (i == (n_actors - 1))
|
||||
g_assert (child == clutter_actor_get_last_child (actor));
|
||||
|
||||
i += 1;
|
||||
}
|
||||
|
||||
g_assert_cmpint (i, ==, n_actors);
|
||||
|
||||
i = n_actors;
|
||||
|
||||
while (clutter_actor_iter_prev (&iter_b, &child))
|
||||
{
|
||||
g_assert (clutter_actor_get_parent (child) == actor);
|
||||
|
||||
if (g_test_verbose ())
|
||||
g_print ("actor %2d = '%s'\n", i, clutter_actor_get_name (child));
|
||||
|
||||
if (i == n_actors)
|
||||
g_assert (child == clutter_actor_get_last_child (actor));
|
||||
|
||||
if (i == 1)
|
||||
g_assert (child == clutter_actor_get_first_child (actor));
|
||||
|
||||
i -= 1;
|
||||
}
|
||||
|
||||
g_assert_cmpint (i, ==, 0);
|
||||
|
||||
g_object_unref (actor);
|
||||
}
|
||||
|
@ -149,6 +149,7 @@ main (int argc, char **argv)
|
||||
|
||||
TEST_CONFORM_SIMPLE ("/actor/iter", actor_iter_traverse_children);
|
||||
TEST_CONFORM_SIMPLE ("/actor/iter", actor_iter_traverse_remove);
|
||||
TEST_CONFORM_SIMPLE ("/actor/iter", actor_iter_assignment);
|
||||
|
||||
TEST_CONFORM_SIMPLE ("/actor/invariants", actor_initial_state);
|
||||
TEST_CONFORM_SIMPLE ("/actor/invariants", actor_shown_not_parented);
|
||||
|
Loading…
Reference in New Issue
Block a user