1 #include <clutter/clutter.h>
2
3 #include "tests/clutter-test-utils.h"
4
5 static void
interval_initial_state(void)6 interval_initial_state (void)
7 {
8 ClutterInterval *interval;
9 int initial, final;
10 const GValue *value;
11
12 interval = clutter_interval_new (G_TYPE_INT, 0, 100);
13 g_assert (CLUTTER_IS_INTERVAL (interval));
14 g_assert (clutter_interval_get_value_type (interval) == G_TYPE_INT);
15
16 clutter_interval_get_interval (interval, &initial, &final);
17 g_assert_cmpint (initial, ==, 0);
18 g_assert_cmpint (final, ==, 100);
19
20 value = clutter_interval_compute (interval, 0);
21 g_assert (G_VALUE_HOLDS_INT (value));
22 g_assert_cmpint (g_value_get_int (value), ==, 0);
23
24 value = clutter_interval_compute (interval, 1);
25 g_assert (G_VALUE_HOLDS_INT (value));
26 g_assert_cmpint (g_value_get_int (value), ==, 100);
27
28 value = clutter_interval_compute (interval, 0.5);
29 g_assert (G_VALUE_HOLDS_INT (value));
30 g_assert_cmpint (g_value_get_int (value), ==, 50);
31
32 clutter_interval_set_final (interval, 200);
33 value = clutter_interval_peek_final_value (interval);
34 g_assert (G_VALUE_HOLDS_INT (value));
35 g_assert_cmpint (g_value_get_int (value), ==, 200);
36
37 g_object_unref (interval);
38 }
39
40 static void
interval_transform(void)41 interval_transform (void)
42 {
43 ClutterInterval *interval;
44 GValue value = G_VALUE_INIT;
45 const GValue *value_p = NULL;
46
47 interval = clutter_interval_new_with_values (G_TYPE_FLOAT, NULL, NULL);
48
49 g_value_init (&value, G_TYPE_DOUBLE);
50
51 g_value_set_double (&value, 0.0);
52 clutter_interval_set_initial_value (interval, &value);
53
54 g_value_set_double (&value, 100.0);
55 clutter_interval_set_final_value (interval, &value);
56
57 g_value_unset (&value);
58
59 value_p = clutter_interval_peek_initial_value (interval);
60 g_assert (G_VALUE_HOLDS_FLOAT (value_p));
61 g_assert_cmpfloat (g_value_get_float (value_p), ==, 0.f);
62
63 value_p = clutter_interval_peek_final_value (interval);
64 g_assert (G_VALUE_HOLDS_FLOAT (value_p));
65 g_assert_cmpfloat (g_value_get_float (value_p), ==, 100.f);
66
67 g_object_unref (interval);
68 }
69
70 static void
interval_from_script(void)71 interval_from_script (void)
72 {
73 ClutterScript *script = clutter_script_new ();
74 ClutterInterval *interval;
75 gchar *test_file;
76 GError *error = NULL;
77 GValue *initial, *final;
78
79 test_file = g_test_build_filename (G_TEST_DIST,
80 "scripts",
81 "test-script-interval.json",
82 NULL);
83 clutter_script_load_from_file (script, test_file, &error);
84 if (!g_test_quiet () && error)
85 g_printerr ("\tError: %s", error->message);
86
87 g_assert_no_error (error);
88
89 interval = CLUTTER_INTERVAL (clutter_script_get_object (script, "int-1"));
90 initial = clutter_interval_peek_initial_value (interval);
91 if (!g_test_quiet ())
92 g_test_message ("\tinitial ['%s'] = '%.2f'",
93 g_type_name (G_VALUE_TYPE (initial)),
94 g_value_get_float (initial));
95 g_assert (G_VALUE_HOLDS (initial, G_TYPE_FLOAT));
96 g_assert_cmpfloat (g_value_get_float (initial), ==, 23.3f);
97 final = clutter_interval_peek_final_value (interval);
98 if (!g_test_quiet ())
99 g_test_message ("\tfinal ['%s'] = '%.2f'",
100 g_type_name (G_VALUE_TYPE (final)),
101 g_value_get_float (final));
102 g_assert (G_VALUE_HOLDS (final, G_TYPE_FLOAT));
103 g_assert_cmpfloat (g_value_get_float (final), ==, 42.2f);
104
105 interval = CLUTTER_INTERVAL (clutter_script_get_object (script, "int-2"));
106 initial = clutter_interval_peek_initial_value (interval);
107 g_assert (G_VALUE_HOLDS (initial, CLUTTER_TYPE_COLOR));
108 final = clutter_interval_peek_final_value (interval);
109 g_assert (G_VALUE_HOLDS (final, CLUTTER_TYPE_COLOR));
110
111 g_object_unref (script);
112 g_free (test_file);
113 }
114
115 CLUTTER_TEST_SUITE (
116 CLUTTER_TEST_UNIT ("/interval/initial-state", interval_initial_state)
117 CLUTTER_TEST_UNIT ("/interval/transform", interval_transform)
118 CLUTTER_TEST_UNIT ("/interval/from-script", interval_from_script)
119 )
120