diff options
author | Michael Natterer <mitch@imendio.com> | 2008-06-18 13:29:02 +0000 |
---|---|---|
committer | Michael Natterer <mitch@src.gnome.org> | 2008-06-18 13:29:02 +0000 |
commit | d5565f5b638a39c8c33f290e860a6cc38f5631be (patch) | |
tree | de3c1323a9e1179bf1f2aa23c1be1f8941b096de /tests | |
parent | 67c6c28fe04237187645c55195012dbb831955e9 (diff) | |
download | gdk-pixbuf-d5565f5b638a39c8c33f290e860a6cc38f5631be.tar.gz |
tests/Makefile.am tests/autotestfilechooser.c tests/buildertest.c
2008-06-18 Michael Natterer <mitch@imendio.com>
* tests/Makefile.am
* tests/autotestfilechooser.c
* tests/buildertest.c
* tests/defaultvaluetest.c
* tests/floatingtest.c
* tests/objecttests.c
* tests/pixbuf-init.c
* tests/textbuffertest.c: remove unit tests here...
* gtk/tests/Makefile.am
* gtk/tests/builder.c
* gtk/tests/defaultvalue.c
* gtk/tests/filechooser.c
* gtk/tests/floating.c
* gtk/tests/object.c
* gtk/tests/pixbuf-init.c
* gtk/tests/textbuffer.c: ...and add them here.
svn path=/trunk/; revision=20450
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 28 | ||||
-rw-r--r-- | tests/autotestfilechooser.c | 1093 | ||||
-rw-r--r-- | tests/buildertest.c | 2213 | ||||
-rw-r--r-- | tests/defaultvaluetest.c | 341 | ||||
-rw-r--r-- | tests/floatingtest.c | 71 | ||||
-rw-r--r-- | tests/objecttests.c | 358 | ||||
-rw-r--r-- | tests/pixbuf-init.c | 20 | ||||
-rw-r--r-- | tests/textbuffertest.c | 1308 |
8 files changed, 0 insertions, 5432 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 00ec73282..edd18b01d 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -25,34 +25,6 @@ if USE_X11 testsocket_programs = testsocket testsocket_child endif -TEST_PROGS += floatingtest -floatingtest_DEPENDENCIES = $(TEST_DEPS) -floatingtest_LDADD = $(LDADDS) -TEST_PROGS += objecttests -objecttests_SOURCES = objecttests.c pixbuf-init.c -objecttests_LDADD = $(LDADDS) -objecttests_DEPENDENCIES = $(TEST_DEPS) -# this doesn't work in make distcheck, since it doesn't -# find file-chooser-test-dir -# TEST_PROGS += autotestfilechooser -autotestfilechooser_DEPENDENCIES = $(TEST_DEPS) -autotestfilechooser_LDADD = $(LDADDS) -autotestfilechooser_SOURCES = autotestfilechooser.c pixbuf-init.c -TEST_PROGS += buildertest -buildertest_DEPENDENCIES = $(TEST_DEPS) -buildertest_LDADD = $(LDADDS) -buildertest_LDFLAGS = -export-dynamic -if OS_UNIX -TEST_PROGS += defaultvaluetest -endif -defaultvaluetest_DEPENDENCIES = $(TEST_DEPS) -defaultvaluetest_LDADD = $(LDADDS) -defaultvaluetest_SOURCES = defaultvaluetest.c pixbuf-init.c -TEST_PROGS += textbuffertest -textbuffertest_DEPENDENCIES = $(TEST_DEPS) -textbuffertest_LDADD = $(LDADDS) -textbuffertest_SOURCES = textbuffertest.c pixbuf-init.c - noinst_PROGRAMS = $(TEST_PROGS) \ simple \ print-editor \ diff --git a/tests/autotestfilechooser.c b/tests/autotestfilechooser.c deleted file mode 100644 index 737e5fe27..000000000 --- a/tests/autotestfilechooser.c +++ /dev/null @@ -1,1093 +0,0 @@ -/* GTK - The GIMP Toolkit - * autotestfilechooser.c: Automated unit tests for the GtkFileChooser widget - * Copyright (C) 2005, Novell, Inc. - * - * Authors: - * Federico Mena-Quintero <federico@novell.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * 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. - */ - -/* TODO: - * - * - In test_reload_sequence(), test that the selection is preserved properly - * between unmap/map. - * - * - More tests! - */ - -#define GTK_FILE_SYSTEM_ENABLE_UNSUPPORTED -#undef GTK_DISABLE_DEPRECATED -#define SLEEP_DURATION 100 - -#include <config.h> -#include <string.h> -#include <glib/gprintf.h> -#include <gtk/gtk.h> -#include "gtk/gtkfilechooserprivate.h" -#include "gtk/gtkfilechooserdefault.h" -#include "gtk/gtkfilechooserentry.h" - -static void -log_test (gboolean passed, const char *test_name, ...) -{ - va_list args; - char *str; - - va_start (args, test_name); - str = g_strdup_vprintf (test_name, args); - va_end (args); - - if (g_test_verbose()) - g_printf ("%s: %s\n", passed ? "PASSED" : "FAILED", str); - g_free (str); -} - -typedef void (* SetFilenameFn) (GtkFileChooser *chooser, gpointer data); -typedef gboolean (* CompareFilenameFn) (GtkFileChooser *chooser, gpointer data); - -struct test_set_filename_closure { - GtkWidget *chooser; - GtkWidget *accept_button; - gboolean focus_button; -}; - -static gboolean -set_filename_timeout_cb (gpointer data) -{ - struct test_set_filename_closure *closure; - - closure = data; - - if (closure->focus_button) - gtk_widget_grab_focus (closure->accept_button); - - gtk_button_clicked (GTK_BUTTON (closure->accept_button)); - - return FALSE; -} - - -static guint wait_for_idle_id = 0; - -static gboolean -wait_for_idle_idle (gpointer data) -{ - wait_for_idle_id = 0; - - return FALSE; -} - -static void -wait_for_idle (void) -{ - wait_for_idle_id = g_idle_add_full (G_PRIORITY_LOW + 100, - wait_for_idle_idle, - NULL, NULL); - - while (wait_for_idle_id) - gtk_main_iteration (); -} - -static gboolean -test_set_filename (GtkFileChooserAction action, - gboolean focus_button, - SetFilenameFn set_filename_fn,const - CompareFilenameFn compare_filename_fn, - gpointer data) -{ - 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, - NULL); - - closure.chooser = chooser; - closure.accept_button = gtk_dialog_add_button (GTK_DIALOG (chooser), GTK_STOCK_OK, GTK_RESPONSE_ACCEPT); - closure.focus_button = focus_button; - - gtk_dialog_set_default_response (GTK_DIALOG (chooser), GTK_RESPONSE_ACCEPT); - - (* set_filename_fn) (GTK_FILE_CHOOSER (chooser), data); - - 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); - - gtk_widget_destroy (chooser); - - return retval; -} - -static void -set_filename_cb (GtkFileChooser *chooser, gpointer data) -{ - const char *filename; - - filename = data; - gtk_file_chooser_set_filename (chooser, filename); -} - -static gboolean -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; - - return retval; -} - -static gboolean -test_black_box_set_filename (GtkFileChooserAction action, const char *filename, gboolean focus_button) -{ - 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"); - - return passed; - -} - -struct current_name_closure { - const char *path; - const char *current_name; -}; - -static void -set_current_name_cb (GtkFileChooser *chooser, gpointer data) -{ - struct current_name_closure *closure; - - closure = data; - - gtk_file_chooser_set_current_folder (chooser, closure->path); - gtk_file_chooser_set_current_name (chooser, closure->current_name); -} - -static gboolean -compare_current_name_cb (GtkFileChooser *chooser, gpointer data) -{ - struct current_name_closure *closure; - char *out_filename; - gboolean retval; - - closure = data; - - out_filename = gtk_file_chooser_get_filename (chooser); - - if (out_filename) - { - char *filename; - - 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; - - return retval; -} - -static gboolean -test_black_box_set_current_name (GtkFileChooserAction action, const char *path, const char *current_name, gboolean focus_button) -{ - struct current_name_closure closure; - gboolean passed; - - closure.path = path; - closure.current_name = current_name; - - passed = test_set_filename (action, focus_button, - set_current_name_cb, compare_current_name_cb, &closure); - - log_test (passed, "set_current_name, focus_button=%s", focus_button ? "TRUE" : "FALSE"); - - return passed; -} - -/* FIXME: fails in CREATE_FOLDER mode when FOLDER_NAME == "/" */ - -#if 0 -#define FILE_NAME "/nonexistent" -#define FOLDER_NAME "/etc" -#else -#define FILE_NAME "/etc/passwd" -#define FOLDER_NAME "/etc" -#endif - -#define CURRENT_NAME "parangaricutirimicuaro.txt" -#define CURRENT_NAME_FOLDER "parangaricutirimicuaro" - -/* https://bugzilla.novell.com/show_bug.cgi?id=184875 - * http://bugzilla.gnome.org/show_bug.cgi?id=347066 - * http://bugzilla.gnome.org/show_bug.cgi?id=346058 - */ -static void -test_black_box (void) -{ - gboolean passed; - char *cwd; - - passed = TRUE; - - passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_OPEN, FILE_NAME, FALSE); - g_assert (passed); - passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_OPEN, FILE_NAME, TRUE); - g_assert (passed); - passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_SAVE, FILE_NAME, FALSE); - g_assert (passed); - passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_SAVE, FILE_NAME, TRUE); - g_assert (passed); - passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, FOLDER_NAME, FALSE); - g_assert (passed); - passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, FOLDER_NAME, TRUE); - g_assert (passed); - passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, FOLDER_NAME, FALSE); - g_assert (passed); - passed = passed && test_black_box_set_filename (GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, FOLDER_NAME, TRUE); - g_assert (passed); - - cwd = g_get_current_dir (); - - passed = passed && test_black_box_set_current_name (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); - - g_free (cwd); - - log_test (passed, "Black box tests"); -} - -struct confirm_overwrite_closure { - GtkWidget *chooser; - GtkWidget *accept_button; - gint confirm_overwrite_signal_emitted; - gchar *extension; -}; - -static GtkFileChooserConfirmation -confirm_overwrite_cb (GtkFileChooser *chooser, gpointer data) -{ - struct confirm_overwrite_closure *closure = data; - - if (g_test_verbose()) - printf ("bling!\n"); - closure->confirm_overwrite_signal_emitted += 1; - - return GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME; -} - -static void -overwrite_response_cb (GtkFileChooser *chooser, gint response, gpointer data) -{ - struct confirm_overwrite_closure *closure = data; - char *filename; - - if (g_test_verbose()) - printf ("plong!\n"); - - if (response != GTK_RESPONSE_ACCEPT) - return; - - filename = gtk_file_chooser_get_filename (chooser); - - if (!g_str_has_suffix (filename, closure->extension)) - { - char *basename; - - basename = g_path_get_basename (filename); - g_free (filename); - - filename = g_strconcat (basename, closure->extension, NULL); - gtk_file_chooser_set_current_name (chooser, filename); - - g_signal_stop_emission_by_name (chooser, "response"); - gtk_dialog_response (GTK_DIALOG (chooser), GTK_RESPONSE_ACCEPT); - } -} - -static gboolean -confirm_overwrite_timeout_cb (gpointer data) -{ - struct confirm_overwrite_closure *closure; - - closure = data; - gtk_button_clicked (GTK_BUTTON (closure->accept_button)); - - return FALSE; -} - -/* http://bugzilla.gnome.org/show_bug.cgi?id=347883 */ -static gboolean -test_confirm_overwrite_for_path (const char *path, gboolean append_extension) -{ - gboolean passed; - struct confirm_overwrite_closure closure; - char *filename; - - passed = TRUE; - - closure.extension = NULL; - closure.confirm_overwrite_signal_emitted = 0; - closure.chooser = gtk_file_chooser_dialog_new ("hello", NULL, GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - NULL); - closure.accept_button = gtk_dialog_add_button (GTK_DIALOG (closure.chooser), - GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT); - gtk_dialog_set_default_response (GTK_DIALOG (closure.chooser), GTK_RESPONSE_ACCEPT); - - gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (closure.chooser), TRUE); - - g_signal_connect (closure.chooser, "confirm-overwrite", - G_CALLBACK (confirm_overwrite_cb), &closure); - - if (append_extension) - { - char *extension; - - filename = g_path_get_dirname (path); - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (closure.chooser), filename); - g_free (filename); - - filename = g_path_get_basename (path); - extension = strchr (filename, '.'); - - if (extension) - { - closure.extension = g_strdup (extension); - *extension = '\0'; - } - - gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (closure.chooser), filename); - g_free (filename); - - g_signal_connect (closure.chooser, "response", - G_CALLBACK (overwrite_response_cb), &closure); - } - else - { - gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (closure.chooser), path); - } - - gdk_threads_add_timeout_full (G_MAXINT, SLEEP_DURATION, confirm_overwrite_timeout_cb, &closure, NULL); - gtk_dialog_run (GTK_DIALOG (closure.chooser)); - - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (closure.chooser)); - passed = passed && filename && (strcmp (filename, path) == 0); - g_free (filename); - - gtk_widget_destroy (closure.chooser); - - passed = passed && (1 == closure.confirm_overwrite_signal_emitted); - - log_test (passed, "Confirm overwrite for %s", path); - - return passed; -} - -static void -test_confirm_overwrite (void) -{ - gboolean passed = TRUE; - - /* first test for a file we know will always exist */ - passed = passed && test_confirm_overwrite_for_path ("/etc/passwd", FALSE); - g_assert (passed); - passed = passed && test_confirm_overwrite_for_path ("/etc/resolv.conf", TRUE); - g_assert (passed); -} - -static const GtkFileChooserAction open_actions[] = { - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER -}; - -static const GtkFileChooserAction save_actions[] = { - GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER -}; - - -static gboolean -has_action (const GtkFileChooserAction *actions, - int n_actions, - GtkFileChooserAction sought_action) -{ - int i; - - for (i = 0; i < n_actions; i++) - if (actions[i] == sought_action) - return TRUE; - - 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) -{ - GtkFileChooserDialog *d; - GtkFileChooserDialogPrivate *dialog_priv; - GtkFileChooserWidget *chooser_widget; - GtkFileChooserWidgetPrivate *widget_priv; - GtkFileChooserDefault *impl; - - d = GTK_FILE_CHOOSER_DIALOG (dialog); - dialog_priv = d->priv; - chooser_widget = GTK_FILE_CHOOSER_WIDGET (dialog_priv->widget); - if (!chooser_widget) - g_error ("BUG: dialog_priv->widget is not a GtkFileChooserWidget"); - - widget_priv = chooser_widget->priv; - impl = (GtkFileChooserDefault *) (widget_priv->impl); - if (!impl) - g_error ("BUG: widget_priv->impl is not a GtkFileChooserDefault"); - - return impl; -} - -static gboolean -test_widgets_for_current_action (GtkFileChooserDialog *dialog, - GtkFileChooserAction expected_action) -{ - GtkFileChooserDefault *impl; - gboolean passed; - - if (gtk_file_chooser_get_action (GTK_FILE_CHOOSER (dialog)) != expected_action) - return FALSE; - - impl = get_impl_from_dialog (GTK_WIDGET (dialog)); - - g_assert (impl->action == expected_action); - - passed = TRUE; - - /* 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); - else - passed = passed && GTK_WIDGET_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)) - { - passed = passed && (impl->save_widgets == NULL - && (impl->location_mode == LOCATION_MODE_PATH_BAR - ? impl->location_entry == NULL - : impl->location_entry != NULL) - && 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)); - } - else if (has_action (save_actions, G_N_ELEMENTS (save_actions), impl->action)) - { - /* FIXME: we can't use GTK_IS_FILE_CHOOSER_ENTRY() because it uses - * _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) - && GTK_IS_CONTAINER (impl->browse_widgets)); - - /* FIXME: we are in a SAVE mode; test the visibility and sensitivity of - * the children that change depending on the state of the expander. - */ - } - else - { - g_error ("BAD TEST: test_widgets_for_current_action() doesn't know about %s", get_action_name (impl->action)); - passed = FALSE; - } - - return passed; -} - -typedef gboolean (* ForeachActionCallback) (GtkFileChooserDialog *dialog, - GtkFileChooserAction action, - gpointer user_data); - -static gboolean -foreach_action (GtkFileChooserDialog *dialog, - ForeachActionCallback callback, - gpointer user_data) -{ - GEnumClass *enum_class; - int i; - - 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"); - - for (i = 0; i < enum_class->n_values; i++) - { - GEnumValue *enum_value; - GtkFileChooserAction action; - gboolean passed; - - enum_value = enum_class->values + i; - action = enum_value->value; - - passed = (* callback) (dialog, action, user_data); - if (!passed) - return FALSE; - } - - return TRUE; -} - -struct action_closure { - GtkFileChooserAction from_action; -}; - -static gboolean -switch_from_to_action_cb (GtkFileChooserDialog *dialog, - GtkFileChooserAction action, - gpointer user_data) -{ - struct action_closure *closure; - gboolean passed; - - closure = user_data; - - gtk_file_chooser_set_action (GTK_FILE_CHOOSER (dialog), closure->from_action); - - passed = test_widgets_for_current_action (dialog, closure->from_action); - log_test (passed, "switch_from_to_action_cb(): reset to action %s", get_action_name (closure->from_action)); - if (!passed) - return FALSE; - - gtk_file_chooser_set_action (GTK_FILE_CHOOSER (dialog), action); - - passed = test_widgets_for_current_action (dialog, action); - log_test (passed, "switch_from_to_action_cb(): transition from %s to %s", - get_action_name (closure->from_action), - get_action_name (action)); - return passed; -} - -static gboolean -switch_from_action_cb (GtkFileChooserDialog *dialog, - GtkFileChooserAction action, - gpointer user_data) -{ - struct action_closure closure; - - closure.from_action = action; - - return foreach_action (dialog, switch_from_to_action_cb, &closure); -} - -static void -test_action_widgets (void) -{ - GtkWidget *dialog; - GtkFileChooserAction action; - gboolean passed; - - dialog = gtk_file_chooser_dialog_new ("Test file chooser", - NULL, - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL, - GTK_STOCK_OK, - GTK_RESPONSE_ACCEPT, - NULL); - gtk_widget_show_now (dialog); - - action = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (dialog)); - - passed = test_widgets_for_current_action (GTK_FILE_CHOOSER_DIALOG (dialog), action); - log_test (passed, "test_action_widgets(): widgets for initial action %s", get_action_name (action)); - g_assert (passed); - - passed = foreach_action (GTK_FILE_CHOOSER_DIALOG (dialog), switch_from_action_cb, NULL); - log_test (passed, "test_action_widgets(): all transitions through property change"); - g_assert (passed); - - gtk_widget_destroy (dialog); -} - -static gboolean -test_reload_sequence (gboolean set_folder_before_map) -{ - GtkWidget *dialog; - GtkFileChooserDefault *impl; - gboolean passed; - char *folder; - char *current_working_dir; - - passed = TRUE; - - current_working_dir = g_get_current_dir (); - - dialog = gtk_file_chooser_dialog_new ("Test file chooser", - NULL, - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL, - GTK_STOCK_OK, - GTK_RESPONSE_ACCEPT, - NULL); - impl = get_impl_from_dialog (dialog); - - if (set_folder_before_map) - { - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), g_get_home_dir ()); - - wait_for_idle (); - - 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_HAS_FOLDER - && (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) - : TRUE)); - - 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); - g_free (folder); - } - else - { - /* Initially, no folder is not loaded or pending */ - passed = passed && (impl->current_folder == NULL - && impl->sort_model == NULL - && impl->browse_files_model == NULL - && impl->load_state == LOAD_EMPTY - && impl->reload_state == RELOAD_EMPTY - && impl->load_timeout_id == 0); - - wait_for_idle (); - - folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog)); - passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0); - } - - log_test (passed, "test_reload_sequence(): initial status"); - - /* After mapping, it is loading some folder, either the one that was explicitly set or the default one */ - - gtk_widget_show_now (dialog); - - wait_for_idle (); - - 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_HAS_FOLDER - && (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) - : TRUE)); - - 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); - else - passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0); - - g_free (folder); - - log_test (passed, "test_reload_sequence(): status after map"); - - /* Unmap it; we should still have a folder */ - - gtk_widget_hide (dialog); - - wait_for_idle (); - - 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) - : TRUE)); - - 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); - else - passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0); - - g_free (folder); - - log_test (passed, "test_reload_sequence(): status after unmap"); - - /* Map it again! */ - - gtk_widget_show_now (dialog); - - wait_for_idle (); - - 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_HAS_FOLDER - && (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) - : TRUE)); - - 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); - else - passed = passed && (folder != NULL && strcmp (folder, current_working_dir) == 0); - - g_free (folder); - - log_test (passed, "test_reload_sequence(): status after re-map"); - - gtk_widget_destroy (dialog); - g_free (current_working_dir); - - return passed; -} - -static void -test_reload (void) -{ - gboolean passed; - - passed = test_reload_sequence (FALSE); - log_test (passed, "test_reload(): create and use the default folder"); - g_assert (passed); - - passed = test_reload_sequence (TRUE); - log_test (passed, "test_reload(): set a folder explicitly before mapping"); - g_assert (passed); -} - -static gboolean -test_button_folder_states_for_action (GtkFileChooserAction action, gboolean use_dialog, gboolean set_folder_on_dialog) -{ - gboolean passed; - GtkWidget *window; - GtkWidget *button; - char *folder; - GtkWidget *dialog; - char *current_working_dir; - gboolean must_have_cwd; - - passed = TRUE; - - current_working_dir = g_get_current_dir (); - must_have_cwd = !(use_dialog && set_folder_on_dialog); - - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - - if (use_dialog) - { - dialog = gtk_file_chooser_dialog_new ("Test", NULL, action, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, - NULL); - button = gtk_file_chooser_button_new_with_dialog (dialog); - - if (set_folder_on_dialog) - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), g_get_home_dir ()); - } - else - { - button = gtk_file_chooser_button_new ("Test", action); - dialog = NULL; /* keep gcc happy */ - } - - gtk_container_add (GTK_CONTAINER (window), button); - - /* Pre-map; no folder is set */ - wait_for_idle (); - - 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); - else - passed = passed && (folder != NULL && strcmp (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), - use_dialog, - set_folder_on_dialog, - must_have_cwd ? "must have $cwd" : "must have explicit folder"); - - /* Map; folder should be set */ - - gtk_widget_show_all (window); - gtk_widget_show_now (window); - - wait_for_idle (); - - 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); - else - passed = passed && (folder != NULL && strcmp (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), - use_dialog, - set_folder_on_dialog, - must_have_cwd ? "must have $cwd" : "must have explicit folder"); - g_free (folder); - - /* Unmap; folder should be set */ - - gtk_widget_hide (window); - wait_for_idle (); - 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); - else - passed = passed && (folder != NULL && strcmp (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), - use_dialog, - set_folder_on_dialog, - must_have_cwd ? "must have $cwd" : "must have explicit folder"); - g_free (folder); - - /* Re-map; folder should be set */ - - gtk_widget_show_now (window); - 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); - else - passed = passed && (folder != NULL && strcmp (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), - use_dialog, - set_folder_on_dialog, - must_have_cwd ? "must have $cwd" : "must have explicit folder"); - g_free (folder); - - g_free (current_working_dir); - - gtk_widget_destroy (window); - - return passed; -} - -static void -test_button_folder_states (void) -{ - /* GtkFileChooserButton only supports OPEN and SELECT_FOLDER */ - static const GtkFileChooserAction actions_to_test[] = { - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER - }; - gboolean passed; - int i; - - passed = TRUE; - - for (i = 0; i < G_N_ELEMENTS (actions_to_test); i++) - { - passed = passed && test_button_folder_states_for_action (actions_to_test[i], FALSE, FALSE); - g_assert (passed); - passed = passed && test_button_folder_states_for_action (actions_to_test[i], TRUE, FALSE); - g_assert (passed); - passed = passed && test_button_folder_states_for_action (actions_to_test[i], TRUE, TRUE); - g_assert (passed); - log_test (passed, "test_button_folder_states(): action %s", get_action_name (actions_to_test[i])); - } - - log_test (passed, "test_button_folder_states(): all supported actions"); -} - -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; - GtkWidget *dialog; - GtkFileFilter *all_filter; - GtkFileFilter *txt_filter; - GtkFileChooserDefault *impl; - - passed = TRUE; - - cwd = g_get_current_dir (); - base_dir = g_build_filename (cwd, "file-chooser-test-dir", NULL); - - dialog = gtk_file_chooser_dialog_new ("Test", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, - 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); - - passed = passed && gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), base_dir); - g_assert (passed); - - /* All files filter */ - - all_filter = gtk_file_filter_new (); - gtk_file_filter_set_name (all_filter, "All files"); - gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), all_filter); - - /* *.txt filter */ - - txt_filter = gtk_file_filter_new (); - gtk_file_filter_set_name (all_filter, "*.txt"); - gtk_file_filter_add_pattern (txt_filter, "*.txt"); - gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), txt_filter); - - /* Test filter set */ - - gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), all_filter); - passed = passed && (gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog)) == all_filter); - g_assert (passed); - - gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), txt_filter); - passed = passed && (gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog)) == txt_filter); - log_test (passed, "test_folder_switch_and_filters(): set and get filter"); - g_assert (passed); - - gtk_widget_show (dialog); - - /* Test that filter is unchanged when we switch folders */ - - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd); - sleep_in_main_loop (0.5); - passed = passed && (gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog)) == txt_filter); - g_assert (passed); - - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), base_dir); - sleep_in_main_loop (0.25); - - g_signal_emit_by_name (impl->browse_path_bar, "path-clicked", - (GtkFilePath *) cwd_path, - (GtkFilePath *) base_dir_path, - FALSE); - sleep_in_main_loop (0.25); - passed = passed && (gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog)) == txt_filter); - log_test (passed, "test_folder_switch_and_filters(): filter after changing folder"); - g_assert (passed); - - /* cleanups */ - g_free (cwd); - g_free (base_dir); - gtk_file_path_free (cwd_path); - gtk_file_path_free (base_dir_path); - - gtk_widget_destroy (dialog); - - log_test (passed, "test_folder_switch_and_filters(): all filter tests"); -} - -extern void pixbuf_init (void); - -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); - g_test_add_func ("/GtkFileChooser/confirm_overwrite", test_confirm_overwrite); - g_test_add_func ("/GtkFileChooser/action_widgets", test_action_widgets); - g_test_add_func ("/GtkFileChooser/reload", test_reload); - g_test_add_func ("/GtkFileChooser/button_folder_states", test_button_folder_states); - g_test_add_func ("/GtkFileChooser/folder_switch_and_filters", test_folder_switch_and_filters); - - /* run and check selected tests */ - return g_test_run(); -} diff --git a/tests/buildertest.c b/tests/buildertest.c deleted file mode 100644 index de4e08052..000000000 --- a/tests/buildertest.c +++ /dev/null @@ -1,2213 +0,0 @@ -/* buildertest.c - * Copyright (C) 2006-2007 Async Open Source - * Authors: Johan Dahlin - * Henrique Romano - * - * 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, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include <string.h> -#include <libintl.h> -#include <locale.h> -#include <math.h> - -#include <gtk/gtk.h> -#include <gdk/gdkkeysyms.h> - -/* Copied from gtkiconfactory.c; keep in sync! */ -struct _GtkIconSet -{ - guint ref_count; - GSList *sources; - GSList *cache; - guint cache_size; - guint cache_serial; -}; - - -static GtkBuilder * -builder_new_from_string (const gchar *buffer, - gsize length, - gchar *domain) -{ - GtkBuilder *builder; - builder = gtk_builder_new (); - if (domain) - gtk_builder_set_translation_domain (builder, domain); - gtk_builder_add_from_string (builder, buffer, length, NULL); - return builder; -} - -static void -test_parser (void) -{ - GtkBuilder *builder; - GError *error; - - builder = gtk_builder_new (); - - error = NULL; - gtk_builder_add_from_string (builder, "<xxx/>", -1, &error); - g_assert (error != NULL); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_UNHANDLED_TAG); - g_error_free (error); - - error = NULL; - gtk_builder_add_from_string (builder, "<interface invalid=\"X\"/>", -1, &error); - g_assert (error != NULL); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_ATTRIBUTE); - g_error_free (error); - - error = NULL; - gtk_builder_add_from_string (builder, "<interface><child/></interface>", -1, &error); - g_assert (error != NULL); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_TAG); - g_error_free (error); - - error = NULL; - gtk_builder_add_from_string (builder, "<interface><object class=\"GtkVBox\" id=\"a\"><object class=\"GtkHBox\" id=\"b\"/></object></interface>", -1, &error); - g_assert (error != NULL); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_TAG); - g_error_free (error); - - error = NULL; - gtk_builder_add_from_string (builder, "<interface><object class=\"Unknown\" id=\"a\"></object></interface>", -1, &error); - g_assert (error != NULL); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); - g_error_free (error); - - error = NULL; - gtk_builder_add_from_string (builder, "<interface><object class=\"GtkWidget\" id=\"a\" constructor=\"none\"></object></interface>", -1, &error); - g_assert (error != NULL); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); - g_error_free (error); - - error = NULL; - gtk_builder_add_from_string (builder, "<interface><object class=\"GtkButton\" id=\"a\"><child internal-child=\"foobar\"><object class=\"GtkButton\" id=\"int\"/></child></object></interface>", -1, &error); - g_assert (error != NULL); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); - g_error_free (error); - - g_object_unref (builder); -} - -static int normal = 0; -static int after = 0; -static int object = 0; -static int object_after = 0; - -void // exported for GtkBuilder -signal_normal (GtkWindow *window, GParamSpec spec) -{ - g_assert (GTK_IS_WINDOW (window)); - g_assert (normal == 0); - g_assert (after == 0); - - normal++; -} - -void // exported for GtkBuilder -signal_after (GtkWindow *window, GParamSpec spec) -{ - g_assert (GTK_IS_WINDOW (window)); - g_assert (normal == 1); - g_assert (after == 0); - - after++; -} - -void // exported for GtkBuilder -signal_object (GtkButton *button, GParamSpec spec) -{ - g_assert (GTK_IS_BUTTON (button)); - g_assert (object == 0); - g_assert (object_after == 0); - - object++; -} - -void // exported for GtkBuilder -signal_object_after (GtkButton *button, GParamSpec spec) -{ - g_assert (GTK_IS_BUTTON (button)); - g_assert (object == 1); - g_assert (object_after == 0); - - object_after++; -} - -void // exported for GtkBuilder -signal_first (GtkButton *button, GParamSpec spec) -{ - g_assert (normal == 0); - normal = 10; -} - -void // exported for GtkBuilder -signal_second (GtkButton *button, GParamSpec spec) -{ - g_assert (normal == 10); - normal = 20; -} - -void // exported for GtkBuilder -signal_extra (GtkButton *button, GParamSpec spec) -{ - g_assert (normal == 20); - normal = 30; -} - -void // exported for GtkBuilder -signal_extra2 (GtkButton *button, GParamSpec spec) -{ - g_assert (normal == 30); - normal = 40; -} - -static void -test_connect_signals (void) -{ - GtkBuilder *builder; - GObject *window; - const gchar buffer[] = - "<interface>" - " <object class=\"GtkButton\" id=\"button\"/>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <signal name=\"notify::title\" handler=\"signal_normal\"/>" - " <signal name=\"notify::title\" handler=\"signal_after\" after=\"yes\"/>" - " <signal name=\"notify::title\" handler=\"signal_object\"" - " object=\"button\"/>" - " <signal name=\"notify::title\" handler=\"signal_object_after\"" - " object=\"button\" after=\"yes\"/>" - " </object>" - "</interface>"; - const gchar buffer_order[] = - "<interface>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <signal name=\"notify::title\" handler=\"signal_first\"/>" - " <signal name=\"notify::title\" handler=\"signal_second\"/>" - " </object>" - "</interface>"; - const gchar buffer_extra[] = - "<interface>" - " <object class=\"GtkWindow\" id=\"window2\">" - " <signal name=\"notify::title\" handler=\"signal_extra\"/>" - " </object>" - "</interface>"; - const gchar buffer_extra2[] = - "<interface>" - " <object class=\"GtkWindow\" id=\"window3\">" - " <signal name=\"notify::title\" handler=\"signal_extra2\"/>" - " </object>" - "</interface>"; - const gchar buffer_after_child[] = - "<interface>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkButton\" id=\"button1\"/>" - " </child>" - " <signal name=\"notify::title\" handler=\"signal_normal\"/>" - " </object>" - "</interface>"; - - builder = builder_new_from_string (buffer, -1, NULL); - gtk_builder_connect_signals (builder, NULL); - - window = gtk_builder_get_object (builder, "window1"); - gtk_window_set_title (GTK_WINDOW (window), "test"); - - g_assert_cmpint (normal, ==, 1); - g_assert_cmpint (after, ==, 1); - g_assert_cmpint (object, ==, 1); - g_assert_cmpint (object_after, ==, 1); - - gtk_widget_destroy (GTK_WIDGET (window)); - g_object_unref (builder); - - builder = builder_new_from_string (buffer_order, -1, NULL); - gtk_builder_connect_signals (builder, NULL); - window = gtk_builder_get_object (builder, "window1"); - normal = 0; - gtk_window_set_title (GTK_WINDOW (window), "test"); - g_assert (normal == 20); - - gtk_widget_destroy (GTK_WIDGET (window)); - - gtk_builder_add_from_string (builder, buffer_extra, - strlen (buffer_extra), NULL); - gtk_builder_add_from_string (builder, buffer_extra2, - strlen (buffer_extra2), NULL); - gtk_builder_connect_signals (builder, NULL); - window = gtk_builder_get_object (builder, "window2"); - gtk_window_set_title (GTK_WINDOW (window), "test"); - g_assert (normal == 30); - - gtk_widget_destroy (GTK_WIDGET (window)); - window = gtk_builder_get_object (builder, "window3"); - gtk_window_set_title (GTK_WINDOW (window), "test"); - g_assert (normal == 40); - gtk_widget_destroy (GTK_WIDGET (window)); - - g_object_unref (builder); - - /* new test, reset globals */ - after = 0; - normal = 0; - - builder = builder_new_from_string (buffer_after_child, -1, NULL); - window = gtk_builder_get_object (builder, "window1"); - gtk_builder_connect_signals (builder, NULL); - gtk_window_set_title (GTK_WINDOW (window), "test"); - - g_assert (normal == 1); - gtk_widget_destroy (GTK_WIDGET (window)); - g_object_unref (builder); -} - -static void -test_uimanager_simple (void) -{ - GtkBuilder *builder; - GObject *window, *uimgr, *menubar; - GObject *menu, *label; - GList *children; - const gchar buffer[] = - "<interface>" - " <object class=\"GtkUIManager\" id=\"uimgr1\"/>" - "</interface>"; - - const gchar buffer2[] = - "<interface>" - " <object class=\"GtkUIManager\" id=\"uimgr1\">" - " <child>" - " <object class=\"GtkActionGroup\" id=\"ag1\">" - " <child>" - " <object class=\"GtkAction\" id=\"file\">" - " <property name=\"label\">_File</property>" - " </object>" - " <accelerator key=\"n\" modifiers=\"GDK_CONTROL_MASK\"/>" - " </child>" - " </object>" - " </child>" - " <ui>" - " <menubar name=\"menubar1\">" - " <menu action=\"file\">" - " </menu>" - " </menubar>" - " </ui>" - " </object>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkMenuBar\" id=\"menubar1\" constructor=\"uimgr1\"/>" - " </child>" - " </object>" - "</interface>"; - - builder = builder_new_from_string (buffer, -1, NULL); - - uimgr = gtk_builder_get_object (builder, "uimgr1"); - g_assert (uimgr != NULL); - g_assert (GTK_IS_UI_MANAGER (uimgr)); - g_object_unref (builder); - - builder = builder_new_from_string (buffer2, -1, NULL); - - menubar = gtk_builder_get_object (builder, "menubar1"); - g_assert (menubar != NULL); - g_assert (GTK_IS_MENU_BAR (menubar)); - - children = gtk_container_get_children (GTK_CONTAINER (menubar)); - menu = children->data; - g_assert (menu != NULL); - g_assert (GTK_IS_MENU_ITEM (menu)); - g_assert (strcmp (GTK_WIDGET (menu)->name, "file") == 0); - g_list_free (children); - - label = G_OBJECT (GTK_BIN (menu)->child); - g_assert (label != NULL); - g_assert (GTK_IS_LABEL (label)); - g_assert (strcmp (gtk_label_get_text (GTK_LABEL (label)), "File") == 0); - - window = gtk_builder_get_object (builder, "window1"); - gtk_widget_destroy (GTK_WIDGET (window)); - g_object_unref (builder); -} - -static void -test_domain (void) -{ - GtkBuilder *builder; - const gchar buffer1[] = "<interface/>"; - const gchar buffer2[] = "<interface domain=\"domain\"/>"; - const gchar *domain; - - builder = builder_new_from_string (buffer1, -1, NULL); - domain = gtk_builder_get_translation_domain (builder); - g_assert (domain == NULL); - g_object_unref (builder); - - builder = builder_new_from_string (buffer1, -1, "domain-1"); - domain = gtk_builder_get_translation_domain (builder); - g_assert (domain); - g_assert (strcmp (domain, "domain-1") == 0); - g_object_unref (builder); - - builder = builder_new_from_string (buffer2, -1, NULL); - domain = gtk_builder_get_translation_domain (builder); - g_assert (domain == NULL); - g_object_unref (builder); - - builder = builder_new_from_string (buffer2, -1, "domain-1"); - domain = gtk_builder_get_translation_domain (builder); - g_assert (domain); - g_assert (strcmp (domain, "domain-1") == 0); - g_object_unref (builder); -} - -#if 0 -static void -test_translation (void) -{ - GtkBuilder *builder; - const gchar buffer[] = - "<interface>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkLabel\" id=\"label\">" - " <property name=\"label\" translatable=\"yes\">File</property>" - " </object>" - " </child>" - " </object>" - "</interface>"; - GtkLabel *window, *label; - - setlocale (LC_ALL, "sv_SE"); - textdomain ("builder"); - bindtextdomain ("builder", "tests"); - - builder = builder_new_from_string (buffer, -1, NULL); - label = GTK_LABEL (gtk_builder_get_object (builder, "label")); - g_assert (strcmp (gtk_label_get_text (label), "Arkiv") == 0); - - window = gtk_builder_get_object (builder, "window1"); - gtk_widget_destroy (GTK_WIDGET (window)); - g_object_unref (builder); -} -#endif - -static void -test_sizegroup (void) -{ - GtkBuilder * builder; - const gchar buffer1[] = - "<interface domain=\"test\">" - " <object class=\"GtkSizeGroup\" id=\"sizegroup1\">" - " <property name=\"mode\">GTK_SIZE_GROUP_HORIZONTAL</property>" - " <widgets>" - " <widget name=\"radio1\"/>" - " <widget name=\"radio2\"/>" - " </widgets>" - " </object>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkVBox\" id=\"vbox1\">" - " <child>" - " <object class=\"GtkRadioButton\" id=\"radio1\"/>" - " </child>" - " <child>" - " <object class=\"GtkRadioButton\" id=\"radio2\"/>" - " </child>" - " </object>" - " </child>" - " </object>" - "</interface>"; - const gchar buffer2[] = - "<interface domain=\"test\">" - " <object class=\"GtkSizeGroup\" id=\"sizegroup1\">" - " <property name=\"mode\">GTK_SIZE_GROUP_HORIZONTAL</property>" - " <widgets>" - " </widgets>" - " </object>" - "</interface>"; - const gchar buffer3[] = - "<interface domain=\"test\">" - " <object class=\"GtkSizeGroup\" id=\"sizegroup1\">" - " <property name=\"mode\">GTK_SIZE_GROUP_HORIZONTAL</property>" - " <widgets>" - " <widget name=\"radio1\"/>" - " <widget name=\"radio2\"/>" - " </widgets>" - " </object>" - " <object class=\"GtkSizeGroup\" id=\"sizegroup2\">" - " <property name=\"mode\">GTK_SIZE_GROUP_HORIZONTAL</property>" - " <widgets>" - " <widget name=\"radio1\"/>" - " <widget name=\"radio2\"/>" - " </widgets>" - " </object>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkVBox\" id=\"vbox1\">" - " <child>" - " <object class=\"GtkRadioButton\" id=\"radio1\"/>" - " </child>" - " <child>" - " <object class=\"GtkRadioButton\" id=\"radio2\"/>" - " </child>" - " </object>" - " </child>" - " </object>" - "</interface>"; - GObject *sizegroup; - GSList *widgets; - - builder = builder_new_from_string (buffer1, -1, NULL); - sizegroup = gtk_builder_get_object (builder, "sizegroup1"); - widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup)); - g_assert (g_slist_length (widgets) == 2); - g_slist_free (widgets); - g_object_unref (builder); - - builder = builder_new_from_string (buffer2, -1, NULL); - sizegroup = gtk_builder_get_object (builder, "sizegroup1"); - widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup)); - g_assert (g_slist_length (widgets) == 0); - g_slist_free (widgets); - g_object_unref (builder); - - builder = builder_new_from_string (buffer3, -1, NULL); - sizegroup = gtk_builder_get_object (builder, "sizegroup1"); - widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup)); - g_assert (g_slist_length (widgets) == 2); - g_slist_free (widgets); - sizegroup = gtk_builder_get_object (builder, "sizegroup2"); - widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup)); - g_assert (g_slist_length (widgets) == 2); - g_slist_free (widgets); - -#if 0 - { - GObject *window; - window = gtk_builder_get_object (builder, "window1"); - gtk_widget_destroy (GTK_WIDGET (window)); - } -#endif - g_object_unref (builder); -} - -static void -test_list_store (void) -{ - const gchar buffer1[] = - "<interface>" - " <object class=\"GtkListStore\" id=\"liststore1\">" - " <columns>" - " <column type=\"gchararray\"/>" - " <column type=\"guint\"/>" - " </columns>" - " </object>" - "</interface>"; - const char buffer2[] = - "<interface>" - " <object class=\"GtkListStore\" id=\"liststore1\">" - " <columns>" - " <column type=\"gchararray\"/>" - " <column type=\"gchararray\"/>" - " <column type=\"gint\"/>" - " </columns>" - " <data>" - " <row>" - " <col id=\"0\" translatable=\"yes\">John</col>" - " <col id=\"1\" context=\"foo\">Doe</col>" - " <col id=\"2\" comment=\"foobar\">25</col>" - " </row>" - " <row>" - " <col id=\"0\">Johan</col>" - " <col id=\"1\">Dole</col>" - " <col id=\"2\">50</col>" - " </row>" - " </data>" - " </object>" - "</interface>"; - const char buffer3[] = - "<interface>" - " <object class=\"GtkListStore\" id=\"liststore1\">" - " <columns>" - " <column type=\"gchararray\"/>" - " <column type=\"gchararray\"/>" - " <column type=\"gint\"/>" - " </columns>" - " <data>" - " <row>" - " <col id=\"1\" context=\"foo\">Doe</col>" - " <col id=\"0\" translatable=\"yes\">John</col>" - " <col id=\"2\" comment=\"foobar\">25</col>" - " </row>" - " <row>" - " <col id=\"2\">50</col>" - " <col id=\"1\">Dole</col>" - " <col id=\"0\">Johan</col>" - " </row>" - " <row>" - " <col id=\"2\">19</col>" - " </row>" - " </data>" - " </object>" - "</interface>"; - GtkBuilder *builder; - GObject *store; - GtkTreeIter iter; - gchar *surname, *lastname; - int age; - - builder = builder_new_from_string (buffer1, -1, NULL); - store = gtk_builder_get_object (builder, "liststore1"); - g_assert (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 2); - g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING); - g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_UINT); - g_object_unref (builder); - - builder = builder_new_from_string (buffer2, -1, NULL); - store = gtk_builder_get_object (builder, "liststore1"); - g_assert (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 3); - g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING); - g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_STRING); - g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 2) == G_TYPE_INT); - - g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter) == TRUE); - gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, - 0, &surname, - 1, &lastname, - 2, &age, - -1); - g_assert (surname != NULL); - g_assert (strcmp (surname, "John") == 0); - g_free (surname); - g_assert (lastname != NULL); - g_assert (strcmp (lastname, "Doe") == 0); - g_free (lastname); - g_assert (age == 25); - g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == TRUE); - - gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, - 0, &surname, - 1, &lastname, - 2, &age, - -1); - g_assert (surname != NULL); - g_assert (strcmp (surname, "Johan") == 0); - g_free (surname); - g_assert (lastname != NULL); - g_assert (strcmp (lastname, "Dole") == 0); - g_free (lastname); - g_assert (age == 50); - g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == FALSE); - - builder = builder_new_from_string (buffer3, -1, NULL); - store = gtk_builder_get_object (builder, "liststore1"); - g_assert (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 3); - g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING); - g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_STRING); - g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 2) == G_TYPE_INT); - - g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter) == TRUE); - gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, - 0, &surname, - 1, &lastname, - 2, &age, - -1); - g_assert (surname != NULL); - g_assert (strcmp (surname, "John") == 0); - g_free (surname); - g_assert (lastname != NULL); - g_assert (strcmp (lastname, "Doe") == 0); - g_free (lastname); - g_assert (age == 25); - g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == TRUE); - - gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, - 0, &surname, - 1, &lastname, - 2, &age, - -1); - g_assert (surname != NULL); - g_assert (strcmp (surname, "Johan") == 0); - g_free (surname); - g_assert (lastname != NULL); - g_assert (strcmp (lastname, "Dole") == 0); - g_free (lastname); - g_assert (age == 50); - g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == TRUE); - - gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, - 0, &surname, - 1, &lastname, - 2, &age, - -1); - g_assert (surname == NULL); - g_assert (lastname == NULL); - g_assert (age == 19); - g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == FALSE); - - g_object_unref (builder); -} - -static void -test_tree_store (void) -{ - const gchar buffer[] = - "<interface domain=\"test\">" - " <object class=\"GtkTreeStore\" id=\"treestore1\">" - " <columns>" - " <column type=\"gchararray\"/>" - " <column type=\"guint\"/>" - " </columns>" - " </object>" - "</interface>"; - GtkBuilder *builder; - GObject *store; - - builder = builder_new_from_string (buffer, -1, NULL); - store = gtk_builder_get_object (builder, "treestore1"); - g_assert (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 2); - g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING); - g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_UINT); - - g_object_unref (builder); -} - -static void -test_types (void) -{ - const gchar buffer[] = - "<interface>" - " <object class=\"GtkAction\" id=\"action\"/>" - " <object class=\"GtkActionGroup\" id=\"actiongroup\"/>" - " <object class=\"GtkAlignment\" id=\"alignment\"/>" - " <object class=\"GtkArrow\" id=\"arrow\"/>" - " <object class=\"GtkButton\" id=\"button\"/>" - " <object class=\"GtkCheckButton\" id=\"checkbutton\"/>" - " <object class=\"GtkDialog\" id=\"dialog\"/>" - " <object class=\"GtkDrawingArea\" id=\"drawingarea\"/>" - " <object class=\"GtkEventBox\" id=\"eventbox\"/>" - " <object class=\"GtkEntry\" id=\"entry\"/>" - " <object class=\"GtkFontButton\" id=\"fontbutton\"/>" - " <object class=\"GtkHButtonBox\" id=\"hbuttonbox\"/>" - " <object class=\"GtkHBox\" id=\"hbox\"/>" - " <object class=\"GtkHPaned\" id=\"hpaned\"/>" - " <object class=\"GtkHRuler\" id=\"hruler\"/>" - " <object class=\"GtkHScale\" id=\"hscale\"/>" - " <object class=\"GtkHScrollbar\" id=\"hscrollbar\"/>" - " <object class=\"GtkHSeparator\" id=\"hseparator\"/>" - " <object class=\"GtkImage\" id=\"image\"/>" - " <object class=\"GtkLabel\" id=\"label\"/>" - " <object class=\"GtkListStore\" id=\"liststore\"/>" - " <object class=\"GtkMenuBar\" id=\"menubar\"/>" - " <object class=\"GtkNotebook\" id=\"notebook\"/>" - " <object class=\"GtkProgressBar\" id=\"progressbar\"/>" - " <object class=\"GtkRadioButton\" id=\"radiobutton\"/>" - " <object class=\"GtkSizeGroup\" id=\"sizegroup\"/>" - " <object class=\"GtkScrolledWindow\" id=\"scrolledwindow\"/>" - " <object class=\"GtkSpinButton\" id=\"spinbutton\"/>" - " <object class=\"GtkStatusbar\" id=\"statusbar\"/>" - " <object class=\"GtkTextView\" id=\"textview\"/>" - " <object class=\"GtkToggleAction\" id=\"toggleaction\"/>" - " <object class=\"GtkToggleButton\" id=\"togglebutton\"/>" - " <object class=\"GtkToolbar\" id=\"toolbar\"/>" - " <object class=\"GtkTreeStore\" id=\"treestore\"/>" - " <object class=\"GtkTreeView\" id=\"treeview\"/>" - " <object class=\"GtkTable\" id=\"table\"/>" - " <object class=\"GtkVBox\" id=\"vbox\"/>" - " <object class=\"GtkVButtonBox\" id=\"vbuttonbox\"/>" - " <object class=\"GtkVScrollbar\" id=\"vscrollbar\"/>" - " <object class=\"GtkVSeparator\" id=\"vseparator\"/>" - " <object class=\"GtkViewport\" id=\"viewport\"/>" - " <object class=\"GtkVRuler\" id=\"vruler\"/>" - " <object class=\"GtkVPaned\" id=\"vpaned\"/>" - " <object class=\"GtkVScale\" id=\"vscale\"/>" - " <object class=\"GtkWindow\" id=\"window\"/>" - " <object class=\"GtkUIManager\" id=\"uimanager\"/>" - "</interface>"; - const gchar buffer2[] = - "<interface>" - " <object type-func=\"gtk_window_get_type\" id=\"window\"/>" - "</interface>"; - const gchar buffer3[] = - "<interface>" - " <object type-func=\"xxx_invalid_get_type_function\" id=\"window\"/>" - "</interface>"; - GtkBuilder *builder; - GObject *window; - GError *error; - - builder = builder_new_from_string (buffer, -1, NULL); - gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "dialog"))); - gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "window"))); - g_object_unref (builder); - - builder = builder_new_from_string (buffer2, -1, NULL); - window = gtk_builder_get_object (builder, "window"); - g_assert (window != NULL); - g_assert (GTK_IS_WINDOW (window)); - gtk_widget_destroy (GTK_WIDGET (window)); - g_object_unref (builder); - - error = NULL; - builder = gtk_builder_new (); - gtk_builder_add_from_string (builder, buffer3, -1, &error); - g_assert (error != NULL); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION); - g_error_free (error); - g_object_unref (builder); -} - -static void -test_spin_button (void) -{ - GtkBuilder *builder; - const gchar buffer[] = - "<interface>" - "<object class=\"GtkAdjustment\" id=\"adjustment1\">" - "<property name=\"lower\">0</property>" - "<property name=\"upper\">10</property>" - "<property name=\"step-increment\">2</property>" - "<property name=\"page-increment\">3</property>" - "<property name=\"page-size\">5</property>" - "<property name=\"value\">1</property>" - "</object>" - "<object class=\"GtkSpinButton\" id=\"spinbutton1\">" - "<property name=\"visible\">True</property>" - "<property name=\"adjustment\">adjustment1</property>" - "</object>" - "</interface>"; - GObject *object; - GtkAdjustment *adjustment; - gdouble value; - - builder = builder_new_from_string (buffer, -1, NULL); - object = gtk_builder_get_object (builder, "spinbutton1"); - g_assert (GTK_IS_SPIN_BUTTON (object)); - adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (object)); - g_assert (GTK_IS_ADJUSTMENT (adjustment)); - g_object_get (adjustment, "value", &value, NULL); - g_assert (value == 1); - g_object_get (adjustment, "lower", &value, NULL); - g_assert (value == 0); - g_object_get (adjustment, "upper", &value, NULL); - g_assert (value == 10); - g_object_get (adjustment, "step-increment", &value, NULL); - g_assert (value == 2); - g_object_get (adjustment, "page-increment", &value, NULL); - g_assert (value == 3); - g_object_get (adjustment, "page-size", &value, NULL); - g_assert (value == 5); - - g_object_unref (builder); -} - -static void -test_notebook (void) -{ - GtkBuilder *builder; - const gchar buffer[] = - "<interface>" - " <object class=\"GtkNotebook\" id=\"notebook1\">" - " <child>" - " <object class=\"GtkLabel\" id=\"label1\">" - " <property name=\"label\">label1</property>" - " </object>" - " </child>" - " <child type=\"tab\">" - " <object class=\"GtkLabel\" id=\"tablabel1\">" - " <property name=\"label\">tab_label1</property>" - " </object>" - " </child>" - " <child>" - " <object class=\"GtkLabel\" id=\"label2\">" - " <property name=\"label\">label2</property>" - " </object>" - " </child>" - " <child type=\"tab\">" - " <object class=\"GtkLabel\" id=\"tablabel2\">" - " <property name=\"label\">tab_label2</property>" - " </object>" - " </child>" - " </object>" - "</interface>"; - GObject *notebook; - GtkWidget *label; - - builder = builder_new_from_string (buffer, -1, NULL); - notebook = gtk_builder_get_object (builder, "notebook1"); - g_assert (notebook != NULL); - g_assert (gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook)) == 2); - - label = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 0); - g_assert (GTK_IS_LABEL (label)); - g_assert (strcmp (gtk_label_get_label (GTK_LABEL (label)), "label1") == 0); - label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), label); - g_assert (GTK_IS_LABEL (label)); - g_assert (strcmp (gtk_label_get_label (GTK_LABEL (label)), "tab_label1") == 0); - - label = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 1); - g_assert (GTK_IS_LABEL (label)); - g_assert (strcmp (gtk_label_get_label (GTK_LABEL (label)), "label2") == 0); - label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), label); - g_assert (GTK_IS_LABEL (label)); - g_assert (strcmp (gtk_label_get_label (GTK_LABEL (label)), "tab_label2") == 0); - - g_object_unref (builder); -} - -static void -test_construct_only_property (void) -{ - GtkBuilder *builder; - const gchar buffer[] = - "<interface>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <property name=\"type\">GTK_WINDOW_POPUP</property>" - " </object>" - "</interface>"; - const gchar buffer2[] = - "<interface>" - " <object class=\"GtkTextTagTable\" id=\"tagtable1\"/>" - " <object class=\"GtkTextBuffer\" id=\"textbuffer1\">" - " <property name=\"tag-table\">tagtable1</property>" - " </object>" - "</interface>"; - GObject *widget, *tagtable, *textbuffer; - GtkWindowType type; - - builder = builder_new_from_string (buffer, -1, NULL); - widget = gtk_builder_get_object (builder, "window1"); - g_object_get (widget, "type", &type, NULL); - g_assert (type == GTK_WINDOW_POPUP); - - gtk_widget_destroy (GTK_WIDGET (widget)); - g_object_unref (builder); - - builder = builder_new_from_string (buffer2, -1, NULL); - textbuffer = gtk_builder_get_object (builder, "textbuffer1"); - g_assert (textbuffer != NULL); - g_object_get (textbuffer, "tag-table", &tagtable, NULL); - g_assert (tagtable == gtk_builder_get_object (builder, "tagtable1")); - g_object_unref (tagtable); - g_object_unref (builder); -} - -static void -test_object_properties (void) -{ - GtkBuilder *builder; - const gchar buffer[] = - "<interface>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkVBox\" id=\"vbox\">" - " <property name=\"border-width\">10</property>" - " <child>" - " <object class=\"GtkLabel\" id=\"label1\">" - " <property name=\"mnemonic-widget\">spinbutton1</property>" - " </object>" - " </child>" - " <child>" - " <object class=\"GtkSpinButton\" id=\"spinbutton1\"/>" - " </child>" - " </object>" - " </child>" - " </object>" - "</interface>"; - const gchar buffer2[] = - "<interface>" - " <object class=\"GtkWindow\" id=\"window2\"/>" - "</interface>"; - GObject *label, *spinbutton, *window; - - builder = builder_new_from_string (buffer, -1, NULL); - label = gtk_builder_get_object (builder, "label1"); - g_assert (label != NULL); - spinbutton = gtk_builder_get_object (builder, "spinbutton1"); - g_assert (spinbutton != NULL); - g_assert (spinbutton == (GObject*)gtk_label_get_mnemonic_widget (GTK_LABEL (label))); - - gtk_builder_add_from_string (builder, buffer2, -1, NULL); - window = gtk_builder_get_object (builder, "window2"); - g_assert (window != NULL); - gtk_widget_destroy (GTK_WIDGET (window)); - - g_object_unref (builder); -} - -static void -test_children (void) -{ - GtkBuilder * builder; - GList *children; - const gchar buffer1[] = - "<interface>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkButton\" id=\"button1\">" - " <property name=\"label\">Hello</property>" - " </object>" - " </child>" - " </object>" - "</interface>"; - const gchar buffer2[] = - "<interface>" - " <object class=\"GtkDialog\" id=\"dialog1\">" - " <child internal-child=\"vbox\">" - " <object class=\"GtkVBox\" id=\"dialog1-vbox\">" - " <property name=\"border-width\">10</property>" - " <child internal-child=\"action_area\">" - " <object class=\"GtkHButtonBox\" id=\"dialog1-action_area\">" - " <property name=\"border-width\">20</property>" - " </object>" - " </child>" - " </object>" - " </child>" - " </object>" - "</interface>"; - - GObject *window, *button; - GObject *dialog, *vbox, *action_area; - - builder = builder_new_from_string (buffer1, -1, NULL); - window = gtk_builder_get_object (builder, "window1"); - g_assert (window != NULL); - g_assert (GTK_IS_WINDOW (window)); - - button = gtk_builder_get_object (builder, "button1"); - g_assert (button != NULL); - g_assert (GTK_IS_BUTTON (button)); - g_assert (strcmp (GTK_WIDGET (GTK_WIDGET (button)->parent)->name, "window1") == 0); - - gtk_widget_destroy (GTK_WIDGET (window)); - g_object_unref (builder); - - builder = builder_new_from_string (buffer2, -1, NULL); - dialog = gtk_builder_get_object (builder, "dialog1"); - g_assert (dialog != NULL); - g_assert (GTK_IS_DIALOG (dialog)); - children = gtk_container_get_children (GTK_CONTAINER (dialog)); - g_assert (g_list_length (children) == 1); - g_list_free (children); - - vbox = gtk_builder_get_object (builder, "dialog1-vbox"); - g_assert (vbox != NULL); - g_assert (GTK_IS_VBOX (vbox)); - g_assert (GTK_WIDGET (vbox)->parent != NULL); - g_assert (strcmp (GTK_WIDGET (GTK_WIDGET (vbox)->parent)->name, "dialog1") == 0); - g_assert (GTK_CONTAINER (vbox)->border_width == 10); - g_assert (strcmp (GTK_WIDGET (GTK_DIALOG (dialog)->vbox)->name, "dialog1-vbox") == 0); - - action_area = gtk_builder_get_object (builder, "dialog1-action_area"); - g_assert (action_area != NULL); - g_assert (GTK_IS_HBUTTON_BOX (action_area)); - g_assert (GTK_WIDGET (action_area)->parent != NULL); - g_assert (GTK_CONTAINER (action_area)->border_width == 20); - g_assert (GTK_DIALOG (dialog)->action_area != NULL); - g_assert (GTK_WIDGET (GTK_DIALOG (dialog)->action_area)->name != NULL); - g_assert (strcmp (GTK_WIDGET (GTK_DIALOG (dialog)->action_area)->name, "dialog1-action_area") == 0); - gtk_widget_destroy (GTK_WIDGET (dialog)); - g_object_unref (builder); -} - -static void -test_child_properties (void) -{ - GtkBuilder * builder; - const gchar buffer1[] = - "<interface>" - " <object class=\"GtkVBox\" id=\"vbox1\">" - " <child>" - " <object class=\"GtkLabel\" id=\"label1\"/>" - " <packing>" - " <property name=\"pack-type\">start</property>" - " </packing>" - " </child>" - " <child>" - " <object class=\"GtkLabel\" id=\"label2\"/>" - " <packing>" - " <property name=\"pack-type\">end</property>" - " </packing>" - " </child>" - " </object>" - "</interface>"; - - GObject *label, *vbox; - GtkPackType pack_type; - - builder = builder_new_from_string (buffer1, -1, NULL); - vbox = gtk_builder_get_object (builder, "vbox1"); - g_assert (GTK_IS_VBOX (vbox)); - - label = gtk_builder_get_object (builder, "label1"); - g_assert (GTK_IS_LABEL (label)); - gtk_container_child_get (GTK_CONTAINER (vbox), - GTK_WIDGET (label), - "pack-type", - &pack_type, - NULL); - g_assert (pack_type == GTK_PACK_START); - - label = gtk_builder_get_object (builder, "label2"); - g_assert (GTK_IS_LABEL (label)); - gtk_container_child_get (GTK_CONTAINER (vbox), - GTK_WIDGET (label), - "pack-type", - &pack_type, - NULL); - g_assert (pack_type == GTK_PACK_END); - - g_object_unref (builder); -} - -static void -test_treeview_column (void) -{ - GtkBuilder *builder; - const gchar buffer[] = - "<interface>" - "<object class=\"GtkListStore\" id=\"liststore1\">" - " <columns>" - " <column type=\"gchararray\"/>" - " <column type=\"guint\"/>" - " </columns>" - " <data>" - " <row>" - " <col id=\"0\">John</col>" - " <col id=\"1\">25</col>" - " </row>" - " </data>" - "</object>" - "<object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkTreeView\" id=\"treeview1\">" - " <property name=\"visible\">True</property>" - " <property name=\"model\">liststore1</property>" - " <child>" - " <object class=\"GtkTreeViewColumn\" id=\"column1\">" - " <property name=\"title\">Test</property>" - " <child>" - " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>" - " <attributes>" - " <attribute name=\"text\">1</attribute>" - " </attributes>" - " </child>" - " </object>" - " </child>" - " <child>" - " <object class=\"GtkTreeViewColumn\" id=\"column2\">" - " <property name=\"title\">Number</property>" - " <child>" - " <object class=\"GtkCellRendererText\" id=\"renderer2\"/>" - " <attributes>" - " <attribute name=\"text\">0</attribute>" - " </attributes>" - " </child>" - " </object>" - " </child>" - " </object>" - " </child>" - "</object>" - "</interface>"; - GObject *window, *treeview; - GtkTreeViewColumn *column; - GList *renderers; - GObject *renderer; - gchar *text; - - builder = builder_new_from_string (buffer, -1, NULL); - treeview = gtk_builder_get_object (builder, "treeview1"); - g_assert (treeview); - g_assert (GTK_IS_TREE_VIEW (treeview)); - column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), 0); - g_assert (GTK_IS_TREE_VIEW_COLUMN (column)); - g_assert (strcmp (gtk_tree_view_column_get_title (column), "Test") == 0); - - renderers = gtk_tree_view_column_get_cell_renderers (column); - g_assert (g_list_length (renderers) == 1); - renderer = g_list_nth_data (renderers, 0); - g_assert (renderer); - g_assert (GTK_IS_CELL_RENDERER_TEXT (renderer)); - g_list_free (renderers); - - gtk_widget_realize (GTK_WIDGET (treeview)); - - renderer = gtk_builder_get_object (builder, "renderer1"); - g_object_get (renderer, "text", &text, NULL); - g_assert (text); - g_assert (strcmp (text, "25") == 0); - g_free (text); - - renderer = gtk_builder_get_object (builder, "renderer2"); - g_object_get (renderer, "text", &text, NULL); - g_assert (text); - g_assert (strcmp (text, "John") == 0); - g_free (text); - - gtk_widget_unrealize (GTK_WIDGET (treeview)); - - window = gtk_builder_get_object (builder, "window1"); - gtk_widget_destroy (GTK_WIDGET (window)); - - g_object_unref (builder); -} - -static void -test_icon_view (void) -{ - GtkBuilder *builder; - const gchar buffer[] = - "<interface>" - " <object class=\"GtkListStore\" id=\"liststore1\">" - " <columns>" - " <column type=\"gchararray\"/>" - " <column type=\"GdkPixbuf\"/>" - " </columns>" - " <data>" - " <row>" - " <col id=\"0\">test</col>" - " </row>" - " </data>" - " </object>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkIconView\" id=\"iconview1\">" - " <property name=\"model\">liststore1</property>" - " <property name=\"text-column\">0</property>" - " <property name=\"pixbuf-column\">1</property>" - " <property name=\"visible\">True</property>" - " <child>" - " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>" - " <attributes>" - " <attribute name=\"text\">0</attribute>" - " </attributes>" - " </child>" - " </object>" - " </child>" - " </object>" - "</interface>"; - GObject *window, *iconview, *renderer; - gchar *text; - - builder = builder_new_from_string (buffer, -1, NULL); - iconview = gtk_builder_get_object (builder, "iconview1"); - g_assert (iconview); - g_assert (GTK_IS_ICON_VIEW (iconview)); - - gtk_widget_realize (GTK_WIDGET (iconview)); - - renderer = gtk_builder_get_object (builder, "renderer1"); - g_object_get (renderer, "text", &text, NULL); - g_assert (text); - g_assert (strcmp (text, "test") == 0); - g_free (text); - - window = gtk_builder_get_object (builder, "window1"); - gtk_widget_destroy (GTK_WIDGET (window)); - g_object_unref (builder); -} - -static void -test_combo_box (void) -{ - GtkBuilder *builder; - const gchar buffer[] = - "<interface>" - " <object class=\"GtkListStore\" id=\"liststore1\">" - " <columns>" - " <column type=\"guint\"/>" - " <column type=\"gchararray\"/>" - " </columns>" - " <data>" - " <row>" - " <col id=\"0\">1</col>" - " <col id=\"1\">Foo</col>" - " </row>" - " <row>" - " <col id=\"0\">2</col>" - " <col id=\"1\">Bar</col>" - " </row>" - " </data>" - " </object>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkComboBox\" id=\"combobox1\">" - " <property name=\"model\">liststore1</property>" - " <property name=\"visible\">True</property>" - " <child>" - " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>" - " <attributes>" - " <attribute name=\"text\">0</attribute>" - " </attributes>" - " </child>" - " <child>" - " <object class=\"GtkCellRendererText\" id=\"renderer2\"/>" - " <attributes>" - " <attribute name=\"text\">1</attribute>" - " </attributes>" - " </child>" - " </object>" - " </child>" - " </object>" - "</interface>"; - GObject *window, *combobox, *renderer; - gchar *text; - - builder = builder_new_from_string (buffer, -1, NULL); - combobox = gtk_builder_get_object (builder, "combobox1"); - g_assert (combobox); - gtk_widget_realize (GTK_WIDGET (combobox)); - - renderer = gtk_builder_get_object (builder, "renderer2"); - g_assert (renderer); - g_object_get (renderer, "text", &text, NULL); - g_assert (text); - g_assert (strcmp (text, "Bar") == 0); - g_free (text); - - renderer = gtk_builder_get_object (builder, "renderer1"); - g_assert (renderer); - g_object_get (renderer, "text", &text, NULL); - g_assert (text); - g_assert (strcmp (text, "2") == 0); - g_free (text); - - window = gtk_builder_get_object (builder, "window1"); - gtk_widget_destroy (GTK_WIDGET (window)); - - g_object_unref (builder); -} - -static void -test_combo_box_entry (void) -{ - GtkBuilder *builder; - const gchar buffer[] = - "<interface>" - " <object class=\"GtkListStore\" id=\"liststore1\">" - " <columns>" - " <column type=\"guint\"/>" - " <column type=\"gchararray\"/>" - " </columns>" - " <data>" - " <row>" - " <col id=\"0\">1</col>" - " <col id=\"1\">Foo</col>" - " </row>" - " <row>" - " <col id=\"0\">2</col>" - " <col id=\"1\">Bar</col>" - " </row>" - " </data>" - " </object>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkComboBoxEntry\" id=\"comboboxentry1\">" - " <property name=\"model\">liststore1</property>" - " <property name=\"visible\">True</property>" - " <child>" - " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>" - " <attributes>" - " <attribute name=\"text\">0</attribute>" - " </attributes>" - " </child>" - " <child>" - " <object class=\"GtkCellRendererText\" id=\"renderer2\"/>" - " <attributes>" - " <attribute name=\"text\">1</attribute>" - " </attributes>" - " </child>" - " </object>" - " </child>" - " </object>" - "</interface>"; - GObject *window, *combobox, *renderer; - gchar *text; - - builder = builder_new_from_string (buffer, -1, NULL); - combobox = gtk_builder_get_object (builder, "comboboxentry1"); - g_assert (combobox); - - renderer = gtk_builder_get_object (builder, "renderer2"); - g_assert (renderer); - g_object_get (renderer, "text", &text, NULL); - g_assert (text); - g_assert (strcmp (text, "Bar") == 0); - g_free (text); - - renderer = gtk_builder_get_object (builder, "renderer1"); - g_assert (renderer); - g_object_get (renderer, "text", &text, NULL); - g_assert (text); - g_assert (strcmp (text, "2") == 0); - g_free (text); - - window = gtk_builder_get_object (builder, "window1"); - gtk_widget_destroy (GTK_WIDGET (window)); - - g_object_unref (builder); -} - -static void -test_cell_view (void) -{ - GtkBuilder *builder; - gchar *buffer = - "<interface>" - " <object class=\"GtkListStore\" id=\"liststore1\">" - " <columns>" - " <column type=\"gchararray\"/>" - " </columns>" - " <data>" - " <row>" - " <col id=\"0\">test</col>" - " </row>" - " </data>" - " </object>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkCellView\" id=\"cellview1\">" - " <property name=\"visible\">True</property>" - " <property name=\"model\">liststore1</property>" - " <child>" - " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>" - " <attributes>" - " <attribute name=\"text\">0</attribute>" - " </attributes>" - " </child>" - " </object>" - " </child>" - " </object>" - "</interface>"; - GObject *cellview; - GObject *model, *window; - GtkTreePath *path; - GList *renderers; - GObject *renderer; - gchar *text; - - builder = builder_new_from_string (buffer, -1, NULL); - cellview = gtk_builder_get_object (builder, "cellview1"); - g_assert (builder); - g_assert (cellview); - g_assert (GTK_IS_CELL_VIEW (cellview)); - g_object_get (cellview, "model", &model, NULL); - g_assert (model); - g_assert (GTK_IS_TREE_MODEL (model)); - g_object_unref (model); - path = gtk_tree_path_new_first (); - gtk_cell_view_set_displayed_row (GTK_CELL_VIEW (cellview), path); - - renderers = gtk_cell_view_get_cell_renderers (GTK_CELL_VIEW (cellview)); - g_assert (renderers); - g_assert (g_list_length (renderers) == 1); - - gtk_widget_realize (GTK_WIDGET (cellview)); - - renderer = g_list_nth_data (renderers, 0); - g_list_free (renderers); - g_assert (renderer); - g_object_get (renderer, "text", &text, NULL); - g_assert (strcmp (text, "test") == 0); - g_free (text); - gtk_tree_path_free (path); - - window = gtk_builder_get_object (builder, "window1"); - gtk_widget_destroy (GTK_WIDGET (window)); - - g_object_unref (builder); -} - -static void -test_dialog (void) -{ - GtkBuilder * builder; - const gchar buffer1[] = - "<interface>" - " <object class=\"GtkDialog\" id=\"dialog1\">" - " <child internal-child=\"vbox\">" - " <object class=\"GtkVBox\" id=\"dialog1-vbox\">" - " <child internal-child=\"action_area\">" - " <object class=\"GtkHButtonBox\" id=\"dialog1-action_area\">" - " <child>" - " <object class=\"GtkButton\" id=\"button_cancel\"/>" - " </child>" - " <child>" - " <object class=\"GtkButton\" id=\"button_ok\"/>" - " </child>" - " </object>" - " </child>" - " </object>" - " </child>" - " <action-widgets>" - " <action-widget response=\"3\">button_ok</action-widget>" - " <action-widget response=\"-5\">button_cancel</action-widget>" - " </action-widgets>" - " </object>" - "</interface>"; - - GObject *dialog1; - GObject *button_ok; - GObject *button_cancel; - - builder = builder_new_from_string (buffer1, -1, NULL); - dialog1 = gtk_builder_get_object (builder, "dialog1"); - button_ok = gtk_builder_get_object (builder, "button_ok"); - g_assert (gtk_dialog_get_response_for_widget (GTK_DIALOG (dialog1), GTK_WIDGET (button_ok)) == 3); - button_cancel = gtk_builder_get_object (builder, "button_cancel"); - g_assert (gtk_dialog_get_response_for_widget (GTK_DIALOG (dialog1), GTK_WIDGET (button_cancel)) == -5); - - gtk_widget_destroy (GTK_WIDGET (dialog1)); - g_object_unref (builder); -} - -static void -test_accelerators (void) -{ - GtkBuilder *builder; - gchar *buffer = - "<interface>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkButton\" id=\"button1\">" - " <accelerator key=\"q\" modifiers=\"GDK_CONTROL_MASK\" signal=\"clicked\"/>" - " </object>" - " </child>" - " </object>" - "</interface>"; - gchar *buffer2 = - "<interface>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkTreeView\" id=\"treeview1\">" - " <signal name=\"cursor-changed\" handler=\"gtk_main_quit\"/>" - " <accelerator key=\"f\" modifiers=\"GDK_CONTROL_MASK\" signal=\"grab_focus\"/>" - " </object>" - " </child>" - " </object>" - "</interface>"; - GObject *window1; - GSList *accel_groups; - GObject *accel_group; - - builder = builder_new_from_string (buffer, -1, NULL); - window1 = gtk_builder_get_object (builder, "window1"); - g_assert (window1); - g_assert (GTK_IS_WINDOW (window1)); - - accel_groups = gtk_accel_groups_from_object (window1); - g_assert (g_slist_length (accel_groups) == 1); - accel_group = g_slist_nth_data (accel_groups, 0); - g_assert (accel_group); - - gtk_widget_destroy (GTK_WIDGET (window1)); - g_object_unref (builder); - - builder = builder_new_from_string (buffer2, -1, NULL); - window1 = gtk_builder_get_object (builder, "window1"); - g_assert (window1); - g_assert (GTK_IS_WINDOW (window1)); - - accel_groups = gtk_accel_groups_from_object (window1); - g_assert (g_slist_length (accel_groups) == 1); - accel_group = g_slist_nth_data (accel_groups, 0); - g_assert (accel_group); - - gtk_widget_destroy (GTK_WIDGET (window1)); - g_object_unref (builder); -} - -static void -test_widget (void) -{ - gchar *buffer = - "<interface>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkButton\" id=\"button1\">" - " <property name=\"can-focus\">True</property>" - " <property name=\"has-focus\">True</property>" - " </object>" - " </child>" - " </object>" - "</interface>"; - gchar *buffer2 = - "<interface>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkButton\" id=\"button1\">" - " <property name=\"can-default\">True</property>" - " <property name=\"has-default\">True</property>" - " </object>" - " </child>" - " </object>" - "</interface>"; - gchar *buffer3 = - "<interface>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkVBox\" id=\"vbox1\">" - " <child>" - " <object class=\"GtkLabel\" id=\"label1\">" - " <child internal-child=\"accessible\">" - " <object class=\"AtkObject\" id=\"a11y-label1\">" - " <property name=\"AtkObject::accessible-name\">A Label</property>" - " </object>" - " </child>" - " <accessibility>" - " <relation target=\"button1\" type=\"label-for\"/>" - " </accessibility>" - " </object>" - " </child>" - " <child>" - " <object class=\"GtkButton\" id=\"button1\">" - " <accessibility>" - " <action action_name=\"click\" description=\"Sliff\"/>" - " </accessibility>" - " </object>" - " </child>" - " </object>" - " </child>" - " </object>" - "</interface>"; - GtkBuilder *builder; - GObject *window1, *button1, *label1; - AtkObject *accessible; - AtkRelationSet *relation_set; - AtkRelation *relation; - char *name; - - builder = builder_new_from_string (buffer, -1, NULL); - button1 = gtk_builder_get_object (builder, "button1"); - -#if 0 - g_assert (GTK_WIDGET_HAS_FOCUS (GTK_WIDGET (button1))); -#endif - window1 = gtk_builder_get_object (builder, "window1"); - gtk_widget_destroy (GTK_WIDGET (window1)); - - g_object_unref (builder); - - builder = builder_new_from_string (buffer2, -1, NULL); - button1 = gtk_builder_get_object (builder, "button1"); - - g_assert (GTK_WIDGET_RECEIVES_DEFAULT (GTK_WIDGET (button1))); - - g_object_unref (builder); - - builder = builder_new_from_string (buffer3, -1, NULL); - - window1 = gtk_builder_get_object (builder, "window1"); - label1 = gtk_builder_get_object (builder, "label1"); - - accessible = gtk_widget_get_accessible (GTK_WIDGET (label1)); - relation_set = atk_object_ref_relation_set (accessible); - g_return_if_fail (atk_relation_set_get_n_relations (relation_set) == 1); - relation = atk_relation_set_get_relation (relation_set, 0); - g_return_if_fail (relation != NULL); - g_return_if_fail (ATK_IS_RELATION (relation)); - g_return_if_fail (atk_relation_get_relation_type (relation) != ATK_RELATION_LABELLED_BY); - g_object_unref (relation_set); - - g_object_get (G_OBJECT (accessible), "accessible-name", &name, NULL); - g_return_if_fail (strcmp (name, "A Label") == 0); - g_free (name); - - gtk_widget_destroy (GTK_WIDGET (window1)); - g_object_unref (builder); -} - -static void -test_window (void) -{ - gchar *buffer1 = - "<interface>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <property name=\"title\"></property>" - " </object>" - "</interface>"; - gchar *buffer2 = - "<interface>" - " <object class=\"GtkWindow\" id=\"window1\">" - " </object>" - "</interface>"; - GtkBuilder *builder; - GObject *window1; - gchar *title; - - builder = builder_new_from_string (buffer1, -1, NULL); - window1 = gtk_builder_get_object (builder, "window1"); - g_object_get (window1, "title", &title, NULL); - g_assert (strcmp (title, "") == 0); - g_free (title); - gtk_widget_destroy (GTK_WIDGET (window1)); - g_object_unref (builder); - - builder = builder_new_from_string (buffer2, -1, NULL); - window1 = gtk_builder_get_object (builder, "window1"); - gtk_widget_destroy (GTK_WIDGET (window1)); - g_object_unref (builder); -} - -static void -test_value_from_string (void) -{ - GValue value = { 0 }; - GError *error = NULL; - GtkBuilder *builder; - - builder = gtk_builder_new (); - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_STRING, "test", &value, &error)); - g_assert (G_VALUE_HOLDS_STRING (&value)); - g_assert (strcmp (g_value_get_string (&value), "test") == 0); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "true", &value, &error)); - g_assert (G_VALUE_HOLDS_BOOLEAN (&value)); - g_assert (g_value_get_boolean (&value) == TRUE); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "false", &value, &error)); - g_assert (G_VALUE_HOLDS_BOOLEAN (&value)); - g_assert (g_value_get_boolean (&value) == FALSE); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "yes", &value, &error)); - g_assert (G_VALUE_HOLDS_BOOLEAN (&value)); - g_assert (g_value_get_boolean (&value) == TRUE); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "no", &value, &error)); - g_assert (G_VALUE_HOLDS_BOOLEAN (&value)); - g_assert (g_value_get_boolean (&value) == FALSE); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "0", &value, &error)); - g_assert (G_VALUE_HOLDS_BOOLEAN (&value)); - g_assert (g_value_get_boolean (&value) == FALSE); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "1", &value, &error)); - g_assert (G_VALUE_HOLDS_BOOLEAN (&value)); - g_assert (g_value_get_boolean (&value) == TRUE); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "tRuE", &value, &error)); - g_assert (G_VALUE_HOLDS_BOOLEAN (&value)); - g_assert (g_value_get_boolean (&value) == TRUE); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "blaurgh", &value, &error) == FALSE); - g_assert (error != NULL); - g_value_unset (&value); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); - g_error_free (error); - error = NULL; - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "yess", &value, &error) == FALSE); - g_value_unset (&value); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); - g_error_free (error); - error = NULL; - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "trueee", &value, &error) == FALSE); - g_value_unset (&value); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); - g_error_free (error); - error = NULL; - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "", &value, &error) == FALSE); - g_value_unset (&value); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); - g_error_free (error); - error = NULL; - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_INT, "12345", &value, &error)); - g_assert (G_VALUE_HOLDS_INT (&value)); - g_assert (g_value_get_int (&value) == 12345); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_LONG, "9912345", &value, &error)); - g_assert (G_VALUE_HOLDS_LONG (&value)); - g_assert (g_value_get_long (&value) == 9912345); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_UINT, "2345", &value, &error)); - g_assert (G_VALUE_HOLDS_UINT (&value)); - g_assert (g_value_get_uint (&value) == 2345); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_FLOAT, "1.454", &value, &error)); - g_assert (G_VALUE_HOLDS_FLOAT (&value)); - g_assert (fabs (g_value_get_float (&value) - 1.454) < 0.00001); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_FLOAT, "abc", &value, &error) == FALSE); - g_value_unset (&value); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); - g_error_free (error); - error = NULL; - - g_assert (gtk_builder_value_from_string_type (builder, G_TYPE_INT, "/-+,abc", &value, &error) == FALSE); - g_value_unset (&value); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); - g_error_free (error); - error = NULL; - - g_assert (gtk_builder_value_from_string_type (builder, GTK_TYPE_WINDOW_TYPE, "toplevel", &value, &error) == TRUE); - g_assert (G_VALUE_HOLDS_ENUM (&value)); - g_assert (g_value_get_enum (&value) == GTK_WINDOW_TOPLEVEL); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, GTK_TYPE_WINDOW_TYPE, "sliff", &value, &error) == FALSE); - g_value_unset (&value); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); - g_error_free (error); - error = NULL; - - g_assert (gtk_builder_value_from_string_type (builder, GTK_TYPE_WIDGET_FLAGS, "mapped", &value, &error) == TRUE); - g_assert (G_VALUE_HOLDS_FLAGS (&value)); - g_assert (g_value_get_flags (&value) == GTK_MAPPED); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, GTK_TYPE_WIDGET_FLAGS, "GTK_VISIBLE | GTK_REALIZED", &value, &error) == TRUE); - g_assert (G_VALUE_HOLDS_FLAGS (&value)); - g_assert (g_value_get_flags (&value) == (GTK_VISIBLE | GTK_REALIZED)); - g_value_unset (&value); - - g_assert (gtk_builder_value_from_string_type (builder, GTK_TYPE_WINDOW_TYPE, "foobar", &value, &error) == FALSE); - g_value_unset (&value); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); - g_error_free (error); - error = NULL; - - g_object_unref (builder); -} - -static gboolean model_freed = FALSE; - -static void -model_weakref (gpointer data, - GObject *model) -{ - model_freed = TRUE; -} - -static void -test_reference_counting (void) -{ - GtkBuilder *builder; - const gchar buffer1[] = - "<interface>" - " <object class=\"GtkListStore\" id=\"liststore1\"/>" - " <object class=\"GtkListStore\" id=\"liststore2\"/>" - " <object class=\"GtkWindow\" id=\"window1\">" - " <child>" - " <object class=\"GtkTreeView\" id=\"treeview1\">" - " <property name=\"model\">liststore1</property>" - " </object>" - " </child>" - " </object>" - "</interface>"; - const gchar buffer2[] = - "<interface>" - " <object class=\"GtkVBox\" id=\"vbox1\">" - " <child>" - " <object class=\"GtkLabel\" id=\"label1\"/>" - " <packing>" - " <property name=\"pack-type\">start</property>" - " </packing>" - " </child>" - " </object>" - "</interface>"; - GObject *window, *treeview, *model; - - builder = builder_new_from_string (buffer1, -1, NULL); - window = gtk_builder_get_object (builder, "window1"); - treeview = gtk_builder_get_object (builder, "treeview1"); - model = gtk_builder_get_object (builder, "liststore1"); - g_object_unref (builder); - - g_object_weak_ref (model, (GWeakNotify)model_weakref, NULL); - - g_assert (model_freed == FALSE); - gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), NULL); - g_assert (model_freed == TRUE); - - gtk_widget_destroy (GTK_WIDGET (window)); - - builder = builder_new_from_string (buffer2, -1, NULL); - g_object_unref (builder); -} - -static void -test_icon_factory (void) -{ - GtkBuilder *builder; - const gchar buffer1[] = - "<interface>" - " <object class=\"GtkIconFactory\" id=\"iconfactory1\">" - " <sources>" - " <source stock-id=\"apple-red\" filename=\"apple-red.png\"/>" - " </sources>" - " </object>" - "</interface>"; - const gchar buffer2[] = - "<interface>" - " <object class=\"GtkIconFactory\" id=\"iconfactory1\">" - " <sources>" - " <source stock-id=\"sliff\" direction=\"rtl\" state=\"active\"" - " size=\"menu\" filename=\"sloff.png\"/>" - " <source stock-id=\"sliff\" direction=\"ltr\" state=\"selected\"" - " size=\"dnd\" filename=\"slurf.png\"/>" - " </sources>" - " </object>" - "</interface>"; -#if 0 - const gchar buffer3[] = - "<interface>" - " <object class=\"GtkIconFactory\" id=\"iconfactory1\">" - " <invalid/>" - " </object>" - "</interface>"; - const gchar buffer4[] = - "<interface>" - " <object class=\"GtkIconFactory\" id=\"iconfactory1\">" - " <sources>" - " <invalid/>" - " </sources>" - " </object>" - "</interface>"; - const gchar buffer5[] = - "<interface>" - " <object class=\"GtkIconFactory\" id=\"iconfactory1\">" - " <sources>" - " <source/>" - " </sources>" - " </object>" - "</interface>"; - GError *error = NULL; -#endif - GObject *factory; - GtkIconSet *icon_set; - GtkIconSource *icon_source; - GtkWidget *image; - - builder = builder_new_from_string (buffer1, -1, NULL); - factory = gtk_builder_get_object (builder, "iconfactory1"); - g_assert (factory != NULL); - - icon_set = gtk_icon_factory_lookup (GTK_ICON_FACTORY (factory), "apple-red"); - g_assert (icon_set != NULL); - gtk_icon_factory_add_default (GTK_ICON_FACTORY (factory)); - image = gtk_image_new_from_stock ("apple-red", GTK_ICON_SIZE_BUTTON); - g_assert (image != NULL); - - builder = builder_new_from_string (buffer2, -1, NULL); - factory = gtk_builder_get_object (builder, "iconfactory1"); - g_assert (factory != NULL); - - icon_set = gtk_icon_factory_lookup (GTK_ICON_FACTORY (factory), "sliff"); - g_assert (icon_set != NULL); - g_assert (g_slist_length (icon_set->sources) == 2); - - icon_source = icon_set->sources->data; - g_assert (gtk_icon_source_get_direction (icon_source) == GTK_TEXT_DIR_RTL); - g_assert (gtk_icon_source_get_state (icon_source) == GTK_STATE_ACTIVE); - g_assert (gtk_icon_source_get_size (icon_source) == GTK_ICON_SIZE_MENU); - g_assert (g_str_has_suffix (gtk_icon_source_get_filename (icon_source), "sloff.png")); - - icon_source = icon_set->sources->next->data; - g_assert (gtk_icon_source_get_direction (icon_source) == GTK_TEXT_DIR_LTR); - g_assert (gtk_icon_source_get_state (icon_source) == GTK_STATE_SELECTED); - g_assert (gtk_icon_source_get_size (icon_source) == GTK_ICON_SIZE_DND); - g_assert (g_str_has_suffix (gtk_icon_source_get_filename (icon_source), "slurf.png")); - - g_object_unref (builder); - -#if 0 - error = NULL; - gtk_builder_add_from_string (builder, buffer3, -1, &error); - g_assert (error != NULL); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_TAG); - g_error_free (error); - - error = NULL; - gtk_builder_add_from_string (builder, buffer4, -1, &error); - g_assert (error != NULL); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_TAG); - g_error_free (error); - - error = NULL; - gtk_builder_add_from_string (builder, buffer5, -1, &error); - g_assert (error != NULL); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_ATTRIBUTE); - g_error_free (error); -#endif - -} - -typedef struct { - gboolean weight; - gboolean foreground; - gboolean underline; - gboolean size; - gboolean font_desc; - gboolean language; -} FoundAttrs; - -static gboolean -filter_pango_attrs (PangoAttribute *attr, - gpointer data) -{ - FoundAttrs *found = (FoundAttrs *)data; - - if (attr->klass->type == PANGO_ATTR_WEIGHT) - found->weight = TRUE; - else if (attr->klass->type == PANGO_ATTR_FOREGROUND) - found->foreground = TRUE; - else if (attr->klass->type == PANGO_ATTR_UNDERLINE) - found->underline = TRUE; - /* Make sure optional start/end properties are working */ - else if (attr->klass->type == PANGO_ATTR_SIZE && - attr->start_index == 5 && - attr->end_index == 10) - found->size = TRUE; - else if (attr->klass->type == PANGO_ATTR_FONT_DESC) - found->font_desc = TRUE; - else if (attr->klass->type == PANGO_ATTR_LANGUAGE) - found->language = TRUE; - - return TRUE; -} - -static void -test_pango_attributes (void) -{ - GtkBuilder *builder; - FoundAttrs found = { 0, }; - const gchar buffer[] = - "<interface>" - " <object class=\"GtkLabel\" id=\"label1\">" - " <attributes>" - " <attribute name=\"weight\" value=\"PANGO_WEIGHT_BOLD\"/>" - " <attribute name=\"foreground\" value=\"DarkSlateGray\"/>" - " <attribute name=\"underline\" value=\"True\"/>" - " <attribute name=\"size\" value=\"4\" start=\"5\" end=\"10\"/>" - " <attribute name=\"font-desc\" value=\"Sans Italic 22\"/>" - " <attribute name=\"language\" value=\"pt_BR\"/>" - " </attributes>" - " </object>" - "</interface>"; - const gchar err_buffer1[] = - "<interface>" - " <object class=\"GtkLabel\" id=\"label1\">" - " <attributes>" - " <attribute name=\"weight\"/>" - " </attributes>" - " </object>" - "</interface>"; - const gchar err_buffer2[] = - "<interface>" - " <object class=\"GtkLabel\" id=\"label1\">" - " <attributes>" - " <attribute name=\"weight\" value=\"PANGO_WEIGHT_BOLD\" unrecognized=\"True\"/>" - " </attributes>" - " </object>" - "</interface>"; - - GObject *label; - GError *error = NULL; - PangoAttrList *attrs, *filtered; - - /* Test attributes are set */ - builder = builder_new_from_string (buffer, -1, NULL); - label = gtk_builder_get_object (builder, "label1"); - g_assert (label != NULL); - - attrs = gtk_label_get_attributes (GTK_LABEL (label)); - g_assert (attrs != NULL); - - filtered = pango_attr_list_filter (attrs, filter_pango_attrs, &found); - g_assert (filtered); - pango_attr_list_unref (filtered); - - g_assert (found.weight); - g_assert (found.foreground); - g_assert (found.underline); - g_assert (found.size); - g_assert (found.language); - g_assert (found.font_desc); - - g_object_unref (builder); - - /* Test errors are set */ - builder = gtk_builder_new (); - gtk_builder_add_from_string (builder, err_buffer1, -1, &error); - label = gtk_builder_get_object (builder, "label1"); - g_assert (error); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_MISSING_ATTRIBUTE); - g_object_unref (builder); - g_error_free (error); - error = NULL; - - builder = gtk_builder_new (); - gtk_builder_add_from_string (builder, err_buffer2, -1, &error); - label = gtk_builder_get_object (builder, "label1"); - - g_assert (error); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_INVALID_ATTRIBUTE); - g_object_unref (builder); - g_error_free (error); - -} - - -static void -test_requires (void) -{ - GtkBuilder *builder; - GError *error = NULL; - gchar *buffer; - const gchar buffer_fmt[] = - "<interface>" - " <requires lib=\"gtk+\" version=\"%d.%d\"/>" - "</interface>"; - - buffer = g_strdup_printf (buffer_fmt, GTK_MAJOR_VERSION, GTK_MINOR_VERSION + 1); - builder = gtk_builder_new (); - gtk_builder_add_from_string (builder, buffer, -1, &error); - g_assert (error); - g_assert (error->domain == GTK_BUILDER_ERROR); - g_assert (error->code == GTK_BUILDER_ERROR_VERSION_MISMATCH); - g_object_unref (builder); - g_error_free (error); -} - - -static void -test_file (const gchar *filename) -{ - GtkBuilder *builder; - GError *error = NULL; - GSList *l, *objects; - - builder = gtk_builder_new (); - - if (!gtk_builder_add_from_file (builder, filename, &error)) - { - g_error (error->message); - g_error_free (error); - return; - } - - objects = gtk_builder_get_objects (builder); - for (l = objects; l; l = l->next) - { - GObject *obj = (GObject*)l->data; - - if (GTK_IS_DIALOG (obj)) - { - int response; - - g_print ("Running dialog %s.\n", - gtk_widget_get_name (GTK_WIDGET (obj))); - response = gtk_dialog_run (GTK_DIALOG (obj)); - } - else if (GTK_IS_WINDOW (obj)) - { - g_signal_connect (obj, "destroy", G_CALLBACK (gtk_main_quit), NULL); - g_print ("Showing %s.\n", - gtk_widget_get_name (GTK_WIDGET (obj))); - gtk_widget_show_all (GTK_WIDGET (obj)); - } - } - - gtk_main (); - - g_object_unref (builder); - builder = NULL; -} - -int -main (int argc, char **argv) -{ - /* initialize test program */ - gtk_test_init (&argc, &argv); - - if (argc > 1) - { - test_file (argv[1]); - return 0; - } - - g_test_add_func ("/Builder/Parser", test_parser); - g_test_add_func ("/Builder/Types", test_types); - g_test_add_func ("/Builder/Construct-Only Properties", test_construct_only_property); - g_test_add_func ("/Builder/Children", test_children); - g_test_add_func ("/Builder/Child Properties", test_child_properties); - g_test_add_func ("/Builder/Object Properties", test_object_properties); - g_test_add_func ("/Builder/Notebook", test_notebook); - g_test_add_func ("/Builder/Domain", test_domain); - g_test_add_func ("/Builder/Signal Autoconnect", test_connect_signals); - g_test_add_func ("/Builder/UIManager Simple", test_uimanager_simple); - g_test_add_func ("/Builder/Spin Button", test_spin_button); - g_test_add_func ("/Builder/SizeGroup", test_sizegroup); - g_test_add_func ("/Builder/ListStore", test_list_store); - g_test_add_func ("/Builder/TreeStore", test_tree_store); - g_test_add_func ("/Builder/TreeView Column", test_treeview_column); - g_test_add_func ("/Builder/IconView", test_icon_view); - g_test_add_func ("/Builder/ComboBox", test_combo_box); - g_test_add_func ("/Builder/ComboBox Entry", test_combo_box_entry); - g_test_add_func ("/Builder/CellView", test_cell_view); - g_test_add_func ("/Builder/Dialog", test_dialog); - g_test_add_func ("/Builder/Accelerators", test_accelerators); - g_test_add_func ("/Builder/Widget", test_widget); - g_test_add_func ("/Builder/Value From String", test_value_from_string); - g_test_add_func ("/Builder/Reference Counting", test_reference_counting); - g_test_add_func ("/Builder/Window", test_window); - g_test_add_func ("/Builder/IconFactory", test_icon_factory); - g_test_add_func ("/Builder/PangoAttributes", test_pango_attributes); - g_test_add_func ("/Builder/Requires", test_requires); - - return g_test_run(); -} diff --git a/tests/defaultvaluetest.c b/tests/defaultvaluetest.c deleted file mode 100644 index c88926d9f..000000000 --- a/tests/defaultvaluetest.c +++ /dev/null @@ -1,341 +0,0 @@ -/* Gtk+ default value tests - * Copyright (C) 2007 Christian Persch - * 2007 Johan Dahlin - * - * 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, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#undef GTK_DISABLE_DEPRECATED -#define GTK_ENABLE_BROKEN -#include <string.h> -#include <gtk/gtk.h> -#include <gtk/gtkunixprint.h> - -static void -check_property (const char *output, - GParamSpec *pspec, - GValue *value) -{ - GValue default_value = { 0, }; - char *v, *dv, *msg; - - if (g_param_value_defaults (pspec, value)) - return; - - g_value_init (&default_value, G_PARAM_SPEC_VALUE_TYPE (pspec)); - g_param_value_set_default (pspec, &default_value); - - v = g_strdup_value_contents (value); - dv = g_strdup_value_contents (&default_value); - - msg = g_strdup_printf ("%s %s.%s: %s != %s\n", - output, - g_type_name (pspec->owner_type), - pspec->name, - dv, v); - g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, - G_STRFUNC, msg); - g_free (msg); - - g_free (v); - g_free (dv); - g_value_unset (&default_value); -} - -static void -test_type (gconstpointer data) -{ - GObjectClass *klass; - GObject *instance; - GParamSpec **pspecs; - guint n_pspecs, i; - GType type; - - type = * (GType *) data; - - if (!G_TYPE_IS_CLASSED (type)) - return; - - if (G_TYPE_IS_ABSTRACT (type)) - return; - - if (!g_type_is_a (type, G_TYPE_OBJECT)) - return; - - /* These can't be freely constructed/destroyed */ - if (g_type_is_a (type, GTK_TYPE_PRINT_JOB) || - g_type_is_a (type, GDK_TYPE_PIXBUF_LOADER) || - g_type_is_a (type, gdk_pixbuf_simple_anim_iter_get_type ())) - return; - - /* The gtk_arg compat wrappers can't set up default values */ - if (g_type_is_a (type, GTK_TYPE_CLIST) || - g_type_is_a (type, GTK_TYPE_CTREE) || - g_type_is_a (type, GTK_TYPE_LIST) || - g_type_is_a (type, GTK_TYPE_TIPS_QUERY)) - return; - - klass = g_type_class_ref (type); - - if (g_type_is_a (type, GTK_TYPE_SETTINGS)) - instance = g_object_ref (gtk_settings_get_default ()); - else if (g_type_is_a (type, GDK_TYPE_PANGO_RENDERER)) - instance = g_object_ref (gdk_pango_renderer_get_default (gdk_screen_get_default ())); - else if (g_type_is_a (type, GDK_TYPE_PIXMAP)) - instance = g_object_ref (gdk_pixmap_new (NULL, 1, 1, 1)); - else if (g_type_is_a (type, GDK_TYPE_COLORMAP)) - instance = g_object_ref (gdk_colormap_new (gdk_visual_get_best (), TRUE)); - else if (g_type_is_a (type, GDK_TYPE_WINDOW)) - { - GdkWindowAttr attributes; - attributes.window_type = GDK_WINDOW_TEMP; - instance = g_object_ref (gdk_window_new (NULL, &attributes, 0)); - } - else - instance = g_object_new (type, NULL); - - if (g_type_is_a (type, G_TYPE_INITIALLY_UNOWNED)) - g_object_ref_sink (instance); - - pspecs = g_object_class_list_properties (klass, &n_pspecs); - for (i = 0; i < n_pspecs; ++i) - { - GParamSpec *pspec = pspecs[i]; - GValue value = { 0, }; - - if (pspec->owner_type != type) - continue; - - if ((pspec->flags & G_PARAM_READABLE) == 0) - continue; - - if (g_type_is_a (type, GDK_TYPE_DISPLAY_MANAGER) && - (strcmp (pspec->name, "default-display") == 0)) - continue; - - if (g_type_is_a (type, GDK_TYPE_PANGO_RENDERER) && - (strcmp (pspec->name, "screen") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_ABOUT_DIALOG) && - (strcmp (pspec->name, "program-name") == 0)) - continue; - - /* These are set to the current date */ - if (g_type_is_a (type, GTK_TYPE_CALENDAR) && - (strcmp (pspec->name, "year") == 0 || - strcmp (pspec->name, "month") == 0 || - strcmp (pspec->name, "day") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_CELL_RENDERER_TEXT) && - (strcmp (pspec->name, "background-gdk") == 0 || - strcmp (pspec->name, "foreground-gdk") == 0 || - strcmp (pspec->name, "font") == 0 || - strcmp (pspec->name, "font-desc") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_CELL_VIEW) && - (strcmp (pspec->name, "background-gdk") == 0 || - strcmp (pspec->name, "foreground-gdk") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_COLOR_BUTTON) && - strcmp (pspec->name, "color") == 0) - continue; - - if (g_type_is_a (type, GTK_TYPE_COLOR_SELECTION) && - strcmp (pspec->name, "current-color") == 0) - continue; - - /* Gets set to the cwd */ - if (g_type_is_a (type, GTK_TYPE_FILE_SELECTION) && - strcmp (pspec->name, "filename") == 0) - continue; - - if (g_type_is_a (type, GTK_TYPE_FONT_SELECTION) && - strcmp (pspec->name, "font") == 0) - continue; - - if (g_type_is_a (type, GTK_TYPE_LAYOUT) && - (strcmp (pspec->name, "hadjustment") == 0 || - strcmp (pspec->name, "vadjustment") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_MESSAGE_DIALOG) && - strcmp (pspec->name, "image") == 0) - continue; - - if (g_type_is_a (type, GTK_TYPE_PRINT_OPERATION) && - strcmp (pspec->name, "job-name") == 0) - continue; - - if (g_type_is_a (type, GTK_TYPE_PRINT_UNIX_DIALOG) && - (strcmp (pspec->name, "page-setup") == 0 || - strcmp (pspec->name, "print-settings") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_PROGRESS_BAR) && - strcmp (pspec->name, "adjustment") == 0) - continue; - - /* filename value depends on $HOME */ - if (g_type_is_a (type, GTK_TYPE_RECENT_MANAGER) && - (strcmp (pspec->name, "filename") == 0 || - strcmp (pspec->name, "size") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_SCALE_BUTTON) && - strcmp (pspec->name, "adjustment") == 0) - continue; - - if (g_type_is_a (type, GTK_TYPE_SCROLLED_WINDOW) && - (strcmp (pspec->name, "hadjustment") == 0 || - strcmp (pspec->name, "vadjustment") == 0)) - continue; - - /* these defaults come from XResources */ - if (g_type_is_a (type, GTK_TYPE_SETTINGS) && - strncmp (pspec->name, "gtk-xft-", 8) == 0) - continue; - - if (g_type_is_a (type, GTK_TYPE_SETTINGS) && - (strcmp (pspec->name, "color-hash") == 0 || - strcmp (pspec->name, "gtk-cursor-theme-name") == 0 || - strcmp (pspec->name, "gtk-cursor-theme-size") == 0 || - strcmp (pspec->name, "gtk-double-click-time") == 0 || - strcmp (pspec->name, "gtk-file-chooser-backend") == 0 || - strcmp (pspec->name, "gtk-icon-theme-name") == 0 || - strcmp (pspec->name, "gtk-fallback-icon-theme") == 0 || - strcmp (pspec->name, "gtk-key-theme-name") == 0 || - strcmp (pspec->name, "gtk-theme-name") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_SPIN_BUTTON) && - (strcmp (pspec->name, "adjustment") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_STATUS_ICON) && - (strcmp (pspec->name, "size") == 0 || - strcmp (pspec->name, "screen") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_TEXT_BUFFER) && - (strcmp (pspec->name, "tag-table") == 0 || - strcmp (pspec->name, "copy-target-list") == 0 || - strcmp (pspec->name, "paste-target-list") == 0)) - continue; - - /* language depends on the current locale */ - if (g_type_is_a (type, GTK_TYPE_TEXT_TAG) && - (strcmp (pspec->name, "background-gdk") == 0 || - strcmp (pspec->name, "foreground-gdk") == 0 || - strcmp (pspec->name, "language") == 0 || - strcmp (pspec->name, "font") == 0 || - strcmp (pspec->name, "font-desc") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_TEXT) && - (strcmp (pspec->name, "hadjustment") == 0 || - strcmp (pspec->name, "vadjustment") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_TEXT_VIEW) && - strcmp (pspec->name, "buffer") == 0) - continue; - - if (g_type_is_a (type, GTK_TYPE_TREE_VIEW) && - (strcmp (pspec->name, "hadjustment") == 0 || - strcmp (pspec->name, "vadjustment") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_VIEWPORT) && - (strcmp (pspec->name, "hadjustment") == 0 || - strcmp (pspec->name, "vadjustment") == 0)) - continue; - - if (g_type_is_a (type, GTK_TYPE_WIDGET) && - (strcmp (pspec->name, "name") == 0 || - strcmp (pspec->name, "screen") == 0 || - strcmp (pspec->name, "style") == 0)) - continue; - - g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec)); - g_object_get_property (instance, pspec->name, &value); - check_property ("Property", pspec, &value); - g_value_unset (&value); - } - g_free (pspecs); - - if (g_type_is_a (type, GTK_TYPE_WIDGET)) - { - pspecs = gtk_widget_class_list_style_properties (GTK_WIDGET_CLASS (klass), &n_pspecs); - - for (i = 0; i < n_pspecs; ++i) - { - GParamSpec *pspec = pspecs[i]; - GValue value = { 0, }; - - if (pspec->owner_type != type) - continue; - - if ((pspec->flags & G_PARAM_READABLE) == 0) - continue; - - g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec)); - gtk_widget_style_get_property (GTK_WIDGET (instance), pspec->name, &value); - check_property ("Style property", pspec, &value); - g_value_unset (&value); - } - - g_free (pspecs); - } - - if (g_type_is_a (type, GDK_TYPE_WINDOW)) - gdk_window_destroy (GDK_WINDOW (instance)); - else - g_object_unref (instance); - - g_type_class_unref (klass); -} - -extern void pixbuf_init (void); - -int -main (int argc, char **argv) -{ - const GType *otypes; - guint i; - - gtk_test_init (&argc, &argv); - pixbuf_init (); - gtk_test_register_all_types(); - - otypes = gtk_test_list_all_types (NULL); - for (i = 0; otypes[i]; i++) - { - gchar *testname; - - testname = g_strdup_printf ("/Default Values/%s", - g_type_name (otypes[i])); - g_test_add_data_func (testname, - &otypes[i], - test_type); - g_free (testname); - } - - return g_test_run(); -} diff --git a/tests/floatingtest.c b/tests/floatingtest.c deleted file mode 100644 index d0682cf5d..000000000 --- a/tests/floatingtest.c +++ /dev/null @@ -1,71 +0,0 @@ -/* floatingtest.c - test floating flag uses - * Copyright (C) 2005 Tim Janik - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * 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. - */ -#undef GTK_DISABLE_DEPRECATED -#include "../gtk/gtk.h" - -static gboolean destroyed = FALSE; -static void -destroy (void) -{ - destroyed = TRUE; -} - -static void -floating_tests (void) -{ - GtkWidget *widget = g_object_new (GTK_TYPE_LABEL, NULL); - g_object_connect (widget, "signal::destroy", destroy, NULL, NULL); - - g_assert (GTK_OBJECT_FLOATING (widget)); - g_assert (g_object_is_floating (widget)); - - GTK_OBJECT_UNSET_FLAGS (widget, GTK_FLOATING); - g_assert (!GTK_OBJECT_FLOATING (widget)); - g_assert (!g_object_is_floating (widget)); - - GTK_OBJECT_SET_FLAGS (widget, GTK_FLOATING); - g_assert (GTK_OBJECT_FLOATING (widget)); - g_assert (g_object_is_floating (widget)); - - g_object_ref_sink (widget); - g_assert (!GTK_OBJECT_FLOATING (widget)); - g_assert (!g_object_is_floating (widget)); - - g_object_force_floating (G_OBJECT (widget)); - g_assert (GTK_OBJECT_FLOATING (widget)); - g_assert (g_object_is_floating (widget)); - - g_object_ref (widget); - gtk_object_sink (GTK_OBJECT (widget)); - g_assert (!GTK_OBJECT_FLOATING (widget)); - g_assert (!g_object_is_floating (widget)); - - g_assert (!destroyed); - g_object_unref (widget); - g_assert (destroyed); -} - -int -main (int argc, - char *argv[]) -{ - gtk_test_init (&argc, &argv); - g_test_add_func ("/floatingtest", floating_tests); - return g_test_run(); -} diff --git a/tests/objecttests.c b/tests/objecttests.c deleted file mode 100644 index c24ba9f7d..000000000 --- a/tests/objecttests.c +++ /dev/null @@ -1,358 +0,0 @@ -/* Gtk+ object tests - * Copyright (C) 2007 Imendio AB - * Authors: Tim Janik - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * 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. - */ -#include <gtk/gtk.h> -#include <string.h> - -/* --- helper macros for property value generation --- */ -/* dvalue=+0: generate minimum value - * dvalue=.x: generate value within value range proportional to x. - * dvalue=+1: generate maximum value - * dvalue=-1: generate random value within value range - * dvalue=+2: initialize value from default_value - */ -#define ASSIGN_VALUE(__g_value_set_func, __value, PSPECTYPE, __pspec, __default_value, __minimum, __maximum, __dvalue) do { \ - PSPECTYPE __p = (PSPECTYPE) __pspec; \ - __g_value_set_func (__value, SELECT_VALUE (__dvalue, __p->__default_value, __p->__minimum, __p->__maximum)); \ -} while (0) -#define SELECT_VALUE(__dvalue, __default_value, __minimum, __maximum) ( \ - __dvalue >= 0 && __dvalue <= 1 ? __minimum * (1 - __dvalue) + __dvalue * __maximum : \ - __dvalue <= -1 ? g_test_rand_double_range (__minimum, __maximum) : \ - __default_value) -#define SELECT_NAME(__dvalue) ( \ - __dvalue == 0 ? "minimum" : \ - __dvalue == 1 ? "maximum" : \ - __dvalue >= +2 ? "default" : \ - __dvalue == 0.5 ? "medium" : \ - __dvalue > 0 && __dvalue < 1 ? "fractional" : \ - "random") -#define MATCH_ANY_VALUE ((void*) 0xf1874c23) - -/* --- property blacklists --- */ -typedef struct { - const char *type_name; - const char *name; - gconstpointer value; -} IgnoreProperty; -static const IgnoreProperty* -list_ignore_properties (gboolean buglist) -{ - /* currently untestable properties */ - static const IgnoreProperty ignore_properties[] = { - { "GtkContainer", "child", NULL, }, /* needs working child widget */ - { "GtkRadioMenuItem", "group", NULL, }, /* needs working sibling */ - { "GtkWidget", "parent", NULL, }, /* needs working parent widget */ - { "GtkCList", "selection-mode", (void*) GTK_SELECTION_NONE, }, - { "GtkWidget", "has-default", (void*) TRUE, }, /* conflicts with toplevel-less widgets */ - { "GtkWidget", "screen", NULL, }, - { "GtkWindow", "type-hint", (void*) GDK_WINDOW_TYPE_HINT_DND, }, /* conflicts with ::visible=TRUE */ - { "GtkCellView", "background", (void*) "", }, /* "" is not a valid background color */ - { "GtkColorButton", "color", (void*) NULL, }, /* not a valid boxed color */ - { "GtkInputDialog", "has-separator", (void*) MATCH_ANY_VALUE, }, /* property disabled */ - { "GtkMessageDialog", "has-separator", (void*) MATCH_ANY_VALUE, }, /* property disabled */ - { "GtkFontSelectionDialog", "has-separator", (void*) MATCH_ANY_VALUE, }, /* property disabled */ - { "GtkColorSelectionDialog","has-separator", (void*) MATCH_ANY_VALUE, }, /* property disabled */ - { "GtkColorSelection", "child", NULL, }, - { "GtkColorSelection", "current-color", (void*) NULL, }, /* not a valid boxed color */ - { "GtkComboBox", "row-span-column", (void*) MATCH_ANY_VALUE }, /* GtkComboBoxEntry needs a tree model for this */ - { "GtkComboBox", "column-span-column", (void*) MATCH_ANY_VALUE }, /* GtkComboBoxEntry needs a tree model for this */ - { "GtkComboBoxEntry", "text-column", (void*) MATCH_ANY_VALUE }, /* GtkComboBoxEntry needs a tree model for this */ - { "GtkFileChooserButton", "select-multiple", (void*) MATCH_ANY_VALUE }, /* property disabled */ - { "GtkFileChooserButton", "action", (void*) GTK_FILE_CHOOSER_ACTION_SAVE }, - { "GtkFileChooserButton", "action", (void*) GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER }, - { "GtkFileChooserWidget", "select-multiple", (void*) 0x1 }, /* property conflicts */ - { "GtkFileChooserDialog", "select-multiple", (void*) MATCH_ANY_VALUE }, /* property disabled */ - { "GtkRecentChooserMenu", "select-multiple", (void*) MATCH_ANY_VALUE }, /* property disabled */ - { "GtkTextView", "overwrite", (void*) MATCH_ANY_VALUE }, /* needs text buffer */ - { "GtkToolbar", "icon-size", (void*) GTK_ICON_SIZE_INVALID }, - { NULL, NULL, NULL } - }; - /* properties suspected to be Gdk/Gtk+ bugs */ - static const IgnoreProperty bug_properties[] = { - { "GtkMessageDialog", "image", NULL, }, /* FIXME: should accept NULL images */ - { "GtkOptionMenu", "menu", NULL, }, /* FIXME: should accept NULL menus */ - { "GtkComboBox", "active", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL model bug */ - { "GtkComboBoxEntry", "text-column", (void*) 0xffffffff }, /* FIXME: triggers signedness bug */ - { "GtkCTree", "indent", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers signedness bug */ - { "GtkCTree", "spacing", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers signedness bug */ - { "GtkCurve", "curve-type", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers OOM */ - { "GtkCurve", "min-x", (void*) 0x80000000 }, /* FIXME: triggers coordinate OOB */ - { "GtkCurve", "min-y", (void*) 0x80000000 }, /* FIXME: triggers coordinate OOB */ - { "GtkCurve", "max-x", (void*) 0x80000000 }, /* FIXME: triggers coordinate OOB */ - { "GtkCurve", "max-y", (void*) 0x80000000 }, /* FIXME: triggers coordinate OOB */ - { "GtkFileChooserButton", "local-only", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL path assertion */ - { "GtkFileChooserDialog", "local-only", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL path assertion */ - { "GtkFileChooserDialog", "action", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers closure->ref_count assertion */ - { "GtkFileChooserDialog", "visible", (void*) TRUE }, /* FIXME: triggers gtk_window_resize assertion */ - { "GtkFileChooserWidget", "local-only", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL path assertion */ - { "GtkFontSelection", "font-name", (void*) MATCH_ANY_VALUE }, /* FIXME: requires non-NULL GdkScreen */ - { "GtkInvisible", "has-focus", (void*) TRUE }, /* FIXME: triggers invalid window cast */ - { "GtkInvisible", "is-focus", (void*) TRUE }, /* FIXME: triggers invalid window cast */ - { "GtkMenu", "tearoff-state", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL widget cast */ - { "GtkProgress", "activity-mode", (void*) TRUE }, /* FIXME: segfaults */ - { "GtkScaleButton", "adjustment", NULL, }, /* FIXME: should accept NULL adjustments */ - { "GtkStatusbar", "sensitive", (void*) FALSE }, /* FIXME: check if widget is realize */ - { "GtkTable", "n-rows", (void*) MATCH_ANY_VALUE }, /* FIXME: fix property minimum/maximum */ - { "GtkTable", "n-columns", (void*) MATCH_ANY_VALUE }, /* FIXME: fix property minimum/maximum */ - { "GtkText", "text-position", (void*) MATCH_ANY_VALUE }, /* FIXME: segfaults, fix property minimum/maximum */ - { NULL, NULL, NULL } - }; - if (buglist) - return bug_properties; - else - return ignore_properties; -} - -/* --- test functions --- */ -static void -pspec_select_value (GParamSpec *pspec, - GValue *value, - double dvalue) -{ - /* generate a value suitable for pspec */ - if (G_IS_PARAM_SPEC_CHAR (pspec)) - ASSIGN_VALUE (g_value_set_char, value, GParamSpecChar*, pspec, default_value, minimum, maximum, dvalue); - else if (G_IS_PARAM_SPEC_UCHAR (pspec)) - ASSIGN_VALUE (g_value_set_uchar, value, GParamSpecUChar*, pspec, default_value, minimum, maximum, dvalue); - else if (G_IS_PARAM_SPEC_INT (pspec)) - ASSIGN_VALUE (g_value_set_int, value, GParamSpecInt*, pspec, default_value, minimum, maximum, dvalue); - else if (G_IS_PARAM_SPEC_UINT (pspec)) - ASSIGN_VALUE (g_value_set_uint, value, GParamSpecUInt*, pspec, default_value, minimum, maximum, dvalue); - else if (G_IS_PARAM_SPEC_LONG (pspec)) - ASSIGN_VALUE (g_value_set_long, value, GParamSpecLong*, pspec, default_value, minimum, maximum, dvalue); - else if (G_IS_PARAM_SPEC_ULONG (pspec)) - ASSIGN_VALUE (g_value_set_ulong, value, GParamSpecULong*, pspec, default_value, minimum, maximum, dvalue); - else if (G_IS_PARAM_SPEC_INT64 (pspec)) - ASSIGN_VALUE (g_value_set_int64, value, GParamSpecInt64*, pspec, default_value, minimum, maximum, dvalue); - else if (G_IS_PARAM_SPEC_UINT64 (pspec)) - ASSIGN_VALUE (g_value_set_uint64, value, GParamSpecUInt64*, pspec, default_value, minimum, maximum, dvalue); - else if (G_IS_PARAM_SPEC_FLOAT (pspec)) - ASSIGN_VALUE (g_value_set_float, value, GParamSpecFloat*, pspec, default_value, minimum, maximum, dvalue); - else if (G_IS_PARAM_SPEC_DOUBLE (pspec)) - ASSIGN_VALUE (g_value_set_double, value, GParamSpecDouble*, pspec, default_value, minimum, maximum, dvalue); - else if (G_IS_PARAM_SPEC_BOOLEAN (pspec)) - g_value_set_boolean (value, SELECT_VALUE (dvalue, ((GParamSpecBoolean*) pspec)->default_value, FALSE, TRUE)); - else if (G_IS_PARAM_SPEC_UNICHAR (pspec)) - g_value_set_uint (value, SELECT_VALUE (dvalue, ((GParamSpecUnichar*) pspec)->default_value, FALSE, TRUE)); - else if (G_IS_PARAM_SPEC_GTYPE (pspec)) - g_value_set_gtype (value, SELECT_VALUE ((int) dvalue, ((GParamSpecGType*) pspec)->is_a_type, 0, GTK_TYPE_WIDGET)); - else if (G_IS_PARAM_SPEC_STRING (pspec)) - { - GParamSpecString *sspec = (GParamSpecString*) pspec; - if (dvalue >= +2) - g_value_set_string (value, sspec->default_value); - if (dvalue > 0 && sspec->cset_first && sspec->cset_nth) - g_value_take_string (value, g_strdup_printf ("%c%c", sspec->cset_first[0], sspec->cset_nth[0])); - else /* if (sspec->ensure_non_null) */ - g_value_set_string (value, ""); - } - else if (G_IS_PARAM_SPEC_ENUM (pspec)) - { - GParamSpecEnum *espec = (GParamSpecEnum*) pspec; - if (dvalue >= +2) - g_value_set_enum (value, espec->default_value); - if (dvalue >= 0 && dvalue <= 1) - g_value_set_enum (value, espec->enum_class->values[(int) ((espec->enum_class->n_values - 1) * dvalue)].value); - else if (dvalue <= -1) - g_value_set_enum (value, espec->enum_class->values[g_test_rand_int_range (0, espec->enum_class->n_values)].value); - } - else if (G_IS_PARAM_SPEC_FLAGS (pspec)) - { - GParamSpecFlags *fspec = (GParamSpecFlags*) pspec; - if (dvalue >= +2) - g_value_set_flags (value, fspec->default_value); - if (dvalue >= 0 && dvalue <= 1) - g_value_set_flags (value, fspec->flags_class->values[(int) ((fspec->flags_class->n_values - 1) * dvalue)].value); - else if (dvalue <= -1) - g_value_set_flags (value, fspec->flags_class->values[g_test_rand_int_range (0, fspec->flags_class->n_values)].value); - } - /* unimplemented: - * G_IS_PARAM_SPEC_PARAM - * G_IS_PARAM_SPEC_BOXED - * G_IS_PARAM_SPEC_POINTER - * G_IS_PARAM_SPEC_VALUE_ARRAY - * G_IS_PARAM_SPEC_OBJECT - */ -} - -static gpointer -value_as_pointer (GValue *value) -{ - if (g_value_fits_pointer (value)) - return g_value_peek_pointer (value); - if (G_VALUE_HOLDS_BOOLEAN (value)) - return (void*) g_value_get_boolean (value); - if (G_VALUE_HOLDS_CHAR (value)) - return (void*) (gssize) g_value_get_char (value); - if (G_VALUE_HOLDS_UCHAR (value)) - return (void*) (gsize) g_value_get_uchar (value); - if (G_VALUE_HOLDS_INT (value)) - return (void*) g_value_get_int (value); - if (G_VALUE_HOLDS_UINT (value)) - return (void*) g_value_get_uint (value); - if (G_VALUE_HOLDS_LONG (value)) - return (void*) g_value_get_long (value); - if (G_VALUE_HOLDS_ULONG (value)) - return (void*) g_value_get_ulong (value); - if (G_VALUE_HOLDS_FLOAT (value)) - return (void*) (gssize) g_value_get_float (value); - if (G_VALUE_HOLDS_DOUBLE (value)) - return (void*) (gssize) g_value_get_double (value); - if (G_VALUE_HOLDS_ENUM (value)) - return (void*) (gssize) g_value_get_enum (value); - if (G_VALUE_HOLDS_FLAGS (value)) - return (void*) (gsize) g_value_get_flags (value); - return (void*) 0x1373babe; -} - -static void -object_test_property (GObject *object, - GParamSpec *pspec, - double dvalue) -{ - /* test setting of a normal writable property */ - if (pspec->flags & G_PARAM_WRITABLE && - !(pspec->flags & (G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY))) - { - GValue value = { 0, }; - guint i; - const IgnoreProperty *ignore_properties; - /* select value to set */ - g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec)); - pspec_select_value (pspec, &value, dvalue); - /* ignore untestable properties */ - ignore_properties = list_ignore_properties (FALSE); - for (i = 0; ignore_properties[i].name; i++) - if (g_type_is_a (G_OBJECT_TYPE (object), g_type_from_name (ignore_properties[i].type_name)) && - strcmp (pspec->name, ignore_properties[i].name) == 0 && - (MATCH_ANY_VALUE == ignore_properties[i].value || - value_as_pointer (&value) == ignore_properties[i].value || - (G_VALUE_HOLDS_STRING (&value) && - strcmp (g_value_get_string (&value), ignore_properties[i].value) == 0))) - break; - /* ignore known property bugs if not testing thoroughly */ - if (ignore_properties[i].name == NULL && !g_test_thorough()) - { - ignore_properties = list_ignore_properties (TRUE); - for (i = 0; ignore_properties[i].name; i++) - if (g_type_is_a (G_OBJECT_TYPE (object), g_type_from_name (ignore_properties[i].type_name)) && - strcmp (pspec->name, ignore_properties[i].name) == 0 && - (MATCH_ANY_VALUE == ignore_properties[i].value || - value_as_pointer (&value) == ignore_properties[i].value || - (G_VALUE_HOLDS_STRING (&value) && - strcmp (g_value_get_string (&value), ignore_properties[i].value) == 0))) - break; - } - /* assign unignored properties */ - if (ignore_properties[i].name == NULL) - { - if (g_test_verbose()) - g_print ("PropertyTest: %s::%s := (%s value (%s): %p)\n", - g_type_name (G_OBJECT_TYPE (object)), pspec->name, - SELECT_NAME (dvalue), g_type_name (G_VALUE_TYPE (&value)), - value_as_pointer (&value)); - g_object_set_property (object, pspec->name, &value); - } - /* cleanups */ - g_value_unset (&value); - } -} - -static void -widget_test_properties (GtkWidget *widget, - double dvalue) -{ - /* try setting all possible properties, according to dvalue */ - guint i, n_pspecs = 0; - GParamSpec **pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (widget), &n_pspecs); - for (i = 0; i < n_pspecs; i++) - { - GParamSpec *pspec = pspecs[i]; - if (pspec->flags & G_PARAM_WRITABLE && - !(pspec->flags & (G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY))) - object_test_property (G_OBJECT (widget), pspecs[i], dvalue); - } - g_free (pspecs); -} - -static void -widget_fixups (GtkWidget *widget) -{ - /* post-constructor for widgets that need additional settings to work correctly */ - if (GTK_IS_COMBO_BOX_ENTRY (widget)) - { - GtkListStore *store = gtk_list_store_new (1, G_TYPE_STRING); - g_object_set (widget, "model", store, "text-column", 0, NULL); - g_object_unref (store); - gtk_combo_box_append_text (GTK_COMBO_BOX (widget), "test text"); - } - else if (GTK_IS_COMBO_BOX (widget)) - { - GtkListStore *store = gtk_list_store_new (1, G_TYPE_STRING); - g_object_set (widget, "model", store, NULL); - g_object_unref (store); - gtk_combo_box_append_text (GTK_COMBO_BOX (widget), "test text"); - } -} - -static void -widget_property_tests (gconstpointer test_data) -{ - GType wtype = (GType) test_data; - /* create widget */ - GtkWidget *widget = gtk_widget_new (wtype, NULL); - g_object_ref_sink (widget); - widget_fixups (widget); - /* test property values */ - widget_test_properties (widget, +2); /* test default_value */ - widget_test_properties (widget, 0); /* test minimum */ - widget_test_properties (widget, 0.5); /* test medium */ - widget_test_properties (widget, 1); /* test maximum */ - widget_test_properties (widget, -1); /* test random value */ - /* cleanup */ - gtk_widget_destroy (widget); - g_object_unref (widget); -} - -extern void pixbuf_init (void); - -/* --- main test program --- */ -int -main (int argc, - char *argv[]) -{ - const GType *otypes; - guint i; - /* initialize test program */ - pixbuf_init (); - gtk_test_init (&argc, &argv); - gtk_test_register_all_types(); - /* install a property test for each widget type */ - otypes = gtk_test_list_all_types (NULL); - for (i = 0; otypes[i]; i++) - if (g_type_is_a (otypes[i], GTK_TYPE_WIDGET) && - G_TYPE_IS_OBJECT (otypes[i]) && - !G_TYPE_IS_ABSTRACT (otypes[i])) - { - gchar *testpath = g_strdup_printf ("/properties/%s", g_type_name (otypes[i])); - g_test_add_data_func (testpath, (void*) otypes[i], widget_property_tests); - g_free (testpath); - } - return g_test_run(); -} diff --git a/tests/pixbuf-init.c b/tests/pixbuf-init.c deleted file mode 100644 index f4faa9a2d..000000000 --- a/tests/pixbuf-init.c +++ /dev/null @@ -1,20 +0,0 @@ -#include <config.h> -#include <glib.h> - -#include <sys/stat.h> -#include <stdlib.h> - -static gboolean -file_exists (const char *filename) -{ - struct stat statbuf; - - return stat (filename, &statbuf) == 0; -} - -void -pixbuf_init (void) -{ - if (file_exists ("../gdk-pixbuf/libpixbufloader-pnm.la")) - g_setenv ("GDK_PIXBUF_MODULE_FILE", "../gdk-pixbuf/gdk-pixbuf.loaders", TRUE); -} diff --git a/tests/textbuffertest.c b/tests/textbuffertest.c deleted file mode 100644 index 3fdbf9f40..000000000 --- a/tests/textbuffertest.c +++ /dev/null @@ -1,1308 +0,0 @@ -/* testtextbuffer.c -- Simplistic test suite - * Copyright (C) 2000 Red Hat, Inc - * Author: Havoc Pennington - * - * 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, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include <config.h> -#include <stdio.h> -#include <string.h> - -#include <gtk/gtk.h> -#include "gtk/gtktexttypes.h" /* Private header, for UNKNOWN_CHAR */ - -static void -gtk_text_iter_spew (const GtkTextIter *iter, const gchar *desc) -{ - g_print (" %20s: line %d / char %d / line char %d / line byte %d\n", - desc, - gtk_text_iter_get_line (iter), - gtk_text_iter_get_offset (iter), - gtk_text_iter_get_line_offset (iter), - gtk_text_iter_get_line_index (iter)); -} - -static void -check_get_set_text (GtkTextBuffer *buffer, - const char *str) -{ - GtkTextIter start, end, iter; - char *text; - int n; - - gtk_text_buffer_set_text (buffer, str, -1); - if (gtk_text_buffer_get_char_count (buffer) != g_utf8_strlen (str, -1)) - g_error ("Wrong number of chars (%d not %d)", - gtk_text_buffer_get_char_count (buffer), - (int) g_utf8_strlen (str, -1)); - gtk_text_buffer_get_bounds (buffer, &start, &end); - text = gtk_text_buffer_get_text (buffer, &start, &end, TRUE); - if (strcmp (text, str) != 0) - g_error ("Got '%s' as buffer contents", text); - g_free (text); - - /* line char counts */ - iter = start; - n = 0; - do - { - n += gtk_text_iter_get_chars_in_line (&iter); - } - while (gtk_text_iter_forward_line (&iter)); - - if (n != gtk_text_buffer_get_char_count (buffer)) - g_error ("Sum of chars in lines is %d but buffer char count is %d", - n, gtk_text_buffer_get_char_count (buffer)); - - /* line byte counts */ - iter = start; - n = 0; - do - { - n += gtk_text_iter_get_bytes_in_line (&iter); - } - while (gtk_text_iter_forward_line (&iter)); - - if (n != strlen (str)) - g_error ("Sum of chars in lines is %d but buffer byte count is %d", - n, (int) strlen (str)); - - gtk_text_buffer_set_text (buffer, "", -1); - - n = gtk_text_buffer_get_line_count (buffer); - if (n != 1) - g_error ("%d lines, expected 1", n); - - n = gtk_text_buffer_get_char_count (buffer); - if (n != 0) - g_error ("%d chars, expected 0", n); -} - -static gint -count_toggles_at_iter (GtkTextIter *iter, - GtkTextTag *of_tag) -{ - GSList *tags; - GSList *tmp; - gint count = 0; - - /* get toggle-ons and toggle-offs */ - tags = gtk_text_iter_get_toggled_tags (iter, TRUE); - tags = g_slist_concat (tags, - gtk_text_iter_get_toggled_tags (iter, FALSE)); - - tmp = tags; - while (tmp != NULL) - { - if (of_tag == NULL) - ++count; - else if (of_tag == tmp->data) - ++count; - - tmp = g_slist_next (tmp); - } - - g_slist_free (tags); - - return count; -} - -static gint -count_toggles_in_range_by_char (GtkTextBuffer *buffer, - GtkTextTag *of_tag, - const GtkTextIter *start, - const GtkTextIter *end) -{ - GtkTextIter iter; - gint count = 0; - - iter = *start; - do - { - count += count_toggles_at_iter (&iter, of_tag); - if (!gtk_text_iter_forward_char (&iter)) - { - /* end iterator */ - count += count_toggles_at_iter (&iter, of_tag); - break; - } - } - while (gtk_text_iter_compare (&iter, end) <= 0); - - return count; -} - -static gint -count_toggles_in_buffer (GtkTextBuffer *buffer, - GtkTextTag *of_tag) -{ - GtkTextIter start, end; - - gtk_text_buffer_get_bounds (buffer, &start, &end); - - return count_toggles_in_range_by_char (buffer, of_tag, &start, &end); -} - -static void -check_specific_tag_in_range (GtkTextBuffer *buffer, - const gchar *tag_name, - const GtkTextIter *start, - const GtkTextIter *end) -{ - GtkTextIter iter; - GtkTextTag *tag; - gboolean state; - gint count; - gint buffer_count; - gint last_offset; - - if (gtk_text_iter_compare (start, end) > 0) - { - g_print (" (inverted range for checking tags, skipping)\n"); - return; - } - - tag = gtk_text_tag_table_lookup (gtk_text_buffer_get_tag_table (buffer), - tag_name); - - buffer_count = count_toggles_in_range_by_char (buffer, tag, start, end); - - state = FALSE; - count = 0; - - last_offset = -1; - iter = *start; - if (gtk_text_iter_toggles_tag (&iter, tag) || - gtk_text_iter_forward_to_tag_toggle (&iter, tag)) - { - do - { - gint this_offset; - - ++count; - - this_offset = gtk_text_iter_get_offset (&iter); - - if (this_offset <= last_offset) - g_error ("forward_to_tag_toggle moved in wrong direction"); - - last_offset = this_offset; - - if (gtk_text_iter_begins_tag (&iter, tag)) - { - if (state) - g_error ("Tag %p is already on, and was toggled on?", tag); - state = TRUE; - } - else if (gtk_text_iter_ends_tag (&iter, tag)) - { - if (!state) - g_error ("Tag %p toggled off, but wasn't toggled on?", tag); - state = FALSE; - } - else - g_error ("forward_to_tag_toggle went to a location without a toggle"); - } - while (gtk_text_iter_forward_to_tag_toggle (&iter, tag) && - gtk_text_iter_compare (&iter, end) <= 0); - } - - if (count != buffer_count) - g_error ("Counted %d tags iterating by char, %d iterating forward by tag toggle\n", - buffer_count, count); - - state = FALSE; - count = 0; - - iter = *end; - last_offset = gtk_text_iter_get_offset (&iter); - if (gtk_text_iter_toggles_tag (&iter, tag) || - gtk_text_iter_backward_to_tag_toggle (&iter, tag)) - { - do - { - gint this_offset; - - ++count; - - this_offset = gtk_text_iter_get_offset (&iter); - - if (this_offset >= last_offset) - g_error ("backward_to_tag_toggle moved in wrong direction"); - - last_offset = this_offset; - - if (gtk_text_iter_begins_tag (&iter, tag)) - { - if (!state) - g_error ("Tag %p wasn't on when we got to the on toggle going backward?", tag); - state = FALSE; - } - else if (gtk_text_iter_ends_tag (&iter, tag)) - { - if (state) - g_error ("Tag %p off toggle, but we were already inside a tag?", tag); - state = TRUE; - } - else - g_error ("backward_to_tag_toggle went to a location without a toggle"); - } - while (gtk_text_iter_backward_to_tag_toggle (&iter, tag) && - gtk_text_iter_compare (&iter, start) >= 0); - } - - if (count != buffer_count) - g_error ("Counted %d tags iterating by char, %d iterating backward by tag toggle\n", - buffer_count, count); -} - -static void -check_specific_tag (GtkTextBuffer *buffer, - const gchar *tag_name) -{ - GtkTextIter start, end; - - gtk_text_buffer_get_bounds (buffer, &start, &end); - check_specific_tag_in_range (buffer, tag_name, &start, &end); - gtk_text_iter_forward_chars (&start, 2); - gtk_text_iter_backward_chars (&end, 2); - if (gtk_text_iter_compare (&start, &end) < 0) - check_specific_tag_in_range (buffer, tag_name, &start, &end); -} - -static void -run_tests (GtkTextBuffer *buffer) -{ - GtkTextIter iter; - GtkTextIter start; - GtkTextIter end; - GtkTextIter mark; - gint i, j; - gint num_chars; - GtkTextMark *bar_mark; - GtkTextTag *tag; - GHashTable *tag_states; - gint count; - gint buffer_count; - - gtk_text_buffer_get_bounds (buffer, &start, &end); - - /* Check that walking the tree via chars and via iterators produces - * the same number of indexable locations. - */ - num_chars = gtk_text_buffer_get_char_count (buffer); - iter = start; - bar_mark = gtk_text_buffer_create_mark (buffer, "bar", &iter, FALSE); - i = 0; - while (i < num_chars) - { - GtkTextIter current; - GtkTextMark *foo_mark; - - gtk_text_buffer_get_iter_at_offset (buffer, ¤t, i); - - if (!gtk_text_iter_equal (&iter, ¤t)) - { - g_error ("get_char_index didn't return current iter"); - } - - j = gtk_text_iter_get_offset (&iter); - - if (i != j) - { - g_error ("iter converted to %d not %d", j, i); - } - - /* get/set mark */ - gtk_text_buffer_get_iter_at_mark (buffer, &mark, bar_mark); - - if (!gtk_text_iter_equal (&iter, &mark)) - { - gtk_text_iter_spew (&iter, "iter"); - gtk_text_iter_spew (&mark, "mark"); - g_error ("Mark not moved to the right place."); - } - - foo_mark = gtk_text_buffer_create_mark (buffer, "foo", &iter, FALSE); - gtk_text_buffer_get_iter_at_mark (buffer, &mark, foo_mark); - gtk_text_buffer_delete_mark (buffer, foo_mark); - - if (!gtk_text_iter_equal (&iter, &mark)) - { - gtk_text_iter_spew (&iter, "iter"); - gtk_text_iter_spew (&mark, "mark"); - g_error ("Mark not created in the right place."); - } - - if (gtk_text_iter_is_end (&iter)) - g_error ("iterators ran out before chars (offset %d of %d)", - i, num_chars); - - gtk_text_iter_forward_char (&iter); - - gtk_text_buffer_move_mark (buffer, bar_mark, &iter); - - ++i; - } - - if (!gtk_text_iter_equal (&iter, &end)) - g_error ("Iterating over all chars didn't end with the end iter"); - - /* Do the tree-walk backward - */ - num_chars = gtk_text_buffer_get_char_count (buffer); - gtk_text_buffer_get_iter_at_offset (buffer, &iter, -1); - - gtk_text_buffer_move_mark (buffer, bar_mark, &iter); - - i = num_chars; - - if (!gtk_text_iter_equal (&iter, &end)) - g_error ("iter at char -1 is not equal to the end iterator"); - - while (i >= 0) - { - GtkTextIter current; - GtkTextMark *foo_mark; - - gtk_text_buffer_get_iter_at_offset (buffer, ¤t, i); - - if (!gtk_text_iter_equal (&iter, ¤t)) - { - g_error ("get_char_index didn't return current iter while going backward"); - } - j = gtk_text_iter_get_offset (&iter); - - if (i != j) - { - g_error ("going backward, iter converted to %d not %d", j, i); - } - - /* get/set mark */ - gtk_text_buffer_get_iter_at_mark (buffer, &mark, bar_mark); - - if (!gtk_text_iter_equal (&iter, &mark)) - { - gtk_text_iter_spew (&iter, "iter"); - gtk_text_iter_spew (&mark, "mark"); - g_error ("Mark not moved to the right place."); - } - - foo_mark = gtk_text_buffer_create_mark (buffer, "foo", &iter, FALSE); - gtk_text_buffer_get_iter_at_mark (buffer, &mark, foo_mark); - gtk_text_buffer_delete_mark (buffer, foo_mark); - - if (!gtk_text_iter_equal (&iter, &mark)) - { - gtk_text_iter_spew (&iter, "iter"); - gtk_text_iter_spew (&mark, "mark"); - g_error ("Mark not created in the right place."); - } - - if (i > 0) - { - if (!gtk_text_iter_backward_char (&iter)) - g_error ("iterators ran out before char indexes"); - - gtk_text_buffer_move_mark (buffer, bar_mark, &iter); - } - else - { - if (gtk_text_iter_backward_char (&iter)) - g_error ("went backward from 0?"); - } - - --i; - } - - if (!gtk_text_iter_equal (&iter, &start)) - g_error ("Iterating backward over all chars didn't end with the start iter"); - - /* - * Check that get_line_count returns the same number of lines - * as walking the tree by line - */ - i = 1; /* include current (first) line */ - gtk_text_buffer_get_iter_at_line (buffer, &iter, 0); - while (gtk_text_iter_forward_line (&iter)) - ++i; - - if (i != gtk_text_buffer_get_line_count (buffer)) - g_error ("Counted %d lines, buffer has %d", i, - gtk_text_buffer_get_line_count (buffer)); - - /* - * Check that moving over tag toggles thinks about working. - */ - - buffer_count = count_toggles_in_buffer (buffer, NULL); - - tag_states = g_hash_table_new (NULL, NULL); - count = 0; - - gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0); - if (gtk_text_iter_toggles_tag (&iter, NULL) || - gtk_text_iter_forward_to_tag_toggle (&iter, NULL)) - { - do - { - GSList *tags; - GSList *tmp; - gboolean found_some = FALSE; - - /* get toggled-on tags */ - tags = gtk_text_iter_get_toggled_tags (&iter, TRUE); - - if (tags) - found_some = TRUE; - - tmp = tags; - while (tmp != NULL) - { - ++count; - - tag = tmp->data; - - if (g_hash_table_lookup (tag_states, tag)) - g_error ("Tag %p is already on, and was toggled on?", tag); - - g_hash_table_insert (tag_states, tag, GINT_TO_POINTER (TRUE)); - - tmp = g_slist_next (tmp); - } - - g_slist_free (tags); - - /* get toggled-off tags */ - tags = gtk_text_iter_get_toggled_tags (&iter, FALSE); - - if (tags) - found_some = TRUE; - - tmp = tags; - while (tmp != NULL) - { - ++count; - - tag = tmp->data; - - if (!g_hash_table_lookup (tag_states, tag)) - g_error ("Tag %p is already off, and was toggled off?", tag); - - g_hash_table_remove (tag_states, tag); - - tmp = g_slist_next (tmp); - } - - g_slist_free (tags); - - if (!found_some) - g_error ("No tags found going forward to tag toggle."); - - } - while (gtk_text_iter_forward_to_tag_toggle (&iter, NULL)); - } - - g_hash_table_destroy (tag_states); - - if (count != buffer_count) - g_error ("Counted %d tags iterating by char, %d iterating by tag toggle\n", - buffer_count, count); - - /* Go backward; here TRUE in the hash means we saw - * an off toggle last. - */ - - tag_states = g_hash_table_new (NULL, NULL); - count = 0; - - gtk_text_buffer_get_end_iter (buffer, &iter); - if (gtk_text_iter_toggles_tag (&iter, NULL) || - gtk_text_iter_backward_to_tag_toggle (&iter, NULL)) - { - do - { - GSList *tags; - GSList *tmp; - gboolean found_some = FALSE; - - /* get toggled-off tags */ - tags = gtk_text_iter_get_toggled_tags (&iter, FALSE); - - if (tags) - found_some = TRUE; - - tmp = tags; - while (tmp != NULL) - { - ++count; - - tag = tmp->data; - - if (g_hash_table_lookup (tag_states, tag)) - g_error ("Tag %p has two off-toggles in a row?", tag); - - g_hash_table_insert (tag_states, tag, GINT_TO_POINTER (TRUE)); - - tmp = g_slist_next (tmp); - } - - g_slist_free (tags); - - /* get toggled-on tags */ - tags = gtk_text_iter_get_toggled_tags (&iter, TRUE); - - if (tags) - found_some = TRUE; - - tmp = tags; - while (tmp != NULL) - { - ++count; - - tag = tmp->data; - - if (!g_hash_table_lookup (tag_states, tag)) - g_error ("Tag %p was toggled on, but saw no off-toggle?", tag); - - g_hash_table_remove (tag_states, tag); - - tmp = g_slist_next (tmp); - } - - g_slist_free (tags); - - if (!found_some) - g_error ("No tags found going backward to tag toggle."); - } - while (gtk_text_iter_backward_to_tag_toggle (&iter, NULL)); - } - - g_hash_table_destroy (tag_states); - - if (count != buffer_count) - g_error ("Counted %d tags iterating by char, %d iterating by tag toggle\n", - buffer_count, count); - - check_specific_tag (buffer, "fg_red"); - check_specific_tag (buffer, "bg_green"); - check_specific_tag (buffer, "front_tag"); - check_specific_tag (buffer, "center_tag"); - check_specific_tag (buffer, "end_tag"); -} - - -static const char *book_closed_xpm[] = { -"16 16 6 1", -" c None s None", -". c black", -"X c red", -"o c yellow", -"O c #808080", -"# c white", -" ", -" .. ", -" ..XX. ", -" ..XXXXX. ", -" ..XXXXXXXX. ", -".ooXXXXXXXXX. ", -"..ooXXXXXXXXX. ", -".X.ooXXXXXXXXX. ", -".XX.ooXXXXXX.. ", -" .XX.ooXXX..#O ", -" .XX.oo..##OO. ", -" .XX..##OO.. ", -" .X.#OO.. ", -" ..O.. ", -" .. ", -" "}; - -static void -fill_buffer (GtkTextBuffer *buffer) -{ - GtkTextTag *tag; - GdkColor color, color2; - GtkTextIter iter; - GtkTextIter iter2; - GdkPixbuf *pixbuf; - int i; - - color.red = color.green = 0; - color.blue = 0xffff; - color2.red = 0xfff; - color2.blue = 0x0; - color2.green = 0; - - gtk_text_buffer_create_tag (buffer, "fg_blue", - "foreground_gdk", &color, - "background_gdk", &color2, - "font", "-*-courier-bold-r-*-*-30-*-*-*-*-*-*-*", - NULL); - - color.blue = color.green = 0; - color.red = 0xffff; - - gtk_text_buffer_create_tag (buffer, "fg_red", - "rise", -4, - "foreground_gdk", &color, - NULL); - - color.blue = color.red = 0; - color.green = 0xffff; - - gtk_text_buffer_create_tag (buffer, "bg_green", - "background_gdk", &color, - "font", "-*-courier-bold-r-*-*-10-*-*-*-*-*-*-*", - NULL); - - pixbuf = gdk_pixbuf_new_from_xpm_data (book_closed_xpm); - - g_assert (pixbuf != NULL); - - i = 0; - while (i < 10) - { - gchar *str; - - gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0); - - gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf); - - gtk_text_buffer_get_iter_at_offset (buffer, &iter, 1); - - gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf); - - str = g_strdup_printf ("%d Hello World!\nwoo woo woo woo woo woo woo woo\n", - i); - - gtk_text_buffer_insert (buffer, &iter, str, -1); - - g_free (str); - - gtk_text_buffer_insert (buffer, &iter, - "(Hello World!)\nfoo foo Hello this is some text we are using to text word wrap. It has punctuation! gee; blah - hmm, great.\nnew line\n\n" - /* This is UTF8 stuff, Emacs doesn't - really know how to display it */ - "Spanish (Espa\303\261ol) \302\241Hola! / French (Fran\303\247ais) Bonjour, Salut / German (Deutsch S\303\274d) Gr\303\274\303\237 Gott (testing Latin-1 chars encoded in UTF8)\nThai (we can't display this, just making sure we don't crash) (\340\270\240\340\270\262\340\270\251\340\270\262\340\271\204\340\270\227\340\270\242) \340\270\252\340\270\247\340\270\261\340\270\252\340\270\224\340\270\265\340\270\204\340\270\243\340\270\261\340\270\232, \340\270\252\340\270\247\340\270\261\340\270\252\340\270\224\340\270\265\340\270\204\340\271\210\340\270\260\n", - -1); - - gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf); - gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf); - - gtk_text_buffer_get_iter_at_offset (buffer, &iter, 4); - - gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf); - - gtk_text_buffer_get_iter_at_offset (buffer, &iter, 7); - - gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf); - - gtk_text_buffer_get_iter_at_offset (buffer, &iter, 8); - - gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf); - - gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 0, 8); - iter2 = iter; - gtk_text_iter_forward_chars (&iter2, 10); - - gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &iter, &iter2); - - gtk_text_iter_forward_chars (&iter, 7); - gtk_text_iter_forward_chars (&iter2, 10); - - gtk_text_buffer_apply_tag_by_name (buffer, "bg_green", &iter, &iter2); - - gtk_text_iter_forward_chars (&iter, 12); - gtk_text_iter_forward_chars (&iter2, 10); - - gtk_text_buffer_apply_tag_by_name (buffer, "bg_green", &iter, &iter2); - - gtk_text_iter_forward_chars (&iter, 10); - gtk_text_iter_forward_chars (&iter2, 15); - - gtk_text_buffer_apply_tag_by_name (buffer, "fg_red", &iter, &iter2); - gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &iter, &iter2); - - gtk_text_iter_forward_chars (&iter, 20); - gtk_text_iter_forward_chars (&iter2, 20); - - gtk_text_buffer_apply_tag_by_name (buffer, "fg_red", &iter, &iter2); - gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &iter, &iter2); - - gtk_text_iter_backward_chars (&iter, 25); - gtk_text_iter_forward_chars (&iter2, 5); - - gtk_text_buffer_apply_tag_by_name (buffer, "fg_red", &iter, &iter2); - gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &iter, &iter2); - - gtk_text_iter_forward_chars (&iter, 15); - gtk_text_iter_backward_chars (&iter2, 10); - - gtk_text_buffer_remove_tag_by_name (buffer, "fg_red", &iter, &iter2); - gtk_text_buffer_remove_tag_by_name (buffer, "fg_blue", &iter, &iter2); - - ++i; - } - - /* Put in tags that are just at the beginning, and just near the end, - * and just near the middle. - */ - tag = gtk_text_buffer_create_tag (buffer, "front_tag", NULL); - gtk_text_buffer_get_iter_at_offset (buffer, &iter, 3); - gtk_text_buffer_get_iter_at_offset (buffer, &iter2, 300); - - gtk_text_buffer_apply_tag (buffer, tag, &iter, &iter2); - - tag = gtk_text_buffer_create_tag (buffer, "end_tag", NULL); - gtk_text_buffer_get_end_iter (buffer, &iter2); - gtk_text_iter_backward_chars (&iter2, 12); - iter = iter2; - gtk_text_iter_backward_chars (&iter, 157); - - gtk_text_buffer_apply_tag (buffer, tag, &iter, &iter2); - - tag = gtk_text_buffer_create_tag (buffer, "center_tag", NULL); - gtk_text_buffer_get_iter_at_offset (buffer, &iter, - gtk_text_buffer_get_char_count (buffer)/2); - gtk_text_iter_backward_chars (&iter, 37); - iter2 = iter; - gtk_text_iter_forward_chars (&iter2, 57); - - gtk_text_buffer_apply_tag (buffer, tag, &iter, &iter2); - - g_object_unref (pixbuf); -} - - -/* - * Line separator tests (initially to avoid regression on bugzilla #57428) - */ - -static void -test_line_separation (const char* str, - gboolean expect_next_line, - gboolean expect_end_iter, - int expected_line_count, - int expected_line_break, - int expected_next_line_start) -{ - GtkTextIter iter; - GtkTextBuffer* buffer; - gboolean on_next_line; - gboolean on_end_iter; - gint new_pos; - - buffer = gtk_text_buffer_new (NULL); - - gtk_text_buffer_set_text (buffer, str, -1); - gtk_text_buffer_get_iter_at_offset (buffer, &iter, expected_line_break); - - g_assert (gtk_text_iter_ends_line (&iter) || gtk_text_iter_is_end (&iter)); - - g_assert (gtk_text_buffer_get_line_count (buffer) == expected_line_count); - - on_next_line = gtk_text_iter_forward_line (&iter); - - g_assert (expect_next_line == on_next_line); - - on_end_iter = gtk_text_iter_is_end (&iter); - - g_assert (on_end_iter == expect_end_iter); - - new_pos = gtk_text_iter_get_offset (&iter); - - if (on_next_line) - g_assert (expected_next_line_start == new_pos); - - ++expected_line_break; - while (expected_line_break < expected_next_line_start) - { - gtk_text_buffer_get_iter_at_offset (buffer, &iter, expected_line_break); - - g_assert (!gtk_text_iter_ends_line (&iter)); - - on_next_line = gtk_text_iter_forward_line (&iter); - - g_assert (expect_next_line == on_next_line); - - new_pos = gtk_text_iter_get_offset (&iter); - - if (on_next_line) - g_assert (expected_next_line_start == new_pos); - - ++expected_line_break; - } - - /* FIXME tests for backward line */ - - g_object_unref (buffer); -} - -/* there are cases where \r and \n should not be treated like \r\n, - * originally bug #337022. */ -static void -split_r_n_separators_test (void) -{ - GtkTextBuffer *buffer; - GtkTextIter iter; - - buffer = gtk_text_buffer_new (NULL); - - gtk_text_buffer_set_text (buffer, "foo\ra\nbar\n", -1); - - /* delete 'a' so that we have - - 1 foo\r - 2 \n - 3 bar\n - - * and both \r and \n are line separators */ - - gtk_text_buffer_get_iter_at_offset (buffer, &iter, 5); - gtk_text_buffer_backspace (buffer, &iter, TRUE, TRUE); - - g_assert (gtk_text_iter_ends_line (&iter)); - - gtk_text_buffer_get_iter_at_offset (buffer, &iter, 3); - g_assert (gtk_text_iter_ends_line (&iter)); -} - -static void -test_line_separator (void) -{ - char *str; - char buf[7] = { '\0', }; - - /* Only one character has type G_UNICODE_PARAGRAPH_SEPARATOR in - * Unicode 3.0; update this if that changes. - */ -#define PARAGRAPH_SEPARATOR 0x2029 - - test_line_separation ("line", FALSE, TRUE, 1, 4, 4); - test_line_separation ("line\r\n", FALSE, TRUE, 2, 4, 6); - test_line_separation ("line\r", FALSE, TRUE, 2, 4, 5); - test_line_separation ("line\n", FALSE, TRUE, 2, 4, 5); - test_line_separation ("line\rqw", TRUE, FALSE, 2, 4, 5); - test_line_separation ("line\nqw", TRUE, FALSE, 2, 4, 5); - test_line_separation ("line\r\nqw", TRUE, FALSE, 2, 4, 6); - - g_unichar_to_utf8 (PARAGRAPH_SEPARATOR, buf); - - str = g_strdup_printf ("line%s", buf); - test_line_separation (str, FALSE, TRUE, 2, 4, 5); - g_free (str); - str = g_strdup_printf ("line%sqw", buf); - test_line_separation (str, TRUE, FALSE, 2, 4, 5); - g_free (str); - - split_r_n_separators_test (); -} - -static void -test_logical_motion (void) -{ - char *str; - char buf1[7] = { '\0', }; - char buf2[7] = { '\0', }; - char buf3[7] = { '\0', }; - int expected[30]; - int expected_steps; - int i; - GtkTextBuffer *buffer; - GtkTextIter iter; - - buffer = gtk_text_buffer_new (NULL); - -#define LEADING_JAMO 0x1111 -#define VOWEL_JAMO 0x1167 -#define TRAILING_JAMO 0x11B9 - - g_unichar_to_utf8 (LEADING_JAMO, buf1); - g_unichar_to_utf8 (VOWEL_JAMO, buf2); - g_unichar_to_utf8 (TRAILING_JAMO, buf3); - - /* Build the string "abc<leading><vowel><trailing>def\r\nxyz" */ - str = g_strconcat ("abc", buf1, buf2, buf3, "def\r\nxyz", NULL); - gtk_text_buffer_set_text (buffer, str, -1); - g_free (str); - - /* Check cursor positions */ - memset (expected, 0, sizeof (expected)); - expected[0] = 0; /* before 'a' */ - expected[1] = 1; /* before 'b' */ - expected[2] = 2; /* before 'c' */ - expected[3] = 3; /* before jamo */ - expected[4] = 6; /* before 'd' */ - expected[5] = 7; /* before 'e' */ - expected[6] = 8; /* before 'f' */ - expected[7] = 9; /* before '\r' */ - expected[8] = 11; /* before 'x' */ - expected[9] = 12; /* before 'y' */ - expected[10] = 13; /* before 'z' */ - expected[11] = 14; /* after 'z' (only matters going backward) */ - expected_steps = 11; - - gtk_text_buffer_get_start_iter (buffer, &iter); - i = 0; - do - { - int pos; - - pos = gtk_text_iter_get_offset (&iter); - - if (pos != expected[i]) - { - g_error ("Cursor position %d, expected %d", - pos, expected[i]); - } - - ++i; - } - while (gtk_text_iter_forward_cursor_position (&iter)); - - if (!gtk_text_iter_is_end (&iter)) - g_error ("Expected to stop at the end iterator\n"); - - if (!gtk_text_iter_is_cursor_position (&iter)) - g_error ("Should be a cursor position before the end iterator"); - - if (i != expected_steps) - g_error ("Expected %d steps, there were actually %d\n", expected_steps, i); - - i = expected_steps; - do - { - int pos; - - pos = gtk_text_iter_get_offset (&iter); - - if (pos != expected[i]) - { - g_error ("Moving backward, cursor position %d, expected %d", - pos, expected[i]); - } - - /* g_print ("%d = %d\n", pos, expected[i]); */ - - --i; - } - while (gtk_text_iter_backward_cursor_position (&iter)); - - if (i != -1) - g_error ("Expected %d steps, there were actually %d\n", expected_steps - i, i); - - if (!gtk_text_iter_is_start (&iter)) - g_error ("Expected to stop at the start iterator\n"); - - - /* Check sentence boundaries */ - - gtk_text_buffer_set_text (buffer, "Hi.\nHi. \nHi! Hi. Hi? Hi.", -1); - - memset (expected, 0, sizeof (expected)); - - expected[0] = 0; /* before first Hi */ - expected[1] = 3; /* After first . */ - expected[2] = 7; /* After second . */ - expected[3] = 12; /* After ! */ - expected[4] = 16; /* After third . */ - expected[5] = 20; /* After ? */ - - expected_steps = 6; - - gtk_text_buffer_get_start_iter (buffer, &iter); - i = 0; - do - { - int pos; - - pos = gtk_text_iter_get_offset (&iter); - - if (pos != expected[i]) - { - g_error ("Sentence position %d, expected %d", - pos, expected[i]); - } - - if (i != 0 && - !gtk_text_iter_is_end (&iter) && - !gtk_text_iter_ends_sentence (&iter)) - g_error ("Iterator at %d should end a sentence", pos); - - ++i; - } - while (gtk_text_iter_forward_sentence_end (&iter)); - - if (i != expected_steps) - g_error ("Expected %d steps, there were actually %d\n", expected_steps, i); - - if (!gtk_text_iter_is_end (&iter)) - g_error ("Expected to stop at the end iterator\n"); - - gtk_text_buffer_set_text (buffer, "Hi.\nHi. \nHi! Hi. Hi? Hi.", -1); - - memset (expected, 0, sizeof (expected)); - - expected[0] = 24; - expected[1] = 21; - expected[2] = 17; - expected[3] = 13; - expected[4] = 9; - expected[5] = 4; - expected[6] = 0; - - expected_steps = 7; - - gtk_text_buffer_get_end_iter (buffer, &iter); - i = 0; - do - { - int pos; - - pos = gtk_text_iter_get_offset (&iter); - - if (pos != expected[i]) - { - g_error ("Sentence position %d, expected %d", - pos, expected[i]); - } - - if (pos != 0 && - !gtk_text_iter_is_end (&iter) && - !gtk_text_iter_starts_sentence (&iter)) - g_error ("Iterator at %d should start a sentence", pos); - - ++i; - } - while (gtk_text_iter_backward_sentence_start (&iter)); - - if (i != expected_steps) - g_error ("Expected %d steps, there were actually %d\n", expected_steps, i); - - if (gtk_text_iter_get_offset (&iter) != 0) - g_error ("Expected to stop at the start iterator\n"); - - g_object_unref (buffer); -} - -static void -test_marks (void) -{ - GtkTextBuffer *buf1, *buf2; - GtkTextMark *mark; - GtkTextIter iter; - - buf1 = gtk_text_buffer_new (NULL); - buf2 = gtk_text_buffer_new (NULL); - - gtk_text_buffer_get_start_iter (buf1, &iter); - mark = gtk_text_buffer_create_mark (buf1, "foo", &iter, TRUE); - g_object_ref (mark); - gtk_text_mark_set_visible (mark, TRUE); - gtk_text_buffer_delete_mark (buf1, mark); - - g_assert (gtk_text_mark_get_visible (mark)); - g_assert (gtk_text_mark_get_left_gravity (mark)); - g_assert (!strcmp ("foo", gtk_text_mark_get_name (mark))); - g_assert (gtk_text_mark_get_buffer (mark) == NULL); - g_assert (gtk_text_mark_get_deleted (mark)); - g_assert (gtk_text_buffer_get_mark (buf1, "foo") == NULL); - - gtk_text_buffer_get_start_iter (buf2, &iter); - gtk_text_buffer_add_mark (buf2, mark, &iter); - gtk_text_buffer_insert (buf2, &iter, "ewfwefwefwe", -1); - gtk_text_buffer_get_iter_at_mark (buf2, &iter, mark); - - g_assert (gtk_text_mark_get_visible (mark)); - g_assert (gtk_text_iter_is_start (&iter)); - g_assert (gtk_text_mark_get_left_gravity (mark)); - g_assert (!strcmp ("foo", gtk_text_mark_get_name (mark))); - g_assert (gtk_text_mark_get_buffer (mark) == buf2); - g_assert (!gtk_text_mark_get_deleted (mark)); - g_assert (gtk_text_buffer_get_mark (buf2, "foo") == mark); - - gtk_text_buffer_delete_mark (buf2, mark); - gtk_text_mark_set_visible (mark, FALSE); - g_object_unref (mark); - - mark = gtk_text_mark_new ("blah", TRUE); - gtk_text_buffer_get_start_iter (buf1, &iter); - gtk_text_mark_set_visible (mark, TRUE); - gtk_text_buffer_add_mark (buf1, mark, &iter); - - g_assert (gtk_text_mark_get_visible (mark)); - g_assert (gtk_text_mark_get_buffer (mark) == buf1); - g_assert (!gtk_text_mark_get_deleted (mark)); - g_assert (gtk_text_buffer_get_mark (buf1, "blah") == mark); - g_assert (!strcmp ("blah", gtk_text_mark_get_name (mark))); - - gtk_text_mark_set_visible (mark, FALSE); - gtk_text_buffer_delete_mark (buf1, mark); - g_assert (!gtk_text_mark_get_visible (mark)); - g_assert (gtk_text_buffer_get_mark (buf1, "blah") == NULL); - g_assert (gtk_text_mark_get_buffer (mark) == NULL); - g_assert (gtk_text_mark_get_deleted (mark)); - - gtk_text_buffer_get_start_iter (buf2, &iter); - gtk_text_buffer_add_mark (buf2, mark, &iter); - g_assert (gtk_text_mark_get_buffer (mark) == buf2); - g_assert (!gtk_text_mark_get_deleted (mark)); - g_assert (gtk_text_buffer_get_mark (buf2, "blah") == mark); - g_assert (!strcmp ("blah", gtk_text_mark_get_name (mark))); - - g_object_unref (mark); - g_object_unref (buf1); - g_object_unref (buf2); -} - -static void -test_utf8 (void) -{ - gunichar ch; - - /* Check UTF8 unknown char thing */ - g_assert (g_utf8_strlen (gtk_text_unknown_char_utf8, 3) == 1); - ch = g_utf8_get_char (gtk_text_unknown_char_utf8); - g_assert (ch == GTK_TEXT_UNKNOWN_CHAR); -} - -static void -test_empty_buffer (void) -{ - GtkTextBuffer *buffer; - int n; - GtkTextIter start; - - buffer = gtk_text_buffer_new (NULL); - - /* Check that buffer starts with one empty line and zero chars */ - n = gtk_text_buffer_get_line_count (buffer); - if (n != 1) - g_error ("%d lines, expected 1", n); - - n = gtk_text_buffer_get_char_count (buffer); - if (n != 0) - g_error ("%d chars, expected 0", n); - - /* empty first line contains 0 chars */ - gtk_text_buffer_get_start_iter (buffer, &start); - n = gtk_text_iter_get_chars_in_line (&start); - if (n != 0) - g_error ("%d chars in first line, expected 0", n); - n = gtk_text_iter_get_bytes_in_line (&start); - if (n != 0) - g_error ("%d bytes in first line, expected 0", n); - - /* Run gruesome alien test suite on buffer */ - run_tests (buffer); - - g_object_unref (buffer); -} - -static void -test_get_set(void) -{ - GtkTextBuffer *buffer; - - buffer = gtk_text_buffer_new (NULL); - - check_get_set_text (buffer, "Hello"); - check_get_set_text (buffer, "Hello\n"); - check_get_set_text (buffer, "Hello\r\n"); - check_get_set_text (buffer, "Hello\r"); - check_get_set_text (buffer, "Hello\nBar\nFoo"); - check_get_set_text (buffer, "Hello\nBar\nFoo\n"); - - g_object_unref (buffer); -} - -static void -test_fill_empty (void) -{ - GtkTextBuffer *buffer; - int n; - GtkTextIter start, end; - - buffer = gtk_text_buffer_new (NULL); - - /* Put stuff in the buffer */ - fill_buffer (buffer); - - /* Subject stuff-bloated buffer to further torment */ - run_tests (buffer); - - /* Delete all stuff from the buffer */ - gtk_text_buffer_get_bounds (buffer, &start, &end); - gtk_text_buffer_delete (buffer, &start, &end); - - /* Check buffer for emptiness (note that a single - empty line always remains in the buffer) */ - n = gtk_text_buffer_get_line_count (buffer); - if (n != 1) - g_error ("%d lines, expected 1", n); - - n = gtk_text_buffer_get_char_count (buffer); - if (n != 0) - g_error ("%d chars, expected 0", n); - - run_tests (buffer); - - g_object_unref (buffer); -} - -static void -test_tag (void) -{ - GtkTextBuffer *buffer; - GtkTextIter start, end; - - buffer = gtk_text_buffer_new (NULL); - - fill_buffer (buffer); - - gtk_text_buffer_set_text (buffer, "adcdef", -1); - gtk_text_buffer_get_iter_at_offset (buffer, &start, 1); - gtk_text_buffer_get_iter_at_offset (buffer, &end, 3); - gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &start, &end); - - run_tests (buffer); - - g_object_unref (buffer); -} - -extern void pixbuf_init (void); - -int -main (int argc, char** argv) -{ - /* First, we turn on btree debugging. */ - gtk_debug_flags |= GTK_DEBUG_TEXT; - - gtk_test_init (&argc, &argv); - pixbuf_init (); - - g_test_add_func ("/TextBuffer/UTF8 unknown char", test_utf8); - g_test_add_func ("/TextBuffer/Line separator", test_line_separator); - g_test_add_func ("/TextBuffer/Logical motion", test_logical_motion); - g_test_add_func ("/TextBuffer/Marks", test_marks); - g_test_add_func ("/TextBuffer/Empty buffer", test_empty_buffer); - g_test_add_func ("/TextBuffer/Get and Set", test_get_set); - g_test_add_func ("/TextBuffer/Fill and Empty", test_fill_empty); - g_test_add_func ("/TextBuffer/Tag", test_tag); - - return g_test_run(); -} |