diff options
author | 10:44:52 Tim Janik <timj@imendio.com> | 2007-12-06 09:43:20 +0000 |
---|---|---|
committer | Tim Janik <timj@src.gnome.org> | 2007-12-06 09:43:20 +0000 |
commit | 01a89326e84dbc26b0e320c2428fb48f599abcb7 (patch) | |
tree | 45c0eaab6a177ffa8dfbdc0087e3fc8b85272935 /tests | |
parent | ba05f509b454fe2656af71ca8d47670295c89ca6 (diff) | |
download | gtk+-01a89326e84dbc26b0e320c2428fb48f599abcb7.tar.gz |
majorly speed up execution by reducing timeouts and converting main loop
2007-12-06 10:44:52 Tim Janik <timj@imendio.com>
* tests/autotestfilechooser.c: majorly speed up execution by reducing
timeouts and converting main loop sleeps to pending/iterate loops with
very low priority async handlers. eliminate output for non-verbose
tests. assert successfull subtests in all test functions. use testing
framework in main().
* tests/Makefile.am: add autotestfilechooser to TEST_PROGS, so it's
executed inside Xvfb upon make check.
svn path=/trunk/; revision=19117
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 18 | ||||
-rw-r--r-- | tests/autotestfilechooser.c | 163 |
2 files changed, 75 insertions, 106 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 7f41e2eef8..ccee78151b 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -26,16 +26,19 @@ testsocket_programs = testsocket testsocket_child endif -TEST_PROGS += objecttests -objecttests_SOURCES = objecttests.c -objecttests_LDADD = $(LDADDS) -objecttests_DEPENDENCIES = $(TEST_DEPS) +TEST_PROGS += objecttests +objecttests_SOURCES = objecttests.c +objecttests_LDADD = $(LDADDS) +objecttests_DEPENDENCIES = $(TEST_DEPS) +TEST_PROGS += autotestfilechooser +autotestfilechooser_DEPENDENCIES = $(TEST_DEPS) +autotestfilechooser_LDADD = $(LDADDS) +autotestfilechooser_SOURCES = autotestfilechooser.c TESTS = floatingtest buildertest noinst_PROGRAMS = $(TEST_PROGS) \ - autotestfilechooser \ autotestkeywords \ floatingtest \ buildertest \ @@ -113,7 +116,6 @@ endif endif -autotestfilechooser_DEPENDENCIES = $(TEST_DEPS) simple_DEPENDENCIES = $(TEST_DEPS) floatingtest_DEPENDENCIES = $(TEST_DEPS) buildertest_DEPENDENCIES = $(TEST_DEPS) @@ -170,7 +172,6 @@ testgrouping_DEPENDENCIES = $(TEST_DEPS) testtooltips_DEPENDENCIES = $(TEST_DEPS) testvolumebutton_DEPENDENCIES = $(TEST_DEPS) -autotestfilechooser_LDADD = $(LDADDS) simple_LDADD = $(LDADDS) floatingtest_LDADD = $(LDADDS) buildertest_LDADD = $(LDADDS) @@ -236,9 +237,6 @@ testvolumebutton_LDADD = $(LDADDS) buildertest_LDFLAGS = -export-dynamic -autotestfilechooser_SOURCES = \ - autotestfilechooser.c - testentrycompletion_SOURCES = \ prop-editor.c \ testentrycompletion.c diff --git a/tests/autotestfilechooser.c b/tests/autotestfilechooser.c index ff5bc7462f..696dea2d3e 100644 --- a/tests/autotestfilechooser.c +++ b/tests/autotestfilechooser.c @@ -31,6 +31,7 @@ #define GTK_FILE_SYSTEM_ENABLE_UNSUPPORTED #undef GTK_DISABLE_DEPRECATED +#define SLEEP_DURATION 100 #include <config.h> #include <string.h> @@ -50,7 +51,8 @@ log_test (gboolean passed, const char *test_name, ...) str = g_strdup_vprintf (test_name, args); va_end (args); - g_printf ("%s: %s\n", passed ? "PASSED" : "FAILED", str); + if (g_test_verbose()) + g_printf ("%s: %s\n", passed ? "PASSED" : "FAILED", str); g_free (str); } @@ -123,7 +125,7 @@ test_set_filename (GtkFileChooserAction action, (* set_filename_fn) (GTK_FILE_CHOOSER (chooser), data); - gdk_threads_add_timeout (2000, set_filename_timeout_cb, &closure); + gdk_threads_add_timeout_full (G_MAXINT, SLEEP_DURATION, set_filename_timeout_cb, &closure, NULL); gtk_dialog_run (GTK_DIALOG (chooser)); retval = (* compare_filename_fn) (GTK_FILE_CHOOSER (chooser), data); @@ -250,7 +252,7 @@ test_black_box_set_current_name (const char *path, const char *current_name, gbo /* https://bugzilla.novell.com/show_bug.cgi?id=184875 * http://bugzilla.gnome.org/show_bug.cgi?id=347066 */ -static gboolean +static void test_black_box (void) { gboolean passed; @@ -259,24 +261,32 @@ test_black_box (void) passed = TRUE; passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_OPEN, FILE_NAME, FALSE); + g_assert (passed); passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_OPEN, FILE_NAME, TRUE); + g_assert (passed); passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_SAVE, FILE_NAME, FALSE); + g_assert (passed); passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_SAVE, FILE_NAME, TRUE); + g_assert (passed); passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, FOLDER_NAME, FALSE); + g_assert (passed); passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, FOLDER_NAME, TRUE); + g_assert (passed); passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, FOLDER_NAME, FALSE); + g_assert (passed); passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, FOLDER_NAME, TRUE); + g_assert (passed); cwd = g_get_current_dir (); passed = passed && test_black_box_set_current_name (cwd, CURRENT_NAME, FALSE); + g_assert (passed); passed = passed && test_black_box_set_current_name (cwd, CURRENT_NAME, TRUE); + g_assert (passed); g_free (cwd); log_test (passed, "Black box tests"); - - return passed; } struct confirm_overwrite_closure { @@ -291,7 +301,8 @@ confirm_overwrite_cb (GtkFileChooser *chooser, gpointer data) { struct confirm_overwrite_closure *closure = data; - printf ("bling!\n"); + if (g_test_verbose()) + printf ("bling!\n"); closure->confirm_overwrite_signal_emitted += 1; return GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME; @@ -303,7 +314,8 @@ overwrite_response_cb (GtkFileChooser *chooser, gint response, gpointer data) struct confirm_overwrite_closure *closure = data; char *filename; - printf ("plong!\n"); + if (g_test_verbose()) + printf ("plong!\n"); if (response != GTK_RESPONSE_ACCEPT) return; @@ -388,7 +400,7 @@ test_confirm_overwrite_for_path (const char *path, gboolean append_extension) gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (closure.chooser), path); } - gdk_threads_add_timeout (2000, confirm_overwrite_timeout_cb, &closure); + gdk_threads_add_timeout_full (G_MAXINT, SLEEP_DURATION, confirm_overwrite_timeout_cb, &closure, NULL); gtk_dialog_run (GTK_DIALOG (closure.chooser)); filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (closure.chooser)); @@ -404,16 +416,16 @@ test_confirm_overwrite_for_path (const char *path, gboolean append_extension) return passed; } -static gboolean +static void test_confirm_overwrite (void) { gboolean passed = TRUE; /* first test for a file we know will always exist */ passed = passed && test_confirm_overwrite_for_path ("/etc/passwd", FALSE); + g_assert (passed); passed = passed && test_confirm_overwrite_for_path ("/etc/resolv.conf", TRUE); - - return passed; + g_assert (passed); } static const GtkFileChooserAction open_actions[] = { @@ -616,7 +628,7 @@ switch_from_action_cb (GtkFileChooserDialog *dialog, return foreach_action (dialog, switch_from_to_action_cb, &closure); } -static gboolean +static void test_action_widgets (void) { GtkWidget *dialog; @@ -637,15 +649,13 @@ test_action_widgets (void) passed = test_widgets_for_current_action (GTK_FILE_CHOOSER_DIALOG (dialog), action); log_test (passed, "test_action_widgets(): widgets for initial action %s", get_action_name (action)); - if (!passed) - return FALSE; + g_assert (passed); passed = foreach_action (GTK_FILE_CHOOSER_DIALOG (dialog), switch_from_action_cb, NULL); log_test (passed, "test_action_widgets(): all transitions through property change"); + g_assert (passed); gtk_widget_destroy (dialog); - - return passed; } static gboolean @@ -791,20 +801,18 @@ test_reload_sequence (gboolean set_folder_before_map) return passed; } -static gboolean +static void test_reload (void) { gboolean passed; passed = test_reload_sequence (FALSE); log_test (passed, "test_reload(): create and use the default folder"); - if (!passed) - return FALSE; + g_assert (passed); passed = test_reload_sequence (TRUE); log_test (passed, "test_reload(): set a folder explicitly before mapping"); - - return passed; + g_assert (passed); } static gboolean @@ -922,7 +930,7 @@ test_button_folder_states_for_action (GtkFileChooserAction action, gboolean use_ return passed; } -static gboolean +static void test_button_folder_states (void) { /* GtkFileChooserButton only supports OPEN and SELECT_FOLDER */ @@ -938,13 +946,15 @@ test_button_folder_states (void) for (i = 0; i < G_N_ELEMENTS (actions_to_test); i++) { passed = passed && test_button_folder_states_for_action (actions_to_test[i], FALSE, FALSE); + g_assert (passed); passed = passed && test_button_folder_states_for_action (actions_to_test[i], TRUE, FALSE); + g_assert (passed); passed = passed && test_button_folder_states_for_action (actions_to_test[i], TRUE, TRUE); + g_assert (passed); log_test (passed, "test_button_folder_states(): action %s", get_action_name (actions_to_test[i])); } log_test (passed, "test_button_folder_states(): all supported actions"); - return passed; } static gboolean @@ -955,13 +965,20 @@ sleep_timeout_cb (gpointer data) } static void -sleep_in_main_loop (int milliseconds) +sleep_in_main_loop (double fraction) { - gdk_threads_add_timeout (milliseconds, sleep_timeout_cb, NULL); + /* process all pending idles and events */ + while (g_main_context_pending (NULL)) + g_main_context_iteration (NULL, FALSE); + /* sleeping probably isn't strictly necessary here */ + gdk_threads_add_timeout_full (G_MAXINT, fraction * SLEEP_DURATION, sleep_timeout_cb, NULL, NULL); gtk_main (); + /* process any pending idles or events that arrived during sleep */ + while (g_main_context_pending (NULL)) + g_main_context_iteration (NULL, FALSE); } -static gboolean +static void test_folder_switch_and_filters (void) { gboolean passed; @@ -989,8 +1006,7 @@ test_folder_switch_and_filters (void) base_dir_path = gtk_file_system_filename_to_path (impl->file_system, base_dir); passed = passed && gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), base_dir); - if (!passed) - goto out; + g_assert (passed); /* All files filter */ @@ -1009,33 +1025,35 @@ test_folder_switch_and_filters (void) gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), all_filter); passed = passed && (gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog)) == all_filter); + g_assert (passed); gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), txt_filter); passed = passed && (gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog)) == txt_filter); - log_test (passed, "test_folder_switch_and_filters(): set and get filter"); + g_assert (passed); gtk_widget_show (dialog); /* Test that filter is unchanged when we switch folders */ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd); - sleep_in_main_loop (1000); + sleep_in_main_loop (0.5); passed = passed && (gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog)) == txt_filter); + g_assert (passed); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), base_dir); - sleep_in_main_loop (500); + sleep_in_main_loop (0.25); g_signal_emit_by_name (impl->browse_path_bar, "path-clicked", (GtkFilePath *) cwd_path, (GtkFilePath *) base_dir_path, FALSE); - sleep_in_main_loop (500); + sleep_in_main_loop (0.25); passed = passed && (gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog)) == txt_filter); - log_test (passed, "test_folder_switch_and_filters(): filter after changing folder"); + g_assert (passed); - out: + /* cleanups */ g_free (cwd); g_free (base_dir); gtk_file_path_free (cwd_path); @@ -1044,70 +1062,23 @@ test_folder_switch_and_filters (void) gtk_widget_destroy (dialog); log_test (passed, "test_folder_switch_and_filters(): all filter tests"); - return passed; -} - -static GLogFunc default_log_handler; -static int num_warnings; -static int num_errors; -static int num_critical_errors; - -static void -log_override_cb (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *message, - gpointer user_data) -{ - if (log_level & G_LOG_LEVEL_WARNING) - num_warnings++; - - if (log_level & G_LOG_LEVEL_ERROR) - num_errors++; - - if (log_level & G_LOG_LEVEL_CRITICAL) - num_critical_errors++; - - (* default_log_handler) (log_domain, log_level, message, user_data); } int -main (int argc, char **argv) +main (int argc, + char **argv) { - gboolean passed; - gboolean zero_warnings; - gboolean zero_errors; - gboolean zero_critical_errors; - - default_log_handler = g_log_set_default_handler (log_override_cb, NULL); - passed = TRUE; - - gtk_init (&argc, &argv); - - /* Start tests */ - - passed = passed && test_black_box (); - passed = passed && test_confirm_overwrite (); - passed = passed && test_action_widgets (); - passed = passed && test_reload (); - passed = passed && test_button_folder_states (); - passed = passed && test_folder_switch_and_filters (); - log_test (passed, "main(): main tests"); - - /* Warnings and errors */ - - zero_warnings = num_warnings == 0; - zero_errors = num_errors == 0; - zero_critical_errors = num_critical_errors == 0; - - log_test (zero_warnings, "main(): zero warnings (actual number %d)", num_warnings); - log_test (zero_errors, "main(): zero errors (actual number %d)", num_errors); - log_test (zero_critical_errors, "main(): zero critical errors (actual number %d)", num_critical_errors); - - /* Done */ - - passed = passed && zero_warnings && zero_errors && zero_critical_errors; - - log_test (passed, "main(): ALL TESTS"); - - return 0; + /* initialize test program */ + gtk_test_init (&argc, &argv); + + /* register tests */ + g_test_add_func ("/GtkFileChooser/black_box", test_black_box); + g_test_add_func ("/GtkFileChooser/confirm_overwrite", test_confirm_overwrite); + g_test_add_func ("/GtkFileChooser/action_widgets", test_action_widgets); + g_test_add_func ("/GtkFileChooser/reload", test_reload); + g_test_add_func ("/GtkFileChooser/button_folder_states", test_button_folder_states); + g_test_add_func ("/GtkFileChooser/folder_switch_and_filters", test_folder_switch_and_filters); + + /* run and check selected tests */ + return g_test_run(); } |