forked from AuroraMiddleware/gtk
025375ff5f
Replace all remaining uses of gtk_widget_destroy by gtk_container_remove or g_object_unref.
487 lines
13 KiB
C
487 lines
13 KiB
C
/* templates.c
|
|
* Copyright (C) 2013 Openismus GmbH
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* Authors: Tristan Van Berkom <tristanvb@openismus.com>
|
|
*/
|
|
#include <gtk/gtk.h>
|
|
|
|
#ifdef HAVE_UNIX_PRINT_WIDGETS
|
|
# include <gtk/gtkunixprint.h>
|
|
#endif
|
|
|
|
static gboolean
|
|
main_loop_quit_cb (gpointer data)
|
|
{
|
|
gboolean *done = data;
|
|
|
|
*done = TRUE;
|
|
|
|
g_main_context_wakeup (NULL);
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
static void
|
|
show_and_wait (GtkWidget *widget)
|
|
{
|
|
gboolean done = FALSE;
|
|
|
|
g_timeout_add (500, main_loop_quit_cb, &done);
|
|
gtk_widget_show (widget);
|
|
while (!done)
|
|
g_main_context_iteration (NULL, FALSE);
|
|
}
|
|
|
|
static void
|
|
test_dialog_basic (void)
|
|
{
|
|
GtkWidget *dialog;
|
|
|
|
dialog = gtk_dialog_new ();
|
|
g_assert (GTK_IS_DIALOG (dialog));
|
|
g_assert (gtk_dialog_get_content_area (GTK_DIALOG (dialog)) != NULL);
|
|
|
|
gtk_window_destroy (GTK_WINDOW (dialog));
|
|
}
|
|
|
|
static void
|
|
test_dialog_override_property (void)
|
|
{
|
|
GtkWidget *dialog;
|
|
|
|
dialog = g_object_new (GTK_TYPE_DIALOG,
|
|
"use-header-bar", 1,
|
|
NULL);
|
|
g_assert (GTK_IS_DIALOG (dialog));
|
|
|
|
gtk_window_destroy (GTK_WINDOW (dialog));
|
|
}
|
|
|
|
static void
|
|
test_message_dialog_basic (void)
|
|
{
|
|
GtkWidget *dialog;
|
|
|
|
dialog = gtk_message_dialog_new (NULL, 0,
|
|
GTK_MESSAGE_INFO,
|
|
GTK_BUTTONS_CLOSE,
|
|
"Do it hard !");
|
|
g_assert (GTK_IS_DIALOG (dialog));
|
|
gtk_window_destroy (GTK_WINDOW (dialog));
|
|
}
|
|
|
|
static void
|
|
test_about_dialog_basic (void)
|
|
{
|
|
GtkWidget *dialog;
|
|
|
|
dialog = gtk_about_dialog_new ();
|
|
g_assert (GTK_IS_ABOUT_DIALOG (dialog));
|
|
gtk_window_destroy (GTK_WINDOW (dialog));
|
|
}
|
|
|
|
static void
|
|
test_about_dialog_show (void)
|
|
{
|
|
GtkWidget *dialog;
|
|
|
|
dialog = gtk_about_dialog_new ();
|
|
g_assert (GTK_IS_ABOUT_DIALOG (dialog));
|
|
show_and_wait (dialog);
|
|
gtk_window_destroy (GTK_WINDOW (dialog));
|
|
}
|
|
|
|
static void
|
|
test_info_bar_basic (void)
|
|
{
|
|
GtkWidget *infobar;
|
|
|
|
infobar = gtk_info_bar_new ();
|
|
g_assert (GTK_IS_INFO_BAR (infobar));
|
|
g_object_unref (g_object_ref_sink (infobar));
|
|
}
|
|
|
|
static void
|
|
test_lock_button_basic (void)
|
|
{
|
|
GtkWidget *button;
|
|
GPermission *permission;
|
|
|
|
permission = g_simple_permission_new (TRUE);
|
|
button = gtk_lock_button_new (permission);
|
|
g_assert (GTK_IS_LOCK_BUTTON (button));
|
|
g_object_unref (g_object_ref_sink (button));
|
|
g_object_unref (permission);
|
|
}
|
|
|
|
static void
|
|
test_assistant_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_assistant_new ();
|
|
g_assert (GTK_IS_ASSISTANT (widget));
|
|
gtk_window_destroy (GTK_WINDOW (widget));
|
|
}
|
|
|
|
static void
|
|
test_assistant_show (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_assistant_new ();
|
|
g_assert (GTK_IS_ASSISTANT (widget));
|
|
show_and_wait (widget);
|
|
gtk_window_destroy (GTK_WINDOW (widget));
|
|
}
|
|
|
|
static void
|
|
test_scale_button_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_scale_button_new (0, 100, 10, NULL);
|
|
g_assert (GTK_IS_SCALE_BUTTON (widget));
|
|
g_object_unref (g_object_ref_sink (widget));
|
|
}
|
|
|
|
static void
|
|
test_volume_button_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_volume_button_new ();
|
|
g_assert (GTK_IS_VOLUME_BUTTON (widget));
|
|
g_object_unref (g_object_ref_sink (widget));
|
|
}
|
|
|
|
static void
|
|
test_statusbar_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_statusbar_new ();
|
|
g_assert (GTK_IS_STATUSBAR (widget));
|
|
g_object_unref (g_object_ref_sink (widget));
|
|
}
|
|
|
|
static void
|
|
test_search_bar_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_search_bar_new ();
|
|
g_assert (GTK_IS_SEARCH_BAR (widget));
|
|
g_object_unref (g_object_ref_sink (widget));
|
|
}
|
|
|
|
static void
|
|
test_action_bar_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_action_bar_new ();
|
|
g_assert (GTK_IS_ACTION_BAR (widget));
|
|
g_object_unref (g_object_ref_sink (widget));
|
|
}
|
|
|
|
static void
|
|
test_app_chooser_widget_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_app_chooser_widget_new (NULL);
|
|
g_assert (GTK_IS_APP_CHOOSER_WIDGET (widget));
|
|
g_object_unref (g_object_ref_sink (widget));
|
|
}
|
|
|
|
static void
|
|
test_app_chooser_dialog_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
gboolean done = FALSE;
|
|
|
|
widget = gtk_app_chooser_dialog_new_for_content_type (NULL, 0, "text/plain");
|
|
g_assert (GTK_IS_APP_CHOOSER_DIALOG (widget));
|
|
|
|
/* GtkAppChooserDialog bug, if destroyed before spinning
|
|
* the main context then app_chooser_online_get_default_ready_cb()
|
|
* will be eventually called and segfault.
|
|
*/
|
|
g_timeout_add (500, main_loop_quit_cb, &done);
|
|
while (!done)
|
|
g_main_context_iteration (NULL, TRUE);
|
|
gtk_window_destroy (GTK_WINDOW (widget));
|
|
}
|
|
|
|
static void
|
|
test_color_chooser_dialog_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
/* This test also tests the internal GtkColorEditor widget */
|
|
widget = gtk_color_chooser_dialog_new (NULL, NULL);
|
|
g_assert (GTK_IS_COLOR_CHOOSER_DIALOG (widget));
|
|
gtk_window_destroy (GTK_WINDOW (widget));
|
|
}
|
|
|
|
static void
|
|
test_color_chooser_dialog_show (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
/* This test also tests the internal GtkColorEditor widget */
|
|
widget = gtk_color_chooser_dialog_new (NULL, NULL);
|
|
g_assert (GTK_IS_COLOR_CHOOSER_DIALOG (widget));
|
|
show_and_wait (widget);
|
|
gtk_window_destroy (GTK_WINDOW (widget));
|
|
}
|
|
|
|
/* Avoid warnings from GVFS-RemoteVolumeMonitor */
|
|
static gboolean
|
|
ignore_gvfs_warning (const gchar *log_domain,
|
|
GLogLevelFlags log_level,
|
|
const gchar *message,
|
|
gpointer user_data)
|
|
{
|
|
if (g_strcmp0 (log_domain, "GVFS-RemoteVolumeMonitor") == 0)
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
static void
|
|
test_file_chooser_widget_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
gboolean done = FALSE;
|
|
|
|
/* This test also tests the internal GtkPathBar widget */
|
|
g_test_log_set_fatal_handler (ignore_gvfs_warning, NULL);
|
|
|
|
widget = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
|
|
g_assert (GTK_IS_FILE_CHOOSER_WIDGET (widget));
|
|
|
|
/* XXX BUG:
|
|
*
|
|
* Spin the mainloop for a bit, this allows the file operations
|
|
* to complete, GtkFileChooserWidget has a bug where it leaks
|
|
* GtkTreeRowReferences to the internal shortcuts_model
|
|
*
|
|
* Since we assert all automated children are finalized we
|
|
* can catch this
|
|
*/
|
|
g_timeout_add (100, main_loop_quit_cb, &done);
|
|
while (!done)
|
|
g_main_context_iteration (NULL, TRUE);
|
|
|
|
g_object_unref (g_object_ref_sink (widget));
|
|
}
|
|
|
|
static void
|
|
test_file_chooser_dialog_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
gboolean done;
|
|
|
|
g_test_log_set_fatal_handler (ignore_gvfs_warning, NULL);
|
|
|
|
widget = gtk_file_chooser_dialog_new ("The Dialog", NULL,
|
|
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
|
|
"_OK", GTK_RESPONSE_OK,
|
|
NULL);
|
|
|
|
g_assert (GTK_IS_FILE_CHOOSER_DIALOG (widget));
|
|
done = FALSE;
|
|
g_timeout_add (100, main_loop_quit_cb, &done);
|
|
while (!done)
|
|
g_main_context_iteration (NULL, TRUE);
|
|
|
|
gtk_window_destroy (GTK_WINDOW (widget));
|
|
}
|
|
|
|
static void
|
|
test_file_chooser_dialog_show (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
g_test_log_set_fatal_handler (ignore_gvfs_warning, NULL);
|
|
|
|
widget = gtk_file_chooser_dialog_new ("The Dialog", NULL,
|
|
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
|
|
"_OK", GTK_RESPONSE_OK,
|
|
NULL);
|
|
|
|
g_assert (GTK_IS_FILE_CHOOSER_DIALOG (widget));
|
|
show_and_wait (widget);
|
|
gtk_window_destroy (GTK_WINDOW (widget));
|
|
}
|
|
|
|
static void
|
|
test_file_chooser_button_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
gboolean done = FALSE;
|
|
|
|
g_test_log_set_fatal_handler (ignore_gvfs_warning, NULL);
|
|
|
|
widget = gtk_file_chooser_button_new ("Choose a file !", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
|
|
g_assert (GTK_IS_FILE_CHOOSER_BUTTON (widget));
|
|
g_timeout_add (100, main_loop_quit_cb, &done);
|
|
while (!done)
|
|
g_main_context_iteration (NULL, TRUE);
|
|
|
|
g_object_unref (g_object_ref_sink (widget));
|
|
}
|
|
|
|
static void
|
|
test_font_button_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_font_button_new ();
|
|
g_assert (GTK_IS_FONT_BUTTON (widget));
|
|
g_object_unref (g_object_ref_sink (widget));
|
|
}
|
|
|
|
static void
|
|
test_font_chooser_widget_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_font_chooser_widget_new ();
|
|
g_assert (GTK_IS_FONT_CHOOSER_WIDGET (widget));
|
|
g_object_unref (g_object_ref_sink (widget));
|
|
}
|
|
|
|
static void
|
|
test_font_chooser_dialog_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_font_chooser_dialog_new ("Choose a font !", NULL);
|
|
g_assert (GTK_IS_FONT_CHOOSER_DIALOG (widget));
|
|
gtk_window_destroy (GTK_WINDOW (widget));
|
|
}
|
|
|
|
static void
|
|
test_font_chooser_dialog_show (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_font_chooser_dialog_new ("Choose a font !", NULL);
|
|
g_assert (GTK_IS_FONT_CHOOSER_DIALOG (widget));
|
|
show_and_wait (widget);
|
|
gtk_window_destroy (GTK_WINDOW (widget));
|
|
}
|
|
|
|
#ifdef HAVE_UNIX_PRINT_WIDGETS
|
|
static void
|
|
test_page_setup_unix_dialog_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_page_setup_unix_dialog_new ("Setup your Page !", NULL);
|
|
g_assert (GTK_IS_PAGE_SETUP_UNIX_DIALOG (widget));
|
|
gtk_window_destroy (GTK_WINDOW (widget));
|
|
}
|
|
|
|
static void
|
|
test_page_setup_unix_dialog_show (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_page_setup_unix_dialog_new ("Setup your Page !", NULL);
|
|
g_assert (GTK_IS_PAGE_SETUP_UNIX_DIALOG (widget));
|
|
show_and_wait (widget);
|
|
gtk_window_destroy (GTK_WINDOW (widget));
|
|
}
|
|
|
|
static void
|
|
test_print_unix_dialog_basic (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_print_unix_dialog_new ("Go Print !", NULL);
|
|
g_assert (GTK_IS_PRINT_UNIX_DIALOG (widget));
|
|
gtk_window_destroy (GTK_WINDOW (widget));
|
|
}
|
|
|
|
static void
|
|
test_print_unix_dialog_show (void)
|
|
{
|
|
GtkWidget *widget;
|
|
|
|
widget = gtk_print_unix_dialog_new ("Go Print !", NULL);
|
|
g_assert (GTK_IS_PRINT_UNIX_DIALOG (widget));
|
|
show_and_wait (widget);
|
|
gtk_window_destroy (GTK_WINDOW (widget));
|
|
}
|
|
#endif
|
|
|
|
int
|
|
main (int argc, char **argv)
|
|
{
|
|
/* These must be set before before gtk_test_init */
|
|
g_setenv ("GIO_USE_VFS", "local", TRUE);
|
|
g_setenv ("GSETTINGS_BACKEND", "memory", TRUE);
|
|
|
|
/* initialize test program */
|
|
gtk_test_init (&argc, &argv);
|
|
|
|
/* This environment variable cooperates with widget dispose()
|
|
* to assert that all automated compoenents are properly finalized
|
|
* when a given composite widget is destroyed.
|
|
*/
|
|
g_assert (g_setenv ("GTK_WIDGET_ASSERT_COMPONENTS", "1", TRUE));
|
|
|
|
g_test_add_func ("/template/GtkDialog/basic", test_dialog_basic);
|
|
g_test_add_func ("/template/GtkDialog/OverrideProperty", test_dialog_override_property);
|
|
g_test_add_func ("/template/GtkMessageDialog/basic", test_message_dialog_basic);
|
|
g_test_add_func ("/template/GtkAboutDialog/basic", test_about_dialog_basic);
|
|
g_test_add_func ("/template/GtkAboutDialog/show", test_about_dialog_show);
|
|
g_test_add_func ("/template/GtkInfoBar/basic", test_info_bar_basic);
|
|
g_test_add_func ("/template/GtkLockButton/basic", test_lock_button_basic);
|
|
g_test_add_func ("/template/GtkAssistant/basic", test_assistant_basic);
|
|
g_test_add_func ("/template/GtkAssistant/show", test_assistant_show);
|
|
g_test_add_func ("/template/GtkScaleButton/basic", test_scale_button_basic);
|
|
g_test_add_func ("/template/GtkVolumeButton/basic", test_volume_button_basic);
|
|
g_test_add_func ("/template/GtkStatusBar/basic", test_statusbar_basic);
|
|
g_test_add_func ("/template/GtkSearchBar/basic", test_search_bar_basic);
|
|
g_test_add_func ("/template/GtkActionBar/basic", test_action_bar_basic);
|
|
g_test_add_func ("/template/GtkAppChooserWidget/basic", test_app_chooser_widget_basic);
|
|
g_test_add_func ("/template/GtkAppChooserDialog/basic", test_app_chooser_dialog_basic);
|
|
g_test_add_func ("/template/GtkColorChooserDialog/basic", test_color_chooser_dialog_basic);
|
|
g_test_add_func ("/template/GtkColorChooserDialog/show", test_color_chooser_dialog_show);
|
|
g_test_add_func ("/template/GtkFileChooserWidget/basic", test_file_chooser_widget_basic);
|
|
g_test_add_func ("/template/GtkFileChooserDialog/basic", test_file_chooser_dialog_basic);
|
|
g_test_add_func ("/template/GtkFileChooserDialog/show", test_file_chooser_dialog_show);
|
|
g_test_add_func ("/template/GtkFileChooserButton/basic", test_file_chooser_button_basic);
|
|
g_test_add_func ("/template/GtkFontButton/basic", test_font_button_basic);
|
|
g_test_add_func ("/template/GtkFontChooserWidget/basic", test_font_chooser_widget_basic);
|
|
g_test_add_func ("/template/GtkFontChooserDialog/basic", test_font_chooser_dialog_basic);
|
|
g_test_add_func ("/template/GtkFontChooserDialog/show", test_font_chooser_dialog_show);
|
|
|
|
#ifdef HAVE_UNIX_PRINT_WIDGETS
|
|
g_test_add_func ("/template/GtkPageSetupUnixDialog/basic", test_page_setup_unix_dialog_basic);
|
|
g_test_add_func ("/template/GtkPageSetupUnixDialog/show", test_page_setup_unix_dialog_show);
|
|
g_test_add_func ("/template/GtkPrintUnixDialog/basic", test_print_unix_dialog_basic);
|
|
g_test_add_func ("/template/GtkPrintUnixDialog/show", test_print_unix_dialog_show);
|
|
#endif
|
|
|
|
return g_test_run();
|
|
}
|