summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMichael Natterer <mitch@imendio.com>2008-06-18 13:29:02 +0000
committerMichael Natterer <mitch@src.gnome.org>2008-06-18 13:29:02 +0000
commitd5565f5b638a39c8c33f290e860a6cc38f5631be (patch)
treede3c1323a9e1179bf1f2aa23c1be1f8941b096de /tests
parent67c6c28fe04237187645c55195012dbb831955e9 (diff)
downloadgdk-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.am28
-rw-r--r--tests/autotestfilechooser.c1093
-rw-r--r--tests/buildertest.c2213
-rw-r--r--tests/defaultvaluetest.c341
-rw-r--r--tests/floatingtest.c71
-rw-r--r--tests/objecttests.c358
-rw-r--r--tests/pixbuf-init.c20
-rw-r--r--tests/textbuffertest.c1308
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, &current, i);
-
- if (!gtk_text_iter_equal (&iter, &current))
- {
- 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, &current, i);
-
- if (!gtk_text_iter_equal (&iter, &current))
- {
- 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();
-}