1 /* Gtk+ testing utilities
2 * Copyright (C) 2007 Imendio AB
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
21 #include <gdk/gdkkeysyms.h>
25 /* Use a keyval that requires Shift to be active (in typical layouts)
26 * like GDK_KEY_ampersand, which is '<shift>6'
28 #define KEYVAL_THAT_REQUIRES_SHIFT GDK_KEY_ampersand
31 /* --- test functions --- */
33 test_button_clicks (void)
35 int a = 0, b = 0, c = 0;
36 GtkWidget *window = gtk_test_display_button_window ("Test Window",
37 "Test: gtk_test_widget_click",
42 GtkWidget *button = gtk_test_find_widget (window, "*Click*", GTK_TYPE_BUTTON);
44 g_assert (button != NULL);
45 simsuccess = gtk_test_widget_click (button, 1, 0);
46 g_assert (simsuccess == TRUE);
47 while (gtk_events_pending ())
48 gtk_main_iteration ();
55 test_button_keys (void)
57 int a = 0, b = 0, c = 0;
58 GtkWidget *window = gtk_test_display_button_window ("Test Window",
59 "Test: gtk_test_widget_send_key",
64 GtkWidget *button = gtk_test_find_widget (window, "*Click*", GTK_TYPE_BUTTON);
66 g_assert (button != NULL);
67 gtk_widget_grab_focus (button);
68 g_assert (gtk_widget_has_focus (button));
69 simsuccess = gtk_test_widget_send_key (button, GDK_KEY_Return, 0);
70 g_assert (simsuccess == TRUE);
71 while (gtk_events_pending ())
72 gtk_main_iteration ();
79 store_last_key_release (GtkWidget *widget,
83 *((gint *)user_data) = event->keyval;
88 test_send_shift_key (void)
90 GtkWidget *window = gtk_test_display_button_window ("Test Window",
91 "Test: test_send_shift_key()",
96 GtkWidget *button = gtk_test_find_widget (window, "SendMeKeys", GTK_TYPE_BUTTON);
97 gint last_key_release = 0;
99 g_assert (button != NULL);
100 g_signal_connect (button, "key-release-event",
101 G_CALLBACK (store_last_key_release),
103 gtk_widget_grab_focus (button);
104 g_assert (gtk_widget_has_focus (button));
105 simsuccess = gtk_test_widget_send_key (button, KEYVAL_THAT_REQUIRES_SHIFT, 0 /*modifiers*/);
106 g_assert (simsuccess == TRUE);
107 while (gtk_events_pending ())
108 gtk_main_iteration ();
109 g_assert_cmpint (KEYVAL_THAT_REQUIRES_SHIFT, ==, last_key_release);
113 test_slider_ranges (void)
116 GtkWidget *window = gtk_test_create_simple_window ("Test Window", "Test: gtk_test_warp_slider");
117 GtkWidget *hscale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL,
120 child = gtk_bin_get_child (GTK_BIN (window));
121 gtk_container_add (GTK_CONTAINER (child), hscale);
122 gtk_widget_show (hscale);
123 gtk_widget_show_now (window);
124 while (gtk_events_pending ())
125 gtk_main_iteration ();
126 gtk_test_slider_set_perc (hscale, 0.0);
127 while (gtk_events_pending ())
128 gtk_main_iteration ();
129 g_assert (gtk_test_slider_get_value (hscale) == -50);
130 gtk_test_slider_set_perc (hscale, 50.0);
131 while (gtk_events_pending ())
132 gtk_main_iteration ();
133 g_assert (fabs (gtk_test_slider_get_value (hscale)) < 0.0001);
134 gtk_test_slider_set_perc (hscale, 100.0);
135 while (gtk_events_pending ())
136 gtk_main_iteration ();
137 g_assert (gtk_test_slider_get_value (hscale) == +50.0);
141 test_text_access (void)
143 const int N_WIDGETS = 3;
144 GtkWidget *widgets[N_WIDGETS];
146 widgets[i++] = gtk_test_create_widget (GTK_TYPE_LABEL, NULL);
147 widgets[i++] = gtk_test_create_widget (GTK_TYPE_ENTRY, NULL);
148 widgets[i++] = gtk_test_create_widget (GTK_TYPE_TEXT_VIEW, NULL);
149 g_assert (i == N_WIDGETS);
150 for (i = 0; i < N_WIDGETS; i++)
151 gtk_test_text_set (widgets[i], "foobar");
152 for (i = 0; i < N_WIDGETS; i++)
154 gchar *text = gtk_test_text_get (widgets[i]);
155 g_assert (strcmp (text, "foobar") == 0);
158 for (i = 0; i < N_WIDGETS; i++)
159 gtk_test_text_set (widgets[i], "");
160 for (i = 0; i < N_WIDGETS; i++)
162 gchar *text = gtk_test_text_get (widgets[i]);
163 g_assert (strcmp (text, "") == 0);
169 test_xserver_sync (void)
171 GtkWidget *window = gtk_test_create_simple_window ("Test Window", "Test: test_xserver_sync");
172 GtkWidget *darea = gtk_drawing_area_new ();
174 GdkWindow *gdk_window;
175 GTimer *gtimer = g_timer_new();
176 gint sync_is_slower = 0, repeat = 5;
178 child = gtk_bin_get_child (GTK_BIN (window));
179 //gdk_window = gtk_widget_get_window (darea);
181 gtk_widget_set_size_request (darea, 320, 200);
182 gtk_container_add (GTK_CONTAINER (child), darea);
183 gtk_widget_show (darea);
184 gtk_widget_show_now (window);
189 double nosync_time, sync_time;
192 while (gtk_events_pending ())
193 gtk_main_iteration ();
194 gdk_window = gtk_widget_get_window (darea);
195 cr = gdk_cairo_create (gdk_window);
196 cairo_set_source_rgba (cr, 0, 1, 0, 0.1);
197 /* run a number of consecutive drawing requests, just using drawing queue */
198 g_timer_start (gtimer);
199 for (i = 0; i < many; i++)
203 g_timer_stop (gtimer);
204 nosync_time = g_timer_elapsed (gtimer, NULL);
206 while (gtk_events_pending ())
207 gtk_main_iteration ();
208 g_timer_start (gtimer);
209 /* run a number of consecutive drawing requests with intermediate drawing syncs */
210 for (i = 0; i < many; i++)
213 gdk_test_render_sync (gdk_window);
215 g_timer_stop (gtimer);
216 sync_time = g_timer_elapsed (gtimer, NULL);
217 sync_is_slower += sync_time > nosync_time * 1.5;
219 g_timer_destroy (gtimer);
220 g_assert (sync_is_slower > 0);
224 test_spin_button_arrows (void)
227 GtkWidget *window = gtk_test_create_simple_window ("Test Window", "Test: test_spin_button_arrows");
228 GtkWidget *spinner = gtk_spin_button_new_with_range (0, 100, 5);
230 double oldval, newval;
232 gtk_window_set_has_resize_grip (GTK_WINDOW (window), FALSE);
234 child = gtk_bin_get_child (GTK_BIN (window));
235 gtk_container_add (GTK_CONTAINER (child), spinner);
236 gtk_widget_show (spinner);
237 gtk_widget_show_now (window);
238 gtk_test_slider_set_perc (spinner, 0);
239 /* check initial spinner value */
240 oldval = gtk_test_slider_get_value (spinner);
241 g_assert (oldval == 0);
242 /* check simple increment */
243 simsuccess = gtk_test_spin_button_click (GTK_SPIN_BUTTON (spinner), 1, TRUE);
244 g_assert (simsuccess == TRUE);
245 while (gtk_events_pending ()) /* let spin button timeout/idle handlers update */
246 gtk_main_iteration ();
247 newval = gtk_test_slider_get_value (spinner);
248 g_assert (newval > oldval);
249 /* check maximum warp */
250 simsuccess = gtk_test_spin_button_click (GTK_SPIN_BUTTON (spinner), 3, TRUE);
251 g_assert (simsuccess == TRUE);
252 while (gtk_events_pending ()) /* let spin button timeout/idle handlers update */
253 gtk_main_iteration ();
254 oldval = gtk_test_slider_get_value (spinner);
255 g_assert (oldval == 100);
256 /* check simple decrement */
257 oldval = gtk_test_slider_get_value (spinner);
258 simsuccess = gtk_test_spin_button_click (GTK_SPIN_BUTTON (spinner), 1, FALSE);
259 g_assert (simsuccess == TRUE);
260 while (gtk_events_pending ()) /* let spin button timeout/idle handlers update */
261 gtk_main_iteration ();
262 newval = gtk_test_slider_get_value (spinner);
263 g_assert (newval < oldval);
264 /* check minimum warp */
265 simsuccess = gtk_test_spin_button_click (GTK_SPIN_BUTTON (spinner), 3, FALSE);
266 g_assert (simsuccess == TRUE);
267 while (gtk_events_pending ()) /* let spin button timeout/idle handlers update */
268 gtk_main_iteration ();
269 oldval = gtk_test_slider_get_value (spinner);
270 g_assert (oldval == 0);
274 test_statusbar_remove_all (void)
276 GtkWidget *statusbar;
278 g_test_bug ("640487");
280 statusbar = gtk_statusbar_new ();
281 g_object_ref_sink (statusbar);
283 gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, "bla");
284 gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, "bla");
285 gtk_statusbar_remove_all (GTK_STATUSBAR (statusbar), 1);
287 g_object_unref (statusbar);
294 gtk_test_init (&argc, &argv);
295 g_test_bug_base ("http://bugzilla.gnome.org/");
296 gtk_test_register_all_types();
298 g_test_add_func ("/tests/statusbar-remove-all", test_statusbar_remove_all);
299 g_test_add_func ("/ui-tests/text-access", test_text_access);
300 g_test_add_func ("/ui-tests/button-clicks", test_button_clicks);
301 g_test_add_func ("/ui-tests/keys-events", test_button_keys);
302 g_test_add_func ("/ui-tests/send-shift-key", test_send_shift_key);
303 g_test_add_func ("/ui-tests/slider-ranges", test_slider_ranges);
304 g_test_add_func ("/ui-tests/xserver-sync", test_xserver_sync);
305 g_test_add_func ("/ui-tests/spin-button-arrows", test_spin_button_arrows);