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