/* * Copyright 2016 (c) Anna Schumaker. */ #include #include #include #include #include #include #include static const unsigned int N = 100; static unsigned int cur = -1; struct core_init_data init_data; static GMainLoop *main_loop; static bool inc_cur(void *data) { cur++; g_assert_cmpuint(cur, ==, GPOINTER_TO_UINT(data)); return true; } static int test_on_idle() { g_main_loop_quit(main_loop); return G_SOURCE_CONTINUE; } static void test_idle() { GtkProgressBar *progress; GtkWindow *window; unsigned int i; float fraction; main_loop = g_main_loop_new(NULL, FALSE); window = GTK_WINDOW(gui_builder_widget("o_window")); g_idle_add(test_on_idle, window); progress = GTK_PROGRESS_BAR(gui_builder_widget("o_idle_progress")); g_assert_false(gtk_widget_is_visible(GTK_WIDGET(progress))); for (i = 0; i < N; i++) idle_schedule(IDLE_SYNC, inc_cur, GINT_TO_POINTER(i)); gui_idle_enable(); for (i = 0; i < N; i++) { g_assert_true(gtk_widget_is_visible(GTK_WIDGET(progress))); g_main_loop_run(main_loop); g_assert_cmpfloat(idle_progress(), ==, (float)(i + 1) / N); if (i != (N - 1)) { fraction = gtk_progress_bar_get_fraction(progress); g_assert_cmpfloat(fraction, ==, idle_progress()); } } g_assert_false(gtk_widget_is_visible(GTK_WIDGET(progress))); } int main(int argc, char **argv) { int ret; gtk_init(&argc, NULL); core_init(&argc, NULL, &init_data); gui_builder_init("share/ocarina/ocarina6.glade"); gui_view_init(); while (idle_run_task()) {} g_test_init(&argc, &argv, NULL); g_test_add_func("/Gui/Idle", test_idle); ret = g_test_run(); gui_builder_deinit(); core_deinit(); return ret; }