[gtk+] filechooserbutton: Add a battery of tests for GtkFileChooserButton
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] filechooserbutton: Add a battery of tests for GtkFileChooserButton
- Date: Thu, 14 Feb 2013 00:14:17 +0000 (UTC)
commit 69d844fbbb0e9def9972976bdcbad7317d053644
Author: Federico Mena Quintero <federico gnome org>
Date: Wed Feb 13 13:42:38 2013 -0600
filechooserbutton: Add a battery of tests for GtkFileChooserButton
These are generic tests that can test the button in all of its modes,
instead of hand-written tests for each combination.
Some tests fail currently.
Signed-off-by: Federico Mena Quintero <federico gnome org>
gtk/tests/filechooser.c | 658 +++++++++++++++++++++++++++++++++++++++--------
1 files changed, 545 insertions(+), 113 deletions(-)
---
diff --git a/gtk/tests/filechooser.c b/gtk/tests/filechooser.c
index 53862a4..db606d2 100644
--- a/gtk/tests/filechooser.c
+++ b/gtk/tests/filechooser.c
@@ -52,6 +52,8 @@ log_test (gboolean passed, const char *test_name, ...)
g_free (str);
}
+static const char *get_action_name (GtkFileChooserAction action);
+
typedef void (* SetFilenameFn) (GtkFileChooser *chooser, gpointer data);
typedef void (* CompareFilenameFn) (GtkFileChooser *chooser, gpointer data);
@@ -235,10 +237,12 @@ test_black_box_set_current_name (gconstpointer data)
#define FILE_NAME "/nonexistent"
#define FILE_NAME_2 "/nonexistent2"
#define FOLDER_NAME "/etc"
+#define FOLDER_NAME_2 "/usr"
#else
#define FILE_NAME "/etc/passwd"
#define FILE_NAME_2 "/etc/group"
#define FOLDER_NAME "/etc"
+#define FOLDER_NAME_2 "/usr"
#endif
#define CURRENT_NAME "parangaricutirimicuaro.txt"
@@ -285,128 +289,578 @@ setup_set_current_name_tests (void)
g_test_add_data_func (tests[i].test_name, &tests[i], test_black_box_set_current_name);
}
-static void
-test_file_chooser_button_set_filename (void)
+typedef struct
{
- GtkWidget *window;
- GtkWidget *fc_button;
- char *filename;
+ const char *shortname;
+ GtkFileChooserAction action;
+ const char *initial_current_folder;
+ const char *initial_filename;
+ gboolean open_dialog;
+ const char *tweak_current_folder;
+ const char *tweak_filename;
+ gint dialog_response;
+ const char *final_current_folder;
+ const char *final_filename;
+} FileChooserButtonTest;
+
+static char *
+make_button_test_name (FileChooserButtonTest *t)
+{
+ return g_strdup_printf ("/GtkFileChooserButton/%s", t->shortname);
+#if 0
+ GString *s = g_string_new ("/GtkFileChooserButton");
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ g_string_append_printf (s, "/%s/%s/%s/%s",
+ get_action_name (t->action),
+ t->initial_current_folder ? "set_initial_folder" : "no_default_folder",
+ t->initial_filename ? "set_initial_filename" : "no_initial_filename",
+ t->open_dialog ? "open_dialog" : "no_dialog");
- fc_button = gtk_file_chooser_button_new ("Select a file", GTK_FILE_CHOOSER_ACTION_OPEN);
- gtk_container_add (GTK_CONTAINER (window), fc_button);
- gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (fc_button), FILE_NAME);
+ if (t->tweak_current_folder)
+ g_string_append (s, "/tweak_current_folder");
- gtk_widget_show_all (window);
- wait_for_idle ();
+ if (t->tweak_filename)
+ g_string_append (s, "/tweak_filename");
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fc_button));
- g_assert_cmpstr (filename, ==, FILE_NAME);
+ if (t->open_dialog)
+ g_string_append_printf (s, "/%s",
+ t->dialog_response == GTK_RESPONSE_ACCEPT ? "accept" : "cancel");
- g_free (filename);
- gtk_widget_destroy (window);
+ if (t->final_current_folder)
+ g_string_append (s, "/final_current_folder");
+
+ if (t->final_filename)
+ g_string_append (s, "/final_filename");
+
+ return g_string_free (s, FALSE);
+#endif
}
-static void
-test_file_chooser_button_set_folder (void)
+/* Copied from gtkfilechooserutils.c:_gtk_file_chooser_delegate_get_quark() */
+static GQuark
+delegate_get_quark (void)
{
- GtkWidget *window;
- GtkWidget *fc_button;
- char *filename;
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ static GQuark quark = 0;
- fc_button = gtk_file_chooser_button_new ("Select a folder", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
- gtk_container_add (GTK_CONTAINER (window), fc_button);
- gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (fc_button), FOLDER_NAME);
+ if (G_UNLIKELY (quark == 0))
+ quark = g_quark_from_static_string ("gtk-file-chooser-delegate");
- gtk_widget_show_all (window);
- wait_for_idle ();
+ return quark;
+}
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fc_button));
- g_assert_cmpstr (filename, ==, FOLDER_NAME);
+static gboolean
+sleep_timeout_cb (gpointer data)
+{
+ gtk_main_quit ();
+ return FALSE;
+}
- g_free (filename);
- gtk_widget_destroy (window);
+static void
+sleep_in_main_loop (void)
+{
+ /* 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, 250, 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 void
-test_file_chooser_button_set_current_folder (void)
+test_file_chooser_button (gconstpointer data)
{
+ const FileChooserButtonTest *setup = data;
GtkWidget *window;
GtkWidget *fc_button;
- char *filename;
+ GtkWidget *fc_dialog;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- fc_button = gtk_file_chooser_button_new ("Select a folder", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+ fc_button = gtk_file_chooser_button_new (setup->action == GTK_FILE_CHOOSER_ACTION_OPEN ? "Select a file" :
"Select a folder",
+ setup->action);
gtk_container_add (GTK_CONTAINER (window), fc_button);
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fc_button), FOLDER_NAME);
+
+ if (setup->initial_current_folder)
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fc_button), setup->initial_current_folder);
+
+ if (setup->initial_filename)
+ gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (fc_button), setup->initial_filename);
gtk_widget_show_all (window);
wait_for_idle ();
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fc_button));
- g_assert_cmpstr (filename, ==, FOLDER_NAME);
+ if (setup->open_dialog)
+ {
+ GList *children;
- g_free (filename);
- gtk_widget_destroy (window);
-}
+ /* Hack our way into the file chooser button; get its GtkButton child and click it */
+ children = gtk_container_get_children (GTK_CONTAINER (fc_button));
+ g_assert (children && GTK_IS_BUTTON (children->data));
+ gtk_button_clicked (GTK_BUTTON (children->data));
+ g_list_free (children);
-static void
-test_file_chooser_button_dialog_cancel (void)
-{
- GtkWidget *window;
- GtkWidget *fc_dialog;
- GtkWidget *fc_button;
- GList *children;
- char *filename;
+ wait_for_idle ();
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ /* Give me the internal dialog, damnit */
+ fc_dialog = g_object_get_qdata (G_OBJECT (fc_button), delegate_get_quark ());
+ g_assert (GTK_IS_FILE_CHOOSER (fc_dialog));
+ g_assert (GTK_IS_DIALOG (fc_dialog));
+ }
- fc_dialog = gtk_file_chooser_dialog_new ("Select a file",
- NULL,
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
- NULL);
+ /* Okay, now frob the button and its optional dialog */
- fc_button = gtk_file_chooser_button_new_with_dialog (fc_dialog);
- gtk_container_add (GTK_CONTAINER (window), fc_button);
+ if (setup->tweak_current_folder)
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fc_button), setup->tweak_current_folder);
- gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (fc_button), FILE_NAME);
+ if (setup->tweak_filename)
+ gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (fc_button), setup->tweak_filename);
- gtk_widget_show_all (window);
- wait_for_idle ();
+ sleep_in_main_loop ();
- children = gtk_container_get_children (GTK_CONTAINER (fc_button));
- g_assert (children && GTK_IS_BUTTON (children->data));
- gtk_button_clicked (GTK_BUTTON (children->data));
- g_list_free (children);
+ if (setup->open_dialog)
+ {
+ gtk_dialog_response (GTK_DIALOG (fc_dialog), setup->dialog_response);
+ wait_for_idle ();
+ }
- wait_for_idle ();
+ if (setup->final_current_folder)
+ {
+ char *folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (fc_button));
- gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (fc_dialog), FILE_NAME_2);
- wait_for_idle ();
+ g_assert_cmpstr (folder, ==, setup->final_current_folder);
+ g_free (folder);
+ }
- gtk_dialog_response (GTK_DIALOG (fc_dialog), GTK_RESPONSE_CANCEL);
- wait_for_idle ();
+ if (setup->final_filename)
+ {
+ char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fc_button));
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fc_button));
- g_assert_cmpstr (filename, ==, FILE_NAME);
+ g_assert_cmpstr (filename, ==, setup->final_filename);
+ g_free (filename);
+ }
- g_free (filename);
gtk_widget_destroy (window);
}
+static FileChooserButtonTest button_tests[] =
+ {
+ /* OPEN tests without dialog */
+
+ {
+ "open-1",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-2",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ FALSE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-3",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FILE_NAME, /* tweak_filename */
+ 0, /* dialog_response */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-4",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ FALSE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FILE_NAME_2, /* tweak_filename */
+ 0, /* dialog_response */
+ NULL, /* final_current_folder */
+ FILE_NAME_2 /* final_filename */
+ },
+ {
+ "open-5",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-6",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ FOLDER_NAME_2, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FOLDER_NAME_2, /* final_current_folder */
+ NULL /* final_filename */
+ },
+
+ /* SELECT_FOLDER tests without dialog */
+
+ {
+ "select-folder-1",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-2",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ FALSE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-3",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ FALSE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ 0, /* dialog_response */
+ NULL, /* final_current_folder */
+ FOLDER_NAME_2 /* final_filename */
+ },
+ {
+ "select-folder-4",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-5",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-6",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ FOLDER_NAME_2, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ NULL, /* final_current_folder */
+ FOLDER_NAME_2 /* final_filename */
+ },
+ {
+ "select-folder-7",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ FOLDER_NAME_2, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FOLDER_NAME_2, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-8",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ 0, /* dialog_response */
+ NULL, /* final_current_folder */
+ FOLDER_NAME_2 /* final_filename */
+ },
+
+ /* OPEN tests with dialog, cancelled */
+
+ {
+ "open-dialog-cancel-1",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-cancel-2",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-dialog-cancel-3",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-cancel-4",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FILE_NAME, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-cancel-5",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FILE_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-dialog-cancel-6",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FILE_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+
+ /* SELECT_FOLDER tests with dialog, cancelled */
+
+ {
+ "select-folder-dialog-cancel-1",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-2",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-3",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-4",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-5",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-6",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-7",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-8",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+
+ /* OPEN tests with dialog */
+
+ {
+ "open-dialog-1",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FILE_NAME, /* tweak_filename */
+ GTK_RESPONSE_ACCEPT, /* dialog_response */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-dialog-2",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_ACCEPT, /* dialog_response */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-dialog-3",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FILE_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_ACCEPT, /* dialog_response */
+ NULL, /* final_current_folder */
+ FILE_NAME_2 /* final_filename */
+ },
+ {
+ "open-dialog-4",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ NULL, /* tweak_current_folder */
+ FILE_NAME, /* tweak_filename */
+ GTK_RESPONSE_ACCEPT, /* dialog_response */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+
+ };
+
static void
setup_file_chooser_button_tests (void)
{
- g_test_add_func ("/GtkFileChooserButton/set_filename", test_file_chooser_button_set_filename);
- g_test_add_func ("/GtkFileChooserButton/set_folder", test_file_chooser_button_set_folder);
- g_test_add_func ("/GtkFileChooserButton/set_current_folder", test_file_chooser_button_set_current_folder);
- g_test_add_func ("/GtkFileChooserButton/dialog_cancel", test_file_chooser_button_dialog_cancel);
+ int i;
+
+ for (i = 0; i < G_N_ELEMENTS (button_tests); i++)
+ {
+ char *test_name;
+
+ test_name = make_button_test_name (&button_tests[i]);
+ g_test_add_data_func (test_name, &button_tests[i], test_file_chooser_button);
+ g_free (test_name);
+ }
}
struct confirm_overwrite_closure {
@@ -576,18 +1030,17 @@ has_action (const GtkFileChooserAction *actions,
static const char *
get_action_name (GtkFileChooserAction action)
{
- GEnumClass *enum_class;
- GEnumValue *enum_value;
-
- enum_class = g_type_class_peek (GTK_TYPE_FILE_CHOOSER_ACTION);
- if (!enum_class)
- g_error ("BUG: get_action_name(): no GEnumClass for GTK_TYPE_FILE_CHOOSER_ACTION");
-
- enum_value = g_enum_get_value (enum_class, (int) action);
- if (!enum_value)
- g_error ("BUG: get_action_name(): no GEnumValue for GtkFileChooserAction %d", (int) action);
-
- return enum_value->value_name;
+ switch (action)
+ {
+ case GTK_FILE_CHOOSER_ACTION_OPEN: return "OPEN";
+ case GTK_FILE_CHOOSER_ACTION_SAVE: return "SAVE";
+ case GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER: return "SELECT_FOLDER";
+ case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: return "CREATE_FOLDER";
+
+ default:
+ g_assert_not_reached ();
+ return NULL;
+ }
}
static GtkFileChooserDefault *
@@ -1079,27 +1532,6 @@ test_button_folder_states (void)
log_test (passed, "test_button_folder_states(): all supported actions");
}
-static gboolean
-sleep_timeout_cb (gpointer data)
-{
- gtk_main_quit ();
- return FALSE;
-}
-
-static void
-sleep_in_main_loop (double fraction)
-{
- /* 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 void
test_folder_switch_and_filters (void)
{
@@ -1159,18 +1591,18 @@ test_folder_switch_and_filters (void)
/* Test that filter is unchanged when we switch folders */
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd);
- sleep_in_main_loop (0.5);
+ sleep_in_main_loop ();
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 (0.25);
+ sleep_in_main_loop ();
g_signal_emit_by_name (impl->browse_path_bar, "path-clicked",
cwd_file,
base_dir_file,
FALSE);
- sleep_in_main_loop (0.25);
+ sleep_in_main_loop ();
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);
@@ -1193,7 +1625,7 @@ main (int argc,
/* initialize test program */
gtk_test_init (&argc, &argv);
- /* register tests */
+ /* Register tests */
setup_file_chooser_button_tests ();
#ifdef BROKEN_TESTS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]