[clutter] conform: Add a suite for the Actor scene graph API



commit 419a6a38f20781439669339c7a970d653523c5e7
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Sun Dec 18 20:59:07 2011 +0000

    conform: Add a suite for the Actor scene graph API
    
    Verify that insertion and removal maintain a stable graph, with pointers
    to the various children. This should help out tracking regressions in
    the scene graph API.

 tests/conform/Makefile.am         |    1 +
 tests/conform/test-actor-graph.c  |  147 +++++++++++++++++++++++++++++++++++++
 tests/conform/test-conform-main.c |    7 +-
 3 files changed, 153 insertions(+), 2 deletions(-)
---
diff --git a/tests/conform/Makefile.am b/tests/conform/Makefile.am
index b34df28..ccc07ac 100644
--- a/tests/conform/Makefile.am
+++ b/tests/conform/Makefile.am
@@ -59,6 +59,7 @@ units_sources += \
 
 # actors tests
 units_sources += \
+	test-actor-graph.c		\
 	test-actor-destroy.c		\
 	test-actor-invariants.c 	\
 	test-actor-layout.c		\
diff --git a/tests/conform/test-actor-graph.c b/tests/conform/test-actor-graph.c
new file mode 100644
index 0000000..1d34fa7
--- /dev/null
+++ b/tests/conform/test-actor-graph.c
@@ -0,0 +1,147 @@
+#include <clutter/clutter.h>
+#include "test-conform-common.h"
+
+void
+actor_add_child (TestConformSimpleFixture *fixture,
+                 gconstpointer dummy)
+{
+  ClutterActor *actor = clutter_actor_new ();
+  ClutterActor *iter;
+
+  g_object_ref_sink (actor);
+
+  clutter_actor_add_child (actor, g_object_new (CLUTTER_TYPE_ACTOR,
+                                                "name", "foo",
+                                                NULL));
+  clutter_actor_add_child (actor, g_object_new (CLUTTER_TYPE_ACTOR,
+                                                "name", "bar",
+                                                NULL));
+  clutter_actor_add_child (actor, g_object_new (CLUTTER_TYPE_ACTOR,
+                                                "name", "baz",
+                                                NULL));
+
+  g_assert_cmpint (clutter_actor_get_n_children (actor), ==, 3);
+
+  iter = clutter_actor_get_first_child (actor);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "foo");
+
+  iter = clutter_actor_get_next_sibling (iter);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "bar");
+
+  iter = clutter_actor_get_next_sibling (iter);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "baz");
+  g_assert (iter == clutter_actor_get_last_child (actor));
+  g_assert (clutter_actor_get_next_sibling (iter) == NULL);
+
+  iter = clutter_actor_get_last_child (actor);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "baz");
+
+  iter = clutter_actor_get_previous_sibling (iter);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "bar");
+
+  iter = clutter_actor_get_previous_sibling (iter);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "foo");
+  g_assert (iter == clutter_actor_get_first_child (actor));
+  g_assert (clutter_actor_get_previous_sibling (iter) == NULL);
+
+  clutter_actor_destroy (actor);
+  g_object_unref (actor);
+}
+
+void
+actor_insert_child (TestConformSimpleFixture *fixture,
+                    gconstpointer data)
+{
+  ClutterActor *actor = clutter_actor_new ();
+  ClutterActor *iter;
+
+  g_object_ref_sink (actor);
+
+  clutter_actor_insert_child_at_index (actor,
+                                       g_object_new (CLUTTER_TYPE_ACTOR,
+                                                     "name", "foo",
+                                                     NULL),
+                                       0);
+
+  iter = clutter_actor_get_first_child (actor);
+  g_assert (iter != NULL);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "foo");
+  g_assert (iter == clutter_actor_get_child_at_index (actor, 0));
+
+  clutter_actor_insert_child_below (actor,
+                                    g_object_new (CLUTTER_TYPE_ACTOR,
+                                                  "name", "bar",
+                                                  NULL),
+                                    iter);
+
+  g_assert_cmpint (clutter_actor_get_n_children (actor), ==, 2);
+
+  iter = clutter_actor_get_first_child (actor);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "bar");
+  iter = clutter_actor_get_next_sibling (iter);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "foo");
+  g_assert (iter == clutter_actor_get_child_at_index (actor, 1));
+
+  iter = clutter_actor_get_first_child (actor);
+  clutter_actor_insert_child_above (actor,
+                                    g_object_new (CLUTTER_TYPE_ACTOR,
+                                                  "name", "baz",
+                                                  NULL),
+                                    iter);
+
+  iter = clutter_actor_get_last_child (actor);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "foo");
+
+  iter = clutter_actor_get_previous_sibling (iter);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "baz");
+
+  iter = clutter_actor_get_previous_sibling (iter);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "bar");
+
+  clutter_actor_destroy (actor);
+  g_object_unref (actor);
+}
+
+void
+actor_remove_child (TestConformSimpleFixture *fixture,
+                    gconstpointer data)
+{
+  ClutterActor *actor = clutter_actor_new ();
+  ClutterActor *iter;
+
+  g_object_ref_sink (actor);
+
+  clutter_actor_add_child (actor, g_object_new (CLUTTER_TYPE_ACTOR,
+                                                "name", "foo",
+                                                NULL));
+  clutter_actor_add_child (actor, g_object_new (CLUTTER_TYPE_ACTOR,
+                                                "name", "bar",
+                                                NULL));
+
+  g_assert_cmpint (clutter_actor_get_n_children (actor), ==, 2);
+
+  g_assert (clutter_actor_get_first_child (actor) != clutter_actor_get_last_child (actor));
+
+  iter = clutter_actor_get_first_child (actor);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "foo");
+
+  iter = clutter_actor_get_last_child (actor);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "bar");
+
+  clutter_actor_remove_child (actor, clutter_actor_get_first_child (actor));
+
+  g_assert_cmpint (clutter_actor_get_n_children (actor), ==, 1);
+
+  iter = clutter_actor_get_first_child (actor);
+  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "bar");
+  g_assert (clutter_actor_get_first_child (actor) == clutter_actor_get_last_child (actor));
+
+  clutter_actor_remove_child (actor, clutter_actor_get_first_child (actor));
+
+  g_assert_cmpint (clutter_actor_get_n_children (actor), ==, 0);
+  g_assert (clutter_actor_get_first_child (actor) == NULL);
+  g_assert (clutter_actor_get_last_child (actor) == NULL);
+
+  clutter_actor_destroy (actor);
+  g_object_unref (actor);
+}
diff --git a/tests/conform/test-conform-main.c b/tests/conform/test-conform-main.c
index c990347..fbd4acd 100644
--- a/tests/conform/test-conform-main.c
+++ b/tests/conform/test-conform-main.c
@@ -128,15 +128,18 @@ main (int argc, char **argv)
   /* sanity check for the test suite itself */
   TEST_CONFORM_TODO ("/suite", verify_failure);
 
