diff --git a/.gitignore b/.gitignore index 11083c4a1..fe8c173e6 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/tests/conform/test-animator.c b/tests/conform/test-animator.c index c1b193342..30585d2aa 100644 --- a/tests/conform/test-animator.c +++ b/tests/conform/test-animator.c @@ -2,6 +2,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) diff --git a/tests/conform/test-conform-main.c b/tests/conform/test-conform-main.c index 6943a5433..df551b5ef 100644 --- a/tests/conform/test-conform-main.c +++ b/tests/conform/test-conform-main.c @@ -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 index 000000000..26d779bee --- /dev/null +++ b/tests/data/test-animator-3.json @@ -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 ] + ] + } + ] + } +]