summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJohan Dahlin <jdahlin@async.com.br>2007-06-15 17:53:46 +0000
committerJohan Dahlin <johan@src.gnome.org>2007-06-15 17:53:46 +0000
commit4d638bf0c15c363f2c28cafc1485cf4066885383 (patch)
tree5638874af2c1303cfb41c0e5f2db608af06355d0 /tests
parent49fc7e15ee345fbae8960dfc2c4437364f8acb50 (diff)
downloadgtk+-4d638bf0c15c363f2c28cafc1485cf4066885383.tar.gz
Add GtkBuilder, fixes #172535
2007-06-15 Johan Dahlin <jdahlin@async.com.br> * demos/gtk-demo/Makefile.am: * demos/gtk-demo/builder.c: (quit_activate), (about_activate), (do_builder): * demos/gtk-demo/demo.ui: * docs/reference/gtk/gtk-docs.sgml: * docs/reference/gtk/gtk-sections.txt: * docs/reference/gtk/gtk.types: * docs/reference/gtk/tmpl/gtkbuildable.sgml: * docs/reference/gtk/tmpl/gtkbuilder.sgml: * gtk/Makefile.am: * gtk/gtk.h: * gtk/gtk.symbols: * gtk/gtkaction.c: (gtk_action_buildable_init), (gtk_action_buildable_set_name), (gtk_action_buildable_get_name): * gtk/gtkactiongroup.c: (gtk_action_group_get_type), (gtk_action_group_buildable_init), (gtk_action_group_buildable_add), (gtk_action_group_buildable_set_name), (gtk_action_group_buildable_get_name): * gtk/gtkbuildable.c: (gtk_buildable_get_type), (gtk_buildable_set_name), (gtk_buildable_get_name), (gtk_buildable_add), (gtk_buildable_set_property), (gtk_buildable_parser_finished), (gtk_buildable_construct_child), (gtk_buildable_custom_tag_start), (gtk_buildable_custom_tag_end), (gtk_buildable_custom_finished), (gtk_buildable_get_internal_child): * gtk/gtkbuildable.h: * gtk/gtkbuilder.c: (gtk_builder_class_init), (gtk_builder_init), (gtk_builder_finalize), (gtk_builder_set_property), (gtk_builder_get_property), (_gtk_builder_resolve_type_lazily), (gtk_builder_real_get_type_from_name), (gtk_builder_get_parameters), (gtk_builder_get_internal_child), (_gtk_builder_construct), (_gtk_builder_add), (apply_delayed_properties), (_gtk_builder_finish), (gtk_builder_new), (gtk_builder_add_from_file), (gtk_builder_add_from_string), (gtk_builder_get_object), (object_add_to_list), (gtk_builder_get_objects), (gtk_builder_set_translation_domain), (gtk_builder_get_translation_domain), (gtk_builder_connect_signals_default), (gtk_builder_connect_signals), (gtk_builder_connect_signals_full), (gtk_builder_value_from_string), (gtk_builder_value_from_string_type), (_gtk_builder_enum_from_string), (_gtk_builder_flags_from_string), (gtk_builder_get_type_from_name), (gtk_builder_error_quark): * gtk/gtkbuilder.h: * gtk/gtkbuilderparser.c: (state_push), (state_peek), (state_pop), (error_missing_attribute), (error_invalid_attribute), (error_invalid_tag), (builder_construct), (parse_object), (free_object_info), (_get_type_by_symbol), (parse_child), (free_child_info), (parse_property), (free_property_info), (parse_signal), (_free_signal_info), (parse_interface), (create_subparser), (free_subparser), (subparser_start), (subparser_end), (parse_custom), (start_element), (end_element), (text), (_gtk_builder_parser_parse_buffer): * gtk/gtkbuilderprivate.h: * gtk/gtkcelllayout.c: (attributes_start_element), (attributes_text_element), (_gtk_cell_layout_buildable_custom_tag_start), (_gtk_cell_layout_buildable_custom_tag_end), (_gtk_cell_layout_buildable_add): * gtk/gtkcelllayout.h: * gtk/gtkcellview.c: (gtk_cell_view_buildable_init), (gtk_cell_view_buildable_custom_tag_start), (gtk_cell_view_buildable_custom_tag_end): * gtk/gtkcolorseldialog.c: (gtk_color_selection_dialog_buildable_interface_init), (gtk_color_selection_dialog_buildable_get_internal_child): * gtk/gtkcombobox.c: (gtk_combo_box_buildable_init), (gtk_combo_box_buildable_custom_tag_start), (gtk_combo_box_buildable_custom_tag_end): * gtk/gtkcomboboxentry.c: (gtk_combo_box_entry_buildable_interface_init), (gtk_combo_box_entry_buildable_get_internal_child): * gtk/gtkcontainer.c: (gtk_container_get_type), (gtk_container_buildable_init), (gtk_container_buildable_add), (gtk_container_buildable_set_child_property), (attributes_start_element), (attributes_text_element), (gtk_container_buildable_custom_tag_start), (gtk_container_buildable_custom_tag_end): * gtk/gtkdebug.h: * gtk/gtkdialog.c: (gtk_dialog_buildable_interface_init), (gtk_dialog_buildable_get_internal_child), (attributes_start_element), (attributes_text_element), (gtk_dialog_buildable_custom_tag_start), (gtk_dialog_buildable_custom_finished): * gtk/gtkentrycompletion.c: (gtk_entry_completion_buildable_init): * gtk/gtkexpander.c: (gtk_expander_buildable_add), (gtk_expander_buildable_init): * gtk/gtkfontsel.c: (gtk_font_selection_dialog_buildable_interface_init), (gtk_font_selection_dialog_buildable_get_internal_child): * gtk/gtkframe.c: (gtk_frame_buildable_init), (gtk_frame_buildable_add): * gtk/gtkiconview.c: (gtk_icon_view_buildable_init), (gtk_icon_view_buildable_custom_tag_start), (gtk_icon_view_buildable_custom_tag_end): * gtk/gtkliststore.c: (gtk_list_store_buildable_init), (list_store_start_element), (list_store_end_element), (list_store_text), (gtk_list_store_buildable_custom_tag_start), (gtk_list_store_buildable_custom_tag_end): * gtk/gtkmain.c: * gtk/gtknotebook.c: (gtk_notebook_buildable_init), (gtk_notebook_buildable_add): * gtk/gtksizegroup.c: (gtk_size_group_buildable_init), (size_group_start_element), (gtk_size_group_buildable_custom_tag_start), (gtk_size_group_buildable_custom_finished): * gtk/gtktreestore.c: (gtk_tree_store_buildable_init), (tree_model_start_element), (gtk_tree_store_buildable_custom_tag_start), (gtk_tree_store_buildable_custom_finished): * gtk/gtktreeview.c: (gtk_tree_view_buildable_init), (gtk_tree_view_buildable_add): * gtk/gtktreeviewcolumn.c: (gtk_tree_view_column_buildable_init): * gtk/gtkuimanager.c: (gtk_ui_manager_buildable_init), (gtk_ui_manager_buildable_add), (gtk_ui_manager_buildable_construct_child), (gtk_ui_manager_buildable_custom_tag_start), (gtk_ui_manager_buildable_custom_tag_end): * gtk/gtkwidget.c: (gtk_widget_get_type), (gtk_widget_buildable_interface_init), (gtk_widget_buildable_set_name), (gtk_widget_buildable_get_name), (gtk_widget_buildable_set_property), (gtk_widget_buildable_parser_finshed), (accel_group_start_element), (gtk_widget_buildable_custom_tag_start), (gtk_widget_buildable_custom_finshed): * gtk/gtkwindow.c: (gtk_window_buildable_interface_init), (gtk_window_buildable_set_property), (gtk_window_buildable_parser_finished): * tests/Makefile.am: * tests/buildertest.c: (builder_new_from_string), (test_parser), (signal_normal), (signal_after), (signal_object), (signal_object_after), (signal_first), (signal_second), (signal_extra), (signal_extra2), (test_connect_signals), (test_uimanager_simple), (test_domain), (test_translation), (test_sizegroup), (test_list_store), (test_tree_store), (test_types), (test_spin_button), (test_notebook), (test_construct_only_property), (test_children), (test_child_properties), (test_treeview_column), (test_icon_view), (test_combo_box), (test_combo_box_entry), (test_cell_view), (test_dialog), (test_accelerators), (test_widget), (main): Add GtkBuilder, fixes #172535 svn path=/trunk/; revision=18141
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am7
-rw-r--r--tests/buildertest.c1462
2 files changed, 1468 insertions, 1 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 0f2a739eba..eed40262d8 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -24,11 +24,12 @@ if USE_X11
testsocket_programs = testsocket testsocket_child
endif
-TESTS = floatingtest
+TESTS = floatingtest buildertest
noinst_PROGRAMS = \
autotestfilechooser \
floatingtest \
+ buildertest \
simple \
print-editor \
testaccel \
@@ -91,6 +92,7 @@ noinst_PROGRAMS = \
autotestfilechooser_DEPENDENCIES = $(TEST_DEPS)
simple_DEPENDENCIES = $(TEST_DEPS)
floatingtest_DEPENDENCIES = $(TEST_DEPS)
+buildertest_DEPENDENCIES = $(TEST_DEPS)
print_editor_DEPENDENCIES = $(TEST_DEPS)
testicontheme_DEPENDENCIES = $(TEST_DEPS)
testiconview_DEPENDENCIES = $(TEST_DEPS)
@@ -146,6 +148,7 @@ testvolumebutton_DEPENDENCIES = $(TEST_DEPS)
autotestfilechooser_LDADD = $(LDADDS)
simple_LDADD = $(LDADDS)
floatingtest_LDADD = $(LDADDS)
+buildertest_LDADD = $(LDADDS)
print_editor_LDADD = $(LDADDS)
testaccel_LDADD = $(LDADDS)
testassistant_LDADD = $(LDADDS)
@@ -205,6 +208,8 @@ testgrouping_LDADD = $(LDADDS)
testtooltips_LDADD = $(LDADDS)
testvolumebutton_LDADD = $(LDADDS)
+buildertest_LDFLAGS = -export-dynamic
+
autotestfilechooser_SOURCES = \
autotestfilechooser.c
diff --git a/tests/buildertest.c b/tests/buildertest.c
new file mode 100644
index 0000000000..b5fbc6bf5b
--- /dev/null
+++ b/tests/buildertest.c
@@ -0,0 +1,1462 @@
+/* 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 <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkprintjob.h>
+
+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;
+}
+
+gboolean 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_return_val_if_fail (strcmp (error->message, "Invalid root element: 'xxx'") == 0, FALSE);
+ g_error_free (error);
+
+ error = NULL;
+ gtk_builder_add_from_string (builder, "<interface invalid=\"X\"/>", -1, &error);
+ g_assert (error != NULL);
+ g_return_val_if_fail (strcmp (error->message, "<input>:1:24 'X' is not a valid attribute of <interface>") == 0, FALSE);
+ g_error_free (error);
+
+ error = NULL;
+ gtk_builder_add_from_string (builder, "<interface><child/></interface>", -1, &error);
+ g_assert (error != NULL);
+ g_return_val_if_fail (strcmp (error->message, "<input>:1:19 'child' is not a valid tag here, expected a 'object' tag") == 0, FALSE);
+ 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_return_val_if_fail (strcmp (error->message, "<input>:1:74 'object' is not a valid tag here") == 0, FALSE);
+ g_error_free (error);
+
+ return TRUE;
+}
+
+ int normal;
+int after;
+int object;
+int object_after;
+
+void
+signal_normal (GtkWindow *window, GParamSpec spec)
+{
+ g_assert (GTK_IS_WINDOW (window));
+ g_assert (normal == 0);
+ g_assert (after == 0);
+
+ normal++;
+}
+
+void
+signal_after (GtkWindow *window, GParamSpec spec)
+{
+ g_assert (GTK_IS_WINDOW (window));
+ g_assert (normal == 1);
+ g_assert (after == 0);
+
+ after++;
+}
+
+void
+signal_object (GtkButton *button, GParamSpec spec)
+{
+ g_assert (GTK_IS_BUTTON (button));
+ g_assert (object == 0);
+ g_assert (object_after == 0);
+
+ object++;
+}
+
+void
+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
+signal_first (GtkButton *button, GParamSpec spec)
+{
+ g_assert (normal == 0);
+ normal = 10;
+}
+
+void
+signal_second (GtkButton *button, GParamSpec spec)
+{
+ g_assert (normal == 10);
+ normal = 20;
+}
+
+void
+signal_extra (GtkButton *button, GParamSpec spec)
+{
+ g_assert (normal == 20);
+ normal = 30;
+}
+
+void
+signal_extra2 (GtkButton *button, GParamSpec spec)
+{
+ g_assert (normal == 30);
+ normal = 40;
+}
+
+gboolean 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>";
+
+ 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_return_val_if_fail (normal == 1, FALSE);
+ g_return_val_if_fail (after == 1, FALSE);
+ g_return_val_if_fail (object == 1, FALSE);
+ g_return_val_if_fail (object_after == 1, FALSE);
+
+ 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_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);
+ window = gtk_builder_get_object (builder, "window3");
+ gtk_window_set_title (GTK_WINDOW (window), "test");
+ g_assert (normal == 40);
+
+ g_object_unref (builder);
+
+ return TRUE;
+}
+
+gboolean test_uimanager_simple (void)
+{
+ GtkBuilder *builder;
+ GObject *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>"
+ " </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_return_val_if_fail (uimgr != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_UI_MANAGER (uimgr), FALSE);
+
+ g_object_unref (builder);
+
+ builder = builder_new_from_string (buffer2, -1, NULL);
+
+ menubar = gtk_builder_get_object (builder, "menubar1");
+ g_return_val_if_fail (menubar != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_MENU_BAR (menubar), FALSE);
+
+ children = gtk_container_get_children (GTK_CONTAINER (menubar));
+ menu = children->data;
+ g_return_val_if_fail (menu != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_MENU_ITEM (menu), FALSE);
+ g_return_val_if_fail (strcmp (GTK_WIDGET (menu)->name, "file") == 0, FALSE);
+ g_list_free (children);
+
+ label = G_OBJECT (GTK_BIN (menu)->child);
+ g_return_val_if_fail (label != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
+ g_return_val_if_fail
+ (strcmp (gtk_label_get_text (GTK_LABEL (label)), "File") == 0, FALSE);
+
+ g_object_unref (builder);
+
+ return TRUE;
+}
+
+gboolean 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);
+ g_assert (strcmp (domain, "domain") == 0);
+ 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);
+
+ return TRUE;
+}
+
+#if 0
+gboolean 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 *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);
+ g_object_unref (builder);
+
+ return TRUE;
+}
+#endif
+
+gboolean 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_return_val_if_fail (g_slist_length (widgets) == 2, FALSE);
+ 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_return_val_if_fail (g_slist_length (widgets) == 0, FALSE);
+ 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_return_val_if_fail (g_slist_length (widgets) == 2, FALSE);
+ g_slist_free (widgets);
+ sizegroup = gtk_builder_get_object (builder, "sizegroup2");
+ widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup));
+ g_return_val_if_fail (g_slist_length (widgets) == 2, FALSE);
+ g_slist_free (widgets);
+ g_object_unref (builder);
+
+ return TRUE;
+}
+
+gboolean 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\">John</col>"
+ " <col id=\"1\">Doe</col>"
+ " <col id=\"2\">25</col>"
+ " </row>"
+ " <row>"
+ " <col id=\"0\">Johan</col>"
+ " <col id=\"1\">Dole</col>"
+ " <col id=\"2\">50</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_return_val_if_fail (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 2, FALSE);
+ g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING, FALSE);
+ g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_UINT, FALSE);
+ g_object_unref (builder);
+
+ builder = builder_new_from_string (buffer2, -1, NULL);
+ store = gtk_builder_get_object (builder, "liststore1");
+ g_return_val_if_fail (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 3, FALSE);
+ g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING, FALSE);
+ g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_STRING, FALSE);
+ g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 2) == G_TYPE_INT, FALSE);
+
+ g_return_val_if_fail (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter) == TRUE, FALSE);
+ gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
+ 0, &surname,
+ 1, &lastname,
+ 2, &age,
+ -1);
+ g_assert (surname != NULL);
+ g_return_val_if_fail (strcmp (surname, "John") == 0, FALSE);
+ g_free (surname);
+ g_assert (lastname != NULL);
+ g_return_val_if_fail (strcmp (lastname, "Doe") == 0, FALSE);
+ g_free (lastname);
+ g_return_val_if_fail (age == 25, FALSE);
+ g_return_val_if_fail (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == TRUE, FALSE);
+
+ gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
+ 0, &surname,
+ 1, &lastname,
+ 2, &age,
+ -1);
+ g_assert (surname != NULL);
+ g_return_val_if_fail (strcmp (surname, "Johan") == 0, FALSE);
+ g_free (surname);
+ g_assert (lastname != NULL);
+ g_return_val_if_fail (strcmp (lastname, "Dole") == 0, FALSE);
+ g_free (lastname);
+ g_return_val_if_fail (age == 50, FALSE);
+ g_return_val_if_fail (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == FALSE, FALSE);
+
+ g_object_unref (builder);
+
+ return TRUE;
+}
+
+gboolean 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_return_val_if_fail (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 2, FALSE);
+ g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING, FALSE);
+ g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_UINT, FALSE);
+
+ g_object_unref (builder);
+
+ return TRUE;
+}
+
+gboolean 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>";
+ GtkBuilder *builder;
+
+ builder = builder_new_from_string (buffer, -1, NULL);
+ g_object_unref (builder);
+
+ return TRUE;
+}
+
+gboolean 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_return_val_if_fail (value == 1, FALSE);
+ g_object_get (adjustment, "lower", &value, NULL);
+ g_return_val_if_fail (value == 0, FALSE);
+ g_object_get (adjustment, "upper", &value, NULL);
+ g_return_val_if_fail (value == 10, FALSE);
+ g_object_get (adjustment, "step-increment", &value, NULL);
+ g_return_val_if_fail (value == 2, FALSE);
+ g_object_get (adjustment, "page-increment", &value, NULL);
+ g_return_val_if_fail (value == 3, FALSE);
+ g_object_get (adjustment, "page-size", &value, NULL);
+ g_return_val_if_fail (value == 5, FALSE);
+
+ g_object_unref (builder);
+ return TRUE;
+}
+
+gboolean 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_return_val_if_fail (gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook)) == 2,
+ FALSE);
+
+ label = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 0);
+ g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
+ g_return_val_if_fail (strcmp (gtk_label_get_label (GTK_LABEL (label)),
+ "label1") == 0, FALSE);
+ label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), label);
+ g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
+ g_return_val_if_fail (strcmp (gtk_label_get_label (GTK_LABEL (label)),
+ "tab_label1") == 0, FALSE);
+
+ label = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 1);
+ g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
+ g_return_val_if_fail (strcmp (gtk_label_get_label (GTK_LABEL (label)),
+ "label2") == 0, FALSE);
+ label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), label);
+ g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
+ g_return_val_if_fail (strcmp (gtk_label_get_label (GTK_LABEL (label)),
+ "tab_label2") == 0, FALSE);
+
+ g_object_unref (builder);
+ return TRUE;
+}
+
+gboolean 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_return_val_if_fail (type == GTK_WINDOW_POPUP, FALSE);
+ g_object_unref (builder);
+
+ builder = builder_new_from_string (buffer2, -1, NULL);
+ textbuffer = gtk_builder_get_object (builder, "textbuffer1");
+ g_return_val_if_fail (textbuffer != NULL, FALSE);
+ g_object_get (textbuffer, "tag-table", &tagtable, NULL);
+ g_return_val_if_fail (tagtable == gtk_builder_get_object (builder, "tagtable1"), FALSE);
+ g_object_unref (builder);
+
+ return TRUE;
+}
+
+gboolean 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_return_val_if_fail (window != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
+
+ button = gtk_builder_get_object (builder, "button1");
+ g_return_val_if_fail (button != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_BUTTON (button), FALSE);
+ g_return_val_if_fail (strcmp (GTK_WIDGET (GTK_WIDGET (button)->parent)->name, "window1") == 0, FALSE);
+ g_object_unref (builder);
+
+ builder = builder_new_from_string (buffer2, -1, NULL);
+ dialog = gtk_builder_get_object (builder, "dialog1");
+ g_return_val_if_fail (dialog != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_DIALOG (dialog), FALSE);
+ children = gtk_container_get_children (GTK_CONTAINER (dialog));
+ g_return_val_if_fail (g_list_length (children) == 1, FALSE);
+ g_list_free (children);
+
+ vbox = gtk_builder_get_object (builder, "dialog1-vbox");
+ g_return_val_if_fail (vbox != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_VBOX (vbox), FALSE);
+ g_return_val_if_fail (GTK_WIDGET (vbox)->parent != NULL, FALSE);
+ g_return_val_if_fail (strcmp (GTK_WIDGET (GTK_WIDGET (vbox)->parent)->name, "dialog1") == 0, FALSE);
+ g_return_val_if_fail (GTK_CONTAINER (vbox)->border_width == 10, FALSE);
+ g_return_val_if_fail (strcmp (GTK_WIDGET (GTK_DIALOG (dialog)->vbox)->name,
+ "dialog1-vbox") == 0, FALSE);
+
+ action_area = gtk_builder_get_object (builder, "dialog1-action_area");
+ g_return_val_if_fail (action_area != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_HBUTTON_BOX (action_area), FALSE);
+ g_return_val_if_fail (GTK_WIDGET (action_area)->parent != NULL, FALSE);
+ g_return_val_if_fail (GTK_CONTAINER (action_area)->border_width == 20, FALSE);
+ g_return_val_if_fail (GTK_DIALOG (dialog)->action_area != NULL, FALSE);
+ g_return_val_if_fail (GTK_WIDGET (GTK_DIALOG (dialog)->action_area)->name != NULL, FALSE);
+ g_return_val_if_fail (strcmp (GTK_WIDGET (GTK_DIALOG (dialog)->action_area)->name,
+ "dialog1-action_area") == 0, FALSE);
+ g_object_unref (builder);
+
+ return TRUE;
+}
+
+gboolean 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_return_val_if_fail (GTK_IS_VBOX (vbox), FALSE);
+
+ label = gtk_builder_get_object (builder, "label1");
+ g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
+ gtk_container_child_get (GTK_CONTAINER (vbox),
+ GTK_WIDGET (label),
+ "pack-type",
+ &pack_type,
+ NULL);
+ g_return_val_if_fail (pack_type == GTK_PACK_START, FALSE);
+
+ label = gtk_builder_get_object (builder, "label2");
+ g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
+ gtk_container_child_get (GTK_CONTAINER (vbox),
+ GTK_WIDGET (label),
+ "pack-type",
+ &pack_type,
+ NULL);
+ g_return_val_if_fail (pack_type == GTK_PACK_END, FALSE);
+
+ g_object_unref (builder);
+
+ return TRUE;
+}
+
+gboolean 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 *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_return_val_if_fail (treeview, FALSE);
+ g_return_val_if_fail (GTK_IS_TREE_VIEW (treeview), FALSE);
+ column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), 0);
+ g_return_val_if_fail (strcmp (gtk_tree_view_column_get_title (column),
+ "Test") == 0, FALSE);
+
+ renderers = gtk_tree_view_column_get_cell_renderers (column);
+ g_return_val_if_fail (g_list_length (renderers) == 1, FALSE);
+ renderer = g_list_nth_data (renderers, 0);
+ g_return_val_if_fail (renderer, FALSE);
+ g_return_val_if_fail (GTK_IS_CELL_RENDERER_TEXT (renderer), FALSE);
+ 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_return_val_if_fail (strcmp (text, "25") == 0, FALSE);
+ g_free (text);
+
+ renderer = gtk_builder_get_object (builder, "renderer2");
+ g_object_get (renderer, "text", &text, NULL);
+ g_assert (text);
+ g_return_val_if_fail (strcmp (text, "John") == 0, FALSE);
+ g_free (text);
+
+ gtk_widget_unrealize (GTK_WIDGET (treeview));
+
+ g_object_unref (builder);
+ return TRUE;
+}
+
+gboolean 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 *iconview;
+ GObject *renderer;
+ gchar *text;
+
+ builder = builder_new_from_string (buffer, -1, NULL);
+ iconview = gtk_builder_get_object (builder, "iconview1");
+ g_return_val_if_fail (iconview, FALSE);
+ g_return_val_if_fail (GTK_IS_ICON_VIEW (iconview), FALSE);
+
+ gtk_widget_realize (GTK_WIDGET (iconview));
+
+ renderer = gtk_builder_get_object (builder, "renderer1");
+ g_object_get (renderer, "text", &text, NULL);
+ g_assert (text);
+ g_return_val_if_fail (strcmp (text, "test") == 0, FALSE);
+ g_free (text);
+
+ g_object_unref (builder);
+ return TRUE;
+}
+
+gboolean 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 *combobox;
+ GObject *renderer;
+ gchar *text;
+
+ builder = builder_new_from_string (buffer, -1, NULL);
+ combobox = gtk_builder_get_object (builder, "combobox1");
+ g_return_val_if_fail (combobox, FALSE);
+ 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_return_val_if_fail (strcmp (text, "Bar") == 0, FALSE);
+ g_free (text);
+
+ renderer = gtk_builder_get_object (builder, "renderer1");
+ g_assert (renderer);
+ g_object_get (renderer, "text", &text, NULL);
+ g_assert (text);
+ g_return_val_if_fail (strcmp (text, "2") == 0, FALSE);
+ g_free (text);
+
+ g_object_unref (builder);
+ return TRUE;
+}
+
+gboolean 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 *combobox;
+ GObject *renderer;
+ gchar *text;
+
+ builder = builder_new_from_string (buffer, -1, NULL);
+ combobox = gtk_builder_get_object (builder, "comboboxentry1");
+ g_return_val_if_fail (combobox, FALSE);
+
+ renderer = gtk_builder_get_object (builder, "renderer2");
+ g_assert (renderer);
+ g_object_get (renderer, "text", &text, NULL);
+ g_assert (text);
+ g_return_val_if_fail (strcmp (text, "Bar") == 0, FALSE);
+ g_free (text);
+
+ renderer = gtk_builder_get_object (builder, "renderer1");
+ g_assert (renderer);
+ g_object_get (renderer, "text", &text, NULL);
+ g_assert (text);
+ g_return_val_if_fail (strcmp (text, "2") == 0, FALSE);
+ g_free (text);
+
+ g_object_unref (builder);
+ return TRUE;
+}
+
+gboolean 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;
+ GtkTreePath *path;
+ GList *renderers;
+ GObject *renderer;
+ gchar *text;
+
+ builder = builder_new_from_string (buffer, -1, NULL);
+ g_assert (builder);
+ cellview = gtk_builder_get_object (builder, "cellview1");
+ g_assert (cellview);
+ g_return_val_if_fail (GTK_IS_CELL_VIEW (cellview), FALSE);
+ g_object_get (cellview, "model", &model, NULL);
+ g_assert (model);
+ g_return_val_if_fail (GTK_IS_TREE_MODEL (model), FALSE);
+ 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_return_val_if_fail (g_list_length (renderers) == 1, FALSE);
+
+ 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_return_val_if_fail (strcmp (text, "test") == 0, FALSE);
+ g_free (text);
+ gtk_tree_path_free (path);
+ g_object_unref (builder);
+ return TRUE;
+}
+
+gboolean 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_return_val_if_fail (gtk_dialog_get_response_for_widget
+ (GTK_DIALOG (dialog1),
+ GTK_WIDGET (button_ok)) == 3, FALSE);
+ button_cancel = gtk_builder_get_object (builder, "button_cancel");
+ g_return_val_if_fail (gtk_dialog_get_response_for_widget
+ (GTK_DIALOG (dialog1),
+ GTK_WIDGET (button_cancel)) == -5, FALSE);
+
+ g_object_unref (builder);
+
+ return TRUE;
+}
+
+gboolean 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_return_val_if_fail (g_slist_length (accel_groups) == 1, FALSE);
+ accel_group = g_slist_nth_data (accel_groups, 0);
+ g_assert (accel_group);
+
+ 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_return_val_if_fail (g_slist_length (accel_groups) == 1, FALSE);
+ accel_group = g_slist_nth_data (accel_groups, 0);
+ g_assert (accel_group);
+
+ g_object_unref (builder);
+ return TRUE;
+}
+
+gboolean 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>";
+ GtkBuilder *builder;
+ GObject *button1;
+
+ builder = builder_new_from_string (buffer, -1, NULL);
+ button1 = gtk_builder_get_object (builder, "button1");
+
+#if 0
+ g_return_val_if_fail (GTK_WIDGET_HAS_FOCUS (GTK_WIDGET (button1)), FALSE);
+#endif
+ g_object_unref (builder);
+
+ builder = builder_new_from_string (buffer2, -1, NULL);
+ button1 = gtk_builder_get_object (builder, "button1");
+
+ g_return_val_if_fail (GTK_WIDGET_RECEIVES_DEFAULT (GTK_WIDGET (button1)), FALSE);
+
+ g_object_unref (builder);
+ return TRUE;
+}
+
+int
+main (int argc, char **argv)
+{
+ gtk_init (&argc, &argv);
+
+ g_print ("Testing parser\n");
+ if (!test_parser ())
+ g_error ("test_parser failed");
+
+ g_print ("Testing types\n");
+ if (!test_types ())
+ g_error ("test_types failed");
+
+ g_print ("Testing construct-only property\n");
+ if (!test_construct_only_property ())
+ g_error ("test_construct_only_property failed");
+
+ g_print ("Testing children\n");
+ if (!test_children ())
+ g_error ("test_children failed");
+
+ g_print ("Testing child properties\n");
+ if (!test_child_properties ())
+ g_error ("test_child_properties failed");
+
+ g_print ("Testing notebook\n");
+ if (!test_notebook ())
+ g_error ("test_notebook failed");
+
+ g_print ("Testing domain\n");
+ if (!test_domain ())
+ g_error ("test_domain failed");
+
+ g_print ("Testing signal autoconnect\n");
+ if (!test_connect_signals ())
+ g_error ("test_connect_signals failed");
+
+ g_print ("Testing uimanager simple\n");
+ if (!test_uimanager_simple ())
+ g_error ("test_uimanager_simple failed");
+
+ g_print ("Testing spin button\n");
+ if (!test_spin_button ())
+ g_error ("test_spin_button failed");
+
+ g_print ("Testing sizegroup\n");
+ if (!test_sizegroup ())
+ g_error ("test_sizegroup failed");
+
+ g_print ("Testing list store\n");
+ if (!test_list_store ())
+ g_error ("test_list_store failed");
+
+ g_print ("Testing tree store\n");
+ if (!test_tree_store ())
+ g_error ("test_tree_store failed");
+
+ g_print ("Testing treeview column\n");
+ if (!test_treeview_column ())
+ g_error ("test_treeview_column failed");
+
+ g_print ("Testing iconview\n");
+ if (!test_icon_view ())
+ g_error ("test_icon_view failed");
+
+ g_print ("Testing combobox\n");
+ if (!test_combo_box ())
+ g_error ("test_combo_box failed");
+
+ g_print ("Testing combobox entry\n");
+ if (!test_combo_box_entry ())
+ g_error ("test_combo_box_entry failed");
+
+ g_print ("Testing cell view\n");
+ if (!test_cell_view ())
+ g_error ("test_cell_view failed");
+
+ g_print ("Testing dialog\n");
+ if (!test_dialog ())
+ g_error ("test_dialog failed");
+
+ g_print ("Testing accelerators\n");
+ if (!test_accelerators ())
+ g_error ("test_accelerators failed");
+
+ g_print ("Testing widget\n");
+ if (!test_widget ())
+ g_error ("test_widget failed");
+
+ return 0;
+}