conform: Adds a test-cogl-object conformance test
authorRobert Bragg <robert@linux.intel.com>
Tue, 1 Jun 2010 16:27:59 +0000 (17:27 +0100)
committerRobert Bragg <robert@linux.intel.com>
Fri, 4 Jun 2010 13:44:15 +0000 (14:44 +0100)
This tests the new cogl_object_get/set_user_data API

tests/conform/Makefile.am
tests/conform/test-cogl-object.c [new file with mode: 0644]
tests/conform/test-conform-main.c

index 28f6074..e9d1e57 100644 (file)
@@ -30,6 +30,7 @@ test_conformance_SOURCES =            \
        test-cogl-wrap-modes.c          \
        test-cogl-pixel-buffer.c        \
        test-cogl-path.c                \
+       test-cogl-object.c              \
        test-path.c                     \
        test-pick.c                     \
        test-clutter-rectangle.c        \
diff --git a/tests/conform/test-cogl-object.c b/tests/conform/test-cogl-object.c
new file mode 100644 (file)
index 0000000..4fb1922
--- /dev/null
@@ -0,0 +1,86 @@
+
+#include <clutter/clutter.h>
+#include <cogl/cogl.h>
+#include <string.h>
+
+#include "test-conform-common.h"
+
+CoglUserDataKey private_key0;
+CoglUserDataKey private_key1;
+CoglUserDataKey private_key2;
+
+static int user_data0;
+static int user_data1;
+static int user_data2;
+
+static int destroy0_count = 0;
+static int destroy1_count = 0;
+static int destroy2_count = 0;
+
+static void
+destroy0_cb (void *user_data)
+{
+  g_assert (user_data == &user_data0);
+  destroy0_count++;
+}
+
+static void
+destroy1_cb (void *user_data)
+{
+  g_assert (user_data == &user_data1);
+  destroy1_count++;
+}
+
+static void
+destroy2_cb (void *user_data)
+{
+  g_assert (user_data == &user_data2);
+  destroy2_count++;
+}
+
+void
+test_cogl_object (TestConformSimpleFixture *fixture,
+                  gconstpointer data)
+{
+  CoglPath *path;
+
+  /* Assuming that COGL_OBJECT_N_PRE_ALLOCATED_USER_DATA_ENTRIES == 2
+   * test associating 2 pointers to private data with an object */
+  cogl_path_new ();
+  path = cogl_get_path ();
+
+  cogl_object_set_user_data (COGL_OBJECT (path),
+                             &private_key0,
+                             &user_data0,
+                             destroy0_cb);
+
+  cogl_object_set_user_data (COGL_OBJECT (path),
+                             &private_key1,
+                             &user_data1,
+                             destroy1_cb);
+
+  cogl_object_set_user_data (COGL_OBJECT (path),
+                             &private_key2,
+                             &user_data2,
+                             destroy2_cb);
+
+  cogl_object_set_user_data (COGL_OBJECT (path),
+                             &private_key1,
+                             NULL,
+                             destroy1_cb);
+
+  cogl_object_set_user_data (COGL_OBJECT (path),
+                             &private_key1,
+                             &user_data1,
+                             destroy1_cb);
+
+  cogl_object_unref (path);
+
+  g_assert_cmpint (destroy0_count, ==, 1);
+  g_assert_cmpint (destroy1_count, ==, 2);
+  g_assert_cmpint (destroy2_count, ==, 1);
+
+  if (g_test_verbose ())
+    g_print ("OK\n");
+}
+
index 9a10a4c..7b0aa6b 100644 (file)
@@ -189,6 +189,7 @@ main (int argc, char **argv)
 
   TEST_CONFORM_SIMPLE ("/behaviours", test_behaviours);
 
+  TEST_CONFORM_SIMPLE ("/cogl", test_cogl_object);
   TEST_CONFORM_SIMPLE ("/cogl", test_cogl_fixed);
   TEST_CONFORM_SIMPLE ("/cogl", test_cogl_backface_culling);
   TEST_CONFORM_SIMPLE ("/cogl", test_cogl_materials);