[clutter] conform: Check that iterators work post-assignment
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] conform: Check that iterators work post-assignment
- Date: Wed, 27 Jun 2012 20:31:46 +0000 (UTC)
commit 1ca4937f1ee136db87337ad7c94d26f976c32194
Author: Emmanuele Bassi <ebassi gnome org>
Date: Wed Jun 27 12:44:22 2012 +0100
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).
tests/conform/actor-iter.c | 77 +++++++++++++++++++++++++++++++++++++
tests/conform/test-conform-main.c | 1 +
2 files changed, 78 insertions(+), 0 deletions(-)
---
diff --git a/tests/conform/actor-iter.c b/tests/conform/actor-iter.c
index fdfb0d5..5633e2f 100644
--- a/tests/conform/actor-iter.c
+++ b/tests/conform/actor-iter.c
@@ -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);
+}
diff --git a/tests/conform/test-conform-main.c b/tests/conform/test-conform-main.c
index 14a2e66..ef3408c 100644
--- a/tests/conform/test-conform-main.c
+++ b/tests/conform/test-conform-main.c
@@ -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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]