+  TEST_CONFORM_SIMPLE ("/actor", actor_add_child);
+  TEST_CONFORM_SIMPLE ("/actor", actor_insert_child);
+  TEST_CONFORM_SIMPLE ("/actor", actor_remove_child);
   TEST_CONFORM_SIMPLE ("/actor", actor_destruction);
   TEST_CONFORM_SIMPLE ("/actor", actor_anchors);
   TEST_CONFORM_SIMPLE ("/actor", actor_picking);
   TEST_CONFORM_SIMPLE ("/actor", actor_fixed_size);
   TEST_CONFORM_SIMPLE ("/actor", actor_preferred_size);
-  TEST_CONFORM_SIMPLE ("/actor", test_offscreen_redirect);
-  TEST_CONFORM_SIMPLE ("/actor", test_shader_effect);
   TEST_CONFORM_SIMPLE ("/actor", basic_layout);
   TEST_CONFORM_SIMPLE ("/actor", margin_layout);
+  TEST_CONFORM_SIMPLE ("/actor", test_offscreen_redirect);
+  TEST_CONFORM_SIMPLE ("/actor", test_shader_effect);
 
   TEST_CONFORM_SIMPLE ("/invariants", test_initial_state);
   TEST_CONFORM_SIMPLE ("/invariants", test_shown_not_parented);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]