2 * Copyright (C) 2006-2007 Async Open Source
3 * Authors: Johan Dahlin
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
16 * You should have received a copy of the GNU Library General Public
17 * License along with this library; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
28 #include <gdk/gdkkeysyms.h>
29 #include <gtk/gtkprintjob.h>
32 builder_new_from_string (const gchar *buffer,
37 builder = gtk_builder_new ();
39 gtk_builder_set_translation_domain (builder, domain);
40 gtk_builder_add_from_string (builder, buffer, length, NULL);
44 gboolean test_parser (void)
49 builder = gtk_builder_new ();
52 gtk_builder_add_from_string (builder, "<xxx/>", -1, &error);
53 g_assert (error != NULL);
54 g_return_val_if_fail (error->domain == GTK_BUILDER_ERROR, FALSE);
55 g_return_val_if_fail (error->code == GTK_BUILDER_ERROR_UNHANDLED_TAG, FALSE);
59 gtk_builder_add_from_string (builder, "<interface invalid=\"X\"/>", -1, &error);
60 g_assert (error != NULL);
61 g_return_val_if_fail (error->domain == GTK_BUILDER_ERROR, FALSE);
62 g_return_val_if_fail (error->code == GTK_BUILDER_ERROR_INVALID_ATTRIBUTE, FALSE);
66 gtk_builder_add_from_string (builder, "<interface><child/></interface>", -1, &error);
67 g_assert (error != NULL);
68 g_return_val_if_fail (error->domain == GTK_BUILDER_ERROR, FALSE);
69 g_return_val_if_fail (error->code == GTK_BUILDER_ERROR_INVALID_TAG, FALSE);
73 gtk_builder_add_from_string (builder, "<interface><object class=\"GtkVBox\" id=\"a\"><object class=\"GtkHBox\" id=\"b\"/></object></interface>", -1, &error);
74 g_assert (error != NULL);
75 g_return_val_if_fail (error->domain == GTK_BUILDER_ERROR, FALSE);
76 g_return_val_if_fail (error->code == GTK_BUILDER_ERROR_INVALID_TAG, FALSE);
80 gtk_builder_add_from_string (builder, "<interface><object class=\"GtkWindow\" id=\"a\"><property name=\"type\"/></object></interface>", -1, &error);
81 g_assert (error != NULL);
82 g_return_val_if_fail (error->domain == GTK_BUILDER_ERROR, FALSE);
83 g_return_val_if_fail (error->code == GTK_BUILDER_ERROR_MISSING_PROPERTY_VALUE, FALSE);
86 g_object_unref (builder);
97 signal_normal (GtkWindow *window, GParamSpec spec)
99 g_assert (GTK_IS_WINDOW (window));
100 g_assert (normal == 0);
101 g_assert (after == 0);
107 signal_after (GtkWindow *window, GParamSpec spec)
109 g_assert (GTK_IS_WINDOW (window));
110 g_assert (normal == 1);
111 g_assert (after == 0);
117 signal_object (GtkButton *button, GParamSpec spec)
119 g_assert (GTK_IS_BUTTON (button));
120 g_assert (object == 0);
121 g_assert (object_after == 0);
127 signal_object_after (GtkButton *button, GParamSpec spec)
129 g_assert (GTK_IS_BUTTON (button));
130 g_assert (object == 1);
131 g_assert (object_after == 0);
137 signal_first (GtkButton *button, GParamSpec spec)
139 g_assert (normal == 0);
144 signal_second (GtkButton *button, GParamSpec spec)
146 g_assert (normal == 10);
151 signal_extra (GtkButton *button, GParamSpec spec)
153 g_assert (normal == 20);
158 signal_extra2 (GtkButton *button, GParamSpec spec)
160 g_assert (normal == 30);
164 gboolean test_connect_signals (void)
168 const gchar buffer[] =
170 " <object class=\"GtkButton\" id=\"button\"/>"
171 " <object class=\"GtkWindow\" id=\"window1\">"
172 " <signal name=\"notify::title\" handler=\"signal_normal\"/>"
173 " <signal name=\"notify::title\" handler=\"signal_after\" after=\"yes\"/>"
174 " <signal name=\"notify::title\" handler=\"signal_object\""
175 " object=\"button\"/>"
176 " <signal name=\"notify::title\" handler=\"signal_object_after\""
177 " object=\"button\" after=\"yes\"/>"
180 const gchar buffer_order[] =
182 " <object class=\"GtkWindow\" id=\"window1\">"
183 " <signal name=\"notify::title\" handler=\"signal_first\"/>"
184 " <signal name=\"notify::title\" handler=\"signal_second\"/>"
187 const gchar buffer_extra[] =
189 " <object class=\"GtkWindow\" id=\"window2\">"
190 " <signal name=\"notify::title\" handler=\"signal_extra\"/>"
193 const gchar buffer_extra2[] =
195 " <object class=\"GtkWindow\" id=\"window3\">"
196 " <signal name=\"notify::title\" handler=\"signal_extra2\"/>"
200 builder = builder_new_from_string (buffer, -1, NULL);
201 gtk_builder_connect_signals (builder, NULL);
203 window = gtk_builder_get_object (builder, "window1");
204 gtk_window_set_title (GTK_WINDOW (window), "test");
206 g_return_val_if_fail (normal == 1, FALSE);
207 g_return_val_if_fail (after == 1, FALSE);
208 g_return_val_if_fail (object == 1, FALSE);
209 g_return_val_if_fail (object_after == 1, FALSE);
210 gtk_widget_destroy (GTK_WIDGET (window));
211 g_object_unref (builder);
213 builder = builder_new_from_string (buffer_order, -1, NULL);
214 gtk_builder_connect_signals (builder, NULL);
215 window = gtk_builder_get_object (builder, "window1");
217 gtk_window_set_title (GTK_WINDOW (window), "test");
218 g_assert (normal == 20);
220 gtk_widget_destroy (GTK_WIDGET (window));
222 gtk_builder_add_from_string (builder, buffer_extra,
223 strlen (buffer_extra), NULL);
224 gtk_builder_add_from_string (builder, buffer_extra2,
225 strlen (buffer_extra2), NULL);
226 gtk_builder_connect_signals (builder, NULL);
227 window = gtk_builder_get_object (builder, "window2");
228 gtk_window_set_title (GTK_WINDOW (window), "test");
229 g_assert (normal == 30);
231 gtk_widget_destroy (GTK_WIDGET (window));
232 window = gtk_builder_get_object (builder, "window3");
233 gtk_window_set_title (GTK_WINDOW (window), "test");
234 g_assert (normal == 40);
235 gtk_widget_destroy (GTK_WIDGET (window));
237 g_object_unref (builder);
242 gboolean test_uimanager_simple (void)
245 GObject *window, *uimgr, *menubar;
246 GObject *menu, *label;
248 const gchar buffer[] =
250 " <object class=\"GtkUIManager\" id=\"uimgr1\"/>"
253 const gchar buffer2[] =
255 " <object class=\"GtkUIManager\" id=\"uimgr1\">"
257 " <object class=\"GtkActionGroup\" id=\"ag1\">"
259 " <object class=\"GtkAction\" id=\"file\">"
260 " <property name=\"label\">_File</property>"
266 " <menubar name=\"menubar1\">"
267 " <menu action=\"file\">"
272 " <object class=\"GtkWindow\" id=\"window1\">"
274 " <object class=\"GtkMenuBar\" id=\"menubar1\" constructor=\"uimgr1\"/>"
279 builder = builder_new_from_string (buffer, -1, NULL);
281 uimgr = gtk_builder_get_object (builder, "uimgr1");
282 g_return_val_if_fail (uimgr != NULL, FALSE);
283 g_return_val_if_fail (GTK_IS_UI_MANAGER (uimgr), FALSE);
284 g_object_unref (builder);
286 builder = builder_new_from_string (buffer2, -1, NULL);
288 menubar = gtk_builder_get_object (builder, "menubar1");
289 g_return_val_if_fail (menubar != NULL, FALSE);
290 g_return_val_if_fail (GTK_IS_MENU_BAR (menubar), FALSE);
292 children = gtk_container_get_children (GTK_CONTAINER (menubar));
293 menu = children->data;
294 g_return_val_if_fail (menu != NULL, FALSE);
295 g_return_val_if_fail (GTK_IS_MENU_ITEM (menu), FALSE);
296 g_return_val_if_fail (strcmp (GTK_WIDGET (menu)->name, "file") == 0, FALSE);
297 g_list_free (children);
299 label = G_OBJECT (GTK_BIN (menu)->child);
300 g_return_val_if_fail (label != NULL, FALSE);
301 g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
303 (strcmp (gtk_label_get_text (GTK_LABEL (label)), "File") == 0, FALSE);
305 window = gtk_builder_get_object (builder, "window1");
306 gtk_widget_destroy (GTK_WIDGET (window));
307 g_object_unref (builder);
312 gboolean test_domain (void)
315 const gchar buffer1[] = "<interface/>";
316 const gchar buffer2[] = "<interface domain=\"domain\"/>";
319 builder = builder_new_from_string (buffer1, -1, NULL);
320 domain = gtk_builder_get_translation_domain (builder);
321 g_assert (domain == NULL);
322 g_object_unref (builder);
324 builder = builder_new_from_string (buffer1, -1, "domain-1");
325 domain = gtk_builder_get_translation_domain (builder);
327 g_assert (strcmp (domain, "domain-1") == 0);
328 g_object_unref (builder);
330 builder = builder_new_from_string (buffer2, -1, NULL);
331 domain = gtk_builder_get_translation_domain (builder);
333 g_assert (strcmp (domain, "domain") == 0);
334 g_object_unref (builder);
336 builder = builder_new_from_string (buffer2, -1, "domain-1");
337 domain = gtk_builder_get_translation_domain (builder);
339 g_assert (strcmp (domain, "domain-1") == 0);
340 g_object_unref (builder);
346 gboolean test_translation (void)
349 const gchar buffer[] =
351 " <object class=\"GtkWindow\" id=\"window1\">"
353 " <object class=\"GtkLabel\" id=\"label\">"
354 " <property name=\"label\" translatable=\"yes\">File</property>"
359 GtkLabel *window, *label;
361 setlocale (LC_ALL, "sv_SE");
362 textdomain ("builder");
363 bindtextdomain ("builder", "tests");
365 builder = builder_new_from_string (buffer, -1, NULL);
366 label = GTK_LABEL (gtk_builder_get_object (builder, "label"));
367 g_assert (strcmp (gtk_label_get_text (label), "Arkiv") == 0);
369 window = gtk_builder_get_object (builder, "window1");
370 gtk_widget_destroy (GTK_WIDGET (window));
371 g_object_unref (builder);
377 gboolean test_sizegroup (void)
379 GtkBuilder * builder;
380 const gchar buffer1[] =
381 "<interface domain=\"test\">"
382 " <object class=\"GtkSizeGroup\" id=\"sizegroup1\">"
383 " <property name=\"mode\">GTK_SIZE_GROUP_HORIZONTAL</property>"
385 " <widget name=\"radio1\"/>"
386 " <widget name=\"radio2\"/>"
389 " <object class=\"GtkWindow\" id=\"window1\">"
391 " <object class=\"GtkVBox\" id=\"vbox1\">"
393 " <object class=\"GtkRadioButton\" id=\"radio1\"/>"
396 " <object class=\"GtkRadioButton\" id=\"radio2\"/>"
402 const gchar buffer2[] =
403 "<interface domain=\"test\">"
404 " <object class=\"GtkSizeGroup\" id=\"sizegroup1\">"
405 " <property name=\"mode\">GTK_SIZE_GROUP_HORIZONTAL</property>"
410 const gchar buffer3[] =
411 "<interface domain=\"test\">"
412 " <object class=\"GtkSizeGroup\" id=\"sizegroup1\">"
413 " <property name=\"mode\">GTK_SIZE_GROUP_HORIZONTAL</property>"
415 " <widget name=\"radio1\"/>"
416 " <widget name=\"radio2\"/>"
419 " <object class=\"GtkSizeGroup\" id=\"sizegroup2\">"
420 " <property name=\"mode\">GTK_SIZE_GROUP_HORIZONTAL</property>"
422 " <widget name=\"radio1\"/>"
423 " <widget name=\"radio2\"/>"
426 " <object class=\"GtkWindow\" id=\"window1\">"
428 " <object class=\"GtkVBox\" id=\"vbox1\">"
430 " <object class=\"GtkRadioButton\" id=\"radio1\"/>"
433 " <object class=\"GtkRadioButton\" id=\"radio2\"/>"
442 builder = builder_new_from_string (buffer1, -1, NULL);
443 sizegroup = gtk_builder_get_object (builder, "sizegroup1");
444 widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup));
445 g_return_val_if_fail (g_slist_length (widgets) == 2, FALSE);
446 g_slist_free (widgets);
447 g_object_unref (builder);
449 builder = builder_new_from_string (buffer2, -1, NULL);
450 sizegroup = gtk_builder_get_object (builder, "sizegroup1");
451 widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup));
452 g_return_val_if_fail (g_slist_length (widgets) == 0, FALSE);
453 g_slist_free (widgets);
454 g_object_unref (builder);
456 builder = builder_new_from_string (buffer3, -1, NULL);
457 sizegroup = gtk_builder_get_object (builder, "sizegroup1");
458 widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup));
459 g_return_val_if_fail (g_slist_length (widgets) == 2, FALSE);
460 g_slist_free (widgets);
461 sizegroup = gtk_builder_get_object (builder, "sizegroup2");
462 widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup));
463 g_return_val_if_fail (g_slist_length (widgets) == 2, FALSE);
464 g_slist_free (widgets);
469 window = gtk_builder_get_object (builder, "window1");
470 gtk_widget_destroy (GTK_WIDGET (window));
473 g_object_unref (builder);
478 gboolean test_list_store (void)
480 const gchar buffer1[] =
482 " <object class=\"GtkListStore\" id=\"liststore1\">"
484 " <column type=\"gchararray\"/>"
485 " <column type=\"guint\"/>"
489 const char buffer2[] =
491 " <object class=\"GtkListStore\" id=\"liststore1\">"
493 " <column type=\"gchararray\"/>"
494 " <column type=\"gchararray\"/>"
495 " <column type=\"gint\"/>"
499 " <col id=\"0\">John</col>"
500 " <col id=\"1\">Doe</col>"
501 " <col id=\"2\">25</col>"
504 " <col id=\"0\">Johan</col>"
505 " <col id=\"1\">Dole</col>"
506 " <col id=\"2\">50</col>"
514 gchar *surname, *lastname;
517 builder = builder_new_from_string (buffer1, -1, NULL);
518 store = gtk_builder_get_object (builder, "liststore1");
519 g_return_val_if_fail (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 2, FALSE);
520 g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING, FALSE);
521 g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_UINT, FALSE);
522 g_object_unref (builder);
524 builder = builder_new_from_string (buffer2, -1, NULL);
525 store = gtk_builder_get_object (builder, "liststore1");
526 g_return_val_if_fail (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 3, FALSE);
527 g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING, FALSE);
528 g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_STRING, FALSE);
529 g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 2) == G_TYPE_INT, FALSE);
531 g_return_val_if_fail (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter) == TRUE, FALSE);
532 gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
537 g_assert (surname != NULL);
538 g_return_val_if_fail (strcmp (surname, "John") == 0, FALSE);
540 g_assert (lastname != NULL);
541 g_return_val_if_fail (strcmp (lastname, "Doe") == 0, FALSE);
543 g_return_val_if_fail (age == 25, FALSE);
544 g_return_val_if_fail (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == TRUE, FALSE);
546 gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
551 g_assert (surname != NULL);
552 g_return_val_if_fail (strcmp (surname, "Johan") == 0, FALSE);
554 g_assert (lastname != NULL);
555 g_return_val_if_fail (strcmp (lastname, "Dole") == 0, FALSE);
557 g_return_val_if_fail (age == 50, FALSE);
558 g_return_val_if_fail (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == FALSE, FALSE);
560 g_object_unref (builder);
565 gboolean test_tree_store (void)
567 const gchar buffer[] =
568 "<interface domain=\"test\">"
569 " <object class=\"GtkTreeStore\" id=\"treestore1\">"
571 " <column type=\"gchararray\"/>"
572 " <column type=\"guint\"/>"
579 builder = builder_new_from_string (buffer, -1, NULL);
580 store = gtk_builder_get_object (builder, "treestore1");
581 g_return_val_if_fail (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 2, FALSE);
582 g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING, FALSE);
583 g_return_val_if_fail (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_UINT, FALSE);
585 g_object_unref (builder);
590 gboolean test_types (void)
592 const gchar buffer[] =
594 " <object class=\"GtkAction\" id=\"action\"/>"
595 " <object class=\"GtkActionGroup\" id=\"actiongroup\"/>"
596 " <object class=\"GtkAlignment\" id=\"alignment\"/>"
597 " <object class=\"GtkArrow\" id=\"arrow\"/>"
598 " <object class=\"GtkButton\" id=\"button\"/>"
599 " <object class=\"GtkCheckButton\" id=\"checkbutton\"/>"
600 " <object class=\"GtkDialog\" id=\"dialog\"/>"
601 " <object class=\"GtkDrawingArea\" id=\"drawingarea\"/>"
602 " <object class=\"GtkEventBox\" id=\"eventbox\"/>"
603 " <object class=\"GtkEntry\" id=\"entry\"/>"
604 " <object class=\"GtkFontButton\" id=\"fontbutton\"/>"
605 " <object class=\"GtkHButtonBox\" id=\"hbuttonbox\"/>"
606 " <object class=\"GtkHBox\" id=\"hbox\"/>"
607 " <object class=\"GtkHPaned\" id=\"hpaned\"/>"
608 " <object class=\"GtkHRuler\" id=\"hruler\"/>"
609 " <object class=\"GtkHScale\" id=\"hscale\"/>"
610 " <object class=\"GtkHScrollbar\" id=\"hscrollbar\"/>"
611 " <object class=\"GtkHSeparator\" id=\"hseparator\"/>"
612 " <object class=\"GtkImage\" id=\"image\"/>"
613 " <object class=\"GtkLabel\" id=\"label\"/>"
614 " <object class=\"GtkListStore\" id=\"liststore\"/>"
615 " <object class=\"GtkMenuBar\" id=\"menubar\"/>"
616 " <object class=\"GtkNotebook\" id=\"notebook\"/>"
617 " <object class=\"GtkProgressBar\" id=\"progressbar\"/>"
618 " <object class=\"GtkRadioButton\" id=\"radiobutton\"/>"
619 " <object class=\"GtkSizeGroup\" id=\"sizegroup\"/>"
620 " <object class=\"GtkScrolledWindow\" id=\"scrolledwindow\"/>"
621 " <object class=\"GtkSpinButton\" id=\"spinbutton\"/>"
622 " <object class=\"GtkStatusbar\" id=\"statusbar\"/>"
623 " <object class=\"GtkTextView\" id=\"textview\"/>"
624 " <object class=\"GtkToggleAction\" id=\"toggleaction\"/>"
625 " <object class=\"GtkToggleButton\" id=\"togglebutton\"/>"
626 " <object class=\"GtkToolbar\" id=\"toolbar\"/>"
627 " <object class=\"GtkTreeStore\" id=\"treestore\"/>"
628 " <object class=\"GtkTreeView\" id=\"treeview\"/>"
629 " <object class=\"GtkTable\" id=\"table\"/>"
630 " <object class=\"GtkVBox\" id=\"vbox\"/>"
631 " <object class=\"GtkVButtonBox\" id=\"vbuttonbox\"/>"
632 " <object class=\"GtkVScrollbar\" id=\"vscrollbar\"/>"
633 " <object class=\"GtkVSeparator\" id=\"vseparator\"/>"
634 " <object class=\"GtkViewport\" id=\"viewport\"/>"
635 " <object class=\"GtkVRuler\" id=\"vruler\"/>"
636 " <object class=\"GtkVPaned\" id=\"vpaned\"/>"
637 " <object class=\"GtkVScale\" id=\"vscale\"/>"
638 " <object class=\"GtkWindow\" id=\"window\"/>"
639 " <object class=\"GtkUIManager\" id=\"uimanager\"/>"
641 const gchar buffer2[] =
643 " <object type-func=\"gtk_window_get_type\" id=\"window\"/>"
645 const gchar buffer3[] =
647 " <object type-func=\"xxx_invalid_get_type_function\" id=\"window\"/>"
653 builder = builder_new_from_string (buffer, -1, NULL);
654 gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "dialog")));
655 gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "window")));
656 g_object_unref (builder);
658 builder = builder_new_from_string (buffer2, -1, NULL);
659 window = gtk_builder_get_object (builder, "window");
660 g_assert (window != NULL);
661 g_assert (GTK_IS_WINDOW (window));
662 gtk_widget_destroy (GTK_WIDGET (window));
663 g_object_unref (builder);
666 builder = gtk_builder_new ();
667 gtk_builder_add_from_string (builder, buffer3, -1, &error);
668 g_assert (error != NULL);
669 g_return_val_if_fail (error->domain == GTK_BUILDER_ERROR, FALSE);
670 g_return_val_if_fail (error->code == GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION, FALSE);
671 g_error_free (error);
672 g_object_unref (builder);
677 gboolean test_spin_button (void)
680 const gchar buffer[] =
682 "<object class=\"GtkAdjustment\" id=\"adjustment1\">"
683 "<property name=\"lower\">0</property>"
684 "<property name=\"upper\">10</property>"
685 "<property name=\"step-increment\">2</property>"
686 "<property name=\"page-increment\">3</property>"
687 "<property name=\"page-size\">5</property>"
688 "<property name=\"value\">1</property>"
690 "<object class=\"GtkSpinButton\" id=\"spinbutton1\">"
691 "<property name=\"visible\">True</property>"
692 "<property name=\"adjustment\">adjustment1</property>"
696 GtkAdjustment *adjustment;
699 builder = builder_new_from_string (buffer, -1, NULL);
700 object = gtk_builder_get_object (builder, "spinbutton1");
701 g_assert (GTK_IS_SPIN_BUTTON (object));
702 adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (object));
703 g_assert (GTK_IS_ADJUSTMENT (adjustment));
704 g_object_get (adjustment, "value", &value, NULL);
705 g_return_val_if_fail (value == 1, FALSE);
706 g_object_get (adjustment, "lower", &value, NULL);
707 g_return_val_if_fail (value == 0, FALSE);
708 g_object_get (adjustment, "upper", &value, NULL);
709 g_return_val_if_fail (value == 10, FALSE);
710 g_object_get (adjustment, "step-increment", &value, NULL);
711 g_return_val_if_fail (value == 2, FALSE);
712 g_object_get (adjustment, "page-increment", &value, NULL);
713 g_return_val_if_fail (value == 3, FALSE);
714 g_object_get (adjustment, "page-size", &value, NULL);
715 g_return_val_if_fail (value == 5, FALSE);
717 g_object_unref (builder);
721 gboolean test_notebook (void)
724 const gchar buffer[] =
726 " <object class=\"GtkNotebook\" id=\"notebook1\">"
728 " <object class=\"GtkLabel\" id=\"label1\">"
729 " <property name=\"label\">label1</property>"
732 " <child type=\"tab\">"
733 " <object class=\"GtkLabel\" id=\"tablabel1\">"
734 " <property name=\"label\">tab_label1</property>"
738 " <object class=\"GtkLabel\" id=\"label2\">"
739 " <property name=\"label\">label2</property>"
742 " <child type=\"tab\">"
743 " <object class=\"GtkLabel\" id=\"tablabel2\">"
744 " <property name=\"label\">tab_label2</property>"
752 builder = builder_new_from_string (buffer, -1, NULL);
753 notebook = gtk_builder_get_object (builder, "notebook1");
754 g_assert (notebook != NULL);
755 g_return_val_if_fail (gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook)) == 2,
758 label = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 0);
759 g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
760 g_return_val_if_fail (strcmp (gtk_label_get_label (GTK_LABEL (label)),
761 "label1") == 0, FALSE);
762 label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), label);
763 g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
764 g_return_val_if_fail (strcmp (gtk_label_get_label (GTK_LABEL (label)),
765 "tab_label1") == 0, FALSE);
767 label = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 1);
768 g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
769 g_return_val_if_fail (strcmp (gtk_label_get_label (GTK_LABEL (label)),
770 "label2") == 0, FALSE);
771 label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), label);
772 g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
773 g_return_val_if_fail (strcmp (gtk_label_get_label (GTK_LABEL (label)),
774 "tab_label2") == 0, FALSE);
776 g_object_unref (builder);
780 gboolean test_construct_only_property (void)
783 const gchar buffer[] =
785 " <object class=\"GtkWindow\" id=\"window1\">"
786 " <property name=\"type\">GTK_WINDOW_POPUP</property>"
789 const gchar buffer2[] =
791 " <object class=\"GtkTextTagTable\" id=\"tagtable1\"/>"
792 " <object class=\"GtkTextBuffer\" id=\"textbuffer1\">"
793 " <property name=\"tag-table\">tagtable1</property>"
796 GObject *widget, *tagtable, *textbuffer;
799 builder = builder_new_from_string (buffer, -1, NULL);
800 widget = gtk_builder_get_object (builder, "window1");
801 g_object_get (widget, "type", &type, NULL);
802 g_return_val_if_fail (type == GTK_WINDOW_POPUP, FALSE);
804 gtk_widget_destroy (GTK_WIDGET (widget));
805 g_object_unref (builder);
807 builder = builder_new_from_string (buffer2, -1, NULL);
808 textbuffer = gtk_builder_get_object (builder, "textbuffer1");
809 g_return_val_if_fail (textbuffer != NULL, FALSE);
810 g_object_get (textbuffer, "tag-table", &tagtable, NULL);
811 g_return_val_if_fail (tagtable == gtk_builder_get_object (builder, "tagtable1"), FALSE);
812 g_object_unref (tagtable);
813 g_object_unref (builder);
818 gboolean test_object_properties (void)
821 const gchar buffer[] =
823 " <object class=\"GtkWindow\" id=\"window1\">"
825 " <object class=\"GtkVBox\" id=\"vbox\">"
826 " <property name=\"border-width\">10</property>"
828 " <object class=\"GtkLabel\" id=\"label1\">"
829 " <property name=\"mnemonic-widget\">spinbutton1</property>"
833 " <object class=\"GtkSpinButton\" id=\"spinbutton1\"/>"
839 GObject *label, *spinbutton;
841 builder = builder_new_from_string (buffer, -1, NULL);
842 label = gtk_builder_get_object (builder, "label1");
843 g_return_val_if_fail (label != NULL, FALSE);
844 spinbutton = gtk_builder_get_object (builder, "spinbutton1");
845 g_return_val_if_fail (spinbutton != NULL, FALSE);
846 g_return_val_if_fail (spinbutton == (GObject*)gtk_label_get_mnemonic_widget (GTK_LABEL (label)), FALSE);
848 g_object_unref (builder);
853 gboolean test_children (void)
855 GtkBuilder * builder;
857 const gchar buffer1[] =
859 " <object class=\"GtkWindow\" id=\"window1\">"
861 " <object class=\"GtkButton\" id=\"button1\">"
862 " <property name=\"label\">Hello</property>"
867 const gchar buffer2[] =
869 " <object class=\"GtkDialog\" id=\"dialog1\">"
870 " <child internal-child=\"vbox\">"
871 " <object class=\"GtkVBox\" id=\"dialog1-vbox\">"
872 " <property name=\"border-width\">10</property>"
873 " <child internal-child=\"action_area\">"
874 " <object class=\"GtkHButtonBox\" id=\"dialog1-action_area\">"
875 " <property name=\"border-width\">20</property>"
883 GObject *window, *button;
884 GObject *dialog, *vbox, *action_area;
886 builder = builder_new_from_string (buffer1, -1, NULL);
887 window = gtk_builder_get_object (builder, "window1");
888 g_return_val_if_fail (window != NULL, FALSE);
889 g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
891 button = gtk_builder_get_object (builder, "button1");
892 g_return_val_if_fail (button != NULL, FALSE);
893 g_return_val_if_fail (GTK_IS_BUTTON (button), FALSE);
894 g_return_val_if_fail (strcmp (GTK_WIDGET (GTK_WIDGET (button)->parent)->name, "window1") == 0, FALSE);
896 gtk_widget_destroy (GTK_WIDGET (window));
897 g_object_unref (builder);
899 builder = builder_new_from_string (buffer2, -1, NULL);
900 dialog = gtk_builder_get_object (builder, "dialog1");
901 g_return_val_if_fail (dialog != NULL, FALSE);
902 g_return_val_if_fail (GTK_IS_DIALOG (dialog), FALSE);
903 children = gtk_container_get_children (GTK_CONTAINER (dialog));
904 g_return_val_if_fail (g_list_length (children) == 1, FALSE);
905 g_list_free (children);
907 vbox = gtk_builder_get_object (builder, "dialog1-vbox");
908 g_return_val_if_fail (vbox != NULL, FALSE);
909 g_return_val_if_fail (GTK_IS_VBOX (vbox), FALSE);
910 g_return_val_if_fail (GTK_WIDGET (vbox)->parent != NULL, FALSE);
911 g_return_val_if_fail (strcmp (GTK_WIDGET (GTK_WIDGET (vbox)->parent)->name, "dialog1") == 0, FALSE);
912 g_return_val_if_fail (GTK_CONTAINER (vbox)->border_width == 10, FALSE);
913 g_return_val_if_fail (strcmp (GTK_WIDGET (GTK_DIALOG (dialog)->vbox)->name,
914 "dialog1-vbox") == 0, FALSE);
916 action_area = gtk_builder_get_object (builder, "dialog1-action_area");
917 g_return_val_if_fail (action_area != NULL, FALSE);
918 g_return_val_if_fail (GTK_IS_HBUTTON_BOX (action_area), FALSE);
919 g_return_val_if_fail (GTK_WIDGET (action_area)->parent != NULL, FALSE);
920 g_return_val_if_fail (GTK_CONTAINER (action_area)->border_width == 20, FALSE);
921 g_return_val_if_fail (GTK_DIALOG (dialog)->action_area != NULL, FALSE);
922 g_return_val_if_fail (GTK_WIDGET (GTK_DIALOG (dialog)->action_area)->name != NULL, FALSE);
923 g_return_val_if_fail (strcmp (GTK_WIDGET (GTK_DIALOG (dialog)->action_area)->name,
924 "dialog1-action_area") == 0, FALSE);
925 gtk_widget_destroy (GTK_WIDGET (dialog));
926 g_object_unref (builder);
931 gboolean test_child_properties (void)
933 GtkBuilder * builder;
934 const gchar buffer1[] =
936 " <object class=\"GtkVBox\" id=\"vbox1\">"
938 " <object class=\"GtkLabel\" id=\"label1\"/>"
940 " <property name=\"pack-type\">start</property>"
944 " <object class=\"GtkLabel\" id=\"label2\"/>"
946 " <property name=\"pack-type\">end</property>"
952 GObject *label, *vbox;
953 GtkPackType pack_type;
955 builder = builder_new_from_string (buffer1, -1, NULL);
956 vbox = gtk_builder_get_object (builder, "vbox1");
957 g_return_val_if_fail (GTK_IS_VBOX (vbox), FALSE);
959 label = gtk_builder_get_object (builder, "label1");
960 g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
961 gtk_container_child_get (GTK_CONTAINER (vbox),
966 g_return_val_if_fail (pack_type == GTK_PACK_START, FALSE);
968 label = gtk_builder_get_object (builder, "label2");
969 g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
970 gtk_container_child_get (GTK_CONTAINER (vbox),
975 g_return_val_if_fail (pack_type == GTK_PACK_END, FALSE);
977 g_object_unref (builder);
982 gboolean test_treeview_column (void)
985 const gchar buffer[] =
987 "<object class=\"GtkListStore\" id=\"liststore1\">"
989 " <column type=\"gchararray\"/>"
990 " <column type=\"guint\"/>"
994 " <col id=\"0\">John</col>"
995 " <col id=\"1\">25</col>"
999 "<object class=\"GtkWindow\" id=\"window1\">"
1001 " <object class=\"GtkTreeView\" id=\"treeview1\">"
1002 " <property name=\"visible\">True</property>"
1003 " <property name=\"model\">liststore1</property>"
1005 " <object class=\"GtkTreeViewColumn\" id=\"column1\">"
1006 " <property name=\"title\">Test</property>"
1008 " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>"
1010 " <attribute name=\"text\">1</attribute>"
1016 " <object class=\"GtkTreeViewColumn\" id=\"column2\">"
1017 " <property name=\"title\">Number</property>"
1019 " <object class=\"GtkCellRendererText\" id=\"renderer2\"/>"
1021 " <attribute name=\"text\">0</attribute>"
1030 GObject *window, *treeview;
1031 GtkTreeViewColumn *column;
1036 builder = builder_new_from_string (buffer, -1, NULL);
1037 treeview = gtk_builder_get_object (builder, "treeview1");
1038 g_return_val_if_fail (treeview, FALSE);
1039 g_return_val_if_fail (GTK_IS_TREE_VIEW (treeview), FALSE);
1040 column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), 0);
1041 g_return_val_if_fail (strcmp (gtk_tree_view_column_get_title (column),
1042 "Test") == 0, FALSE);
1044 renderers = gtk_tree_view_column_get_cell_renderers (column);
1045 g_return_val_if_fail (g_list_length (renderers) == 1, FALSE);
1046 renderer = g_list_nth_data (renderers, 0);
1047 g_return_val_if_fail (renderer, FALSE);
1048 g_return_val_if_fail (GTK_IS_CELL_RENDERER_TEXT (renderer), FALSE);
1049 g_list_free (renderers);
1051 gtk_widget_realize (GTK_WIDGET (treeview));
1053 renderer = gtk_builder_get_object (builder, "renderer1");
1054 g_object_get (renderer, "text", &text, NULL);
1056 g_return_val_if_fail (strcmp (text, "25") == 0, FALSE);
1059 renderer = gtk_builder_get_object (builder, "renderer2");
1060 g_object_get (renderer, "text", &text, NULL);
1062 g_return_val_if_fail (strcmp (text, "John") == 0, FALSE);
1065 gtk_widget_unrealize (GTK_WIDGET (treeview));
1067 window = gtk_builder_get_object (builder, "window1");
1068 gtk_widget_destroy (GTK_WIDGET (window));
1070 g_object_unref (builder);
1074 gboolean test_icon_view (void)
1076 GtkBuilder *builder;
1077 const gchar buffer[] =
1079 " <object class=\"GtkListStore\" id=\"liststore1\">"
1081 " <column type=\"gchararray\"/>"
1082 " <column type=\"GdkPixbuf\"/>"
1086 " <col id=\"0\">test</col>"
1090 " <object class=\"GtkWindow\" id=\"window1\">"
1092 " <object class=\"GtkIconView\" id=\"iconview1\">"
1093 " <property name=\"model\">liststore1</property>"
1094 " <property name=\"text-column\">0</property>"
1095 " <property name=\"pixbuf-column\">1</property>"
1096 " <property name=\"visible\">True</property>"
1098 " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>"
1100 " <attribute name=\"text\">0</attribute>"
1107 GObject *window, *iconview, *renderer;
1110 builder = builder_new_from_string (buffer, -1, NULL);
1111 iconview = gtk_builder_get_object (builder, "iconview1");
1112 g_return_val_if_fail (iconview, FALSE);
1113 g_return_val_if_fail (GTK_IS_ICON_VIEW (iconview), FALSE);
1115 gtk_widget_realize (GTK_WIDGET (iconview));
1117 renderer = gtk_builder_get_object (builder, "renderer1");
1118 g_object_get (renderer, "text", &text, NULL);
1120 g_return_val_if_fail (strcmp (text, "test") == 0, FALSE);
1123 window = gtk_builder_get_object (builder, "window1");
1124 gtk_widget_destroy (GTK_WIDGET (window));
1125 g_object_unref (builder);
1129 gboolean test_combo_box (void)
1131 GtkBuilder *builder;
1132 const gchar buffer[] =
1134 " <object class=\"GtkListStore\" id=\"liststore1\">"
1136 " <column type=\"guint\"/>"
1137 " <column type=\"gchararray\"/>"
1141 " <col id=\"0\">1</col>"
1142 " <col id=\"1\">Foo</col>"
1145 " <col id=\"0\">2</col>"
1146 " <col id=\"1\">Bar</col>"
1150 " <object class=\"GtkWindow\" id=\"window1\">"
1152 " <object class=\"GtkComboBox\" id=\"combobox1\">"
1153 " <property name=\"model\">liststore1</property>"
1154 " <property name=\"visible\">True</property>"
1156 " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>"
1158 " <attribute name=\"text\">0</attribute>"
1162 " <object class=\"GtkCellRendererText\" id=\"renderer2\"/>"
1164 " <attribute name=\"text\">1</attribute>"
1171 GObject *window, *combobox, *renderer;
1174 builder = builder_new_from_string (buffer, -1, NULL);
1175 combobox = gtk_builder_get_object (builder, "combobox1");
1176 g_return_val_if_fail (combobox, FALSE);
1177 gtk_widget_realize (GTK_WIDGET (combobox));
1179 renderer = gtk_builder_get_object (builder, "renderer2");
1180 g_assert (renderer);
1181 g_object_get (renderer, "text", &text, NULL);
1183 g_return_val_if_fail (strcmp (text, "Bar") == 0, FALSE);
1186 renderer = gtk_builder_get_object (builder, "renderer1");
1187 g_assert (renderer);
1188 g_object_get (renderer, "text", &text, NULL);
1190 g_return_val_if_fail (strcmp (text, "2") == 0, FALSE);
1193 window = gtk_builder_get_object (builder, "window1");
1194 gtk_widget_destroy (GTK_WIDGET (window));
1196 g_object_unref (builder);
1200 gboolean test_combo_box_entry (void)
1202 GtkBuilder *builder;
1203 const gchar buffer[] =
1205 " <object class=\"GtkListStore\" id=\"liststore1\">"
1207 " <column type=\"guint\"/>"
1208 " <column type=\"gchararray\"/>"
1212 " <col id=\"0\">1</col>"
1213 " <col id=\"1\">Foo</col>"
1216 " <col id=\"0\">2</col>"
1217 " <col id=\"1\">Bar</col>"
1221 " <object class=\"GtkWindow\" id=\"window1\">"
1223 " <object class=\"GtkComboBoxEntry\" id=\"comboboxentry1\">"
1224 " <property name=\"model\">liststore1</property>"
1225 " <property name=\"visible\">True</property>"
1227 " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>"
1229 " <attribute name=\"text\">0</attribute>"
1233 " <object class=\"GtkCellRendererText\" id=\"renderer2\"/>"
1235 " <attribute name=\"text\">1</attribute>"
1242 GObject *window, *combobox, *renderer;
1245 builder = builder_new_from_string (buffer, -1, NULL);
1246 combobox = gtk_builder_get_object (builder, "comboboxentry1");
1247 g_return_val_if_fail (combobox, FALSE);
1249 renderer = gtk_builder_get_object (builder, "renderer2");
1250 g_assert (renderer);
1251 g_object_get (renderer, "text", &text, NULL);
1253 g_return_val_if_fail (strcmp (text, "Bar") == 0, FALSE);
1256 renderer = gtk_builder_get_object (builder, "renderer1");
1257 g_assert (renderer);
1258 g_object_get (renderer, "text", &text, NULL);
1260 g_return_val_if_fail (strcmp (text, "2") == 0, FALSE);
1263 window = gtk_builder_get_object (builder, "window1");
1264 gtk_widget_destroy (GTK_WIDGET (window));
1266 g_object_unref (builder);
1270 gboolean test_cell_view (void)
1272 GtkBuilder *builder;
1275 " <object class=\"GtkListStore\" id=\"liststore1\">"
1277 " <column type=\"gchararray\"/>"
1281 " <col id=\"0\">test</col>"
1285 " <object class=\"GtkWindow\" id=\"window1\">"
1287 " <object class=\"GtkCellView\" id=\"cellview1\">"
1288 " <property name=\"visible\">True</property>"
1289 " <property name=\"model\">liststore1</property>"
1291 " <object class=\"GtkCellRendererText\" id=\"renderer1\"/>"
1293 " <attribute name=\"text\">0</attribute>"
1301 GObject *model, *window;
1307 builder = builder_new_from_string (buffer, -1, NULL);
1308 cellview = gtk_builder_get_object (builder, "cellview1");
1310 g_assert (cellview);
1311 g_return_val_if_fail (GTK_IS_CELL_VIEW (cellview), FALSE);
1312 g_object_get (cellview, "model", &model, NULL);
1314 g_return_val_if_fail (GTK_IS_TREE_MODEL (model), FALSE);
1315 g_object_unref (model);
1316 path = gtk_tree_path_new_first ();
1317 gtk_cell_view_set_displayed_row (GTK_CELL_VIEW (cellview), path);
1319 renderers = gtk_cell_view_get_cell_renderers (GTK_CELL_VIEW (cellview));
1320 g_assert (renderers);
1321 g_return_val_if_fail (g_list_length (renderers) == 1, FALSE);
1323 gtk_widget_realize (GTK_WIDGET (cellview));
1325 renderer = g_list_nth_data (renderers, 0);
1326 g_list_free (renderers);
1327 g_assert (renderer);
1328 g_object_get (renderer, "text", &text, NULL);
1329 g_return_val_if_fail (strcmp (text, "test") == 0, FALSE);
1331 gtk_tree_path_free (path);
1333 window = gtk_builder_get_object (builder, "window1");
1334 gtk_widget_destroy (GTK_WIDGET (window));
1336 g_object_unref (builder);
1340 gboolean test_dialog (void)
1342 GtkBuilder * builder;
1343 const gchar buffer1[] =
1345 " <object class=\"GtkDialog\" id=\"dialog1\">"
1346 " <child internal-child=\"vbox\">"
1347 " <object class=\"GtkVBox\" id=\"dialog1-vbox\">"
1348 " <child internal-child=\"action_area\">"
1349 " <object class=\"GtkHButtonBox\" id=\"dialog1-action_area\">"
1351 " <object class=\"GtkButton\" id=\"button_cancel\"/>"
1354 " <object class=\"GtkButton\" id=\"button_ok\"/>"
1361 " <action-widget response=\"3\">button_ok</action-widget>"
1362 " <action-widget response=\"-5\">button_cancel</action-widget>"
1363 " </action-widgets>"
1369 GObject *button_cancel;
1371 builder = builder_new_from_string (buffer1, -1, NULL);
1372 dialog1 = gtk_builder_get_object (builder, "dialog1");
1373 button_ok = gtk_builder_get_object (builder, "button_ok");
1374 g_return_val_if_fail (gtk_dialog_get_response_for_widget
1375 (GTK_DIALOG (dialog1),
1376 GTK_WIDGET (button_ok)) == 3, FALSE);
1377 button_cancel = gtk_builder_get_object (builder, "button_cancel");
1378 g_return_val_if_fail (gtk_dialog_get_response_for_widget
1379 (GTK_DIALOG (dialog1),
1380 GTK_WIDGET (button_cancel)) == -5, FALSE);
1382 gtk_widget_destroy (GTK_WIDGET (dialog1));
1383 g_object_unref (builder);
1388 gboolean test_accelerators (void)
1390 GtkBuilder *builder;
1393 " <object class=\"GtkWindow\" id=\"window1\">"
1395 " <object class=\"GtkButton\" id=\"button1\">"
1396 " <accelerator key=\"q\" modifiers=\"GDK_CONTROL_MASK\" signal=\"clicked\"/>"
1403 " <object class=\"GtkWindow\" id=\"window1\">"
1405 " <object class=\"GtkTreeView\" id=\"treeview1\">"
1406 " <signal name=\"cursor-changed\" handler=\"gtk_main_quit\"/>"
1407 " <accelerator key=\"f\" modifiers=\"GDK_CONTROL_MASK\" signal=\"grab_focus\"/>"
1413 GSList *accel_groups;
1414 GObject *accel_group;
1416 builder = builder_new_from_string (buffer, -1, NULL);
1417 window1 = gtk_builder_get_object (builder, "window1");
1419 g_assert (GTK_IS_WINDOW (window1));
1421 accel_groups = gtk_accel_groups_from_object (window1);
1422 g_return_val_if_fail (g_slist_length (accel_groups) == 1, FALSE);
1423 accel_group = g_slist_nth_data (accel_groups, 0);
1424 g_assert (accel_group);
1426 gtk_widget_destroy (GTK_WIDGET (window1));
1427 g_object_unref (builder);
1429 builder = builder_new_from_string (buffer2, -1, NULL);
1430 window1 = gtk_builder_get_object (builder, "window1");
1432 g_assert (GTK_IS_WINDOW (window1));
1434 accel_groups = gtk_accel_groups_from_object (window1);
1435 g_return_val_if_fail (g_slist_length (accel_groups) == 1, FALSE);
1436 accel_group = g_slist_nth_data (accel_groups, 0);
1437 g_assert (accel_group);
1439 gtk_widget_destroy (GTK_WIDGET (window1));
1440 g_object_unref (builder);
1444 gboolean test_widget (void)
1448 " <object class=\"GtkWindow\" id=\"window1\">"
1450 " <object class=\"GtkButton\" id=\"button1\">"
1451 " <property name=\"can-focus\">True</property>"
1452 " <property name=\"has-focus\">True</property>"
1459 " <object class=\"GtkWindow\" id=\"window1\">"
1461 " <object class=\"GtkButton\" id=\"button1\">"
1462 " <property name=\"can-default\">True</property>"
1463 " <property name=\"has-default\">True</property>"
1468 GtkBuilder *builder;
1469 GObject *window1, *button1;
1471 builder = builder_new_from_string (buffer, -1, NULL);
1472 button1 = gtk_builder_get_object (builder, "button1");
1475 g_return_val_if_fail (GTK_WIDGET_HAS_FOCUS (GTK_WIDGET (button1)), FALSE);
1477 window1 = gtk_builder_get_object (builder, "window1");
1478 gtk_widget_destroy (GTK_WIDGET (window1));
1480 g_object_unref (builder);
1482 builder = builder_new_from_string (buffer2, -1, NULL);
1483 button1 = gtk_builder_get_object (builder, "button1");
1485 g_return_val_if_fail (GTK_WIDGET_RECEIVES_DEFAULT (GTK_WIDGET (button1)), FALSE);
1487 window1 = gtk_builder_get_object (builder, "window1");
1488 gtk_widget_destroy (GTK_WIDGET (window1));
1489 g_object_unref (builder);
1494 test_value_from_string (void)
1496 GValue value = { 0 };
1497 GError *error = NULL;
1498 GtkBuilder *builder;
1500 builder = gtk_builder_new ();
1502 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_STRING, "test", &value, &error), FALSE);
1503 g_return_val_if_fail (G_VALUE_HOLDS_STRING (&value), FALSE);
1504 g_return_val_if_fail (strcmp (g_value_get_string (&value), "test") == 0, FALSE);
1505 g_value_unset (&value);
1507 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "true", &value, &error), FALSE);
1508 g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (&value), FALSE);
1509 g_return_val_if_fail (g_value_get_boolean (&value) == TRUE, FALSE);
1510 g_value_unset (&value);
1512 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "false", &value, &error), FALSE);
1513 g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (&value), FALSE);
1514 g_return_val_if_fail (g_value_get_boolean (&value) == FALSE, FALSE);
1515 g_value_unset (&value);
1517 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "yes", &value, &error), FALSE);
1518 g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (&value), FALSE);
1519 g_return_val_if_fail (g_value_get_boolean (&value) == TRUE, FALSE);
1520 g_value_unset (&value);
1522 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "no", &value, &error), FALSE);
1523 g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (&value), FALSE);
1524 g_return_val_if_fail (g_value_get_boolean (&value) == FALSE, FALSE);
1525 g_value_unset (&value);
1527 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "0", &value, &error), FALSE);
1528 g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (&value), FALSE);
1529 g_return_val_if_fail (g_value_get_boolean (&value) == FALSE, FALSE);
1530 g_value_unset (&value);
1532 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "1", &value, &error), FALSE);
1533 g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (&value), FALSE);
1534 g_return_val_if_fail (g_value_get_boolean (&value) == TRUE, FALSE);
1535 g_value_unset (&value);
1537 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "tRuE", &value, &error), FALSE);
1538 g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (&value), FALSE);
1539 g_return_val_if_fail (g_value_get_boolean (&value) == TRUE, FALSE);
1540 g_value_unset (&value);
1542 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "blaurgh", &value, &error) == FALSE, FALSE);
1543 g_return_val_if_fail (error != NULL, FALSE);
1544 g_value_unset (&value);
1545 g_return_val_if_fail (error->domain == GTK_BUILDER_ERROR, FALSE);
1546 g_return_val_if_fail (error->code == GTK_BUILDER_ERROR_INVALID_VALUE, FALSE);
1547 g_error_free (error);
1550 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "yess", &value, &error) == FALSE, FALSE);
1551 g_value_unset (&value);
1552 g_return_val_if_fail (error->domain == GTK_BUILDER_ERROR, FALSE);
1553 g_return_val_if_fail (error->code == GTK_BUILDER_ERROR_INVALID_VALUE, FALSE);
1554 g_error_free (error);
1557 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "trueee", &value, &error) == FALSE, FALSE);
1558 g_value_unset (&value);
1559 g_return_val_if_fail (error->domain == GTK_BUILDER_ERROR, FALSE);
1560 g_return_val_if_fail (error->code == GTK_BUILDER_ERROR_INVALID_VALUE, FALSE);
1561 g_error_free (error);
1564 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "", &value, &error) == FALSE, FALSE);
1565 g_value_unset (&value);
1566 g_return_val_if_fail (error->domain == GTK_BUILDER_ERROR, FALSE);
1567 g_return_val_if_fail (error->code == GTK_BUILDER_ERROR_INVALID_VALUE, FALSE);
1568 g_error_free (error);
1571 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_INT, "12345", &value, &error), FALSE);
1572 g_return_val_if_fail (G_VALUE_HOLDS_INT (&value), FALSE);
1573 g_return_val_if_fail (g_value_get_int (&value) == 12345, FALSE);
1574 g_value_unset (&value);
1576 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_LONG, "9912345", &value, &error), FALSE);
1577 g_return_val_if_fail (G_VALUE_HOLDS_LONG (&value), FALSE);
1578 g_return_val_if_fail (g_value_get_long (&value) == 9912345, FALSE);
1579 g_value_unset (&value);
1581 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_UINT, "2345", &value, &error), FALSE);
1582 g_return_val_if_fail (G_VALUE_HOLDS_UINT (&value), FALSE);
1583 g_return_val_if_fail (g_value_get_uint (&value) == 2345, FALSE);
1584 g_value_unset (&value);
1586 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_FLOAT, "1.454", &value, &error), FALSE);
1587 g_return_val_if_fail (G_VALUE_HOLDS_FLOAT (&value), FALSE);
1588 g_return_val_if_fail (fabs (g_value_get_float (&value) - 1.454) < 0.00001, FALSE);
1589 g_value_unset (&value);
1591 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_FLOAT, "abc", &value, &error) == FALSE, FALSE);
1592 g_value_unset (&value);
1593 g_return_val_if_fail (error->domain == GTK_BUILDER_ERROR, FALSE);
1594 g_return_val_if_fail (error->code == GTK_BUILDER_ERROR_INVALID_VALUE, FALSE);
1595 g_error_free (error);
1598 g_return_val_if_fail (gtk_builder_value_from_string_type (builder, G_TYPE_INT, "/-+,abc", &value, &error) == FALSE, FALSE);
1599 g_value_unset (&value);
1600 g_return_val_if_fail (error->domain == GTK_BUILDER_ERROR, FALSE);
1601 g_return_val_if_fail (error->code == GTK_BUILDER_ERROR_INVALID_VALUE, FALSE);
1602 g_error_free (error);
1605 g_object_unref (builder);
1610 gboolean model_freed = FALSE;
1612 static void model_weakref (gpointer data, GObject *model)
1618 test_reference_counting (void)
1620 GtkBuilder *builder;
1621 const gchar buffer1[] =
1623 " <object class=\"GtkListStore\" id=\"liststore1\"/>"
1624 " <object class=\"GtkListStore\" id=\"liststore2\"/>"
1625 " <object class=\"GtkWindow\" id=\"window1\">"
1627 " <object class=\"GtkTreeView\" id=\"treeview1\">"
1628 " <property name=\"model\">liststore1</property>"
1633 const gchar buffer2[] =
1635 " <object class=\"GtkVBox\" id=\"vbox1\">"
1637 " <object class=\"GtkLabel\" id=\"label1\"/>"
1639 " <property name=\"pack-type\">start</property>"
1644 GObject *window, *treeview, *model;
1646 builder = builder_new_from_string (buffer1, -1, NULL);
1647 window = gtk_builder_get_object (builder, "window1");
1648 treeview = gtk_builder_get_object (builder, "treeview1");
1649 model = gtk_builder_get_object (builder, "liststore1");
1650 g_object_unref (builder);
1652 g_object_weak_ref (model, (GWeakNotify)model_weakref, NULL);
1654 g_assert (model_freed == FALSE);
1655 gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), NULL);
1656 g_assert (model_freed == TRUE);
1658 gtk_widget_destroy (GTK_WIDGET (window));
1660 builder = builder_new_from_string (buffer2, -1, NULL);
1661 g_object_unref (builder);
1667 main (int argc, char **argv)
1669 gtk_init (&argc, &argv);
1671 g_print ("Testing parser\n");
1672 if (!test_parser ())
1673 g_error ("test_parser failed");
1675 g_print ("Testing types\n");
1677 g_error ("test_types failed");
1679 g_print ("Testing construct-only property\n");
1680 if (!test_construct_only_property ())
1681 g_error ("test_construct_only_property failed");
1683 g_print ("Testing children\n");
1684 if (!test_children ())
1685 g_error ("test_children failed");
1687 g_print ("Testing child properties\n");
1688 if (!test_child_properties ())
1689 g_error ("test_child_properties failed");
1691 g_print ("Testing object properties\n");
1692 if (!test_object_properties ())
1693 g_error ("test_object_properties failed");
1695 g_print ("Testing notebook\n");
1696 if (!test_notebook ())
1697 g_error ("test_notebook failed");
1699 g_print ("Testing domain\n");
1700 if (!test_domain ())
1701 g_error ("test_domain failed");
1703 g_print ("Testing signal autoconnect\n");
1704 if (!test_connect_signals ())
1705 g_error ("test_connect_signals failed");
1707 g_print ("Testing uimanager simple\n");
1708 if (!test_uimanager_simple ())
1709 g_error ("test_uimanager_simple failed");
1711 g_print ("Testing spin button\n");
1712 if (!test_spin_button ())
1713 g_error ("test_spin_button failed");
1715 g_print ("Testing sizegroup\n");
1716 if (!test_sizegroup ())
1717 g_error ("test_sizegroup failed");
1719 g_print ("Testing list store\n");
1720 if (!test_list_store ())
1721 g_error ("test_list_store failed");
1723 g_print ("Testing tree store\n");
1724 if (!test_tree_store ())
1725 g_error ("test_tree_store failed");
1727 g_print ("Testing treeview column\n");
1728 if (!test_treeview_column ())
1729 g_error ("test_treeview_column failed");
1731 g_print ("Testing iconview\n");
1732 if (!test_icon_view ())
1733 g_error ("test_icon_view failed");
1735 g_print ("Testing combobox\n");
1736 if (!test_combo_box ())
1737 g_error ("test_combo_box failed");
1739 g_print ("Testing combobox entry\n");
1740 if (!test_combo_box_entry ())
1741 g_error ("test_combo_box_entry failed");
1743 g_print ("Testing cell view\n");
1744 if (!test_cell_view ())
1745 g_error ("test_cell_view failed");
1747 g_print ("Testing dialog\n");
1748 if (!test_dialog ())
1749 g_error ("test_dialog failed");
1751 g_print ("Testing accelerators\n");
1752 if (!test_accelerators ())
1753 g_error ("test_accelerators failed");
1755 g_print ("Testing widget\n");
1756 if (!test_widget ())
1757 g_error ("test_widget failed");
1759 g_print ("Testing value from string\n");
1760 if (!test_value_from_string ())
1761 g_error ("test_value_from_string failed");
1763 g_print ("Testing reference counting\n");
1764 if (!test_reference_counting ())
1765 g_error ("test_reference_counting failed");