X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Ftests%2Ffilechooser.c;h=bc18b2fa5859829be8e675e863b8c24e1734fb78;hb=f5217289ca6feee9d482763d9c1fcf412d2dd610;hp=300e15afda487f3493c11e12eb3a24a67a6bd7c1;hpb=57223c9a056bfff1635ddd1e67f660cd5a61e9ff;p=~andy%2Fgtk diff --git a/gtk/tests/filechooser.c b/gtk/tests/filechooser.c index 300e15afd..bc18b2fa5 100644 --- a/gtk/tests/filechooser.c +++ b/gtk/tests/filechooser.c @@ -16,9 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ /* TODO: @@ -29,8 +27,6 @@ * - More tests! */ -#define GTK_FILE_SYSTEM_ENABLE_UNSUPPORTED -#undef GTK_DISABLE_DEPRECATED #define SLEEP_DURATION 100 #include "config.h" @@ -41,6 +37,25 @@ #include "gtk/gtkfilechooserdefault.h" #include "gtk/gtkfilechooserentry.h" +#if 0 +static const char * +get_action_name (GtkFileChooserAction action) +{ + 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; + } +} +#endif + +#ifdef BROKEN_TESTS static void log_test (gboolean passed, const char *test_name, ...) { @@ -57,7 +72,7 @@ log_test (gboolean passed, const char *test_name, ...) } typedef void (* SetFilenameFn) (GtkFileChooser *chooser, gpointer data); -typedef gboolean (* CompareFilenameFn) (GtkFileChooser *chooser, gpointer data); +typedef void (* CompareFilenameFn) (GtkFileChooser *chooser, gpointer data); struct test_set_filename_closure { GtkWidget *chooser; @@ -79,6 +94,7 @@ set_filename_timeout_cb (gpointer data) return FALSE; } +#endif static guint wait_for_idle_id = 0; @@ -88,7 +104,7 @@ wait_for_idle_idle (gpointer data) { wait_for_idle_id = 0; - return FALSE; + return G_SOURCE_REMOVE; } static void @@ -102,7 +118,8 @@ wait_for_idle (void) gtk_main_iteration (); } -static gboolean +#ifdef BROKEN_TESTS +static void test_set_filename (GtkFileChooserAction action, gboolean focus_button, SetFilenameFn set_filename_fn,const @@ -111,7 +128,6 @@ test_set_filename (GtkFileChooserAction action, { GtkWidget *chooser; struct test_set_filename_closure closure; - gboolean retval; chooser = gtk_file_chooser_dialog_new ("hello", NULL, action, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, @@ -128,11 +144,9 @@ test_set_filename (GtkFileChooserAction action, 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); + (* compare_filename_fn) (GTK_FILE_CHOOSER (chooser), data); gtk_widget_destroy (chooser); - - return retval; } static void @@ -144,39 +158,35 @@ set_filename_cb (GtkFileChooser *chooser, gpointer data) gtk_file_chooser_set_filename (chooser, filename); } -static gboolean +static void compare_filename_cb (GtkFileChooser *chooser, gpointer data) { const char *filename; char *out_filename; - gboolean retval; filename = data; out_filename = gtk_file_chooser_get_filename (chooser); - if (out_filename) - { - retval = (strcmp (out_filename, filename) == 0); - g_free (out_filename); - } else - retval = FALSE; + g_assert_cmpstr (out_filename, ==, filename); - return retval; + if (out_filename) + g_free (out_filename); } -static gboolean -test_black_box_set_filename (GtkFileChooserAction action, const char *filename, gboolean focus_button) +typedef struct { - gboolean passed; - - passed = test_set_filename (action, focus_button, set_filename_cb, compare_filename_cb, (char *) filename); - - log_test (passed, "set_filename: action %d, focus_button=%s", - (int) action, - focus_button ? "TRUE" : "FALSE"); + const char *test_name; + GtkFileChooserAction action; + const char *filename; + gboolean focus_button; +} TestSetFilenameSetup; - return passed; +static void +test_black_box_set_filename (gconstpointer data) +{ + const TestSetFilenameSetup *setup = data; + test_set_filename (setup->action, setup->focus_button, set_filename_cb, compare_filename_cb, (char *) setup->filename); } struct current_name_closure { @@ -195,56 +205,64 @@ set_current_name_cb (GtkFileChooser *chooser, gpointer data) gtk_file_chooser_set_current_name (chooser, closure->current_name); } -static gboolean +static void compare_current_name_cb (GtkFileChooser *chooser, gpointer data) { struct current_name_closure *closure; char *out_filename; - gboolean retval; + char *filename; closure = data; out_filename = gtk_file_chooser_get_filename (chooser); - if (out_filename) - { - char *filename; + g_assert (out_filename != NULL); - filename = g_build_filename (closure->path, closure->current_name, NULL); - retval = (strcmp (filename, out_filename) == 0); - g_free (filename); - g_free (out_filename); - } else - retval = FALSE; + filename = g_build_filename (closure->path, closure->current_name, NULL); + g_assert_cmpstr (filename, ==, out_filename); - return retval; + g_free (filename); + g_free (out_filename); } -static gboolean -test_black_box_set_current_name (GtkFileChooserAction action, const char *path, const char *current_name, gboolean focus_button) +typedef struct +{ + const char *test_name; + GtkFileChooserAction action; + const char *current_name; + gboolean focus_button; +} TestSetCurrentNameSetup; + +static void +test_black_box_set_current_name (gconstpointer data) { + const TestSetCurrentNameSetup *setup = data; struct current_name_closure closure; - gboolean passed; + char *cwd; - closure.path = path; - closure.current_name = current_name; + cwd = g_get_current_dir (); - passed = test_set_filename (action, focus_button, - set_current_name_cb, compare_current_name_cb, &closure); + closure.path = cwd; + closure.current_name = setup->current_name; - log_test (passed, "set_current_name, focus_button=%s", focus_button ? "TRUE" : "FALSE"); + test_set_filename (setup->action, setup->focus_button, set_current_name_cb, compare_current_name_cb, &closure); - return passed; + g_free (cwd); } +#endif /* FIXME: fails in CREATE_FOLDER mode when FOLDER_NAME == "/" */ #if 0 #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" @@ -254,47 +272,1620 @@ test_black_box_set_current_name (GtkFileChooserAction action, const char *path, * http://bugzilla.gnome.org/show_bug.cgi?id=347066 * http://bugzilla.gnome.org/show_bug.cgi?id=346058 */ + +#ifdef BROKEN_TESTS static void -test_black_box (void) +setup_set_filename_tests (void) { - gboolean passed; - char *cwd; + static TestSetFilenameSetup tests[] = + { + { "/GtkFileChooser/black_box/set_filename/open/no_focus", GTK_FILE_CHOOSER_ACTION_OPEN, FILE_NAME, FALSE }, + { "/GtkFileChooser/black_box/set_filename/open/focus", GTK_FILE_CHOOSER_ACTION_OPEN, FILE_NAME, TRUE }, + { "/GtkFileChooser/black_box/set_filename/save/no_focus", GTK_FILE_CHOOSER_ACTION_SAVE, FILE_NAME, FALSE }, + { "/GtkFileChooser/black_box/set_filename/save/focus", GTK_FILE_CHOOSER_ACTION_SAVE, FILE_NAME, TRUE }, + { "/GtkFileChooser/black_box/set_filename/select_folder/no_focus", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, FOLDER_NAME,FALSE }, + { "/GtkFileChooser/black_box/set_filename/select_folder/focus", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, FOLDER_NAME,TRUE }, + { "/GtkFileChooser/black_box/set_filename/create_folder/no_focus", GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, FOLDER_NAME,FALSE }, + { "/GtkFileChooser/black_box/set_filename/create_folder/focus", GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, FOLDER_NAME,TRUE }, + }; + int i; - passed = TRUE; + for (i = 0; i < G_N_ELEMENTS (tests); i++) + g_test_add_data_func (tests[i].test_name, &tests[i], test_black_box_set_filename); +} - 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); +static void +setup_set_current_name_tests (void) +{ + static TestSetCurrentNameSetup tests[] = + { + { "/GtkFileChooser/black_box/set_current_name/save/no_focus", GTK_FILE_CHOOSER_ACTION_SAVE, CURRENT_NAME, FALSE }, + { "/GtkFileChooser/black_box/set_current_name/save/focus", GTK_FILE_CHOOSER_ACTION_SAVE, CURRENT_NAME, TRUE }, + { "/GtkFileChooser/black_box/set_current_name/create_folder/no_focus", GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, CURRENT_NAME_FOLDER, FALSE }, + { "/GtkFileChooser/black_box/set_current_name/create_folder/focus", GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, CURRENT_NAME_FOLDER, TRUE }, + }; + int i; - cwd = g_get_current_dir (); + for (i = 0; i < G_N_ELEMENTS (tests); i++) + g_test_add_data_func (tests[i].test_name, &tests[i], test_black_box_set_current_name); +} +#endif - passed = passed && test_black_box_set_current_name (GTK_FILE_CHOOSER_ACTION_SAVE, cwd, CURRENT_NAME, FALSE); - g_assert (passed); - passed = passed && test_black_box_set_current_name (GTK_FILE_CHOOSER_ACTION_SAVE, cwd, CURRENT_NAME, TRUE); - g_assert (passed); - passed = passed && test_black_box_set_current_name (GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, cwd, CURRENT_NAME_FOLDER, FALSE); - g_assert (passed); - passed = passed && test_black_box_set_current_name (GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, cwd, CURRENT_NAME_FOLDER, TRUE); - g_assert (passed); +typedef struct +{ + const char *shortname; + GtkFileChooserAction action; + const char *initial_current_folder; + const char *initial_filename; + gboolean open_dialog; + enum { + BUTTON, + DIALOG + } what_to_tweak; + const char *tweak_current_folder; + const char *tweak_filename; + gint dialog_response; + gboolean unselect_all; + 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"); - g_free (cwd); + 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"); + + if (t->tweak_current_folder) + g_string_append (s, "/tweak_current_folder"); + + if (t->tweak_filename) + g_string_append (s, "/tweak_filename"); + + if (t->open_dialog) + g_string_append_printf (s, "/%s", + t->dialog_response == GTK_RESPONSE_ACCEPT ? "accept" : "cancel"); + + 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 gboolean +sleep_timeout_cb (gpointer data) +{ + gtk_main_quit (); + return FALSE; +} + +static void +sleep_in_main_loop (void) +{ + gdk_threads_add_timeout_full (G_MAXINT, 250, sleep_timeout_cb, NULL, NULL); + gtk_main (); +} + +static void +build_children_list (GtkWidget *widget, gpointer data) +{ + GList **list; + + list = data; + *list = g_list_prepend (*list, widget); +} + +static GtkWidget * +find_child_widget_with_atk_role (GtkWidget *widget, AtkRole role) +{ + AtkObject *accessible; + AtkRole a_role; + + accessible = gtk_widget_get_accessible (widget); + a_role = atk_object_get_role (accessible); + + if (a_role == role) + return widget; + else + { + GtkWidget *found_child; + + found_child = NULL; + + if (GTK_IS_CONTAINER (widget)) + { + GList *children; + GList *l; + + children = NULL; + gtk_container_forall (GTK_CONTAINER (widget), build_children_list, &children); + + l = children; + + while (l && !found_child) + { + GtkWidget *child; + + child = GTK_WIDGET (l->data); + + found_child = find_child_widget_with_atk_role (child, role); + + l = l->next; + } + + g_list_free (children); + } + + return found_child; + } +} + +static const char * +get_atk_name_for_filechooser_button (GtkFileChooserButton *button) +{ + GtkFileChooserAction action; + GtkWidget *widget; + AtkObject *accessible; + + action = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (button)); + g_assert (action == GTK_FILE_CHOOSER_ACTION_OPEN || action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); + + if (action == GTK_FILE_CHOOSER_ACTION_OPEN) + widget = find_child_widget_with_atk_role (GTK_WIDGET (button), ATK_ROLE_PUSH_BUTTON); + else + widget = find_child_widget_with_atk_role (GTK_WIDGET (button), ATK_ROLE_COMBO_BOX); + + accessible = gtk_widget_get_accessible (widget); + return atk_object_get_name (accessible); +} + +static void +check_that_basename_is_shown (GtkFileChooserButton *button, const char *expected_filename) +{ + GtkFileChooserAction action; + const char *name_on_button; + char *expected_basename; + + name_on_button = get_atk_name_for_filechooser_button (button); + + action = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (button)); + g_assert (action == GTK_FILE_CHOOSER_ACTION_OPEN || action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); + + if (expected_filename) + expected_basename = g_path_get_basename (expected_filename); + else + expected_basename = NULL; + + if (expected_basename) + g_assert_cmpstr (expected_basename, ==, name_on_button); + else + g_assert_cmpstr (name_on_button, ==, "(None)"); /* see gtkfilechooserbutton.c:FALLBACK_DISPLAY_NAME */ /* FIXME: how do we translate this? */ + + g_free (expected_basename); +} + +static const char * +get_expected_shown_filename (GtkFileChooserAction action, const char *folder_name, const char *filename) +{ + if (action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) + { + if (filename) + return filename; + else + return folder_name; + } + else + return filename; +} + +static GtkWidget * +get_file_chooser_dialog_from_button (GtkFileChooserButton *button) +{ + GtkWidget *fc_dialog; + + /* Give me the internal dialog, damnit */ + fc_dialog = g_object_get_qdata (G_OBJECT (button), g_quark_from_static_string ("gtk-file-chooser-delegate")); + g_assert (GTK_IS_FILE_CHOOSER (fc_dialog)); + g_assert (GTK_IS_DIALOG (fc_dialog)); + + return fc_dialog; +} + +typedef struct { + GtkWidget *window; + GtkWidget *fc_button; +} WindowAndButton; + +static WindowAndButton +create_window_and_file_chooser_button (GtkFileChooserAction action) +{ + WindowAndButton w; + + w.window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + + w.fc_button = gtk_file_chooser_button_new (action == GTK_FILE_CHOOSER_ACTION_OPEN ? "Select a file" : "Select a folder", + action); + gtk_container_add (GTK_CONTAINER (w.window), w.fc_button); + + return w; +} + +typedef struct +{ + GObject *object; + GHashTable *signals; + gboolean in_main_loop; +} SignalWatcher; + +typedef struct +{ + SignalWatcher *watcher; + char *signal_name; + gulong id; + gboolean emitted; +} SignalConnection; + +static SignalWatcher * +signal_watcher_new (GObject *object) +{ + SignalWatcher *watcher = g_new0 (SignalWatcher, 1); + + watcher->object = g_object_ref (object); + watcher->signals = g_hash_table_new (g_str_hash, g_str_equal); + + return watcher; +} + +static void +dummy_callback (GObject *object) +{ + /* nothing */ +} + +static void +marshal_notify_cb (gpointer data, GClosure *closure) +{ + if (data) + { + SignalConnection *conn; + + conn = data; + conn->emitted = TRUE; + + if (conn->watcher->in_main_loop) + { + gtk_main_quit (); + conn->watcher->in_main_loop = FALSE; + } + } +} + +static void +signal_watcher_watch_signal (SignalWatcher *watcher, const char *signal_name) +{ + SignalConnection *conn; + + conn = g_hash_table_lookup (watcher->signals, signal_name); + if (!conn) + { + GClosure *closure; + + conn = g_new0 (SignalConnection, 1); + conn->watcher = watcher; + conn->signal_name = g_strdup (signal_name); + + closure = g_cclosure_new (G_CALLBACK (dummy_callback), NULL, NULL); + g_closure_add_marshal_guards (closure, conn, marshal_notify_cb, NULL, marshal_notify_cb); + conn->id = g_signal_connect_closure (watcher->object, signal_name, closure, FALSE); + conn->emitted = FALSE; + + g_hash_table_insert (watcher->signals, conn->signal_name, conn); + } + else + conn->emitted = FALSE; +} + +static gboolean +signal_watcher_expect (SignalWatcher *watcher, const char *signal_name) +{ + SignalConnection *conn; + gboolean emitted; + + conn = g_hash_table_lookup (watcher->signals, signal_name); + g_assert (conn != NULL); + + if (!conn->emitted) + { + gdk_threads_add_timeout_full (G_MAXINT, 1000, sleep_timeout_cb, NULL, NULL); + watcher->in_main_loop = TRUE; + gtk_main (); + watcher->in_main_loop = FALSE; + } + + emitted = conn->emitted; + conn->emitted = FALSE; + + return emitted; +} + +static void +destroy_connection (gpointer key, gpointer value, gpointer user_data) +{ + SignalConnection *conn; + + conn = value; + g_signal_handler_disconnect (conn->watcher->object, conn->id); + g_free (conn->signal_name); + g_free (conn); +} - log_test (passed, "Black box tests"); +static void +signal_watcher_destroy (SignalWatcher *watcher) +{ + g_hash_table_foreach (watcher->signals, destroy_connection, NULL); + g_hash_table_destroy (watcher->signals); + g_object_unref (watcher->object); + g_free (watcher); } +static void +test_file_chooser_button (gconstpointer data) +{ + const FileChooserButtonTest *setup = data; + WindowAndButton w; + SignalWatcher *watcher; + GtkWidget *fc_dialog; + int iterations; + int i; + + w = create_window_and_file_chooser_button (setup->action); + + watcher = signal_watcher_new (G_OBJECT (w.fc_button)); + signal_watcher_watch_signal (watcher, "current-folder-changed"); + signal_watcher_watch_signal (watcher, "selection-changed"); + + if (setup->initial_current_folder) + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (w.fc_button), setup->initial_current_folder); + + if (setup->initial_filename) + gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (w.fc_button), setup->initial_filename); + + gtk_widget_show_all (w.window); + wait_for_idle (); + + if (setup->initial_current_folder) + g_assert (signal_watcher_expect (watcher, "current-folder-changed")); + + if (setup->initial_filename) + g_assert (signal_watcher_expect (watcher, "selection-changed")); + + check_that_basename_is_shown (GTK_FILE_CHOOSER_BUTTON (w.fc_button), + get_expected_shown_filename (setup->action, setup->initial_current_folder, setup->initial_filename)); + + /* If there is a dialog to be opened, we actually test going through it a + * couple of times. This ensures that any state that the button frobs for + * each appearance of the dialog will make sense. + */ + if (setup->open_dialog) + iterations = 2; + else + iterations = 1; + + for (i = 0; i < iterations; i++) + { + GtkFileChooser *chooser_to_tweak; + + if (setup->open_dialog) + { + GList *children; + + /* Hack our way into the file chooser button; get its GtkButton child and click it */ + children = gtk_container_get_children (GTK_CONTAINER (w.fc_button)); + g_assert (children && GTK_IS_BUTTON (children->data)); + gtk_button_clicked (GTK_BUTTON (children->data)); + g_list_free (children); + + wait_for_idle (); + + fc_dialog = get_file_chooser_dialog_from_button (GTK_FILE_CHOOSER_BUTTON (w.fc_button)); + } + + if (setup->what_to_tweak == BUTTON) + chooser_to_tweak = GTK_FILE_CHOOSER (w.fc_button); + else if (setup->what_to_tweak == DIALOG) + chooser_to_tweak = GTK_FILE_CHOOSER (fc_dialog); + else + g_assert_not_reached (); + + /* Okay, now frob the button or its optional dialog */ + + if (setup->tweak_current_folder) + { + if (setup->what_to_tweak == BUTTON) + signal_watcher_watch_signal (watcher, "current-folder-changed"); + + gtk_file_chooser_set_current_folder (chooser_to_tweak, setup->tweak_current_folder); + + if (setup->what_to_tweak == BUTTON) + g_assert (signal_watcher_expect (watcher, "current-folder-changed")); + } + + if (setup->tweak_filename) + { + if (setup->what_to_tweak == BUTTON) + signal_watcher_watch_signal (watcher, "selection-changed"); + + gtk_file_chooser_select_filename (chooser_to_tweak, setup->tweak_filename); + + if (setup->what_to_tweak == BUTTON) + g_assert (signal_watcher_expect (watcher, "selection-changed")); + } + + if (setup->unselect_all) + { + if (setup->what_to_tweak == BUTTON) + signal_watcher_watch_signal (watcher, "selection-changed"); + + gtk_file_chooser_unselect_all (chooser_to_tweak); + + if (setup->what_to_tweak == BUTTON) + g_assert (signal_watcher_expect (watcher, "selection-changed")); + } + + wait_for_idle (); + + if (setup->open_dialog) + { + gtk_dialog_response (GTK_DIALOG (fc_dialog), setup->dialog_response); + wait_for_idle (); + + gtk_window_resize (GTK_WINDOW (fc_dialog), 500, 500); + } + + if (setup->final_current_folder) + { + char *folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (w.fc_button)); + + g_assert_cmpstr (folder, ==, setup->final_current_folder); + g_free (folder); + } + + if (setup->final_filename) + { + char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (w.fc_button)); + + g_assert_cmpstr (filename, ==, setup->final_filename); + g_free (filename); + } + + check_that_basename_is_shown (GTK_FILE_CHOOSER_BUTTON (w.fc_button), + get_expected_shown_filename (setup->action, setup->final_current_folder, setup->final_filename)); + } + + signal_watcher_destroy (watcher); + gtk_widget_destroy (w.window); +} + +static int +find_accessible_action_num (AtkObject *object, const char *action_name) +{ + AtkAction *action_a; + int num_actions; + int i; + + action_a = ATK_ACTION (object); + + num_actions = atk_action_get_n_actions (action_a); + + for (i = 0; i < num_actions; i++) + if (strcmp (atk_action_get_name (action_a, i), action_name) == 0) + return i; + + return -1; +} + +static void +do_accessible_action (AtkObject *object, const char *action_name) +{ + int action_num; + + action_num = find_accessible_action_num (object, action_name); + g_assert (action_num != -1); + + atk_action_do_action (ATK_ACTION (object), action_num); +} + +static void +test_file_chooser_button_combo_box_1 (void) +{ + WindowAndButton w; + GtkWidget *combo_box; + AtkObject *combo_box_a; + AtkObject *menu_a; + int num_items; + int other_index; + AtkObject *item_a; + GtkWidget *fc_dialog; + + w = create_window_and_file_chooser_button (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); + + gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (w.fc_button), FOLDER_NAME); + + gtk_widget_show_all (w.window); + + /* Get the accessible for the combo box */ + + combo_box = find_child_widget_with_atk_role (GTK_WIDGET (w.fc_button), ATK_ROLE_COMBO_BOX); + combo_box_a = gtk_widget_get_accessible (combo_box); + + /* Press the combo box to bring up the menu */ + + do_accessible_action (combo_box_a, "press"); + sleep_in_main_loop (); /* have to wait because bringing up the menu is asynchronous... */ + + /* Get the menu from the combo box; it's the first child */ + + menu_a = atk_object_ref_accessible_child (combo_box_a, 0); + g_assert (atk_object_get_role (menu_a) == ATK_ROLE_MENU); + + /* Check that the last item in the menu is the "Other…" one */ + + num_items = atk_object_get_n_accessible_children (menu_a); + g_assert (num_items > 0); + + other_index = num_items - 1; + + item_a = atk_object_ref_accessible_child (menu_a, other_index); + g_assert_cmpstr (atk_object_get_name (item_a), ==, "Other…"); /* FIXME: how do we translate this? */ + + /* Activate the item */ + + do_accessible_action (item_a, "click"); + + /* Cancel the dialog */ + + sleep_in_main_loop (); + fc_dialog = get_file_chooser_dialog_from_button (GTK_FILE_CHOOSER_BUTTON (w.fc_button)); + + gtk_dialog_response (GTK_DIALOG (fc_dialog), GTK_RESPONSE_CANCEL); + + /* Now check the selection in the combo box */ + check_that_basename_is_shown (GTK_FILE_CHOOSER_BUTTON (w.fc_button), FOLDER_NAME); + + gtk_widget_destroy (w.window); +} + +static void +setup_file_chooser_button_combo_box_tests (void) +{ + g_test_add_func ("/GtkFileChooserButton/combo_box-1", test_file_chooser_button_combo_box_1); +} + +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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME_2, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + FOLDER_NAME_2, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FOLDER_NAME_2, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + FOLDER_NAME_2, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + FOLDER_NAME_2, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FOLDER_NAME_2, /* tweak_filename */ + 0, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FOLDER_NAME_2 /* final_filename */ + }, + + /* OPEN tests with dialog, cancelled + * + * Test names are "open-dialog-cancel-A-B", where A and B can be: + * + * A: + * ni - no initial filename + * i - initial filename + * nf - no initial folder + * f - initial folder + * + * B: + * nt - no tweaks + * b - tweak button + * d - tweak dialog + */ + + { + "open-dialog-cancel-ni-nt", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-cancel-ni-b", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FILE_NAME /* final_filename */ + }, + { + "open-dialog-cancel-ni-d", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + DIALOG, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-cancel-i-nt", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + FILE_NAME, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FILE_NAME /* final_filename */ + }, + { + "open-dialog-cancel-i-b", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + FILE_NAME, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME_2, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FILE_NAME_2 /* final_filename */ + }, + { + "open-dialog-cancel-i-d", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + FILE_NAME, /* initial_filename */ + TRUE, /* open_dialog */ + DIALOG, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME_2, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FILE_NAME /* final_filename */ + }, + { + "open-dialog-cancel-nf-nt", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-cancel-nf-b", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + FOLDER_NAME, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + FOLDER_NAME, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-cancel-nf-d", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + DIALOG, /* what_to_tweak */ + FOLDER_NAME, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-cancel-f-nt", + GTK_FILE_CHOOSER_ACTION_OPEN, + FOLDER_NAME, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + FOLDER_NAME, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-cancel-f-b", + GTK_FILE_CHOOSER_ACTION_OPEN, + FOLDER_NAME, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + FOLDER_NAME_2, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + FOLDER_NAME_2, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-cancel-f-d", + GTK_FILE_CHOOSER_ACTION_OPEN, + FOLDER_NAME, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + DIALOG, /* what_to_tweak */ + FOLDER_NAME_2, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + FOLDER_NAME, /* final_current_folder */ + NULL /* final_filename */ + }, + + /* OPEN tests with dialog, cancelled via closing the dialog (not by selecting the Cancel button) */ + + { + "open-dialog-close-ni-nt", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-close-ni-b", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FILE_NAME /* final_filename */ + }, + { + "open-dialog-close-ni-d", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + DIALOG, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-close-i-nt", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + FILE_NAME, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FILE_NAME /* final_filename */ + }, + { + "open-dialog-close-i-b", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + FILE_NAME, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME_2, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FILE_NAME_2 /* final_filename */ + }, + { + "open-dialog-close-i-d", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + FILE_NAME, /* initial_filename */ + TRUE, /* open_dialog */ + DIALOG, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME_2, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FILE_NAME /* final_filename */ + }, + { + "open-dialog-close-nf-nt", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-close-nf-b", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + FOLDER_NAME, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + FOLDER_NAME, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-close-nf-d", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + DIALOG, /* what_to_tweak */ + FOLDER_NAME, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-close-f-nt", + GTK_FILE_CHOOSER_ACTION_OPEN, + FOLDER_NAME, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + FOLDER_NAME, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-close-f-b", + GTK_FILE_CHOOSER_ACTION_OPEN, + FOLDER_NAME, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + FOLDER_NAME_2, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + FOLDER_NAME_2, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "open-dialog-close-f-d", + GTK_FILE_CHOOSER_ACTION_OPEN, + FOLDER_NAME, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + DIALOG, /* what_to_tweak */ + FOLDER_NAME_2, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FOLDER_NAME, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FOLDER_NAME_2, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FOLDER_NAME_2, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FOLDER_NAME_2, /* tweak_filename */ + GTK_RESPONSE_CANCEL, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FOLDER_NAME /* final_filename */ + }, + + /* SELECT_FOLDER tests with dialog, cancelled via closing the dialog (not selecting the Cancel button) */ + + { + "select-folder-dialog-close-1", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "select-folder-dialog-close-2", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + NULL, /* initial_current_folder */ + FOLDER_NAME, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FOLDER_NAME /* final_filename */ + }, + { + "select-folder-dialog-close-3", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + FOLDER_NAME, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + FOLDER_NAME, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "select-folder-dialog-close-4", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + FOLDER_NAME, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FOLDER_NAME /* final_filename */ + }, + { + "select-folder-dialog-close-5", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FOLDER_NAME, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "select-folder-dialog-close-6", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + NULL, /* initial_current_folder */ + FOLDER_NAME, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FOLDER_NAME_2, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FOLDER_NAME /* final_filename */ + }, + { + "select-folder-dialog-close-7", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + FOLDER_NAME, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FOLDER_NAME_2, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + FOLDER_NAME, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "select-folder-dialog-close-8", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + FOLDER_NAME, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FOLDER_NAME_2, /* tweak_filename */ + GTK_RESPONSE_DELETE_EVENT,/* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME, /* tweak_filename */ + GTK_RESPONSE_ACCEPT, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_ACCEPT, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME_2, /* tweak_filename */ + GTK_RESPONSE_ACCEPT, /* dialog_response */ + FALSE, /* unselect_all */ + 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 */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME, /* tweak_filename */ + GTK_RESPONSE_ACCEPT, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FILE_NAME /* final_filename */ + }, + + /* SELECT_FOLDER tests with dialog */ + + { + "select-folder-dialog-1", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + NULL, /* initial_current_folder */ + FOLDER_NAME, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_ACCEPT, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FOLDER_NAME /* final_filename */ + }, + { + "select-folder-dialog-2", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + FOLDER_NAME, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + GTK_RESPONSE_ACCEPT, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FOLDER_NAME /* final_filename */ + }, + { + "select-folder-dialog-3", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + NULL, /* initial_current_folder */ + FOLDER_NAME, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FOLDER_NAME_2, /* tweak_filename */ + GTK_RESPONSE_ACCEPT, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FOLDER_NAME_2 /* final_filename */ + }, + { + "select-folder-dialog-4", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + FOLDER_NAME, /* initial_current_folder */ + NULL, /* initial_filename */ + TRUE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FOLDER_NAME_2, /* tweak_filename */ + GTK_RESPONSE_ACCEPT, /* dialog_response */ + FALSE, /* unselect_all */ + NULL, /* final_current_folder */ + FOLDER_NAME_2 /* final_filename */ + }, + + /* Unselection tests */ + { + "unselect-all-1", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + FALSE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + TRUE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "unselect-all-2", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + FILE_NAME, /* initial_filename */ + FALSE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + TRUE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "unselect-all-3", + GTK_FILE_CHOOSER_ACTION_OPEN, + NULL, /* initial_current_folder */ + FILE_NAME, /* initial_filename */ + FALSE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FILE_NAME_2, /* tweak_filename */ + 0, /* dialog_response */ + TRUE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "unselect-all-4", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + NULL, /* initial_current_folder */ + NULL, /* initial_filename */ + FALSE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + TRUE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "unselect-all-5", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + NULL, /* initial_current_folder */ + FOLDER_NAME, /* initial_filename */ + FALSE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + NULL, /* tweak_filename */ + 0, /* dialog_response */ + TRUE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + { + "unselect-all-6", + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + NULL, /* initial_current_folder */ + FOLDER_NAME, /* initial_filename */ + FALSE, /* open_dialog */ + BUTTON, /* what_to_tweak */ + NULL, /* tweak_current_folder */ + FOLDER_NAME_2, /* tweak_filename */ + 0, /* dialog_response */ + TRUE, /* unselect_all */ + NULL, /* final_current_folder */ + NULL /* final_filename */ + }, + + }; + +static void +setup_file_chooser_button_tests (void) +{ + 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); + } + + setup_file_chooser_button_combo_box_tests (); +} + +#ifdef BROKEN_TESTS struct confirm_overwrite_closure { GtkWidget *chooser; GtkWidget *accept_button; @@ -412,7 +2003,7 @@ test_confirm_overwrite_for_path (const char *path, gboolean append_extension) filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (closure.chooser)); passed = passed && filename && (strcmp (filename, path) == 0); g_free (filename); - + gtk_widget_destroy (closure.chooser); passed = passed && (1 == closure.confirm_overwrite_signal_emitted); @@ -428,11 +2019,12 @@ 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); + passed = passed && test_confirm_overwrite_for_path ("/etc/passwd", FALSE); g_assert (passed); - passed = passed && test_confirm_overwrite_for_path ("/etc/resolv.conf", TRUE); + passed = passed && test_confirm_overwrite_for_path ("/etc/resolv.conf", TRUE); g_assert (passed); } +#endif static const GtkFileChooserAction open_actions[] = { GTK_FILE_CHOOSER_ACTION_OPEN, @@ -445,6 +2037,7 @@ static const GtkFileChooserAction save_actions[] = { }; +#ifdef BROKEN_TESTS static gboolean has_action (const GtkFileChooserAction *actions, int n_actions, @@ -459,23 +2052,6 @@ has_action (const GtkFileChooserAction *actions, return FALSE; } -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; -} - static GtkFileChooserDefault * get_impl_from_dialog (GtkWidget *dialog) { @@ -517,9 +2093,9 @@ test_widgets_for_current_action (GtkFileChooserDialog *dialog, /* OPEN implies that the "new folder" button is hidden; otherwise it is shown */ if (impl->action == GTK_FILE_CHOOSER_ACTION_OPEN) - passed = passed && !GTK_WIDGET_VISIBLE (impl->browse_new_folder_button); + passed = passed && !gtk_widget_get_visible (impl->browse_new_folder_button); else - passed = passed && GTK_WIDGET_VISIBLE (impl->browse_new_folder_button); + passed = passed && gtk_widget_get_visible (impl->browse_new_folder_button); /* Check that the widgets are present/visible or not */ if (has_action (open_actions, G_N_ELEMENTS (open_actions), impl->action)) @@ -531,7 +2107,7 @@ test_widgets_for_current_action (GtkFileChooserDialog *dialog, && impl->save_folder_label == NULL && impl->save_folder_combo == NULL && impl->save_expander == NULL - && GTK_IS_CONTAINER (impl->browse_widgets) && GTK_WIDGET_DRAWABLE (impl->browse_widgets)); + && GTK_IS_CONTAINER (impl->browse_widgets) && gtk_widget_is_drawable (impl->browse_widgets)); } else if (has_action (save_actions, G_N_ELEMENTS (save_actions), impl->action)) { @@ -539,11 +2115,11 @@ test_widgets_for_current_action (GtkFileChooserDialog *dialog, * _gtk_file_chooser_entry_get_type(), which is a non-exported symbol. * So, we just test impl->location_entry for being non-NULL */ - passed = passed && (GTK_IS_CONTAINER (impl->save_widgets) && GTK_WIDGET_DRAWABLE (impl->save_widgets) - && impl->location_entry != NULL && GTK_WIDGET_DRAWABLE (impl->location_entry) - && GTK_IS_LABEL (impl->save_folder_label) && GTK_WIDGET_DRAWABLE (impl->save_folder_label) - && GTK_IS_COMBO_BOX (impl->save_folder_combo) && GTK_WIDGET_DRAWABLE (impl->save_folder_combo) - && GTK_IS_EXPANDER (impl->save_expander) && GTK_WIDGET_DRAWABLE (impl->save_expander) + passed = passed && (GTK_IS_CONTAINER (impl->save_widgets) && gtk_widget_is_drawable (impl->save_widgets) + && impl->location_entry != NULL && gtk_widget_is_drawable (impl->location_entry) + && GTK_IS_LABEL (impl->save_folder_label) && gtk_widget_is_drawable (impl->save_folder_label) + && GTK_IS_COMBO_BOX (impl->save_folder_combo) && gtk_widget_is_drawable (impl->save_folder_combo) + && GTK_IS_EXPANDER (impl->save_expander) && gtk_widget_is_drawable (impl->save_expander) && GTK_IS_CONTAINER (impl->browse_widgets)); /* FIXME: we are in a SAVE mode; test the visibility and sensitivity of @@ -663,7 +2239,9 @@ test_action_widgets (void) gtk_widget_destroy (dialog); } +#endif +#ifdef BROKEN_TESTS static gboolean test_reload_sequence (gboolean set_folder_before_map) { @@ -705,7 +2283,7 @@ test_reload_sequence (gboolean set_folder_before_map) wait_for_idle (); folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog)); - passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0); + passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0); g_free (folder); } else @@ -721,7 +2299,7 @@ test_reload_sequence (gboolean set_folder_before_map) wait_for_idle (); folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog)); - passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0); + passed = passed && (g_strcmp0 (folder, current_working_dir) == 0); } log_test (passed, "test_reload_sequence(): initial status"); @@ -743,9 +2321,9 @@ test_reload_sequence (gboolean set_folder_before_map) folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog)); if (set_folder_before_map) - passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0); + passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0); else - passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0); + passed = passed && (g_strcmp0 (folder, current_working_dir) == 0); g_free (folder); @@ -760,7 +2338,6 @@ test_reload_sequence (gboolean set_folder_before_map) passed = passed && (impl->current_folder != NULL && impl->browse_files_model != NULL && (impl->load_state == LOAD_PRELOAD || impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED) - && impl->reload_state == RELOAD_WAS_UNMAPPED && (impl->load_state == LOAD_PRELOAD ? (impl->load_timeout_id != 0) : TRUE) && ((impl->load_state == LOAD_LOADING || impl->load_state == LOAD_FINISHED) ? (impl->load_timeout_id == 0 && impl->sort_model != NULL) @@ -768,9 +2345,9 @@ test_reload_sequence (gboolean set_folder_before_map) folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog)); if (set_folder_before_map) - passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0); + passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0); else - passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0); + passed = passed && (g_strcmp0 (folder, current_working_dir) == 0); g_free (folder); @@ -793,9 +2370,9 @@ test_reload_sequence (gboolean set_folder_before_map) folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog)); if (set_folder_before_map) - passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0); + passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0); else - passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0); + passed = passed && (g_strcmp0 (folder, current_working_dir) == 0); g_free (folder); @@ -863,9 +2440,9 @@ test_button_folder_states_for_action (GtkFileChooserAction action, gboolean use_ folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (button)); if (must_have_cwd) - passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0); + passed = passed && (g_strcmp0 (folder, current_working_dir) == 0); else - passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0); + passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0); log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, pre-map, %s", get_action_name (action), @@ -883,9 +2460,9 @@ test_button_folder_states_for_action (GtkFileChooserAction action, gboolean use_ folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (button)); if (must_have_cwd) - passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0); + passed = passed && (g_strcmp0 (folder, current_working_dir) == 0); else - passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0); + passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0); log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, mapped, %s", get_action_name (action), @@ -901,9 +2478,9 @@ test_button_folder_states_for_action (GtkFileChooserAction action, gboolean use_ folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (button)); if (must_have_cwd) - passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0); + passed = passed && (g_strcmp0 (folder, current_working_dir) == 0); else - passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0); + passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0); log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, unmapped, %s", get_action_name (action), @@ -918,9 +2495,9 @@ test_button_folder_states_for_action (GtkFileChooserAction action, gboolean use_ folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (button)); if (must_have_cwd) - passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0); + passed = passed && (g_strcmp0 (folder, current_working_dir) == 0); else - passed = passed && (folder != NULL && strcmp (folder, g_get_home_dir()) == 0); + passed = passed && (g_strcmp0 (folder, g_get_home_dir()) == 0); wait_for_idle (); log_test (passed, "test_button_folder_states_for_action(): %s, use_dialog=%d, set_folder_on_dialog=%d, re-mapped, %s", get_action_name (action), @@ -963,35 +2540,14 @@ 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) { gboolean passed; char *cwd; char *base_dir; - GtkFilePath *cwd_path; - GtkFilePath *base_dir_path; + GFile *cwd_file; + GFile *base_dir_file; GtkWidget *dialog; GtkFileFilter *all_filter; GtkFileFilter *txt_filter; @@ -1008,8 +2564,8 @@ test_folder_switch_and_filters (void) NULL); impl = get_impl_from_dialog (dialog); - cwd_path = gtk_file_system_filename_to_path (impl->file_system, cwd); - base_dir_path = gtk_file_system_filename_to_path (impl->file_system, base_dir); + cwd_file = g_file_new_for_path (cwd); + base_dir_file = g_file_new_for_path (base_dir); passed = passed && gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), base_dir); g_assert (passed); @@ -1043,18 +2599,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", - (GtkFilePath *) cwd_path, - (GtkFilePath *) base_dir_path, + 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); @@ -1062,31 +2618,35 @@ test_folder_switch_and_filters (void) /* cleanups */ g_free (cwd); g_free (base_dir); - gtk_file_path_free (cwd_path); - gtk_file_path_free (base_dir_path); + g_object_unref (cwd_file); + g_object_unref (base_dir_file); gtk_widget_destroy (dialog); log_test (passed, "test_folder_switch_and_filters(): all filter tests"); } - -extern void pixbuf_init (void); +#endif int main (int argc, char **argv) { - pixbuf_init (); /* initialize test program */ gtk_test_init (&argc, &argv); - /* register tests */ - g_test_add_func ("/GtkFileChooser/black_box", test_black_box); + /* Register tests */ + + setup_file_chooser_button_tests (); +#ifdef BROKEN_TESTS + setup_set_filename_tests (); + setup_set_current_name_tests (); + 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); +#endif /* run and check selected tests */ return g_test_run();