conform: Verify parsing of multiple properties
authorEmmanuele Bassi <ebassi@linux.intel.com>
Wed, 24 Feb 2010 16:43:17 +0000 (16:43 +0000)
committerEmmanuele Bassi <ebassi@linux.intel.com>
Wed, 24 Feb 2010 16:43:17 +0000 (16:43 +0000)
The ClutterAnimator support for parsing multiple properties should be
verified in the conformance test suite.

http://bugzilla.openedhand.com/show_bug.cgi?id=2003

.gitignore
tests/conform/test-animator.c
tests/conform/test-conform-main.c
tests/data/test-animator-3.json [new file with mode: 0644]

index 11083c4..fe8c173 100644 (file)
@@ -250,6 +250,7 @@ TAGS
 /tests/conform/test-cogl-multitexture
 /tests/conform/test-animator-base
 /tests/conform/test-animator-properties
+/tests/conform/test-animator-multi-properties
 /tests/micro-bench/test-text-perf
 /tests/micro-bench/test-text
 /tests/micro-bench/test-picking
index c1b1933..30585d2 100644 (file)
@@ -3,6 +3,104 @@
 #include "test-conform-common.h"
 
 void
+test_animator_multi_properties (TestConformSimpleFixture *fixture,
+                                gconstpointer dummy)
+{
+  ClutterScript *script = clutter_script_new ();
+  GObject *animator = NULL, *foo = NULL;
+  GError *error = NULL;
+  gchar *test_file;
+  GList *keys;
+  ClutterAnimatorKey *key;
+  GValue value = { 0, };
+
+  test_file = clutter_test_get_data_file ("test-animator-3.json");
+  clutter_script_load_from_file (script, test_file, &error);
+  if (g_test_verbose () && error)
+    g_print ("Error: %s", error->message);
+  g_assert (error == NULL);
+
+  foo = clutter_script_get_object (script, "foo");
+  g_assert (G_IS_OBJECT (foo));
+
+  animator = clutter_script_get_object (script, "animator");
+  g_assert (CLUTTER_IS_ANIMATOR (animator));
+
+  /* get all the keys for foo:x */
+  keys = clutter_animator_get_keys (CLUTTER_ANIMATOR (animator),
+                                    foo, "x",
+                                    -1.0);
+  g_assert_cmpint (g_list_length (keys), ==, 3);
+
+  key = g_list_nth_data (keys, 1);
+  g_assert (key != NULL);
+
+  if (g_test_verbose ())
+    {
+      g_print ("(foo, x).keys[1] = \n"
+               ".object = %s\n"
+               ".progress = %.2f\n"
+               ".name = '%s'\n"
+               ".type = '%s'\n",
+               clutter_get_script_id (clutter_animator_key_get_object (key)),
+               clutter_animator_key_get_progress (key),
+               clutter_animator_key_get_property_name (key),
+               g_type_name (clutter_animator_key_get_property_type (key)));
+    }
+
+  g_assert (clutter_animator_key_get_object (key) != NULL);
+  g_assert_cmpfloat (clutter_animator_key_get_progress (key), ==, 0.2);
+  g_assert_cmpstr (clutter_animator_key_get_property_name (key), ==, "x");
+
+  g_assert (clutter_animator_key_get_property_type (key) == G_TYPE_FLOAT);
+
+  g_value_init (&value, G_TYPE_FLOAT);
+  g_assert (clutter_animator_key_get_value (key, &value));
+  g_assert_cmpfloat (g_value_get_float (&value), ==, 150.0);
+  g_value_unset (&value);
+
+  g_list_free (keys);
+
+  /* get all the keys for foo:y */
+  keys = clutter_animator_get_keys (CLUTTER_ANIMATOR (animator),
+                                    foo, "y",
+                                    -1.0);
+  g_assert_cmpint (g_list_length (keys), ==, 3);
+
+  key = g_list_nth_data (keys, 2);
+  g_assert (key != NULL);
+
+  if (g_test_verbose ())
+    {
+      g_print ("(foo, y).keys[2] = \n"
+               ".object = %s\n"
+               ".progress = %.2f\n"
+               ".name = '%s'\n"
+               ".type = '%s'\n",
+               clutter_get_script_id (clutter_animator_key_get_object (key)),
+               clutter_animator_key_get_progress (key),
+               clutter_animator_key_get_property_name (key),
+               g_type_name (clutter_animator_key_get_property_type (key)));
+    }
+
+  g_assert (clutter_animator_key_get_object (key) != NULL);
+  g_assert_cmpfloat (clutter_animator_key_get_progress (key), ==, 0.8);
+  g_assert_cmpstr (clutter_animator_key_get_property_name (key), ==, "y");
+
+  g_assert (clutter_animator_key_get_property_type (key) == G_TYPE_FLOAT);
+
+  g_value_init (&value, G_TYPE_FLOAT);
+  g_assert (clutter_animator_key_get_value (key, &value));
+  g_assert_cmpfloat (g_value_get_float (&value), ==, 200.0);
+  g_value_unset (&value);
+
+  g_list_free (keys);
+
+  g_object_unref (script);
+  g_free (test_file);
+}
+
+void
 test_animator_properties (TestConformSimpleFixture *fixture,
                           gconstpointer dummy)
 {
index 6943a54..df551b5 100644 (file)
@@ -181,6 +181,7 @@ main (int argc, char **argv)
   TEST_CONFORM_SIMPLE ("/script", test_script_named_object);
   TEST_CONFORM_SIMPLE ("/script", test_animator_base);
   TEST_CONFORM_SIMPLE ("/script", test_animator_properties);
+  TEST_CONFORM_SIMPLE ("/script", test_animator_multi_properties);
 
   TEST_CONFORM_SIMPLE ("/behaviours", test_behaviours);
 
diff --git a/tests/data/test-animator-3.json b/tests/data/test-animator-3.json
new file mode 100644 (file)
index 0000000..26d779b
--- /dev/null
@@ -0,0 +1,40 @@
+[
+  {
+    "type" : "ClutterRectangle",
+    "id" : "foo",
+    "x" : 0,
+    "y" : 0,
+    "width" : 100,
+    "height" : 100
+  },
+  {
+    "type" : "ClutterAnimator",
+    "id" : "animator",
+    "duration" : 1000,
+
+    "properties" : [
+      {
+        "object" : "foo",
+        "name" : "x",
+        "ease-in" : true,
+        "interpolation" : "linear",
+        "keys" : [
+          [ 0.0, "easeInCubic",  100.0 ],
+          [ 0.2, "easeOutCubic", 150.0 ],
+          [ 0.8, "linear",       200.0 ]
+        ]
+      },
+      {
+        "object" : "foo",
+        "name" : "y",
+        "ease-in" : true,
+        "interpolation" : "linear",
+        "keys" : [
+          [ 0.0, "easeInCubic",  100.0 ],
+          [ 0.2, "easeOutCubic", 150.0 ],
+          [ 0.8, "linear",       200.0 ]
+        ]
+      }
+    ]
+  }
+]