Branch data Line data Source code
1 : : #undef G_DISABLE_ASSERT
2 : :
3 : : #include <shumate/shumate.h>
4 : : #include "shumate/shumate-vector-sprite-sheet.h"
5 : :
6 : : static void
7 : 3 : test_vector_sprite_sheet (void)
8 : : {
9 : 6 : g_autoptr(GError) error = NULL;
10 [ - + ]: 3 : g_autoptr(ShumateVectorSpriteSheet) sprites = NULL;
11 [ + - ]: 3 : g_autoptr(GdkTexture) texture = NULL;
12 [ + - ]: 3 : g_autoptr(GBytes) json_bytes = NULL;
13 [ + - ]: 3 : g_autoptr(ShumateVectorSprite) sprite = NULL;
14 : :
15 : 3 : json_bytes = g_resources_lookup_data ("/org/gnome/shumate/Tests/sprites.json", G_RESOURCE_LOOKUP_FLAGS_NONE, &error);
16 [ - + ]: 3 : g_assert_no_error (error);
17 : 3 : texture = gdk_texture_new_from_resource ("/org/gnome/shumate/Tests/sprites.png");
18 : :
19 : 3 : sprites = shumate_vector_sprite_sheet_new ();
20 : :
21 : 3 : shumate_vector_sprite_sheet_add_page (sprites, texture, g_bytes_get_data (json_bytes, NULL), 1, &error);
22 [ - + ]: 3 : g_assert_no_error (error);
23 [ - + ]: 3 : g_assert_nonnull (sprites);
24 : :
25 : 3 : sprite = shumate_vector_sprite_sheet_get_sprite (sprites, "sprite", 1);
26 [ - + ]: 3 : g_assert_true (SHUMATE_IS_VECTOR_SPRITE (sprite));
27 [ + - ]: 3 : g_clear_object (&sprite);
28 : :
29 : 3 : sprite = shumate_vector_sprite_sheet_get_sprite (sprites, "not-a-sprite", 1);
30 [ - + ]: 3 : g_assert_null (sprite);
31 [ - + + - ]: 3 : g_clear_object (&sprite);
32 : 3 : }
33 : :
34 : : typedef struct {
35 : : char *expected_name;
36 : : gboolean called;
37 : : gboolean return_null;
38 : : } FallbackData;
39 : :
40 : : static ShumateVectorSprite *
41 : 312 : fallback_func (ShumateVectorSpriteSheet *sprite_sheet,
42 : : const char *name,
43 : : double scale_factor,
44 : : gpointer user_data)
45 : : {
46 : 312 : FallbackData *data = user_data;
47 : 624 : g_autoptr(GdkPaintable) paintable = NULL;
48 : :
49 [ - + ]: 312 : g_assert_cmpstr (name, ==, data->expected_name);
50 : 312 : data->called = TRUE;
51 : :
52 : : /* Test reentrancy */
53 : 312 : g_object_unref (shumate_vector_sprite_sheet_get_sprite (sprite_sheet, "sprite", 1));
54 : :
55 [ + + ]: 312 : if (data->return_null)
56 : : return NULL;
57 : : else
58 : : {
59 : 309 : paintable = GDK_PAINTABLE (gdk_texture_new_from_resource ("/org/gnome/shumate/Tests/sprites.png"));
60 : 309 : return shumate_vector_sprite_new (paintable);
61 : : }
62 : : }
63 : :
64 : :
65 : : static void
66 : 3 : test_vector_sprite_sheet_fallback (void)
67 : : {
68 : 6 : g_autoptr(GError) error = NULL;
69 [ - + ]: 3 : g_autoptr(ShumateVectorSpriteSheet) sprites = NULL;
70 [ + - ]: 3 : g_autoptr(GdkTexture) texture = NULL;
71 [ + - ]: 3 : g_autoptr(GBytes) json_bytes = NULL;
72 [ + - ]: 3 : g_autoptr(ShumateVectorSprite) sprite = NULL;
73 : 3 : FallbackData *user_data;
74 : :
75 : 3 : json_bytes = g_resources_lookup_data ("/org/gnome/shumate/Tests/sprites.json", G_RESOURCE_LOOKUP_FLAGS_NONE, &error);
76 [ - + ]: 3 : g_assert_no_error (error);
77 : 3 : texture = gdk_texture_new_from_resource ("/org/gnome/shumate/Tests/sprites.png");
78 : :
79 : 3 : sprites = shumate_vector_sprite_sheet_new ();
80 : 3 : shumate_vector_sprite_sheet_add_page (sprites, texture, g_bytes_get_data (json_bytes, NULL), 1, &error);
81 [ - + ]: 3 : g_assert_no_error (error);
82 [ - + ]: 3 : g_assert_nonnull (sprites);
83 : :
84 : 3 : user_data = g_new0 (FallbackData, 1);
85 : 3 : shumate_vector_sprite_sheet_set_fallback (sprites, fallback_func, user_data, g_free);
86 : :
87 : : /* the fallback function should not be called for sprites in the sheet */
88 : 3 : sprite = shumate_vector_sprite_sheet_get_sprite (sprites, "sprite", 1);
89 [ - + ]: 3 : g_assert_true (SHUMATE_IS_VECTOR_SPRITE (sprite));
90 [ - + ]: 3 : g_assert_false (user_data->called);
91 [ + - ]: 3 : g_clear_object (&sprite);
92 : :
93 : : /* the fallback function should provide a sprite */
94 : 3 : user_data->expected_name = "not-a-sprite";
95 : 3 : sprite = shumate_vector_sprite_sheet_get_sprite (sprites, "not-a-sprite", 1);
96 [ - + ]: 3 : g_assert_true (SHUMATE_IS_VECTOR_SPRITE (sprite));
97 [ - + ]: 3 : g_assert_true (user_data->called);
98 : :
99 [ + - ]: 3 : g_clear_object (&sprite);
100 : 3 : user_data->called = FALSE;
101 : :
102 : : /* should be cached */
103 : 3 : sprite = shumate_vector_sprite_sheet_get_sprite (sprites, "not-a-sprite", 1);
104 [ - + ]: 3 : g_assert_true (SHUMATE_IS_VECTOR_SPRITE (sprite));
105 [ - + ]: 3 : g_assert_false (user_data->called);
106 [ + - ]: 3 : g_clear_object (&sprite);
107 : :
108 : : /* test the case when the fallback function returns NULL */
109 : 3 : user_data->expected_name = "not-a-sprite-2";
110 : 3 : user_data->return_null = TRUE;
111 : 3 : sprite = shumate_vector_sprite_sheet_get_sprite (sprites, "not-a-sprite-2", 1);
112 [ - + ]: 3 : g_assert_null (sprite);
113 [ - + ]: 3 : g_assert_true (user_data->called);
114 : :
115 : 3 : user_data->called = FALSE;
116 : :
117 : : /* NULL responses should also be cached */
118 : 3 : sprite = shumate_vector_sprite_sheet_get_sprite (sprites, "not-a-sprite-2", 1);
119 [ - + ]: 3 : g_assert_null (sprite);
120 [ - + ]: 3 : g_assert_false (user_data->called);
121 : :
122 : : /* test cache purging */
123 : 3 : user_data->expected_name = "cached-sprite";
124 : 3 : user_data->return_null = FALSE;
125 : 3 : sprite = shumate_vector_sprite_sheet_get_sprite (sprites, "cached-sprite", 1);
126 [ - + ]: 3 : g_assert_true (SHUMATE_IS_VECTOR_SPRITE (sprite));
127 [ + - ]: 3 : g_clear_object (&sprite);
128 [ + + ]: 303 : for (int i = 0; i < 100; i ++)
129 : : {
130 : 300 : g_autoptr(ShumateVectorSprite) filler_sprite = NULL;
131 [ + - ]: 600 : g_autofree char *name = g_strdup_printf ("filler-sprite-%d", i);
132 : 300 : user_data->expected_name = name;
133 : 300 : filler_sprite = shumate_vector_sprite_sheet_get_sprite (sprites, name, 1);
134 : : }
135 : 3 : user_data->called = FALSE;
136 : :
137 : : /* should not be cached anymore */
138 : 3 : user_data->expected_name = "cached-sprite";
139 : 3 : sprite = shumate_vector_sprite_sheet_get_sprite (sprites, "cached-sprite", 1);
140 [ - + ]: 3 : g_assert_true (SHUMATE_IS_VECTOR_SPRITE (sprite));
141 [ - + ]: 3 : g_assert_true (user_data->called);
142 [ + - + - ]: 3 : g_clear_object (&sprite);
143 : 3 : }
144 : :
145 : : void
146 : 3 : test_scale_factor (void)
147 : : {
148 : 6 : g_autoptr(GError) error = NULL;
149 [ - + ]: 3 : g_autoptr(ShumateVectorSpriteSheet) sprites = NULL;
150 [ + - ]: 3 : g_autoptr(GdkTexture) texture = NULL;
151 [ + - ]: 3 : g_autoptr(GBytes) json_bytes = NULL;
152 [ + - ]: 3 : g_autoptr(GdkTexture) texture_2x = NULL;
153 [ + - ]: 3 : g_autoptr(GBytes) json_bytes_2x = NULL;
154 : 3 : ShumateVectorSprite *sprite;
155 [ + - ]: 3 : g_autoptr(ShumateVectorSprite) new_sprite = NULL;
156 : :
157 : 3 : sprites = shumate_vector_sprite_sheet_new ();
158 : :
159 : 3 : json_bytes = g_resources_lookup_data ("/org/gnome/shumate/Tests/sprites.json", G_RESOURCE_LOOKUP_FLAGS_NONE, &error);
160 [ - + ]: 3 : g_assert_no_error (error);
161 : 3 : texture = gdk_texture_new_from_resource ("/org/gnome/shumate/Tests/sprites.png");
162 : 3 : shumate_vector_sprite_sheet_add_page (sprites, texture, g_bytes_get_data (json_bytes, NULL), 1, &error);
163 [ - + ]: 3 : g_assert_no_error (error);
164 : :
165 : 3 : json_bytes_2x = g_resources_lookup_data ("/org/gnome/shumate/Tests/sprites@2x.json", G_RESOURCE_LOOKUP_FLAGS_NONE, &error);
166 [ - + ]: 3 : g_assert_no_error (error);
167 : 3 : texture_2x = gdk_texture_new_from_resource ("/org/gnome/shumate/Tests/sprites@2x.png");
168 [ - + ]: 3 : g_assert_no_error (error);
169 : 3 : shumate_vector_sprite_sheet_add_page (sprites, texture_2x, g_bytes_get_data (json_bytes_2x, NULL), 2, &error);
170 [ - + ]: 3 : g_assert_no_error (error);
171 : :
172 : 3 : sprite = shumate_vector_sprite_sheet_get_sprite (sprites, "sprite", 1);
173 [ - + ]: 3 : g_assert_true (SHUMATE_IS_VECTOR_SPRITE (sprite));
174 [ - + ]: 3 : g_assert_cmpint (shumate_vector_sprite_get_scale_factor (sprite), ==, 1);
175 [ - + ]: 3 : g_assert_cmpint (shumate_vector_sprite_get_width (sprite), ==, 16);
176 [ - + ]: 3 : g_assert_cmpfloat (gdk_paintable_get_intrinsic_width (shumate_vector_sprite_get_source_paintable (sprite)), ==, 16);
177 [ + - ]: 3 : g_clear_object (&sprite);
178 : :
179 : 3 : sprite = shumate_vector_sprite_sheet_get_sprite (sprites, "sprite", 2);
180 [ - + ]: 3 : g_assert_true (SHUMATE_IS_VECTOR_SPRITE (sprite));
181 [ - + ]: 3 : g_assert_cmpint (shumate_vector_sprite_get_scale_factor (sprite), ==, 2);
182 [ - + ]: 3 : g_assert_cmpint (shumate_vector_sprite_get_width (sprite), ==, 16);
183 [ - + ]: 3 : g_assert_cmpfloat (gdk_paintable_get_intrinsic_width (shumate_vector_sprite_get_source_paintable (sprite)), ==, 32);
184 [ + - ]: 3 : g_clear_object (&sprite);
185 : :
186 : 3 : sprite = shumate_vector_sprite_sheet_get_sprite (sprites, "sprite", 3);
187 [ - + ]: 3 : g_assert_cmpint (shumate_vector_sprite_get_scale_factor (sprite), ==, 2);
188 [ + - ]: 3 : g_clear_object (&sprite);
189 : :
190 : 3 : sprite = shumate_vector_sprite_sheet_get_sprite (sprites, "sprite", 0.5);
191 [ - + ]: 3 : g_assert_cmpint (shumate_vector_sprite_get_scale_factor (sprite), ==, 1);
192 [ + - + - ]: 3 : g_clear_object (&sprite);
193 : 3 : }
194 : :
195 : :
196 : : int
197 : 3 : main (int argc, char *argv[])
198 : : {
199 : 3 : g_test_init (&argc, &argv, NULL);
200 : :
201 : 3 : g_test_add_func ("/vector-sprite-sheet/sprites", test_vector_sprite_sheet);
202 : 3 : g_test_add_func ("/vector-sprite-sheet/fallback", test_vector_sprite_sheet_fallback);
203 : 3 : g_test_add_func ("/vector-sprite-sheet/scale-factor", test_scale_factor);
204 : :
205 : 3 : return g_test_run ();
206 : : }
|