Branch data Line data Source code
1 : : #undef G_DISABLE_ASSERT
2 : :
3 : : #include <gtk/gtk.h>
4 : : #include <shumate/shumate.h>
5 : :
6 : : static void
7 : 3 : test_viewport_zoom_level_min (void)
8 : : {
9 : 6 : g_autoptr(ShumateViewport) viewport = NULL;
10 : :
11 : 3 : viewport = shumate_viewport_new ();
12 [ - + ]: 3 : g_assert_cmpuint (shumate_viewport_get_min_zoom_level (viewport), ==, 0);
13 : :
14 : 3 : shumate_viewport_set_max_zoom_level (viewport, 20);
15 : 3 : shumate_viewport_set_zoom_level (viewport, 5);
16 : :
17 : 3 : shumate_viewport_set_min_zoom_level (viewport, 10);
18 [ - + ]: 3 : g_assert_cmpuint (shumate_viewport_get_min_zoom_level (viewport), ==, 10);
19 : :
20 : : /* Increasing the minimum zoom level must increase the current zoom level too */
21 [ - + ]: 3 : g_assert_cmpuint (shumate_viewport_get_zoom_level (viewport), ==, 10);
22 : :
23 : : /* But decreasing it may not */
24 : 3 : shumate_viewport_set_zoom_level (viewport, 10);
25 : 3 : shumate_viewport_set_min_zoom_level (viewport, 0);
26 [ - + + - ]: 3 : g_assert_cmpuint (shumate_viewport_get_zoom_level (viewport), ==, 10);
27 : 3 : }
28 : :
29 : : static void
30 : 3 : test_viewport_zoom_level_max (void)
31 : : {
32 : 6 : g_autoptr(ShumateViewport) viewport = NULL;
33 : :
34 : 3 : viewport = shumate_viewport_new ();
35 [ - + ]: 3 : g_assert_cmpuint (shumate_viewport_get_max_zoom_level (viewport), ==, 20);
36 : :
37 : 3 : shumate_viewport_set_max_zoom_level (viewport, 17);
38 [ - + ]: 3 : g_assert_cmpuint (shumate_viewport_get_max_zoom_level (viewport), ==, 17);
39 : :
40 : : /* Setting the maximum zoom level must update the current zoom level too */
41 : 3 : shumate_viewport_set_zoom_level (viewport, 15);
42 : 3 : shumate_viewport_set_max_zoom_level (viewport, 10);
43 [ - + + - ]: 3 : g_assert_cmpuint (shumate_viewport_get_zoom_level (viewport), ==, 10);
44 : 3 : }
45 : :
46 : : static void
47 : 3 : test_viewport_zoom_level_clamp (void)
48 : : {
49 : 6 : g_autoptr(ShumateViewport) viewport = NULL;
50 : :
51 : 3 : viewport = shumate_viewport_new ();
52 [ - + ]: 3 : g_assert_cmpuint (shumate_viewport_get_min_zoom_level (viewport), ==, 0);
53 [ - + ]: 3 : g_assert_cmpuint (shumate_viewport_get_max_zoom_level (viewport), ==, 20);
54 : :
55 : : /* Can't set min zoom level > max zoom level */
56 : 3 : g_test_expect_message ("shumate",
57 : : G_LOG_LEVEL_CRITICAL,
58 : : "shumate_viewport_set_min_zoom_level: assertion 'min_zoom_level <= self->max_zoom_level' failed");
59 : :
60 : 3 : shumate_viewport_set_min_zoom_level (viewport, 21);
61 : 3 : g_test_assert_expected_messages ();
62 [ - + ]: 3 : g_assert_cmpuint (shumate_viewport_get_min_zoom_level (viewport), ==, 0);
63 : :
64 : 3 : shumate_viewport_set_min_zoom_level (viewport, 5);
65 : 3 : shumate_viewport_set_max_zoom_level (viewport, 15);
66 : :
67 : : /* Equally, can't set max zoom level < min zoom level */
68 : 3 : g_test_expect_message ("shumate",
69 : : G_LOG_LEVEL_CRITICAL,
70 : : "shumate_viewport_set_max_zoom_level: assertion 'max_zoom_level >= self->min_zoom_level' failed");
71 : :
72 : 3 : shumate_viewport_set_max_zoom_level (viewport, 0);
73 : 3 : g_test_assert_expected_messages ();
74 [ - + ]: 3 : g_assert_cmpuint (shumate_viewport_get_max_zoom_level (viewport), ==, 15);
75 : :
76 : : /* shumate_viewport_set_min_zoom_level() must have updated the current zoom level */
77 [ - + ]: 3 : g_assert_cmpuint (shumate_viewport_get_zoom_level (viewport), ==, 5);
78 : :
79 : 3 : shumate_viewport_set_zoom_level (viewport, 10);
80 [ - + ]: 3 : g_assert_cmpuint (shumate_viewport_get_zoom_level (viewport), ==, 10);
81 : :
82 : : /* Zoom level below the minimum must clamp */
83 : 3 : shumate_viewport_set_zoom_level (viewport, 0);
84 [ - + ]: 3 : g_assert_cmpuint (shumate_viewport_get_zoom_level (viewport), ==, 5);
85 : :
86 : : /* Zoom level above the maximum must clamp too */
87 : 3 : shumate_viewport_set_zoom_level (viewport, 20);
88 [ - + + - ]: 3 : g_assert_cmpuint (shumate_viewport_get_zoom_level (viewport), ==, 15);
89 : 3 : }
90 : :
91 : : static guint max_zoom_level_notify_counter = 0;
92 : : static guint min_zoom_level_notify_counter = 0;
93 : : static guint zoom_level_notify_counter = 0;
94 : :
95 : : static void
96 : 18 : on_max_zoom_level_changed_cb (ShumateViewport *viewport,
97 : : GParamSpec *pspec,
98 : : gpointer user_data)
99 : : {
100 : 18 : max_zoom_level_notify_counter++;
101 : 18 : }
102 : :
103 : : static void
104 : 15 : on_min_zoom_level_changed_cb (ShumateViewport *viewport,
105 : : GParamSpec *pspec,
106 : : gpointer user_data)
107 : : {
108 : 15 : min_zoom_level_notify_counter++;
109 : 15 : }
110 : :
111 : : static void
112 : 15 : on_zoom_level_changed_cb (ShumateViewport *viewport,
113 : : GParamSpec *pspec,
114 : : gpointer user_data)
115 : : {
116 : 15 : zoom_level_notify_counter++;
117 : 15 : }
118 : :
119 : : static void
120 : 3 : test_viewport_zoom_level_notify (void)
121 : : {
122 : 6 : g_autoptr(ShumateViewport) viewport = NULL;
123 : 3 : guint i;
124 : :
125 : 3 : viewport = g_object_connect (shumate_viewport_new (),
126 : : "signal::notify::max-zoom-level", on_max_zoom_level_changed_cb, NULL,
127 : : "signal::notify::min-zoom-level", on_min_zoom_level_changed_cb, NULL,
128 : : "signal::notify::zoom-level", on_zoom_level_changed_cb, NULL,
129 : : NULL);
130 : :
131 : : /* Max zoom level */
132 [ + + ]: 21 : for (i = 10; i > 5; i--)
133 : 15 : shumate_viewport_set_max_zoom_level (viewport, i);
134 [ - + ]: 3 : g_assert_cmpuint (max_zoom_level_notify_counter, ==, 5);
135 : :
136 : : /* Only the first should emit notify::max-zoom-level */
137 [ + + ]: 18 : for (i = 0; i < 5; i++)
138 : 15 : shumate_viewport_set_max_zoom_level (viewport, 15);
139 [ - + ]: 3 : g_assert_cmpuint (max_zoom_level_notify_counter, ==, 6);
140 : :
141 : :
142 : : /* Zoom level */
143 [ + + ]: 18 : for (i = 14; i >= 10; i--)
144 : 15 : shumate_viewport_set_zoom_level (viewport, i);
145 [ - + ]: 3 : g_assert_cmpuint (zoom_level_notify_counter, ==, 5);
146 : :
147 : 3 : for (i = 0; i > 5; i--)
148 : : shumate_viewport_set_zoom_level (viewport, 10);
149 [ - + ]: 3 : g_assert_cmpuint (zoom_level_notify_counter, ==, 5);
150 : :
151 : : /* Min zoom level */
152 [ + + ]: 18 : for (i = 0; i < 5; i++)
153 : 15 : shumate_viewport_set_min_zoom_level (viewport, i);
154 [ - + ]: 3 : g_assert_cmpuint (min_zoom_level_notify_counter, ==, 4);
155 : :
156 : : /* Only the first should emit notify::min-zoom-level */
157 [ + + ]: 18 : for (i = 0; i < 5; i++)
158 : 15 : shumate_viewport_set_min_zoom_level (viewport, 5);
159 [ - + ]: 3 : g_assert_cmpuint (min_zoom_level_notify_counter, ==, 5);
160 : :
161 [ - + ]: 3 : g_assert_cmpuint (max_zoom_level_notify_counter, ==, 6);
162 [ - + + - ]: 3 : g_assert_cmpuint (zoom_level_notify_counter, ==, 5);
163 : 3 : }
164 : :
165 : : int
166 : 3 : main (int argc, char *argv[])
167 : : {
168 : 3 : g_test_init (&argc, &argv, NULL);
169 : :
170 : 3 : g_test_add_func ("/viewport/zoom-level/min", test_viewport_zoom_level_min);
171 : 3 : g_test_add_func ("/viewport/zoom-level/max", test_viewport_zoom_level_max);
172 : 3 : g_test_add_func ("/viewport/zoom-level/clamp", test_viewport_zoom_level_clamp);
173 : 3 : g_test_add_func ("/viewport/zoom-level/notify", test_viewport_zoom_level_notify);
174 : :
175 : 3 : return g_test_run ();
176 : : }
|